summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpreevs <devnull@localhost>2011-03-17 20:19:53 -0400
committerpreevs <devnull@localhost>2011-03-17 20:19:53 -0400
commita6259b8d9854d800149d377ff83c75a6139b5829 (patch)
treebd7b05c65b2987e36b1ab059549f527ddf907af7
parenta3a4286cff1b6eb5629573c51bbc5a364ab2bfa7 (diff)
downloadpygments-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.py2
-rw-r--r--pygments/lexers/compiled.py21
-rw-r--r--tests/examplefiles/example.gs106
-rw-r--r--tests/examplefiles/example.gst7
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