diff options
author | preevs <devnull@localhost> | 2011-03-17 20:19:53 -0400 |
---|---|---|
committer | preevs <devnull@localhost> | 2011-03-17 20:19:53 -0400 |
commit | a6259b8d9854d800149d377ff83c75a6139b5829 (patch) | |
tree | bd7b05c65b2987e36b1ab059549f527ddf907af7 | |
parent | a3a4286cff1b6eb5629573c51bbc5a364ab2bfa7 (diff) | |
download | pygments-a6259b8d9854d800149d377ff83c75a6139b5829.tar.gz |
fixes as per https://bitbucket.org/birkenfeld/pygments-main/issue/634/lexer-for-the-gosu-language#comment-406349; add missing template comment style
-rw-r--r-- | pygments/lexers/_mapping.py | 2 | ||||
-rw-r--r-- | pygments/lexers/compiled.py | 21 | ||||
-rw-r--r-- | tests/examplefiles/example.gs | 106 | ||||
-rw-r--r-- | tests/examplefiles/example.gst | 7 |
4 files changed, 123 insertions, 13 deletions
diff --git a/pygments/lexers/_mapping.py b/pygments/lexers/_mapping.py index e8ebcb59..9823aded 100644 --- a/pygments/lexers/_mapping.py +++ b/pygments/lexers/_mapping.py @@ -91,7 +91,7 @@ LEXERS = { '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',)), diff --git a/pygments/lexers/compiled.py b/pygments/lexers/compiled.py index 181de4b4..bd2dd9f4 100644 --- a/pygments/lexers/compiled.py +++ b/pygments/lexers/compiled.py @@ -2519,8 +2519,8 @@ class GosuLexer(RegexLexer): 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)), @@ -2533,9 +2533,10 @@ class GosuLexer(RegexLexer): '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'), @@ -2552,24 +2553,20 @@ class GosuLexer(RegexLexer): (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
\ No newline at end of file diff --git a/tests/examplefiles/example.gs b/tests/examplefiles/example.gs new file mode 100644 index 00000000..eb8372d6 --- /dev/null +++ b/tests/examplefiles/example.gs @@ -0,0 +1,106 @@ +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 ) + } + } +}
\ No newline at end of file diff --git a/tests/examplefiles/example.gst b/tests/examplefiles/example.gst new file mode 100644 index 00000000..55fedb4f --- /dev/null +++ b/tests/examplefiles/example.gst @@ -0,0 +1,7 @@ +<%!-- defined in example/PersonCSVTemplate.gst --%> + +<%@ params( users : Collection <User> ) %> + +<% for( user in users ) { %> + +${user.LastName}, ${user.FirstName}, ${user.Department} <% } %>
\ No newline at end of file |