gitlab-pygments.rb 0.3.2 → 0.5.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (199) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +71 -0
  4. data/Gemfile +1 -1
  5. data/LICENSE +17 -0
  6. data/README.md +28 -1
  7. data/Rakefile +2 -5
  8. data/lexers +0 -0
  9. data/lib/pygments/mentos.py +19 -12
  10. data/lib/pygments/popen.rb +21 -4
  11. data/lib/pygments/version.rb +1 -1
  12. data/pygments.rb.gemspec +2 -0
  13. data/test/test_pygments.rb +13 -2
  14. data/vendor/custom_lexers/github.py +206 -3
  15. data/vendor/pygments-main/AUTHORS +41 -3
  16. data/vendor/pygments-main/CHANGES +132 -5
  17. data/vendor/pygments-main/LICENSE +1 -1
  18. data/vendor/pygments-main/Makefile +1 -1
  19. data/vendor/pygments-main/REVISION +1 -1
  20. data/vendor/pygments-main/docs/generate.py +1 -1
  21. data/vendor/pygments-main/docs/src/api.txt +1 -1
  22. data/vendor/pygments-main/docs/src/index.txt +1 -1
  23. data/vendor/pygments-main/docs/src/integrate.txt +5 -0
  24. data/vendor/pygments-main/docs/src/java.txt +70 -0
  25. data/vendor/pygments-main/docs/src/lexerdevelopment.txt +52 -0
  26. data/vendor/pygments-main/external/autopygmentize +64 -0
  27. data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +144 -0
  28. data/vendor/pygments-main/external/markdown-processor.py +2 -2
  29. data/vendor/pygments-main/external/moin-parser.py +1 -1
  30. data/vendor/pygments-main/external/rst-directive-old.py +1 -1
  31. data/vendor/pygments-main/external/rst-directive.py +1 -1
  32. data/vendor/pygments-main/pygmentize +1 -1
  33. data/vendor/pygments-main/pygments/__init__.py +2 -2
  34. data/vendor/pygments-main/pygments/cmdline.py +14 -6
  35. data/vendor/pygments-main/pygments/console.py +1 -1
  36. data/vendor/pygments-main/pygments/filter.py +1 -1
  37. data/vendor/pygments-main/pygments/filters/__init__.py +3 -4
  38. data/vendor/pygments-main/pygments/formatter.py +4 -1
  39. data/vendor/pygments-main/pygments/formatters/__init__.py +1 -1
  40. data/vendor/pygments-main/pygments/formatters/_mapping.py +3 -3
  41. data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -1
  42. data/vendor/pygments-main/pygments/formatters/html.py +73 -2
  43. data/vendor/pygments-main/pygments/formatters/img.py +2 -2
  44. data/vendor/pygments-main/pygments/formatters/latex.py +9 -9
  45. data/vendor/pygments-main/pygments/formatters/other.py +1 -3
  46. data/vendor/pygments-main/pygments/formatters/rtf.py +1 -1
  47. data/vendor/pygments-main/pygments/formatters/svg.py +1 -1
  48. data/vendor/pygments-main/pygments/formatters/terminal.py +1 -1
  49. data/vendor/pygments-main/pygments/formatters/terminal256.py +1 -1
  50. data/vendor/pygments-main/pygments/lexer.py +78 -10
  51. data/vendor/pygments-main/pygments/lexers/__init__.py +13 -2
  52. data/vendor/pygments-main/pygments/lexers/_asybuiltins.py +1 -1
  53. data/vendor/pygments-main/pygments/lexers/_clbuiltins.py +1 -1
  54. data/vendor/pygments-main/pygments/lexers/_lassobuiltins.py +5172 -0
  55. data/vendor/pygments-main/pygments/lexers/_luabuiltins.py +1 -1
  56. data/vendor/pygments-main/pygments/lexers/_mapping.py +92 -36
  57. data/vendor/pygments-main/pygments/lexers/_openedgebuiltins.py +562 -0
  58. data/vendor/pygments-main/pygments/lexers/_phpbuiltins.py +2 -2
  59. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +4 -3
  60. data/vendor/pygments-main/pygments/lexers/_robotframeworklexer.py +557 -0
  61. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +11 -0
  62. data/vendor/pygments-main/pygments/lexers/_sourcemodbuiltins.py +1072 -0
  63. data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +360 -0
  64. data/vendor/pygments-main/pygments/lexers/_vimbuiltins.py +13 -3
  65. data/vendor/pygments-main/pygments/lexers/agile.py +525 -38
  66. data/vendor/pygments-main/pygments/lexers/asm.py +45 -7
  67. data/vendor/pygments-main/pygments/lexers/compiled.py +1257 -425
  68. data/vendor/pygments-main/pygments/lexers/dalvik.py +104 -0
  69. data/vendor/pygments-main/pygments/lexers/dotnet.py +97 -62
  70. data/vendor/pygments-main/pygments/lexers/foxpro.py +428 -0
  71. data/vendor/pygments-main/pygments/lexers/functional.py +931 -32
  72. data/vendor/pygments-main/pygments/lexers/github.py +206 -3
  73. data/vendor/pygments-main/pygments/lexers/hdl.py +3 -3
  74. data/vendor/pygments-main/pygments/lexers/jvm.py +309 -44
  75. data/vendor/pygments-main/pygments/lexers/math.py +876 -30
  76. data/vendor/pygments-main/pygments/lexers/other.py +956 -517
  77. data/vendor/pygments-main/pygments/lexers/parsers.py +85 -2
  78. data/vendor/pygments-main/pygments/lexers/shell.py +81 -18
  79. data/vendor/pygments-main/pygments/lexers/special.py +1 -1
  80. data/vendor/pygments-main/pygments/lexers/sql.py +2 -2
  81. data/vendor/pygments-main/pygments/lexers/templates.py +119 -8
  82. data/vendor/pygments-main/pygments/lexers/text.py +155 -15
  83. data/vendor/pygments-main/pygments/lexers/web.py +1578 -397
  84. data/vendor/pygments-main/pygments/modeline.py +40 -0
  85. data/vendor/pygments-main/pygments/plugin.py +1 -1
  86. data/vendor/pygments-main/pygments/scanner.py +1 -1
  87. data/vendor/pygments-main/pygments/style.py +1 -1
  88. data/vendor/pygments-main/pygments/styles/__init__.py +1 -1
  89. data/vendor/pygments-main/pygments/styles/autumn.py +1 -1
  90. data/vendor/pygments-main/pygments/styles/borland.py +1 -1
  91. data/vendor/pygments-main/pygments/styles/bw.py +1 -1
  92. data/vendor/pygments-main/pygments/styles/colorful.py +1 -1
  93. data/vendor/pygments-main/pygments/styles/default.py +1 -1
  94. data/vendor/pygments-main/pygments/styles/emacs.py +1 -1
  95. data/vendor/pygments-main/pygments/styles/friendly.py +1 -1
  96. data/vendor/pygments-main/pygments/styles/fruity.py +1 -1
  97. data/vendor/pygments-main/pygments/styles/manni.py +1 -1
  98. data/vendor/pygments-main/pygments/styles/monokai.py +1 -1
  99. data/vendor/pygments-main/pygments/styles/murphy.py +1 -1
  100. data/vendor/pygments-main/pygments/styles/native.py +1 -1
  101. data/vendor/pygments-main/pygments/styles/pastie.py +1 -1
  102. data/vendor/pygments-main/pygments/styles/perldoc.py +1 -1
  103. data/vendor/pygments-main/pygments/styles/rrt.py +1 -1
  104. data/vendor/pygments-main/pygments/styles/tango.py +1 -1
  105. data/vendor/pygments-main/pygments/styles/trac.py +1 -1
  106. data/vendor/pygments-main/pygments/styles/vim.py +1 -1
  107. data/vendor/pygments-main/pygments/styles/vs.py +1 -1
  108. data/vendor/pygments-main/pygments/token.py +1 -1
  109. data/vendor/pygments-main/pygments/unistring.py +36 -26
  110. data/vendor/pygments-main/pygments/util.py +46 -1
  111. data/vendor/pygments-main/scripts/check_sources.py +2 -2
  112. data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +2 -0
  113. data/vendor/pygments-main/scripts/find_codetags.py +1 -1
  114. data/vendor/pygments-main/scripts/find_error.py +5 -6
  115. data/vendor/pygments-main/setup.cfg +1 -0
  116. data/vendor/pygments-main/setup.py +6 -4
  117. data/vendor/pygments-main/tests/examplefiles/BOM.js +1 -0
  118. data/vendor/pygments-main/tests/examplefiles/Config.in.cache +1973 -0
  119. data/vendor/pygments-main/tests/examplefiles/Deflate.fs +578 -0
  120. data/vendor/pygments-main/tests/examplefiles/Get-CommandDefinitionHtml.ps1 +66 -0
  121. data/vendor/pygments-main/tests/examplefiles/IPDispatchC.nc +104 -0
  122. data/vendor/pygments-main/tests/examplefiles/IPDispatchP.nc +671 -0
  123. data/vendor/pygments-main/tests/examplefiles/RoleQ.pm6 +23 -0
  124. data/vendor/pygments-main/tests/examplefiles/autoit_submit.au3 +25 -0
  125. data/vendor/pygments-main/tests/examplefiles/bigtest.nsi +308 -0
  126. data/vendor/pygments-main/tests/examplefiles/ca65_example +284 -0
  127. data/vendor/pygments-main/tests/examplefiles/cbmbas_example +9 -0
  128. data/vendor/pygments-main/tests/examplefiles/classes.dylan +89 -4
  129. data/vendor/pygments-main/tests/examplefiles/example.Rd +78 -0
  130. data/vendor/pygments-main/tests/examplefiles/example.bug +54 -0
  131. data/vendor/pygments-main/tests/examplefiles/example.ceylon +52 -0
  132. data/vendor/pygments-main/tests/examplefiles/example.clay +33 -0
  133. data/vendor/pygments-main/tests/examplefiles/example.cob +3556 -0
  134. data/vendor/pygments-main/tests/examplefiles/example.hx +142 -0
  135. data/vendor/pygments-main/tests/examplefiles/example.jag +48 -0
  136. data/vendor/pygments-main/tests/examplefiles/example.lagda +19 -0
  137. data/vendor/pygments-main/tests/examplefiles/example.monkey +152 -0
  138. data/vendor/pygments-main/tests/examplefiles/example.msc +43 -0
  139. data/vendor/pygments-main/tests/examplefiles/example.prg +161 -0
  140. data/vendor/pygments-main/tests/examplefiles/example.reg +19 -0
  141. data/vendor/pygments-main/tests/examplefiles/example.rexx +50 -0
  142. data/vendor/pygments-main/tests/examplefiles/example.rkt +95 -0
  143. data/vendor/pygments-main/tests/examplefiles/example.rpf +4 -0
  144. data/vendor/pygments-main/tests/examplefiles/example.shell-session +45 -0
  145. data/vendor/pygments-main/tests/examplefiles/example.stan +108 -0
  146. data/vendor/pygments-main/tests/examplefiles/example.ts +28 -0
  147. data/vendor/pygments-main/tests/examplefiles/example.xtend +34 -0
  148. data/vendor/pygments-main/tests/examplefiles/example2.msc +79 -0
  149. data/vendor/pygments-main/tests/examplefiles/garcia-wachs.kk +133 -0
  150. data/vendor/pygments-main/tests/examplefiles/grammar-test.p6 +22 -0
  151. data/vendor/pygments-main/tests/examplefiles/hello.smali +40 -0
  152. data/vendor/pygments-main/tests/examplefiles/hello.sp +9 -0
  153. data/vendor/pygments-main/tests/examplefiles/http_request_example +2 -1
  154. data/vendor/pygments-main/tests/examplefiles/http_response_example +4 -2
  155. data/vendor/pygments-main/tests/examplefiles/inet_pton6.dg +71 -0
  156. data/vendor/pygments-main/tests/examplefiles/json.lasso +301 -0
  157. data/vendor/pygments-main/tests/examplefiles/json.lasso9 +213 -0
  158. data/vendor/pygments-main/tests/examplefiles/livescript-demo.ls +41 -0
  159. data/vendor/pygments-main/tests/examplefiles/logos_example.xm +28 -0
  160. data/vendor/pygments-main/tests/examplefiles/matlab_sample +5 -2
  161. data/vendor/pygments-main/tests/examplefiles/metagrammar.treetop +455 -0
  162. data/vendor/pygments-main/tests/examplefiles/mg_sample.pro +73 -0
  163. data/vendor/pygments-main/tests/examplefiles/minehunt.qml +112 -0
  164. data/vendor/pygments-main/tests/examplefiles/nanomsg.intr +95 -0
  165. data/vendor/pygments-main/tests/examplefiles/objc_example.m +7 -0
  166. data/vendor/pygments-main/tests/examplefiles/phpMyAdmin.spec +163 -0
  167. data/vendor/pygments-main/tests/examplefiles/py3tb_test.py3tb +4 -0
  168. data/vendor/pygments-main/tests/examplefiles/pytb_test3.pytb +4 -0
  169. data/vendor/pygments-main/tests/examplefiles/robotframework.txt +39 -0
  170. data/vendor/pygments-main/tests/examplefiles/rust_example.rs +233 -0
  171. data/vendor/pygments-main/tests/examplefiles/session.dylan-console +9 -0
  172. data/vendor/pygments-main/tests/examplefiles/swig_java.swg +1329 -0
  173. data/vendor/pygments-main/tests/examplefiles/swig_std_vector.i +225 -0
  174. data/vendor/pygments-main/tests/examplefiles/test.R +149 -115
  175. data/vendor/pygments-main/tests/examplefiles/test.agda +102 -0
  176. data/vendor/pygments-main/tests/examplefiles/test.bb +95 -0
  177. data/vendor/pygments-main/tests/examplefiles/test.cu +36 -0
  178. data/vendor/pygments-main/tests/examplefiles/test.ebnf +31 -0
  179. data/vendor/pygments-main/tests/examplefiles/test.opa +10 -0
  180. data/vendor/pygments-main/tests/examplefiles/test.p6 +252 -0
  181. data/vendor/pygments-main/tests/examplefiles/test2.pypylog +120 -0
  182. data/vendor/pygments-main/tests/examplefiles/type.lisp +16 -0
  183. data/vendor/pygments-main/tests/examplefiles/unix-io.lid +37 -0
  184. data/vendor/pygments-main/tests/old_run.py +1 -1
  185. data/vendor/pygments-main/tests/run.py +3 -2
  186. data/vendor/pygments-main/tests/support/tags +36 -0
  187. data/vendor/pygments-main/tests/test_basic_api.py +4 -3
  188. data/vendor/pygments-main/tests/test_clexer.py +1 -1
  189. data/vendor/pygments-main/tests/test_cmdline.py +1 -1
  190. data/vendor/pygments-main/tests/test_examplefiles.py +3 -1
  191. data/vendor/pygments-main/tests/test_html_formatter.py +17 -1
  192. data/vendor/pygments-main/tests/test_latex_formatter.py +1 -1
  193. data/vendor/pygments-main/tests/test_lexers_other.py +68 -0
  194. data/vendor/pygments-main/tests/test_perllexer.py +1 -1
  195. data/vendor/pygments-main/tests/test_regexlexer.py +1 -1
  196. data/vendor/pygments-main/tests/test_token.py +1 -1
  197. data/vendor/pygments-main/tests/test_using_api.py +1 -1
  198. data/vendor/pygments-main/tests/test_util.py +22 -3
  199. metadata +84 -16
@@ -5,7 +5,7 @@
5
5
 
6
6
  Lexers for parser generators.
7
7
 
8
- :copyright: Copyright 2006-2012 by the Pygments team, see AUTHORS.
8
+ :copyright: Copyright 2006-2013 by the Pygments team, see AUTHORS.
9
9
  :license: BSD, see LICENSE for details.
10
10
  """
11
11
 
@@ -28,7 +28,8 @@ __all__ = ['RagelLexer', 'RagelEmbeddedLexer', 'RagelCLexer', 'RagelDLexer',
28
28
  'AntlrPerlLexer', 'AntlrRubyLexer', 'AntlrCppLexer',
29
29
  #'AntlrCLexer',
30
30
  'AntlrCSharpLexer', 'AntlrObjectiveCLexer',
31
- 'AntlrJavaLexer', "AntlrActionScriptLexer"]
31
+ 'AntlrJavaLexer', "AntlrActionScriptLexer",
32
+ 'TreetopLexer']
32
33
 
33
34
 
34
35
  class RagelLexer(RegexLexer):
@@ -693,3 +694,85 @@ class AntlrActionScriptLexer(DelegatingLexer):
693
694
  def analyse_text(text):
694
695
  return AntlrLexer.analyse_text(text) and \
695
696
  re.search(r'^\s*language\s*=\s*ActionScript\s*;', text, re.M)
697
+
698
+ class TreetopBaseLexer(RegexLexer):
699
+ """
700
+ A base lexer for `Treetop <http://treetop.rubyforge.org/>`_ grammars.
701
+ Not for direct use; use TreetopLexer instead.
702
+
703
+ *New in Pygments 1.6.*
704
+ """
705
+
706
+ tokens = {
707
+ 'root': [
708
+ include('space'),
709
+ (r'require[ \t]+[^\n\r]+[\n\r]', Other),
710
+ (r'module\b', Keyword.Namespace, 'module'),
711
+ (r'grammar\b', Keyword, 'grammar'),
712
+ ],
713
+ 'module': [
714
+ include('space'),
715
+ include('end'),
716
+ (r'module\b', Keyword, '#push'),
717
+ (r'grammar\b', Keyword, 'grammar'),
718
+ (r'[A-Z][A-Za-z_0-9]*(?:::[A-Z][A-Za-z_0-9]*)*', Name.Namespace),
719
+ ],
720
+ 'grammar': [
721
+ include('space'),
722
+ include('end'),
723
+ (r'rule\b', Keyword, 'rule'),
724
+ (r'include\b', Keyword, 'include'),
725
+ (r'[A-Z][A-Za-z_0-9]*', Name),
726
+ ],
727
+ 'include': [
728
+ include('space'),
729
+ (r'[A-Z][A-Za-z_0-9]*(?:::[A-Z][A-Za-z_0-9]*)*', Name.Class, '#pop'),
730
+ ],
731
+ 'rule': [
732
+ include('space'),
733
+ include('end'),
734
+ (r'"(\\\\|\\"|[^"])*"', String.Double),
735
+ (r"'(\\\\|\\'|[^'])*'", String.Single),
736
+ (r'([A-Za-z_][A-Za-z_0-9]*)(:)', bygroups(Name.Label, Punctuation)),
737
+ (r'[A-Za-z_][A-Za-z_0-9]*', Name),
738
+ (r'[()]', Punctuation),
739
+ (r'[?+*/&!~]', Operator),
740
+ (r'\[(?:\\.|\[:\^?[a-z]+:\]|[^\\\]])+\]', String.Regex),
741
+ (r'([0-9]*)(\.\.)([0-9]*)',
742
+ bygroups(Number.Integer, Operator, Number.Integer)),
743
+ (r'(<)([^>]+)(>)', bygroups(Punctuation, Name.Class, Punctuation)),
744
+ (r'{', Punctuation, 'inline_module'),
745
+ (r'\.', String.Regex),
746
+ ],
747
+ 'inline_module': [
748
+ (r'{', Other, 'ruby'),
749
+ (r'}', Punctuation, '#pop'),
750
+ (r'[^{}]+', Other),
751
+ ],
752
+ 'ruby': [
753
+ (r'{', Other, '#push'),
754
+ (r'}', Other, '#pop'),
755
+ (r'[^{}]+', Other),
756
+ ],
757
+ 'space': [
758
+ (r'[ \t\n\r]+', Whitespace),
759
+ (r'#[^\n]*', Comment.Single),
760
+ ],
761
+ 'end': [
762
+ (r'end\b', Keyword, '#pop'),
763
+ ],
764
+ }
765
+
766
+ class TreetopLexer(DelegatingLexer):
767
+ """
768
+ A lexer for `Treetop <http://treetop.rubyforge.org/>`_ grammars.
769
+
770
+ *New in Pygments 1.6.*
771
+ """
772
+
773
+ name = 'Treetop'
774
+ aliases = ['treetop']
775
+ filenames = ['*.treetop', '*.tt']
776
+
777
+ def __init__(self, **options):
778
+ super(TreetopLexer, self).__init__(RubyLexer, TreetopBaseLexer, **options)
@@ -5,7 +5,7 @@
5
5
 
6
6
  Lexers for various shells.
7
7
 
8
- :copyright: Copyright 2006-2012 by the Pygments team, see AUTHORS.
8
+ :copyright: Copyright 2006-2013 by the Pygments team, see AUTHORS.
9
9
  :license: BSD, see LICENSE for details.
10
10
  """
11
11
 
@@ -18,7 +18,7 @@ from pygments.util import shebang_matches
18
18
 
19
19
 
20
20
  __all__ = ['BashLexer', 'BashSessionLexer', 'TcshLexer', 'BatchLexer',
21
- 'PowerShellLexer']
21
+ 'PowerShellLexer', 'ShellSessionLexer']
22
22
 
23
23
  line_re = re.compile('.*?\n')
24
24
 
@@ -31,7 +31,7 @@ class BashLexer(RegexLexer):
31
31
  """
32
32
 
33
33
  name = 'Bash'
34
- aliases = ['bash', 'sh', 'ksh', 'shell']
34
+ aliases = ['bash', 'sh', 'ksh']
35
35
  filenames = ['*.sh', '*.ksh', '*.bash', '*.ebuild', '*.eclass',
36
36
  '.bashrc', 'bashrc', '.bash_*', 'bash_*']
37
37
  mimetypes = ['application/x-sh', 'application/x-shellscript']
@@ -60,15 +60,18 @@ class BashLexer(RegexLexer):
60
60
  (r'\\[\w\W]', String.Escape),
61
61
  (r'(\b\w+)(\s*)(=)', bygroups(Name.Variable, Text, Operator)),
62
62
  (r'[\[\]{}()=]', Operator),
63
+ (r'<<<', Operator), # here-string
63
64
  (r'<<-?\s*(\'?)\\?(\w+)[\w\W]+?\2', String),
64
65
  (r'&&|\|\|', Operator),
65
66
  ],
66
67
  'data': [
67
68
  (r'(?s)\$?"(\\\\|\\[0-7]+|\\.|[^"\\])*"', String.Double),
68
69
  (r"(?s)\$?'(\\\\|\\[0-7]+|\\.|[^'\\])*'", String.Single),
69
- (r';', Text),
70
+ (r';', Punctuation),
71
+ (r'&', Punctuation),
72
+ (r'\|', Punctuation),
70
73
  (r'\s+', Text),
71
- (r'[^=\s\[\]{}()$"\'`\\<]+', Text),
74
+ (r'[^=\s\[\]{}()$"\'`\\<&|;]+', Text),
72
75
  (r'\d+(?= |\Z)', Number),
73
76
  (r'\$#?(\w+|.)', Name.Variable),
74
77
  (r'<', Text),
@@ -98,7 +101,10 @@ class BashLexer(RegexLexer):
98
101
  }
99
102
 
100
103
  def analyse_text(text):
101
- return shebang_matches(text, r'(ba|z|)sh')
104
+ if shebang_matches(text, r'(ba|z|)sh'):
105
+ return 1
106
+ if text.startswith('$ '):
107
+ return 0.2
102
108
 
103
109
 
104
110
  class BashSessionLexer(Lexer):
@@ -152,6 +158,52 @@ class BashSessionLexer(Lexer):
152
158
  yield pos+i, t, v
153
159
 
154
160
 
161
+ class ShellSessionLexer(Lexer):
162
+ """
163
+ Lexer for shell sessions that works with different command prompts
164
+
165
+ *New in Pygments 1.6.*
166
+ """
167
+
168
+ name = 'Shell Session'
169
+ aliases = ['shell-session']
170
+ filenames = ['*.shell-session']
171
+ mimetypes = ['application/x-sh-session']
172
+
173
+ def get_tokens_unprocessed(self, text):
174
+ bashlexer = BashLexer(**self.options)
175
+
176
+ pos = 0
177
+ curcode = ''
178
+ insertions = []
179
+
180
+ for match in line_re.finditer(text):
181
+ line = match.group()
182
+ m = re.match(r'^((?:\[?\S+@[^$#%]+)[$#%])(.*\n?)', line)
183
+ if m:
184
+ # To support output lexers (say diff output), the output
185
+ # needs to be broken by prompts whenever the output lexer
186
+ # changes.
187
+ if not insertions:
188
+ pos = match.start()
189
+
190
+ insertions.append((len(curcode),
191
+ [(0, Generic.Prompt, m.group(1))]))
192
+ curcode += m.group(2)
193
+ else:
194
+ if insertions:
195
+ toks = bashlexer.get_tokens_unprocessed(curcode)
196
+ for i, t, v in do_insertions(insertions, toks):
197
+ yield pos+i, t, v
198
+ yield match.start(), Generic.Output, line
199
+ insertions = []
200
+ curcode = ''
201
+ if insertions:
202
+ for i, t, v in do_insertions(insertions,
203
+ bashlexer.get_tokens_unprocessed(curcode)):
204
+ yield pos+i, t, v
205
+
206
+
155
207
  class BatchLexer(RegexLexer):
156
208
  """
157
209
  Lexer for the DOS/Windows Batch file format.
@@ -159,7 +211,7 @@ class BatchLexer(RegexLexer):
159
211
  *New in Pygments 0.7.*
160
212
  """
161
213
  name = 'Batchfile'
162
- aliases = ['bat']
214
+ aliases = ['bat', 'dosbatch', 'winbatch']
163
215
  filenames = ['*.bat', '*.cmd']
164
216
  mimetypes = ['application/x-dos-batch']
165
217
 
@@ -282,8 +334,8 @@ class PowerShellLexer(RegexLexer):
282
334
  *New in Pygments 1.5.*
283
335
  """
284
336
  name = 'PowerShell'
285
- aliases = ['powershell', 'posh', 'ps1']
286
- filenames = ['*.ps1']
337
+ aliases = ['powershell', 'posh', 'ps1', 'psm1']
338
+ filenames = ['*.ps1','*.psm1']
287
339
  mimetypes = ['text/x-powershell']
288
340
 
289
341
  flags = re.DOTALL | re.IGNORECASE | re.MULTILINE
@@ -295,7 +347,7 @@ class PowerShellLexer(RegexLexer):
295
347
  'dynamicparam do default continue cmdletbinding break begin alias \\? '
296
348
  '% #script #private #local #global mandatory parametersetname position '
297
349
  'valuefrompipeline valuefrompipelinebypropertyname '
298
- 'valuefromremainingarguments helpmessage try catch').split()
350
+ 'valuefromremainingarguments helpmessage try catch throw').split()
299
351
 
300
352
  operators = (
301
353
  'and as band bnot bor bxor casesensitive ccontains ceq cge cgt cle '
@@ -321,13 +373,18 @@ class PowerShellLexer(RegexLexer):
321
373
 
322
374
  tokens = {
323
375
  'root': [
376
+ # we need to count pairs of parentheses for correct highlight
377
+ # of '$(...)' blocks in strings
378
+ (r'\(', Punctuation, 'child'),
324
379
  (r'\s+', Text),
325
380
  (r'^(\s*#[#\s]*)(\.(?:%s))([^\n]*$)' % '|'.join(commenthelp),
326
381
  bygroups(Comment, String.Doc, Comment)),
327
382
  (r'#[^\n]*?$', Comment),
328
383
  (r'(&lt;|<)#', Comment.Multiline, 'multline'),
329
- (r'@"\n.*?\n"@', String.Heredoc),
384
+ (r'@"\n', String.Heredoc, 'heredoc-double'),
330
385
  (r"@'\n.*?\n'@", String.Heredoc),
386
+ # escaped syntax
387
+ (r'`[\'"$@-]', Punctuation),
331
388
  (r'"', String.Double, 'string'),
332
389
  (r"'([^']|'')*'", String.Single),
333
390
  (r'(\$|@@|@)((global|script|private|env):)?[a-z0-9_]+',
@@ -338,7 +395,11 @@ class PowerShellLexer(RegexLexer):
338
395
  (r'\[[a-z_\[][a-z0-9_. `,\[\]]*\]', Name.Constant), # .net [type]s
339
396
  (r'-[a-z_][a-z0-9_]*', Name),
340
397
  (r'\w+', Name),
341
- (r'[.,{}\[\]$()=+*/\\&%!~?^`|<>-]', Punctuation),
398
+ (r'[.,;@{}\[\]$()=+*/\\&%!~?^`|<>-]|::', Punctuation),
399
+ ],
400
+ 'child': [
401
+ (r'\)', Punctuation, '#pop'),
402
+ include('root'),
342
403
  ],
343
404
  'multline': [
344
405
  (r'[^#&.]+', Comment.Multiline),
@@ -347,15 +408,17 @@ class PowerShellLexer(RegexLexer):
347
408
  (r'[#&.]', Comment.Multiline),
348
409
  ],
349
410
  'string': [
411
+ (r"`[0abfnrtv'\"\$]", String.Escape),
350
412
  (r'[^$`"]+', String.Double),
351
- (r'\$\(', String.Interpol, 'interpol'),
352
- (r'`"|""', String.Double),
413
+ (r'\$\(', Punctuation, 'child'),
414
+ (r'""', String.Double),
353
415
  (r'[`$]', String.Double),
354
416
  (r'"', String.Double, '#pop'),
355
417
  ],
356
- 'interpol': [
357
- (r'[^$)]+', String.Interpol),
358
- (r'\$\(', String.Interpol, '#push'),
359
- (r'\)', String.Interpol, '#pop'),
418
+ 'heredoc-double': [
419
+ (r'\n"@', String.Heredoc, '#pop'),
420
+ (r'\$\(', Punctuation, 'child'),
421
+ (r'[^@\n]+"]', String.Heredoc),
422
+ (r".", String.Heredoc),
360
423
  ]
361
424
  }
@@ -5,7 +5,7 @@
5
5
 
6
6
  Special lexers.
7
7
 
8
- :copyright: Copyright 2006-2012 by the Pygments team, see AUTHORS.
8
+ :copyright: Copyright 2006-2013 by the Pygments team, see AUTHORS.
9
9
  :license: BSD, see LICENSE for details.
10
10
  """
11
11
 
@@ -34,7 +34,7 @@
34
34
  The ``tests/examplefiles`` contains a few test files with data to be
35
35
  parsed by these lexers.
36
36
 
37
- :copyright: Copyright 2006-2012 by the Pygments team, see AUTHORS.
37
+ :copyright: Copyright 2006-2013 by the Pygments team, see AUTHORS.
38
38
  :license: BSD, see LICENSE for details.
39
39
  """
40
40
 
@@ -375,7 +375,7 @@ class SqlLexer(RegexLexer):
375
375
  r'DIAGNOSTICS|DICTIONARY|DISCONNECT|DISPATCH|DISTINCT|DO|'
376
376
  r'DOMAIN|DROP|DYNAMIC|DYNAMIC_FUNCTION|DYNAMIC_FUNCTION_CODE|'
377
377
  r'EACH|ELSE|ENCODING|ENCRYPTED|END|END-EXEC|EQUALS|ESCAPE|EVERY|'
378
- r'EXCEPT|ESCEPTION|EXCLUDING|EXCLUSIVE|EXEC|EXECUTE|EXISTING|'
378
+ r'EXCEPTION|EXCEPT|EXCLUDING|EXCLUSIVE|EXEC|EXECUTE|EXISTING|'
379
379
  r'EXISTS|EXPLAIN|EXTERNAL|EXTRACT|FALSE|FETCH|FINAL|FIRST|FOR|'
380
380
  r'FORCE|FOREIGN|FORTRAN|FORWARD|FOUND|FREE|FREEZE|FROM|FULL|'
381
381
  r'FUNCTION|G|GENERAL|GENERATED|GET|GLOBAL|GO|GOTO|GRANT|GRANTED|'
@@ -5,14 +5,14 @@
5
5
 
6
6
  Lexers for various template engines' markup.
7
7
 
8
- :copyright: Copyright 2006-2012 by the Pygments team, see AUTHORS.
8
+ :copyright: Copyright 2006-2013 by the Pygments team, see AUTHORS.
9
9
  :license: BSD, see LICENSE for details.
10
10
  """
11
11
 
12
12
  import re
13
13
 
14
14
  from pygments.lexers.web import \
15
- PhpLexer, HtmlLexer, XmlLexer, JavascriptLexer, CssLexer
15
+ PhpLexer, HtmlLexer, XmlLexer, JavascriptLexer, CssLexer, LassoLexer
16
16
  from pygments.lexers.agile import PythonLexer, PerlLexer
17
17
  from pygments.lexers.compiled import JavaLexer
18
18
  from pygments.lexers.jvm import TeaLangLexer
@@ -37,7 +37,8 @@ __all__ = ['HtmlPhpLexer', 'XmlPhpLexer', 'CssPhpLexer',
37
37
  'CheetahXmlLexer', 'CheetahJavascriptLexer', 'EvoqueLexer',
38
38
  'EvoqueHtmlLexer', 'EvoqueXmlLexer', 'ColdfusionLexer',
39
39
  'ColdfusionHtmlLexer', 'VelocityLexer', 'VelocityHtmlLexer',
40
- 'VelocityXmlLexer', 'SspLexer', 'TeaTemplateLexer']
40
+ 'VelocityXmlLexer', 'SspLexer', 'TeaTemplateLexer', 'LassoHtmlLexer',
41
+ 'LassoXmlLexer', 'LassoCssLexer', 'LassoJavascriptLexer']
41
42
 
42
43
 
43
44
  class ErbLexer(Lexer):
@@ -223,12 +224,14 @@ class VelocityLexer(RegexLexer):
223
224
  'variable': [
224
225
  (identifier, Name.Variable),
225
226
  (r'\(', Punctuation, 'funcparams'),
226
- (r'(\.)(' + identifier + r')', bygroups(Punctuation, Name.Variable), '#push'),
227
+ (r'(\.)(' + identifier + r')',
228
+ bygroups(Punctuation, Name.Variable), '#push'),
227
229
  (r'\}', Punctuation, '#pop'),
228
230
  (r'', Other, '#pop')
229
231
  ],
230
232
  'directiveparams': [
231
- (r'(&&|\|\||==?|!=?|[-<>+*%&\|\^/])|\b(eq|ne|gt|lt|ge|le|not|in)\b', Operator),
233
+ (r'(&&|\|\||==?|!=?|[-<>+*%&\|\^/])|\b(eq|ne|gt|lt|ge|le|not|in)\b',
234
+ Operator),
232
235
  (r'\[', Operator, 'rangeoperator'),
233
236
  (r'\b' + identifier + r'\b', Name.Function),
234
237
  include('funcparams')
@@ -260,7 +263,8 @@ class VelocityLexer(RegexLexer):
260
263
  rv += 0.15
261
264
  if re.search(r'#\{?foreach\}?\(.+?\).*?#\{?end\}?', text):
262
265
  rv += 0.15
263
- if re.search(r'\$\{?[a-zA-Z_][a-zA-Z0-9_]*(\([^)]*\))?(\.[a-zA-Z0-9_]+(\([^)]*\))?)*\}?', text):
266
+ if re.search(r'\$\{?[a-zA-Z_][a-zA-Z0-9_]*(\([^)]*\))?'
267
+ r'(\.[a-zA-Z0-9_]+(\([^)]*\))?)*\}?', text):
264
268
  rv += 0.01
265
269
  return rv
266
270
 
@@ -762,7 +766,7 @@ class CheetahHtmlLexer(DelegatingLexer):
762
766
  """
763
767
 
764
768
  name = 'HTML+Cheetah'
765
- aliases = ['html+cheetah', 'html+spitfire']
769
+ aliases = ['html+cheetah', 'html+spitfire', 'htmlcheetah']
766
770
  mimetypes = ['text/html+cheetah', 'text/html+spitfire']
767
771
 
768
772
  def __init__(self, **options):
@@ -1254,7 +1258,7 @@ class HtmlDjangoLexer(DelegatingLexer):
1254
1258
  """
1255
1259
 
1256
1260
  name = 'HTML+Django/Jinja'
1257
- aliases = ['html+django', 'html+jinja']
1261
+ aliases = ['html+django', 'html+jinja', 'htmldjango']
1258
1262
  alias_filenames = ['*.html', '*.htm', '*.xhtml']
1259
1263
  mimetypes = ['text/html+django', 'text/html+jinja']
1260
1264
 
@@ -1629,3 +1633,110 @@ class TeaTemplateLexer(DelegatingLexer):
1629
1633
  if '<%' in text and '%>' in text:
1630
1634
  rv += 0.1
1631
1635
  return rv
1636
+
1637
+
1638
+ class LassoHtmlLexer(DelegatingLexer):
1639
+ """
1640
+ Subclass of the `LassoLexer` which highlights unhandled data with the
1641
+ `HtmlLexer`.
1642
+
1643
+ Nested JavaScript and CSS is also highlighted.
1644
+
1645
+ *New in Pygments 1.6.*
1646
+ """
1647
+
1648
+ name = 'HTML+Lasso'
1649
+ aliases = ['html+lasso']
1650
+ alias_filenames = ['*.html', '*.htm', '*.xhtml', '*.lasso', '*.lasso[89]',
1651
+ '*.incl', '*.inc', '*.las']
1652
+ mimetypes = ['text/html+lasso',
1653
+ 'application/x-httpd-lasso',
1654
+ 'application/x-httpd-lasso[89]']
1655
+
1656
+ def __init__(self, **options):
1657
+ super(LassoHtmlLexer, self).__init__(HtmlLexer, LassoLexer, **options)
1658
+
1659
+ def analyse_text(text):
1660
+ rv = LassoLexer.analyse_text(text) - 0.01
1661
+ if re.search(r'<\w+>', text, re.I):
1662
+ rv += 0.2
1663
+ if html_doctype_matches(text):
1664
+ rv += 0.5
1665
+ return rv
1666
+
1667
+
1668
+ class LassoXmlLexer(DelegatingLexer):
1669
+ """
1670
+ Subclass of the `LassoLexer` which highlights unhandled data with the
1671
+ `XmlLexer`.
1672
+
1673
+ *New in Pygments 1.6.*
1674
+ """
1675
+
1676
+ name = 'XML+Lasso'
1677
+ aliases = ['xml+lasso']
1678
+ alias_filenames = ['*.xml', '*.lasso', '*.lasso[89]',
1679
+ '*.incl', '*.inc', '*.las']
1680
+ mimetypes = ['application/xml+lasso']
1681
+
1682
+ def __init__(self, **options):
1683
+ super(LassoXmlLexer, self).__init__(XmlLexer, LassoLexer, **options)
1684
+
1685
+ def analyse_text(text):
1686
+ rv = LassoLexer.analyse_text(text) - 0.01
1687
+ if looks_like_xml(text):
1688
+ rv += 0.4
1689
+ return rv
1690
+
1691
+
1692
+ class LassoCssLexer(DelegatingLexer):
1693
+ """
1694
+ Subclass of the `LassoLexer` which highlights unhandled data with the
1695
+ `CssLexer`.
1696
+
1697
+ *New in Pygments 1.6.*
1698
+ """
1699
+
1700
+ name = 'CSS+Lasso'
1701
+ aliases = ['css+lasso']
1702
+ alias_filenames = ['*.css']
1703
+ mimetypes = ['text/css+lasso']
1704
+
1705
+ def __init__(self, **options):
1706
+ options['requiredelimiters'] = True
1707
+ super(LassoCssLexer, self).__init__(CssLexer, LassoLexer, **options)
1708
+
1709
+ def analyse_text(text):
1710
+ rv = LassoLexer.analyse_text(text) - 0.05
1711
+ if re.search(r'\w+:.+?;', text):
1712
+ rv += 0.1
1713
+ if 'padding:' in text:
1714
+ rv += 0.1
1715
+ return rv
1716
+
1717
+
1718
+ class LassoJavascriptLexer(DelegatingLexer):
1719
+ """
1720
+ Subclass of the `LassoLexer` which highlights unhandled data with the
1721
+ `JavascriptLexer`.
1722
+
1723
+ *New in Pygments 1.6.*
1724
+ """
1725
+
1726
+ name = 'JavaScript+Lasso'
1727
+ aliases = ['js+lasso', 'javascript+lasso']
1728
+ alias_filenames = ['*.js']
1729
+ mimetypes = ['application/x-javascript+lasso',
1730
+ 'text/x-javascript+lasso',
1731
+ 'text/javascript+lasso']
1732
+
1733
+ def __init__(self, **options):
1734
+ options['requiredelimiters'] = True
1735
+ super(LassoJavascriptLexer, self).__init__(JavascriptLexer, LassoLexer,
1736
+ **options)
1737
+
1738
+ def analyse_text(text):
1739
+ rv = LassoLexer.analyse_text(text) - 0.05
1740
+ if 'function' in text:
1741
+ rv += 0.2
1742
+ return rv