Commits

Anonymous committed 15b9072
  • Participants
  • Parent commits ead8d13

Comments (0)

Files changed (4)

File pygments/lexers/_mapping.py

     'GoLexer': ('pygments.lexers.compiled', 'Go', ('go',), ('*.go',), ('text/x-gosrc',)),
     'GoodDataCLLexer': ('pygments.lexers.other', 'GoodData-CL', ('gooddata-cl',), ('*.gdc',), ('text/x-gooddata-cl',)),
     'GosuLexer': ('pygments.lexers.compiled', 'Gosu', ('gosu',), ('*.gs', '*.gsx', '*.gsp'), ('text/x-gosu',)),
-    'GosuTemplateLexer': ('pygments.lexers.compiled', 'Gosu Template', ('gst',), ('*.gst',), ('text/x-gosu',)),
+    'GosuTemplateLexer': ('pygments.lexers.compiled', 'Gosu Template', ('gst',), ('*.gst',), ('text/x-gosu-template',)),
     'GroffLexer': ('pygments.lexers.text', 'Groff', ('groff', 'nroff', 'man'), ('*.[1234567]', '*.man'), ('application/x-troff', 'text/troff')),
     'HamlLexer': ('pygments.lexers.web', 'Haml', ('haml', 'HAML'), ('*.haml',), ('text/x-haml',)),
     'HaskellLexer': ('pygments.lexers.functional', 'Haskell', ('haskell', 'hs'), ('*.hs',), ('text/x-haskell',)),

File pygments/lexers/compiled.py

              Keyword.Type),
             (r'(package)(\s+)', bygroups(Keyword.Namespace, Text)),
             (r'(true|false|null|NaN|Infinity)\b', Keyword.Constant),
-            (r'(class|interface|enhancement|enum)(\s+)', bygroups(Keyword.Declaration, Text), 'class'),
-            (r'(uses)(\s+)', bygroups(Keyword.Namespace, Text), 'import'),
+            (r'(class|interface|enhancement|enum)(\s+)([a-zA-Z_][a-zA-Z0-9_]*)', bygroups(Keyword.Declaration, Text, Name.Class)),
+            (r'(uses)(\s+)([a-zA-Z0-9_.]+\*?)', bygroups(Keyword.Namespace, Text, Name.Namespace)),
             (r'"', String, 'string'),
             (r'(\??[\.#])([a-zA-Z_][a-zA-Z0-9_]*)', bygroups(Operator, Name.Attribute)),
             (r'(:)([a-zA-Z_][a-zA-Z0-9_]*)', bygroups(Operator, Name.Attribute)),
         'templateText': [
           (r'(\\<)|(\\\$)', String),
           (r'(<%@\s+)(extends|params)', bygroups(Operator, Name.Decorator), 'stringTemplate'),
+          (r'<%!--.*?--%>', Comment.Multiline),
           (r'(<%)|(<%=)', Operator, 'stringTemplate'),
           (r'\$\{', Operator, 'stringTemplateShorthand'),
-          (r'.+?', String)
+          (r'.', String)
         ],
         'string': [
           (r'"', String, '#pop'),
           (r'\}', Operator, '#pop'),
           include('root')
         ],
-        'class': [
-            (r'[a-zA-Z_][a-zA-Z0-9_]*', Name.Class, '#pop')
-        ],
-        'import': [
-            (r'[a-zA-Z0-9_.]+\*?', Name.Namespace, '#pop')
-        ],
     }
 
-class GosuTemplateLexer(GosuLexer):
+class GosuTemplateLexer(Lexer):
     """
-    For `Gosu <http://gosu-lang.org/>`_ source code.
+    For `Gosu <http://gosu-lang.org/>`_ templates.
     """
 
     name = 'Gosu Template'
     aliases = ['gst']
     filenames = ['*.gst']
+    mimetypes = ['text/x-gosu-template']
+    lexer = GosuLexer()
 
     def get_tokens_unprocessed(self, text):
         stack = ['templateText']
-        for item in GosuLexer.get_tokens_unprocessed(self, text, stack):
+        for item in self.lexer.get_tokens_unprocessed(text, stack):
             yield item

File tests/examplefiles/example.gs

+package example
+
+uses java.util.*
+
+uses java.io.File
+
+class Person extends Contact implements IEmailable {
+
+  var _name : String
+  var _age : Integer as Age 
+  var _relationship : Relationship as readonly RelationshipOfPerson
+
+  delegate _emailHelper represents IEmailable
+
+  enum Relationship {
+    FRIEND,
+    FAMILY,
+    BUSINESS_CONTACT
+  }
+
+  // Map of names to people
+  static var ALL_PEOPLE = new HashMap<String, Person>()
+
+  /* Constructs a new Person */
+  construct( name : String, age : Integer, relationship : Relationship ) {
+    _name = name
+    _age = age
+    _relationship = relationship
+    _emailHelper = new EmailHelper( this )
+  }
+
+  property get Name():String{
+    return _name
+  }
+
+  property set Name(name : String){
+    _name = name
+  }
+
+  /* Implement IEmailable#getEmailName() */
+  override function getEmailName():String{
+    return Name
+  }
+
+  function incrementAge() {
+    _age++
+  }
+
+  @Deprecated
+  function printPersonInfo() {
+    print( "Person { Name : ${Name}, Age : ${Age}, Relationship : ${RelationshipOfPerson} }" )
+  }
+
+  static function addPerson(p : Person){
+    if(ALL_PEOPLE.containsKey(p?.Name)) {
+      throw new IllegalArgumentException( "There is already someone named '${p.Name}'." )
+    }
+    ALL_PEOPLE[p.Name] = p
+  }
+
+  static function addAllPeople( contacts : List<Contact> ) {
+    for( contact in contacts ) {
+      if( contact typeis Person and not ALL_PEOPLE.containsKey( contact.Name )) {
+        addPerson( contact )
+      }
+    }
+  }
+
+  static function getAllPeopleOlderThanNOrderedByName( age : int ) {
+    var allPeople = ALL_PEOPLE.Values
+
+    return allPeople.where( \ p -> p.Age > age ).orderBy( \ p -> p.Name )
+  }
+
+  static function loadPersonFromDB( id : Integer ) {
+    using( var conn = DBConnectionManager.getConnection(),
+      var stmt = conn.prepareStatement( "SELECT name, age, relationship FROM PEOPLE WHERE ID=?") ){
+
+      stmt.setInt( 0, 0 )
+      var result = stmt.executeQuery()
+      if( result.next() ) {
+         addPerson( new Person( result.getString( "name" ),
+                    result.getInt( "age" ),
+                    Relationship.valueOf( result.getString( "relationship" ) ) ) )
+
+      }
+    }
+  }
+
+  /* Loads in people from a CSV */
+  static function loadFromFile( file : File ) {
+    file.eachLine( \ line -> {
+      if( line.HasContent ) {
+        addPerson( line.toPerson() )
+      }
+    })
+  }
+
+  /* Save people to a CSV */
+  static function saveToFile( file : File ) {
+    using( var writer = new FileWriter( file ) ) {
+      print( PersonCSVTemplate.renderToString( ALL_PEOPLE.Values ) )
+      PersonCSVTemplate.render( writer, ALL_PEOPLE.Values )
+    }
+  }
+}

File tests/examplefiles/example.gst

+<%!-- defined in example/PersonCSVTemplate.gst --%>
+
+<%@ params( users : Collection <User> ) %>
+
+<%  for( user in users ) { %>
+
+${user.LastName}, ${user.FirstName}, ${user.Department}  <%  } %>