diff options
author | Nathan Whetsell <nathan.whetsell@gmail.com> | 2015-10-23 21:14:50 -0400 |
---|---|---|
committer | Nathan Whetsell <nathan.whetsell@gmail.com> | 2015-10-23 21:14:50 -0400 |
commit | e21965d42660c6bb58d62dffed01085ba230e4c6 (patch) | |
tree | dea538953720e447b0d7bbabf7e3bf4d08111a71 | |
parent | bd1d943efc27031032e2f8c911c0909381b577ca (diff) | |
download | pygments-e21965d42660c6bb58d62dffed01085ba230e4c6.tar.gz |
Add Csound Document lexer
-rw-r--r-- | pygments/lexers/_mapping.py | 1 | ||||
-rw-r--r-- | pygments/lexers/csound.py | 93 |
2 files changed, 45 insertions, 49 deletions
diff --git a/pygments/lexers/_mapping.py b/pygments/lexers/_mapping.py index 03a3c96e..e715af2e 100644 --- a/pygments/lexers/_mapping.py +++ b/pygments/lexers/_mapping.py @@ -90,6 +90,7 @@ LEXERS = { 'CrmshLexer': ('pygments.lexers.dsls', 'Crmsh', ('crmsh', 'pcmk'), ('*.crmsh', '*.pcmk'), ()), 'CrocLexer': ('pygments.lexers.d', 'Croc', ('croc',), ('*.croc',), ('text/x-crocsrc',)), 'CryptolLexer': ('pygments.lexers.haskell', 'Cryptol', ('cryptol', 'cry'), ('*.cry',), ('text/x-cryptol',)), + 'CsoundDocumentLexer': ('pygments.lexers.csound', 'Csound Document', (), ('*.csd',), ()), 'CsoundOrchestraLexer': ('pygments.lexers.csound', 'Csound Orchestra', (), ('*.orc',), ()), 'CsoundScoreLexer': ('pygments.lexers.csound', 'Csound Score', (), ('*.sco',), ()), 'CssDjangoLexer': ('pygments.lexers.templates', 'CSS+Django/Jinja', ('css+django', 'css+jinja'), (), ('text/css+django', 'text/css+jinja')), diff --git a/pygments/lexers/csound.py b/pygments/lexers/csound.py index 361f048a..b9613bdf 100644 --- a/pygments/lexers/csound.py +++ b/pygments/lexers/csound.py @@ -9,17 +9,17 @@ :license: BSD, see LICENSE for details. """ -import re +import copy, re from pygments.lexer import RegexLexer, bygroups, default, include, using, words from pygments.token import Comment, Keyword, Name, Number, Operator, Punctuation, \ String, Text from pygments.lexers._csound_builtins import OPCODES +from pygments.lexers.html import HtmlLexer, XmlLexer from pygments.lexers.python import PythonLexer from pygments.lexers.scripting import LuaLexer -# The CsoundDocumentLexer casuses a Pygments test to fail. -__all__ = ['CsoundScoreLexer', 'CsoundOrchestraLexer'] # , 'CsoundDocumentLexer'] +__all__ = ['CsoundScoreLexer', 'CsoundOrchestraLexer', 'CsoundDocumentLexer'] newline = (r'((?:;|//).*)*(\n)', bygroups(Comment.Single, Text)) @@ -309,49 +309,44 @@ class CsoundOrchestraLexer(CsoundLexer): } -# Below is a lexer for Csound documents, but it causes a Pygments test to fail. - -# import copy -# from pygments.lexers.html import HtmlLexer, XmlLexer -# -# class CsoundDocumentLexer(XmlLexer): -# """ -# For `Csound <http://csound.github.io>`_ documents. -# """ -# -# name = 'Csound Document' -# aliases = ['csound'] -# filenames = ['*.csd'] -# -# tokens = copy.deepcopy(XmlLexer.tokens) -# for i, item in enumerate(tokens['root']): -# if len(item) > 2 and item[2] == 'tag': -# (tokens['root']).insert(i, (r'(<)(\s*)(CsInstruments)(\s*)', -# bygroups(Name.Tag, Text, Name.Tag, Text), -# ('orchestra content', 'tag'))) -# (tokens['root']).insert(i, (r'(<)(\s*)(CsScore)(\s*)', -# bygroups(Name.Tag, Text, Name.Tag, Text), -# ('score content', 'tag'))) -# (tokens['root']).insert(i, (r'(<)(\s*)(html)(\s*)', -# bygroups(Name.Tag, Text, Name.Tag, Text), -# ('HTML', 'tag'))) -# break -# -# tokens['orchestra content'] = [ -# (r'(<)(\s*)(/)(\s*)(CsInstruments)(\s*)(>)', -# bygroups(Name.Tag, Text, Name.Tag, Text, Name.Tag, Text, Name.Tag), -# '#pop'), -# (r'.+?(?=<\s*/\s*CsInstruments\s*>)', using(CsoundOrchestraLexer)) -# ] -# tokens['score content'] = [ -# (r'(<)(\s*)(/)(\s*)(CsScore)(\s*)(>)', -# bygroups(Name.Tag, Text, Name.Tag, Text, Name.Tag, Text, Name.Tag), -# '#pop'), -# (r'.+?(?=<\s*/\s*CsScore\s*>)', using(CsoundScoreLexer)) -# ] -# tokens['HTML'] = [ -# (r'(<)(\s*)(/)(\s*)(html)(\s*)(>)', -# bygroups(Name.Tag, Text, Name.Tag, Text, Name.Tag, Text, Name.Tag), -# '#pop'), -# (r'.+?(?=<\s*/\s*html\s*>)', using(HtmlLexer)) -# ] +class CsoundDocumentLexer(XmlLexer): + """ + For `Csound <http://csound.github.io>`_ documents. + + + """ + + name = 'Csound Document' + aliases = [] + filenames = ['*.csd'] + mimetypes = [] + + tokens = copy.deepcopy(XmlLexer.tokens) + for i, item in enumerate(tokens['root']): + if len(item) > 2 and item[2] == 'tag': + (tokens['root']).insert(i, (r'(<)(\s*)(CsInstruments)(\s*)', + bygroups(Name.Tag, Text, Name.Tag, Text), + ('orchestra content', 'tag'))) + (tokens['root']).insert(i, (r'(<)(\s*)(CsScore)(\s*)', + bygroups(Name.Tag, Text, Name.Tag, Text), + ('score content', 'tag'))) + (tokens['root']).insert(i, (r'(<)(\s*)(html)(\s*)', + bygroups(Name.Tag, Text, Name.Tag, Text), + ('HTML', 'tag'))) + break + + tokens['orchestra content'] = [ + (r'(<)(\s*)(/)(\s*)(CsInstruments)(\s*)(>)', + bygroups(Name.Tag, Text, Name.Tag, Text, Name.Tag, Text, Name.Tag), '#pop'), + (r'.+?(?=<\s*/\s*CsInstruments\s*>)', using(CsoundOrchestraLexer)) + ] + tokens['score content'] = [ + (r'(<)(\s*)(/)(\s*)(CsScore)(\s*)(>)', + bygroups(Name.Tag, Text, Name.Tag, Text, Name.Tag, Text, Name.Tag), '#pop'), + (r'.+?(?=<\s*/\s*CsScore\s*>)', using(CsoundScoreLexer)) + ] + tokens['HTML'] = [ + (r'(<)(\s*)(/)(\s*)(html)(\s*)(>)', + bygroups(Name.Tag, Text, Name.Tag, Text, Name.Tag, Text, Name.Tag), '#pop'), + (r'.+?(?=<\s*/\s*html\s*>)', using(HtmlLexer)) + ] |