pygments.rb 0.5.4 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (267) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +40 -0
  3. data/README.md +3 -0
  4. data/lexers +0 -0
  5. data/lib/pygments/popen.rb +3 -2
  6. data/lib/pygments/version.rb +1 -1
  7. data/pygments.rb.gemspec +2 -1
  8. data/vendor/pygments-main/AUTHORS +20 -1
  9. data/vendor/pygments-main/CHANGES +55 -3
  10. data/vendor/pygments-main/LICENSE +1 -1
  11. data/vendor/pygments-main/MANIFEST.in +1 -1
  12. data/vendor/pygments-main/Makefile +5 -8
  13. data/vendor/pygments-main/REVISION +1 -1
  14. data/vendor/pygments-main/doc/Makefile +153 -0
  15. data/vendor/pygments-main/doc/_static/favicon.ico +0 -0
  16. data/vendor/pygments-main/doc/_static/logo_new.png +0 -0
  17. data/vendor/pygments-main/doc/_static/logo_only.png +0 -0
  18. data/vendor/pygments-main/doc/_templates/docssidebar.html +3 -0
  19. data/vendor/pygments-main/doc/_templates/indexsidebar.html +25 -0
  20. data/vendor/pygments-main/doc/_themes/pygments14/layout.html +98 -0
  21. data/vendor/pygments-main/doc/_themes/pygments14/static/bodybg.png +0 -0
  22. data/vendor/pygments-main/doc/_themes/pygments14/static/docbg.png +0 -0
  23. data/vendor/pygments-main/doc/_themes/pygments14/static/listitem.png +0 -0
  24. data/vendor/pygments-main/doc/_themes/pygments14/static/logo.png +0 -0
  25. data/vendor/pygments-main/doc/_themes/pygments14/static/pocoo.png +0 -0
  26. data/vendor/pygments-main/doc/_themes/pygments14/static/pygments14.css_t +401 -0
  27. data/vendor/pygments-main/doc/_themes/pygments14/theme.conf +15 -0
  28. data/vendor/pygments-main/doc/conf.py +249 -0
  29. data/vendor/pygments-main/doc/docs/api.rst +316 -0
  30. data/vendor/pygments-main/doc/docs/authors.rst +4 -0
  31. data/vendor/pygments-main/doc/docs/changelog.rst +1 -0
  32. data/vendor/pygments-main/{docs/src/cmdline.txt → doc/docs/cmdline.rst} +9 -11
  33. data/vendor/pygments-main/{docs/src/filterdevelopment.txt → doc/docs/filterdevelopment.rst} +1 -1
  34. data/vendor/pygments-main/{docs/src/filters.txt → doc/docs/filters.rst} +4 -5
  35. data/vendor/pygments-main/{docs/src/formatterdevelopment.txt → doc/docs/formatterdevelopment.rst} +1 -1
  36. data/vendor/pygments-main/{docs/src/formatters.txt → doc/docs/formatters.rst} +6 -6
  37. data/vendor/pygments-main/doc/docs/index.rst +66 -0
  38. data/vendor/pygments-main/{docs/src/integrate.txt → doc/docs/integrate.rst} +3 -7
  39. data/vendor/pygments-main/{docs/src/java.txt → doc/docs/java.rst} +0 -0
  40. data/vendor/pygments-main/{docs/src/lexerdevelopment.txt → doc/docs/lexerdevelopment.rst} +13 -14
  41. data/vendor/pygments-main/{docs/src/lexers.txt → doc/docs/lexers.rst} +7 -5
  42. data/vendor/pygments-main/{docs/src/moinmoin.txt → doc/docs/moinmoin.rst} +0 -0
  43. data/vendor/pygments-main/{docs/src/plugins.txt → doc/docs/plugins.rst} +0 -0
  44. data/vendor/pygments-main/{docs/src/quickstart.txt → doc/docs/quickstart.rst} +22 -19
  45. data/vendor/pygments-main/{docs/src/rstdirective.txt → doc/docs/rstdirective.rst} +0 -0
  46. data/vendor/pygments-main/{docs/src/styles.txt → doc/docs/styles.rst} +2 -2
  47. data/vendor/pygments-main/{docs/src/tokens.txt → doc/docs/tokens.rst} +10 -7
  48. data/vendor/pygments-main/{docs/src/unicode.txt → doc/docs/unicode.rst} +8 -7
  49. data/vendor/pygments-main/doc/download.rst +41 -0
  50. data/vendor/pygments-main/doc/faq.rst +143 -0
  51. data/vendor/pygments-main/doc/index.rst +53 -0
  52. data/vendor/pygments-main/doc/languages.rst +151 -0
  53. data/vendor/pygments-main/doc/make.bat +190 -0
  54. data/vendor/pygments-main/{docs → doc}/pygmentize.1 +0 -0
  55. data/vendor/pygments-main/external/autopygmentize +65 -48
  56. data/vendor/pygments-main/external/markdown-processor.py +15 -15
  57. data/vendor/pygments-main/external/moin-parser.py +1 -1
  58. data/vendor/pygments-main/external/rst-directive.py +2 -3
  59. data/vendor/pygments-main/ez_setup.py +340 -234
  60. data/vendor/pygments-main/pygments/__init__.py +4 -4
  61. data/vendor/pygments-main/pygments/cmdline.py +81 -68
  62. data/vendor/pygments-main/pygments/console.py +1 -1
  63. data/vendor/pygments-main/pygments/filter.py +1 -1
  64. data/vendor/pygments-main/pygments/filters/__init__.py +11 -9
  65. data/vendor/pygments-main/pygments/formatter.py +3 -3
  66. data/vendor/pygments-main/pygments/formatters/__init__.py +5 -3
  67. data/vendor/pygments-main/pygments/formatters/_mapping.py +16 -5
  68. data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -1
  69. data/vendor/pygments-main/pygments/formatters/html.py +44 -26
  70. data/vendor/pygments-main/pygments/formatters/img.py +21 -14
  71. data/vendor/pygments-main/pygments/formatters/latex.py +104 -12
  72. data/vendor/pygments-main/pygments/formatters/other.py +53 -6
  73. data/vendor/pygments-main/pygments/formatters/rtf.py +30 -16
  74. data/vendor/pygments-main/pygments/formatters/svg.py +2 -2
  75. data/vendor/pygments-main/pygments/formatters/terminal.py +41 -1
  76. data/vendor/pygments-main/pygments/formatters/terminal256.py +2 -2
  77. data/vendor/pygments-main/pygments/lexer.py +59 -39
  78. data/vendor/pygments-main/pygments/lexers/__init__.py +38 -15
  79. data/vendor/pygments-main/pygments/lexers/_asybuiltins.py +1 -1
  80. data/vendor/pygments-main/pygments/lexers/_clbuiltins.py +15 -15
  81. data/vendor/pygments-main/pygments/lexers/_cocoabuiltins.py +73 -0
  82. data/vendor/pygments-main/pygments/lexers/_lassobuiltins.py +11 -1
  83. data/vendor/pygments-main/pygments/lexers/_luabuiltins.py +14 -8
  84. data/vendor/pygments-main/pygments/lexers/_mapping.py +81 -30
  85. data/vendor/pygments-main/pygments/lexers/_openedgebuiltins.py +1 -1
  86. data/vendor/pygments-main/pygments/lexers/_phpbuiltins.py +1067 -95
  87. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +7 -7
  88. data/vendor/pygments-main/pygments/lexers/_robotframeworklexer.py +5 -4
  89. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +1 -1
  90. data/vendor/pygments-main/pygments/lexers/_sourcemodbuiltins.py +12 -7
  91. data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +112 -18
  92. data/vendor/pygments-main/pygments/lexers/_vimbuiltins.py +1 -1
  93. data/vendor/pygments-main/pygments/lexers/agile.py +644 -382
  94. data/vendor/pygments-main/pygments/lexers/asm.py +66 -29
  95. data/vendor/pygments-main/pygments/lexers/compiled.py +1643 -174
  96. data/vendor/pygments-main/pygments/lexers/dalvik.py +27 -6
  97. data/vendor/pygments-main/pygments/lexers/dotnet.py +45 -33
  98. data/vendor/pygments-main/pygments/lexers/foxpro.py +3 -3
  99. data/vendor/pygments-main/pygments/lexers/functional.py +1510 -570
  100. data/vendor/pygments-main/pygments/lexers/graph.py +81 -0
  101. data/vendor/pygments-main/pygments/lexers/hdl.py +29 -30
  102. data/vendor/pygments-main/pygments/lexers/inferno.py +96 -0
  103. data/vendor/pygments-main/pygments/lexers/jvm.py +622 -207
  104. data/vendor/pygments-main/pygments/lexers/math.py +438 -70
  105. data/vendor/pygments-main/pygments/lexers/other.py +885 -171
  106. data/vendor/pygments-main/pygments/lexers/parsers.py +24 -24
  107. data/vendor/pygments-main/pygments/lexers/qbasic.py +157 -0
  108. data/vendor/pygments-main/pygments/lexers/rdf.py +99 -0
  109. data/vendor/pygments-main/pygments/lexers/shell.py +28 -25
  110. data/vendor/pygments-main/pygments/lexers/special.py +7 -8
  111. data/vendor/pygments-main/pygments/lexers/sql.py +56 -23
  112. data/vendor/pygments-main/pygments/lexers/templates.py +377 -59
  113. data/vendor/pygments-main/pygments/lexers/text.py +208 -46
  114. data/vendor/pygments-main/pygments/lexers/web.py +729 -264
  115. data/vendor/pygments-main/pygments/modeline.py +1 -1
  116. data/vendor/pygments-main/pygments/plugin.py +1 -1
  117. data/vendor/pygments-main/pygments/scanner.py +1 -1
  118. data/vendor/pygments-main/pygments/sphinxext.py +153 -0
  119. data/vendor/pygments-main/pygments/style.py +3 -2
  120. data/vendor/pygments-main/pygments/styles/__init__.py +5 -1
  121. data/vendor/pygments-main/pygments/styles/autumn.py +1 -1
  122. data/vendor/pygments-main/pygments/styles/borland.py +1 -1
  123. data/vendor/pygments-main/pygments/styles/bw.py +1 -1
  124. data/vendor/pygments-main/pygments/styles/colorful.py +1 -1
  125. data/vendor/pygments-main/pygments/styles/default.py +1 -1
  126. data/vendor/pygments-main/pygments/styles/emacs.py +1 -1
  127. data/vendor/pygments-main/pygments/styles/friendly.py +1 -1
  128. data/vendor/pygments-main/pygments/styles/fruity.py +1 -1
  129. data/vendor/pygments-main/pygments/styles/igor.py +29 -0
  130. data/vendor/pygments-main/pygments/styles/manni.py +1 -1
  131. data/vendor/pygments-main/pygments/styles/monokai.py +4 -4
  132. data/vendor/pygments-main/pygments/styles/murphy.py +1 -1
  133. data/vendor/pygments-main/pygments/styles/native.py +1 -1
  134. data/vendor/pygments-main/pygments/styles/paraiso_dark.py +125 -0
  135. data/vendor/pygments-main/pygments/styles/paraiso_light.py +125 -0
  136. data/vendor/pygments-main/pygments/styles/pastie.py +1 -1
  137. data/vendor/pygments-main/pygments/styles/perldoc.py +1 -1
  138. data/vendor/pygments-main/pygments/styles/rrt.py +1 -1
  139. data/vendor/pygments-main/pygments/styles/tango.py +1 -1
  140. data/vendor/pygments-main/pygments/styles/trac.py +1 -1
  141. data/vendor/pygments-main/pygments/styles/vim.py +1 -1
  142. data/vendor/pygments-main/pygments/styles/vs.py +1 -1
  143. data/vendor/pygments-main/pygments/styles/xcode.py +51 -0
  144. data/vendor/pygments-main/pygments/token.py +4 -1
  145. data/vendor/pygments-main/pygments/unistring.py +6 -5
  146. data/vendor/pygments-main/pygments/util.py +35 -21
  147. data/vendor/pygments-main/scripts/check_sources.py +28 -44
  148. data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +5 -4
  149. data/vendor/pygments-main/scripts/find_codetags.py +27 -19
  150. data/vendor/pygments-main/scripts/find_error.py +16 -13
  151. data/vendor/pygments-main/scripts/get_vimkw.py +3 -3
  152. data/vendor/pygments-main/scripts/vim2pygments.py +9 -7
  153. data/vendor/pygments-main/setup.py +19 -19
  154. data/vendor/pygments-main/tests/examplefiles/99_bottles_of_beer.chpl +118 -0
  155. data/vendor/pygments-main/tests/examplefiles/Error.pmod +38 -0
  156. data/vendor/pygments-main/tests/examplefiles/FakeFile.pike +360 -0
  157. data/vendor/pygments-main/tests/examplefiles/{ANTLRv3.g → antlr_ANTLRv3.g} +0 -0
  158. data/vendor/pygments-main/tests/examplefiles/clojure-weird-keywords.clj +5 -0
  159. data/vendor/pygments-main/tests/examplefiles/core.cljs +52 -0
  160. data/vendor/pygments-main/tests/examplefiles/demo.cfm +13 -1
  161. data/vendor/pygments-main/tests/examplefiles/demo.hbs +12 -0
  162. data/vendor/pygments-main/tests/examplefiles/ember.handlebars +33 -0
  163. data/vendor/pygments-main/tests/examplefiles/example.als +217 -0
  164. data/vendor/pygments-main/tests/examplefiles/example.c +1 -1
  165. data/vendor/pygments-main/tests/examplefiles/example.chai +6 -0
  166. data/vendor/pygments-main/tests/examplefiles/example.coffee +27 -0
  167. data/vendor/pygments-main/tests/examplefiles/example.e +124 -0
  168. data/vendor/pygments-main/tests/examplefiles/example.f90 +8 -0
  169. data/vendor/pygments-main/tests/examplefiles/example.feature +16 -0
  170. data/vendor/pygments-main/tests/examplefiles/example.gd +23 -0
  171. data/vendor/pygments-main/tests/examplefiles/example.gi +64 -0
  172. data/vendor/pygments-main/tests/examplefiles/example.groovy +2 -0
  173. data/vendor/pygments-main/tests/examplefiles/example.hs +27 -0
  174. data/vendor/pygments-main/tests/examplefiles/example.hx +44 -1
  175. data/vendor/pygments-main/tests/examplefiles/example.i6t +32 -0
  176. data/vendor/pygments-main/tests/examplefiles/example.i7x +45 -0
  177. data/vendor/pygments-main/tests/examplefiles/example.inf +374 -0
  178. data/vendor/pygments-main/tests/examplefiles/example.j +564 -0
  179. data/vendor/pygments-main/tests/examplefiles/example.java +16 -0
  180. data/vendor/pygments-main/tests/examplefiles/example.kal +75 -0
  181. data/vendor/pygments-main/tests/examplefiles/example.liquid +42 -0
  182. data/vendor/pygments-main/tests/examplefiles/example.ma +8 -0
  183. data/vendor/pygments-main/tests/examplefiles/example.mq4 +187 -0
  184. data/vendor/pygments-main/tests/examplefiles/example.mqh +123 -0
  185. data/vendor/pygments-main/tests/examplefiles/example.ni +57 -0
  186. data/vendor/pygments-main/tests/examplefiles/example.nix +80 -0
  187. data/vendor/pygments-main/tests/examplefiles/example.pp +8 -0
  188. data/vendor/pygments-main/tests/examplefiles/example.red +257 -0
  189. data/vendor/pygments-main/tests/examplefiles/example.reds +150 -0
  190. data/vendor/pygments-main/tests/examplefiles/example.rkt +677 -29
  191. data/vendor/pygments-main/tests/examplefiles/example.sh +22 -0
  192. data/vendor/pygments-main/tests/examplefiles/example.slim +31 -0
  193. data/vendor/pygments-main/tests/examplefiles/example.sls +51 -0
  194. data/vendor/pygments-main/tests/examplefiles/example.stan +2 -0
  195. data/vendor/pygments-main/tests/examplefiles/example.todotxt +9 -0
  196. data/vendor/pygments-main/tests/examplefiles/exampleScript.cfc +241 -0
  197. data/vendor/pygments-main/tests/examplefiles/exampleTag.cfc +18 -0
  198. data/vendor/pygments-main/tests/examplefiles/example_elixir.ex +192 -350
  199. data/vendor/pygments-main/tests/examplefiles/hash_syntax.rb +5 -0
  200. data/vendor/pygments-main/tests/examplefiles/hello.at +6 -0
  201. data/vendor/pygments-main/tests/examplefiles/hello.golo +5 -0
  202. data/vendor/pygments-main/tests/examplefiles/hello.lsl +12 -0
  203. data/vendor/pygments-main/tests/examplefiles/{File.hy → hybris_File.hy} +0 -0
  204. data/vendor/pygments-main/tests/examplefiles/{mg_sample.pro → idl_sample.pro} +0 -0
  205. data/vendor/pygments-main/tests/examplefiles/iex_example +23 -0
  206. data/vendor/pygments-main/tests/examplefiles/inet_pton6.dg +24 -24
  207. data/vendor/pygments-main/tests/examplefiles/language.hy +165 -0
  208. data/vendor/pygments-main/tests/examplefiles/limbo.b +456 -0
  209. data/vendor/pygments-main/tests/examplefiles/livescript-demo.ls +3 -1
  210. data/vendor/pygments-main/tests/examplefiles/main.cmake +2 -0
  211. data/vendor/pygments-main/tests/examplefiles/objc_example.m +163 -16
  212. data/vendor/pygments-main/tests/examplefiles/{example.p → openedge_example} +0 -0
  213. data/vendor/pygments-main/tests/examplefiles/pawn_example +25 -0
  214. data/vendor/pygments-main/tests/examplefiles/qbasic_example +2 -0
  215. data/vendor/pygments-main/tests/examplefiles/r6rs-comments.scm +23 -0
  216. data/vendor/pygments-main/tests/examplefiles/{robotframework.txt → robotframework_test.txt} +0 -0
  217. data/vendor/pygments-main/tests/examplefiles/rql-queries.rql +34 -0
  218. data/vendor/pygments-main/tests/examplefiles/scope.cirru +43 -0
  219. data/vendor/pygments-main/tests/examplefiles/sparql.rq +23 -0
  220. data/vendor/pygments-main/tests/examplefiles/test.R +37 -5
  221. data/vendor/pygments-main/tests/examplefiles/test.apl +26 -0
  222. data/vendor/pygments-main/tests/examplefiles/test.cyp +123 -0
  223. data/vendor/pygments-main/tests/examplefiles/test.idr +93 -0
  224. data/vendor/pygments-main/tests/examplefiles/test.mask +41 -0
  225. data/vendor/pygments-main/tests/examplefiles/test.pan +54 -0
  226. data/vendor/pygments-main/tests/examplefiles/test.php +3 -1
  227. data/vendor/pygments-main/tests/examplefiles/test.pig +148 -0
  228. data/vendor/pygments-main/tests/examplefiles/test.pwn +253 -0
  229. data/vendor/pygments-main/tests/examplefiles/test.r3 +27 -7
  230. data/vendor/pygments-main/tests/examplefiles/test.rsl +111 -0
  231. data/vendor/pygments-main/tests/examplefiles/test.swift +65 -0
  232. data/vendor/pygments-main/tests/examplefiles/test.zep +33 -0
  233. data/vendor/pygments-main/tests/examplefiles/unicode.go +10 -0
  234. data/vendor/pygments-main/tests/examplefiles/{test.bas → vbnet_test.bas} +0 -0
  235. data/vendor/pygments-main/tests/examplefiles/vctreestatus_hg +4 -0
  236. data/vendor/pygments-main/tests/examplefiles/vimrc +21 -0
  237. data/vendor/pygments-main/tests/run.py +14 -19
  238. data/vendor/pygments-main/tests/string_asserts.py +22 -0
  239. data/vendor/pygments-main/tests/test_basic_api.py +28 -14
  240. data/vendor/pygments-main/tests/test_cfm.py +46 -0
  241. data/vendor/pygments-main/tests/test_clexer.py +208 -3
  242. data/vendor/pygments-main/tests/test_cmdline.py +6 -5
  243. data/vendor/pygments-main/tests/test_examplefiles.py +30 -19
  244. data/vendor/pygments-main/tests/test_html_formatter.py +15 -13
  245. data/vendor/pygments-main/tests/test_latex_formatter.py +4 -2
  246. data/vendor/pygments-main/tests/test_lexers_other.py +11 -11
  247. data/vendor/pygments-main/tests/test_objectiveclexer.py +81 -0
  248. data/vendor/pygments-main/tests/test_perllexer.py +1 -1
  249. data/vendor/pygments-main/tests/test_qbasiclexer.py +43 -0
  250. data/vendor/pygments-main/tests/test_regexlexer.py +8 -1
  251. data/vendor/pygments-main/tests/test_rtf_formatter.py +109 -0
  252. data/vendor/pygments-main/tests/test_string_asserts.py +39 -0
  253. data/vendor/pygments-main/tests/test_token.py +3 -3
  254. data/vendor/pygments-main/tests/test_using_api.py +1 -1
  255. data/vendor/pygments-main/tests/test_util.py +1 -1
  256. metadata +138 -51
  257. data/vendor/pygments-main/docs/generate.py +0 -472
  258. data/vendor/pygments-main/docs/src/api.txt +0 -270
  259. data/vendor/pygments-main/docs/src/authors.txt +0 -5
  260. data/vendor/pygments-main/docs/src/changelog.txt +0 -5
  261. data/vendor/pygments-main/docs/src/index.txt +0 -69
  262. data/vendor/pygments-main/docs/src/installation.txt +0 -71
  263. data/vendor/pygments-main/external/rst-directive-old.py +0 -77
  264. data/vendor/pygments-main/scripts/reindent.py +0 -291
  265. data/vendor/pygments-main/tests/examplefiles/import.hs +0 -4
  266. data/vendor/pygments-main/tests/examplefiles/objc_example2.m +0 -24
  267. data/vendor/pygments-main/tests/old_run.py +0 -138
@@ -5,7 +5,7 @@
5
5
 
6
6
  Lexers for web-related languages and markup.
7
7
 
8
- :copyright: Copyright 2006-2013 by the Pygments team, see AUTHORS.
8
+ :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS.
9
9
  :license: BSD, see LICENSE for details.
10
10
  """
11
11
 
@@ -13,11 +13,11 @@ import re
13
13
  import copy
14
14
 
15
15
  from pygments.lexer import RegexLexer, ExtendedRegexLexer, bygroups, using, \
16
- include, this
16
+ include, this, default
17
17
  from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
18
- Number, Other, Punctuation, Literal
18
+ Number, Other, Punctuation, Literal
19
19
  from pygments.util import get_bool_opt, get_list_opt, looks_like_xml, \
20
- html_doctype_matches, unirange
20
+ html_doctype_matches, unirange, iteritems
21
21
  from pygments.lexers.agile import RubyLexer
22
22
  from pygments.lexers.compiled import ScalaLexer
23
23
 
@@ -27,7 +27,8 @@ __all__ = ['HtmlLexer', 'XmlLexer', 'JavascriptLexer', 'JsonLexer', 'CssLexer',
27
27
  'MxmlLexer', 'HaxeLexer', 'HamlLexer', 'SassLexer', 'ScssLexer',
28
28
  'ObjectiveJLexer', 'CoffeeScriptLexer', 'LiveScriptLexer',
29
29
  'DuelLexer', 'ScamlLexer', 'JadeLexer', 'XQueryLexer',
30
- 'DtdLexer', 'DartLexer', 'LassoLexer', 'QmlLexer', 'TypeScriptLexer']
30
+ 'DtdLexer', 'DartLexer', 'LassoLexer', 'QmlLexer', 'TypeScriptLexer',
31
+ 'KalLexer', 'CirruLexer', 'MaskLexer', 'ZephirLexer', 'SlimLexer']
31
32
 
32
33
 
33
34
  class JavascriptLexer(RegexLexer):
@@ -54,7 +55,7 @@ class JavascriptLexer(RegexLexer):
54
55
  (r'/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/'
55
56
  r'([gim]+\b|\B)', String.Regex, '#pop'),
56
57
  (r'(?=/)', Text, ('#pop', 'badregex')),
57
- (r'', Text, '#pop')
58
+ default('#pop')
58
59
  ],
59
60
  'badregex': [
60
61
  (r'\n', Text, '#pop')
@@ -80,7 +81,7 @@ class JavascriptLexer(RegexLexer):
80
81
  r'decodeURIComponent|encodeURI|encodeURIComponent|'
81
82
  r'Error|eval|isFinite|isNaN|parseFloat|parseInt|document|this|'
82
83
  r'window)\b', Name.Builtin),
83
- (r'[$a-zA-Z_][a-zA-Z0-9_]*', Name.Other),
84
+ (r'[$a-zA-Z_]\w*', Name.Other),
84
85
  (r'[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?', Number.Float),
85
86
  (r'0x[0-9a-fA-F]+', Number.Hex),
86
87
  (r'[0-9]+', Number.Integer),
@@ -94,7 +95,7 @@ class JsonLexer(RegexLexer):
94
95
  """
95
96
  For JSON data structures.
96
97
 
97
- *New in Pygments 1.5.*
98
+ .. versionadded:: 1.5
98
99
  """
99
100
 
100
101
  name = 'JSON'
@@ -177,14 +178,14 @@ class ActionScriptLexer(RegexLexer):
177
178
  """
178
179
  For ActionScript source code.
179
180
 
180
- *New in Pygments 0.9.*
181
+ .. versionadded:: 0.9
181
182
  """
182
183
 
183
184
  name = 'ActionScript'
184
185
  aliases = ['as', 'actionscript']
185
186
  filenames = ['*.as']
186
- mimetypes = ['application/x-actionscript3', 'text/x-actionscript3',
187
- 'text/actionscript3']
187
+ mimetypes = ['application/x-actionscript', 'text/x-actionscript',
188
+ 'text/actionscript']
188
189
 
189
190
  flags = re.DOTALL
190
191
  tokens = {
@@ -247,7 +248,7 @@ class ActionScriptLexer(RegexLexer):
247
248
  r'isXMLName|clearInterval|fscommand|getTimer|getURL|getVersion|'
248
249
  r'isFinite|parseFloat|parseInt|setInterval|trace|updateAfterEvent|'
249
250
  r'unescape)\b',Name.Function),
250
- (r'[$a-zA-Z_][a-zA-Z0-9_]*', Name.Other),
251
+ (r'[$a-zA-Z_]\w*', Name.Other),
251
252
  (r'[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?', Number.Float),
252
253
  (r'0x[0-9a-f]+', Number.Hex),
253
254
  (r'[0-9]+', Number.Integer),
@@ -261,16 +262,16 @@ class ActionScript3Lexer(RegexLexer):
261
262
  """
262
263
  For ActionScript 3 source code.
263
264
 
264
- *New in Pygments 0.11.*
265
+ .. versionadded:: 0.11
265
266
  """
266
267
 
267
268
  name = 'ActionScript 3'
268
269
  aliases = ['as3', 'actionscript3']
269
270
  filenames = ['*.as']
270
- mimetypes = ['application/x-actionscript', 'text/x-actionscript',
271
- 'text/actionscript']
271
+ mimetypes = ['application/x-actionscript3', 'text/x-actionscript3',
272
+ 'text/actionscript3']
272
273
 
273
- identifier = r'[$a-zA-Z_][a-zA-Z0-9_]*'
274
+ identifier = r'[$a-zA-Z_]\w*'
274
275
  typeidentifier = identifier + '(?:\.<\w+>)?'
275
276
 
276
277
  flags = re.DOTALL | re.MULTILINE
@@ -358,12 +359,12 @@ class CssLexer(RegexLexer):
358
359
  (r'\s+', Text),
359
360
  (r'/\*(?:.|\n)*?\*/', Comment),
360
361
  (r'{', Punctuation, 'content'),
361
- (r'\:[a-zA-Z0-9_-]+', Name.Decorator),
362
- (r'\.[a-zA-Z0-9_-]+', Name.Class),
363
- (r'\#[a-zA-Z0-9_-]+', Name.Function),
364
- (r'@[a-zA-Z0-9_-]+', Keyword, 'atrule'),
365
- (r'[a-zA-Z0-9_-]+', Name.Tag),
366
- (r'[~\^\*!%&\[\]\(\)<>\|+=@:;,./?-]', Operator),
362
+ (r'\:[\w-]+', Name.Decorator),
363
+ (r'\.[\w-]+', Name.Class),
364
+ (r'\#[\w-]+', Name.Function),
365
+ (r'@[\w-]+', Keyword, 'atrule'),
366
+ (r'[\w-]+', Name.Tag),
367
+ (r'[~\^\*!%&$\[\]\(\)<>\|+=@:;,./?-]', Operator),
367
368
  (r'"(\\\\|\\"|[^"])*"', String.Double),
368
369
  (r"'(\\\\|\\'|[^'])*'", String.Single)
369
370
  ],
@@ -398,19 +399,19 @@ class CssLexer(RegexLexer):
398
399
  r'list-style-type|list-style-image|list-style-position|'
399
400
  r'list-style|margin-bottom|margin-left|margin-right|'
400
401
  r'margin-top|margin|marker-offset|marks|max-height|max-width|'
401
- r'min-height|min-width|opacity|orphans|outline|outline-color|'
402
- r'outline-style|outline-width|overflow(?:-x|-y)?|padding-bottom|'
402
+ r'min-height|min-width|opacity|orphans|outline-color|'
403
+ r'outline-style|outline-width|outline|overflow(?:-x|-y)?|padding-bottom|'
403
404
  r'padding-left|padding-right|padding-top|padding|page|'
404
405
  r'page-break-after|page-break-before|page-break-inside|'
405
- r'pause-after|pause-before|pause|pitch|pitch-range|'
406
+ r'pause-after|pause-before|pause|pitch-range|pitch|'
406
407
  r'play-during|position|quotes|richness|right|size|'
407
408
  r'speak-header|speak-numeral|speak-punctuation|speak|'
408
409
  r'speech-rate|stress|table-layout|text-align|text-decoration|'
409
410
  r'text-indent|text-shadow|text-transform|top|unicode-bidi|'
410
411
  r'vertical-align|visibility|voice-family|volume|white-space|'
411
- r'widows|width|word-spacing|z-index|bottom|left|'
412
+ r'widows|width|word-spacing|z-index|bottom|'
412
413
  r'above|absolute|always|armenian|aural|auto|avoid|baseline|'
413
- r'behind|below|bidi-override|blink|block|bold|bolder|both|'
414
+ r'behind|below|bidi-override|blink|block|bolder|bold|both|'
414
415
  r'capitalize|center-left|center-right|center|circle|'
415
416
  r'cjk-ideographic|close-quote|collapse|condensed|continuous|'
416
417
  r'crop|crosshair|cross|cursive|dashed|decimal-leading-zero|'
@@ -420,7 +421,7 @@ class CssLexer(RegexLexer):
420
421
  r'hidden|hide|higher|high|hiragana-iroha|hiragana|icon|'
421
422
  r'inherit|inline-table|inline|inset|inside|invert|italic|'
422
423
  r'justify|katakana-iroha|katakana|landscape|larger|large|'
423
- r'left-side|leftwards|level|lighter|line-through|list-item|'
424
+ r'left-side|leftwards|left|level|lighter|line-through|list-item|'
424
425
  r'loud|lower-alpha|lower-greek|lower-roman|lowercase|ltr|'
425
426
  r'lower|low|medium|message-box|middle|mix|monospace|'
426
427
  r'n-resize|narrower|ne-resize|no-close-quote|no-open-quote|'
@@ -429,11 +430,11 @@ class CssLexer(RegexLexer):
429
430
  r'relative|repeat-x|repeat-y|repeat|rgb|ridge|right-side|'
430
431
  r'rightwards|s-resize|sans-serif|scroll|se-resize|'
431
432
  r'semi-condensed|semi-expanded|separate|serif|show|silent|'
432
- r'slow|slower|small-caps|small-caption|smaller|soft|solid|'
433
+ r'slower|slow|small-caps|small-caption|smaller|soft|solid|'
433
434
  r'spell-out|square|static|status-bar|super|sw-resize|'
434
435
  r'table-caption|table-cell|table-column|table-column-group|'
435
436
  r'table-footer-group|table-header-group|table-row|'
436
- r'table-row-group|text|text-bottom|text-top|thick|thin|'
437
+ r'table-row-group|text-bottom|text-top|text|thick|thin|'
437
438
  r'transparent|ultra-condensed|ultra-expanded|underline|'
438
439
  r'upper-alpha|upper-latin|upper-roman|uppercase|url|'
439
440
  r'visible|w-resize|wait|wider|x-fast|x-high|x-large|x-loud|'
@@ -466,13 +467,15 @@ class CssLexer(RegexLexer):
466
467
  (r'\!important', Comment.Preproc),
467
468
  (r'/\*(?:.|\n)*?\*/', Comment),
468
469
  (r'\#[a-zA-Z0-9]{1,6}', Number),
469
- (r'[\.-]?[0-9]*[\.]?[0-9]+(em|px|\%|pt|pc|in|mm|cm|ex|s)\b', Number),
470
+ (r'[\.-]?[0-9]*[\.]?[0-9]+(em|px|pt|pc|in|mm|cm|ex|s)\b', Number),
471
+ # Separate regex for percentages, as can't do word boundaries with %
472
+ (r'[\.-]?[0-9]*[\.]?[0-9]+%', Number),
470
473
  (r'-?[0-9]+', Number),
471
474
  (r'[~\^\*!%&<>\|+=@:,./?-]+', Operator),
472
475
  (r'[\[\]();]+', Punctuation),
473
476
  (r'"(\\\\|\\"|[^"])*"', String.Double),
474
477
  (r"'(\\\\|\\'|[^'])*'", String.Single),
475
- (r'[a-zA-Z_][a-zA-Z0-9_]*', Name)
478
+ (r'[a-zA-Z_]\w*', Name)
476
479
  ]
477
480
  }
478
481
 
@@ -481,7 +484,7 @@ class ObjectiveJLexer(RegexLexer):
481
484
  """
482
485
  For Objective-J source code with preprocessor directives.
483
486
 
484
- *New in Pygments 1.3.*
487
+ .. versionadded:: 1.3
485
488
  """
486
489
 
487
490
  name = 'Objective-J'
@@ -539,7 +542,7 @@ class ObjectiveJLexer(RegexLexer):
539
542
  (r'/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/'
540
543
  r'([gim]+\b|\B)', String.Regex, '#pop'),
541
544
  (r'(?=/)', Text, ('#pop', 'badregex')),
542
- (r'', Text, '#pop'),
545
+ default('#pop'),
543
546
  ],
544
547
  'badregex': [
545
548
  (r'\n', Text, '#pop'),
@@ -592,26 +595,26 @@ class ObjectiveJLexer(RegexLexer):
592
595
  r'Error|eval|isFinite|isNaN|parseFloat|parseInt|document|this|'
593
596
  r'window)\b', Name.Builtin),
594
597
 
595
- (r'([$a-zA-Z_][a-zA-Z0-9_]*)(' + _ws + r')(?=\()',
598
+ (r'([$a-zA-Z_]\w*)(' + _ws + r')(?=\()',
596
599
  bygroups(Name.Function, using(this))),
597
600
 
598
- (r'[$a-zA-Z_][a-zA-Z0-9_]*', Name),
601
+ (r'[$a-zA-Z_]\w*', Name),
599
602
  ],
600
603
  'classname' : [
601
604
  # interface definition that inherits
602
- (r'([a-zA-Z_][a-zA-Z0-9_]*)(' + _ws + r':' + _ws +
603
- r')([a-zA-Z_][a-zA-Z0-9_]*)?',
605
+ (r'([a-zA-Z_]\w*)(' + _ws + r':' + _ws +
606
+ r')([a-zA-Z_]\w*)?',
604
607
  bygroups(Name.Class, using(this), Name.Class), '#pop'),
605
608
  # interface definition for a category
606
- (r'([a-zA-Z_][a-zA-Z0-9_]*)(' + _ws + r'\()([a-zA-Z_][a-zA-Z0-9_]*)(\))',
609
+ (r'([a-zA-Z_]\w*)(' + _ws + r'\()([a-zA-Z_]\w*)(\))',
607
610
  bygroups(Name.Class, using(this), Name.Label, Text), '#pop'),
608
611
  # simple interface / implementation
609
- (r'([a-zA-Z_][a-zA-Z0-9_]*)', Name.Class, '#pop'),
612
+ (r'([a-zA-Z_]\w*)', Name.Class, '#pop'),
610
613
  ],
611
614
  'forward_classname' : [
612
- (r'([a-zA-Z_][a-zA-Z0-9_]*)(\s*,\s*)',
615
+ (r'([a-zA-Z_]\w*)(\s*,\s*)',
613
616
  bygroups(Name.Class, Text), '#push'),
614
- (r'([a-zA-Z_][a-zA-Z0-9_]*)(\s*;?)',
617
+ (r'([a-zA-Z_]\w*)(\s*;?)',
615
618
  bygroups(Name.Class, Text), '#pop'),
616
619
  ],
617
620
  'function_signature': [
@@ -619,26 +622,26 @@ class ObjectiveJLexer(RegexLexer):
619
622
 
620
623
  # start of a selector w/ parameters
621
624
  (r'(\(' + _ws + r')' # open paren
622
- r'([a-zA-Z_][a-zA-Z0-9_]+)' # return type
625
+ r'([a-zA-Z_]\w+)' # return type
623
626
  r'(' + _ws + r'\)' + _ws + r')' # close paren
624
- r'([$a-zA-Z_][a-zA-Z0-9_]+' + _ws + r':)', # function name
627
+ r'([$a-zA-Z_]\w+' + _ws + r':)', # function name
625
628
  bygroups(using(this), Keyword.Type, using(this),
626
629
  Name.Function), 'function_parameters'),
627
630
 
628
631
  # no-param function
629
632
  (r'(\(' + _ws + r')' # open paren
630
- r'([a-zA-Z_][a-zA-Z0-9_]+)' # return type
633
+ r'([a-zA-Z_]\w+)' # return type
631
634
  r'(' + _ws + r'\)' + _ws + r')' # close paren
632
- r'([$a-zA-Z_][a-zA-Z0-9_]+)', # function name
635
+ r'([$a-zA-Z_]\w+)', # function name
633
636
  bygroups(using(this), Keyword.Type, using(this),
634
637
  Name.Function), "#pop"),
635
638
 
636
639
  # no return type given, start of a selector w/ parameters
637
- (r'([$a-zA-Z_][a-zA-Z0-9_]+' + _ws + r':)', # function name
640
+ (r'([$a-zA-Z_]\w+' + _ws + r':)', # function name
638
641
  bygroups (Name.Function), 'function_parameters'),
639
642
 
640
643
  # no return type given, no-param function
641
- (r'([$a-zA-Z_][a-zA-Z0-9_]+)', # function name
644
+ (r'([$a-zA-Z_]\w+)', # function name
642
645
  bygroups(Name.Function), "#pop"),
643
646
 
644
647
  ('', Text, '#pop'),
@@ -650,11 +653,11 @@ class ObjectiveJLexer(RegexLexer):
650
653
  (r'(\(' + _ws + ')' # open paren
651
654
  r'([^\)]+)' # type
652
655
  r'(' + _ws + r'\)' + _ws + r')' # close paren
653
- r'([$a-zA-Z_][a-zA-Z0-9_]+)', # param name
656
+ r'([$a-zA-Z_]\w+)', # param name
654
657
  bygroups(using(this), Keyword.Type, using(this), Text)),
655
658
 
656
659
  # one piece of a selector name
657
- (r'([$a-zA-Z_][a-zA-Z0-9_]+' + _ws + r':)', # function name
660
+ (r'([$a-zA-Z_]\w+' + _ws + r':)', # function name
658
661
  Name.Function),
659
662
 
660
663
  # smallest possible selector piece
@@ -664,10 +667,10 @@ class ObjectiveJLexer(RegexLexer):
664
667
  (r'(,' + _ws + r'\.\.\.)', using(this)),
665
668
 
666
669
  # param name
667
- (r'([$a-zA-Z_][a-zA-Z0-9_]+)', Text),
670
+ (r'([$a-zA-Z_]\w+)', Text),
668
671
  ],
669
672
  'expression' : [
670
- (r'([$a-zA-Z_][a-zA-Z0-9_]*)(\()', bygroups(Name.Function,
673
+ (r'([$a-zA-Z_]\w*)(\()', bygroups(Name.Function,
671
674
  Punctuation)),
672
675
  (r'(\))', Punctuation, "#pop"),
673
676
  ],
@@ -734,8 +737,8 @@ class HtmlLexer(RegexLexer):
734
737
  ],
735
738
  'tag': [
736
739
  (r'\s+', Text),
737
- (r'[a-zA-Z0-9_:-]+\s*=', Name.Attribute, 'attr'),
738
- (r'[a-zA-Z0-9_:-]+', Name.Attribute),
740
+ (r'[\w:-]+\s*=', Name.Attribute, 'attr'),
741
+ (r'[\w:-]+', Name.Attribute),
739
742
  (r'/?\s*>', Name.Tag, '#pop'),
740
743
  ],
741
744
  'script-content': [
@@ -796,6 +799,13 @@ class PhpLexer(RegexLexer):
796
799
  filenames = ['*.php', '*.php[345]', '*.inc']
797
800
  mimetypes = ['text/x-php']
798
801
 
802
+ # Note that a backslash is included in the following two patterns
803
+ # PHP uses a backslash as a namespace separator
804
+ _ident_char = r'[\\\w]|[^\x00-\x7f]'
805
+ _ident_begin = r'(?:[\\_a-z]|[^\x00-\x7f])'
806
+ _ident_end = r'(?:' + _ident_char + ')*'
807
+ _ident_inner = _ident_begin + _ident_end
808
+
799
809
  flags = re.IGNORECASE | re.DOTALL | re.MULTILINE
800
810
  tokens = {
801
811
  'root': [
@@ -805,7 +815,7 @@ class PhpLexer(RegexLexer):
805
815
  ],
806
816
  'php': [
807
817
  (r'\?>', Comment.Preproc, '#pop'),
808
- (r'<<<(\'?)([a-zA-Z_][a-zA-Z0-9_]*)\1\n.*?\n\2\;?\n', String),
818
+ (r'<<<(\'?)(' + _ident_inner + ')\1\n.*?\n\2\;?\n', String),
809
819
  (r'\s+', Text),
810
820
  (r'#.*?\n', Comment.Single),
811
821
  (r'//.*?\n', Comment.Single),
@@ -814,7 +824,7 @@ class PhpLexer(RegexLexer):
814
824
  (r'/\*\*/', Comment.Multiline),
815
825
  (r'/\*\*.*?\*/', String.Doc),
816
826
  (r'/\*.*?\*/', Comment.Multiline),
817
- (r'(->|::)(\s*)([a-zA-Z_][a-zA-Z0-9_]*)',
827
+ (r'(->|::)(\s*)(' + _ident_inner + ')',
818
828
  bygroups(Operator, Text, Name.Attribute)),
819
829
  (r'[~!%^&*+=|:.<>/?@-]+', Operator),
820
830
  (r'[\[\]{}();,]+', Punctuation),
@@ -822,7 +832,7 @@ class PhpLexer(RegexLexer):
822
832
  (r'(function)(\s*)(?=\()', bygroups(Keyword, Text)),
823
833
  (r'(function)(\s+)(&?)(\s*)',
824
834
  bygroups(Keyword, Text, Operator, Text), 'functionname'),
825
- (r'(const)(\s+)([a-zA-Z_][a-zA-Z0-9_]*)',
835
+ (r'(const)(\s+)(' + _ident_inner + ')',
826
836
  bygroups(Keyword, Text, Name.Constant)),
827
837
  (r'(and|E_PARSE|old_function|E_ERROR|or|as|E_WARNING|parent|'
828
838
  r'eval|PHP_OS|break|exit|case|extends|PHP_VERSION|cfunction|'
@@ -833,31 +843,33 @@ class PhpLexer(RegexLexer):
833
843
  r'endif|list|__LINE__|endswitch|new|__sleep|endwhile|not|'
834
844
  r'array|__wakeup|E_ALL|NULL|final|php_user_filter|interface|'
835
845
  r'implements|public|private|protected|abstract|clone|try|'
836
- r'catch|throw|this|use|namespace|trait)\b', Keyword),
846
+ r'catch|throw|this|use|namespace|trait|yield|'
847
+ r'finally)\b', Keyword),
837
848
  (r'(true|false|null)\b', Keyword.Constant),
838
- (r'\$\{\$+[a-zA-Z_][a-zA-Z0-9_]*\}', Name.Variable),
839
- (r'\$+[a-zA-Z_][a-zA-Z0-9_]*', Name.Variable),
840
- (r'[\\a-zA-Z_][\\a-zA-Z0-9_]*', Name.Other),
849
+ (r'\$\{\$+' + _ident_inner + '\}', Name.Variable),
850
+ (r'\$+' + _ident_inner, Name.Variable),
851
+ (_ident_inner, Name.Other),
841
852
  (r'(\d+\.\d*|\d*\.\d+)([eE][+-]?[0-9]+)?', Number.Float),
842
853
  (r'\d+[eE][+-]?[0-9]+', Number.Float),
843
854
  (r'0[0-7]+', Number.Oct),
844
- (r'0[xX][a-fA-F0-9]+', Number.Hex),
855
+ (r'0[xX][a-f0-9]+', Number.Hex),
845
856
  (r'\d+', Number.Integer),
857
+ (r'0b[01]+', Number.Bin),
846
858
  (r"'([^'\\]*(?:\\.[^'\\]*)*)'", String.Single),
847
859
  (r'`([^`\\]*(?:\\.[^`\\]*)*)`', String.Backtick),
848
860
  (r'"', String.Double, 'string'),
849
861
  ],
850
862
  'classname': [
851
- (r'[a-zA-Z_][\\a-zA-Z0-9_]*', Name.Class, '#pop')
863
+ (_ident_inner, Name.Class, '#pop')
852
864
  ],
853
865
  'functionname': [
854
- (r'[a-zA-Z_][a-zA-Z0-9_]*', Name.Function, '#pop')
866
+ (_ident_inner, Name.Function, '#pop')
855
867
  ],
856
868
  'string': [
857
869
  (r'"', String.Double, '#pop'),
858
870
  (r'[^{$"\\]+', String.Double),
859
- (r'\\([nrt\"$\\]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})', String.Escape),
860
- (r'\$[a-zA-Z_][a-zA-Z0-9_]*(\[\S+\]|->[a-zA-Z_][a-zA-Z0-9_]*)?',
871
+ (r'\\([nrt\"$\\]|[0-7]{1,3}|x[0-9a-f]{1,2})', String.Escape),
872
+ (r'\$' + _ident_inner + '(\[\S+?\]|->' + _ident_inner + ')?',
861
873
  String.Interpol),
862
874
  (r'(\{\$\{)(.*?)(\}\})',
863
875
  bygroups(String.Interpol, using(this, _startinline=True),
@@ -886,7 +898,7 @@ class PhpLexer(RegexLexer):
886
898
  self._functions = set()
887
899
  if self.funcnamehighlighting:
888
900
  from pygments.lexers._phpbuiltins import MODULES
889
- for key, value in MODULES.iteritems():
901
+ for key, value in iteritems(MODULES):
890
902
  if key not in self.disabledmodules:
891
903
  self._functions.update(value)
892
904
  RegexLexer.__init__(self, **options)
@@ -916,7 +928,7 @@ class DtdLexer(RegexLexer):
916
928
  """
917
929
  A lexer for DTDs (Document Type Definitions).
918
930
 
919
- *New in Pygments 1.5.*
931
+ .. versionadded:: 1.5
920
932
  """
921
933
 
922
934
  flags = re.MULTILINE | re.DOTALL
@@ -1051,7 +1063,7 @@ class XsltLexer(XmlLexer):
1051
1063
  '''
1052
1064
  A lexer for XSLT.
1053
1065
 
1054
- *New in Pygments 0.10.*
1066
+ .. versionadded:: 0.10
1055
1067
  '''
1056
1068
 
1057
1069
  name = 'XSLT'
@@ -1089,7 +1101,7 @@ class MxmlLexer(RegexLexer):
1089
1101
  For MXML markup.
1090
1102
  Nested AS3 in <script> tags is highlighted by the appropriate lexer.
1091
1103
 
1092
- *New in Pygments 1.1.*
1104
+ .. versionadded:: 1.1
1093
1105
  """
1094
1106
  flags = re.MULTILINE | re.DOTALL
1095
1107
  name = 'MXML'
@@ -1106,8 +1118,8 @@ class MxmlLexer(RegexLexer):
1106
1118
  ('<!--', Comment, 'comment'),
1107
1119
  (r'<\?.*?\?>', Comment.Preproc),
1108
1120
  ('<![^>]*>', Comment.Preproc),
1109
- (r'<\s*[a-zA-Z0-9:._-]+', Name.Tag, 'tag'),
1110
- (r'<\s*/\s*[a-zA-Z0-9:._-]+\s*>', Name.Tag),
1121
+ (r'<\s*[\w:.-]+', Name.Tag, 'tag'),
1122
+ (r'<\s*/\s*[\w:.-]+\s*>', Name.Tag),
1111
1123
  ],
1112
1124
  'comment': [
1113
1125
  ('[^-]+', Comment),
@@ -1116,7 +1128,7 @@ class MxmlLexer(RegexLexer):
1116
1128
  ],
1117
1129
  'tag': [
1118
1130
  (r'\s+', Text),
1119
- (r'[a-zA-Z0-9_.:-]+\s*=', Name.Attribute, 'attr'),
1131
+ (r'[\w.:-]+\s*=', Name.Attribute, 'attr'),
1120
1132
  (r'/?\s*>', Name.Tag, '#pop'),
1121
1133
  ],
1122
1134
  'attr': [
@@ -1132,11 +1144,11 @@ class HaxeLexer(ExtendedRegexLexer):
1132
1144
  """
1133
1145
  For Haxe source code (http://haxe.org/).
1134
1146
 
1135
- *New in Pygments 1.3.*
1147
+ .. versionadded:: 1.3
1136
1148
  """
1137
1149
 
1138
1150
  name = 'Haxe'
1139
- aliases = ['hx', 'Haxe', 'haxe', 'haXe', 'hxsl']
1151
+ aliases = ['hx', 'haxe', 'hxsl']
1140
1152
  filenames = ['*.hx', '*.hxsl']
1141
1153
  mimetypes = ['text/haxe', 'text/x-haxe', 'text/x-hx']
1142
1154
 
@@ -1149,11 +1161,10 @@ class HaxeLexer(ExtendedRegexLexer):
1149
1161
  r'inline|using|null|true|false|abstract)\b')
1150
1162
 
1151
1163
  # idtype in lexer.mll
1152
- typeid = r'_*[A-Z][_a-zA-Z0-9]*'
1164
+ typeid = r'_*[A-Z]\w*'
1153
1165
 
1154
1166
  # combined ident and dollar and idtype
1155
- ident = r'(?:_*[a-z][_a-zA-Z0-9]*|_+[0-9][_a-zA-Z0-9]*|' + typeid + \
1156
- '|_+|\$[_a-zA-Z0-9]+)'
1167
+ ident = r'(?:_*[a-z]\w*|_+[0-9]\w*|' + typeid + '|_+|\$\w+)'
1157
1168
 
1158
1169
  binop = (r'(?:%=|&=|\|=|\^=|\+=|\-=|\*=|/=|<<=|>\s*>\s*=|>\s*>\s*>\s*=|==|'
1159
1170
  r'!=|<=|>\s*=|&&|\|\||<<|>>>|>\s*>|\.\.\.|<|>|%|&|\||\^|\+|\*|'
@@ -1247,7 +1258,7 @@ class HaxeLexer(ExtendedRegexLexer):
1247
1258
  include('spaces'),
1248
1259
  (ident, Name.Namespace),
1249
1260
  (r'\.', Punctuation, 'import-ident'),
1250
- (r'', Text, '#pop'),
1261
+ default('#pop'),
1251
1262
  ],
1252
1263
 
1253
1264
  'import': [
@@ -1256,7 +1267,7 @@ class HaxeLexer(ExtendedRegexLexer):
1256
1267
  (r'\*', Keyword), # wildcard import
1257
1268
  (r'\.', Punctuation, 'import-ident'),
1258
1269
  (r'in', Keyword.Namespace, 'ident'),
1259
- (r'', Text, '#pop'),
1270
+ default('#pop'),
1260
1271
  ],
1261
1272
 
1262
1273
  'import-ident': [
@@ -1269,14 +1280,14 @@ class HaxeLexer(ExtendedRegexLexer):
1269
1280
  include('spaces'),
1270
1281
  (ident, Name.Namespace),
1271
1282
  (r'\.', Punctuation, 'import-ident'),
1272
- (r'', Text, '#pop'),
1283
+ default('#pop'),
1273
1284
  ],
1274
1285
 
1275
1286
  'preproc-error': [
1276
1287
  (r'\s+', Comment.Preproc),
1277
1288
  (r"'", String.Single, ('#pop', 'string-single')),
1278
1289
  (r'"', String.Double, ('#pop', 'string-double')),
1279
- (r'', Text, '#pop'),
1290
+ default('#pop'),
1280
1291
  ],
1281
1292
 
1282
1293
  'preproc-expr': [
@@ -1285,6 +1296,19 @@ class HaxeLexer(ExtendedRegexLexer):
1285
1296
  (r'\(', Comment.Preproc, ('#pop', 'preproc-parenthesis')),
1286
1297
 
1287
1298
  (ident, Comment.Preproc, '#pop'),
1299
+
1300
+ # Float
1301
+ (r'\.[0-9]+', Number.Float),
1302
+ (r'[0-9]+[eE][\+\-]?[0-9]+', Number.Float),
1303
+ (r'[0-9]+\.[0-9]*[eE][\+\-]?[0-9]+', Number.Float),
1304
+ (r'[0-9]+\.[0-9]+', Number.Float),
1305
+ (r'[0-9]+\.(?!' + ident + '|\.\.)', Number.Float),
1306
+
1307
+ # Int
1308
+ (r'0x[0-9a-fA-F]+', Number.Hex),
1309
+ (r'[0-9]+', Number.Integer),
1310
+
1311
+ # String
1288
1312
  (r"'", String.Single, ('#pop', 'string-single')),
1289
1313
  (r'"', String.Double, ('#pop', 'string-double')),
1290
1314
  ],
@@ -1298,7 +1322,7 @@ class HaxeLexer(ExtendedRegexLexer):
1298
1322
  'preproc-expr-chain': [
1299
1323
  (r'\s+', Comment.Preproc),
1300
1324
  (binop, Comment.Preproc, ('#pop', 'preproc-expr-in-parenthesis')),
1301
- (r'', Text, '#pop'),
1325
+ default('#pop'),
1302
1326
  ],
1303
1327
 
1304
1328
  # same as 'preproc-expr' but able to chain 'preproc-expr-chain'
@@ -1309,6 +1333,19 @@ class HaxeLexer(ExtendedRegexLexer):
1309
1333
  ('#pop', 'preproc-expr-chain', 'preproc-parenthesis')),
1310
1334
 
1311
1335
  (ident, Comment.Preproc, ('#pop', 'preproc-expr-chain')),
1336
+
1337
+ # Float
1338
+ (r'\.[0-9]+', Number.Float, ('#pop', 'preproc-expr-chain')),
1339
+ (r'[0-9]+[eE][\+\-]?[0-9]+', Number.Float, ('#pop', 'preproc-expr-chain')),
1340
+ (r'[0-9]+\.[0-9]*[eE][\+\-]?[0-9]+', Number.Float, ('#pop', 'preproc-expr-chain')),
1341
+ (r'[0-9]+\.[0-9]+', Number.Float, ('#pop', 'preproc-expr-chain')),
1342
+ (r'[0-9]+\.(?!' + ident + '|\.\.)', Number.Float, ('#pop', 'preproc-expr-chain')),
1343
+
1344
+ # Int
1345
+ (r'0x[0-9a-fA-F]+', Number.Hex, ('#pop', 'preproc-expr-chain')),
1346
+ (r'[0-9]+', Number.Integer, ('#pop', 'preproc-expr-chain')),
1347
+
1348
+ # String
1312
1349
  (r"'", String.Single,
1313
1350
  ('#pop', 'preproc-expr-chain', 'string-single')),
1314
1351
  (r'"', String.Double,
@@ -1317,7 +1354,7 @@ class HaxeLexer(ExtendedRegexLexer):
1317
1354
 
1318
1355
  'abstract' : [
1319
1356
  include('spaces'),
1320
- (r'', Text, ('#pop', 'abstract-body', 'abstract-relation',
1357
+ default(('#pop', 'abstract-body', 'abstract-relation',
1321
1358
  'abstract-opaque', 'type-param-constraint', 'type-name')),
1322
1359
  ],
1323
1360
 
@@ -1329,14 +1366,14 @@ class HaxeLexer(ExtendedRegexLexer):
1329
1366
  'abstract-opaque' : [
1330
1367
  include('spaces'),
1331
1368
  (r'\(', Punctuation, ('#pop', 'parenthesis-close', 'type')),
1332
- (r'', Text, '#pop'),
1369
+ default('#pop'),
1333
1370
  ],
1334
1371
 
1335
1372
  'abstract-relation': [
1336
1373
  include('spaces'),
1337
1374
  (r'(?:to|from)', Keyword.Declaration, 'type'),
1338
1375
  (r',', Punctuation),
1339
- (r'', Text, '#pop'),
1376
+ default('#pop'),
1340
1377
  ],
1341
1378
 
1342
1379
  'meta': [
@@ -1348,7 +1385,7 @@ class HaxeLexer(ExtendedRegexLexer):
1348
1385
  'meta-colon': [
1349
1386
  include('spaces'),
1350
1387
  (r':', Name.Decorator, '#pop'),
1351
- (r'', Text, '#pop'),
1388
+ default('#pop'),
1352
1389
  ],
1353
1390
 
1354
1391
  # same as 'ident' but set token as Name.Decorator instead of Name
@@ -1360,13 +1397,13 @@ class HaxeLexer(ExtendedRegexLexer):
1360
1397
  'meta-body': [
1361
1398
  include('spaces'),
1362
1399
  (r'\(', Name.Decorator, ('#pop', 'meta-call')),
1363
- (r'', Text, '#pop'),
1400
+ default('#pop'),
1364
1401
  ],
1365
1402
 
1366
1403
  'meta-call': [
1367
1404
  include('spaces'),
1368
1405
  (r'\)', Name.Decorator, '#pop'),
1369
- (r'', Text, ('#pop', 'meta-call-sep', 'expr')),
1406
+ default(('#pop', 'meta-call-sep', 'expr')),
1370
1407
  ],
1371
1408
 
1372
1409
  'meta-call-sep': [
@@ -1377,7 +1414,7 @@ class HaxeLexer(ExtendedRegexLexer):
1377
1414
 
1378
1415
  'typedef': [
1379
1416
  include('spaces'),
1380
- (r'', Text, ('#pop', 'typedef-body', 'type-param-constraint',
1417
+ default(('#pop', 'typedef-body', 'type-param-constraint',
1381
1418
  'type-name')),
1382
1419
  ],
1383
1420
 
@@ -1388,7 +1425,7 @@ class HaxeLexer(ExtendedRegexLexer):
1388
1425
 
1389
1426
  'enum': [
1390
1427
  include('spaces'),
1391
- (r'', Text, ('#pop', 'enum-body', 'bracket-open',
1428
+ default(('#pop', 'enum-body', 'bracket-open',
1392
1429
  'type-param-constraint', 'type-name')),
1393
1430
  ],
1394
1431
 
@@ -1403,12 +1440,12 @@ class HaxeLexer(ExtendedRegexLexer):
1403
1440
  include('spaces'),
1404
1441
  (r'\(', Punctuation,
1405
1442
  ('#pop', 'semicolon', 'flag', 'function-param')),
1406
- (r'', Punctuation, ('#pop', 'semicolon', 'flag')),
1443
+ default(('#pop', 'semicolon', 'flag')),
1407
1444
  ],
1408
1445
 
1409
1446
  'class': [
1410
1447
  include('spaces'),
1411
- (r'', Text, ('#pop', 'class-body', 'bracket-open', 'extends',
1448
+ default(('#pop', 'class-body', 'bracket-open', 'extends',
1412
1449
  'type-param-constraint', 'type-name')),
1413
1450
  ],
1414
1451
 
@@ -1417,7 +1454,7 @@ class HaxeLexer(ExtendedRegexLexer):
1417
1454
  (r'(?:extends|implements)\b', Keyword.Declaration, 'type'),
1418
1455
  (r',', Punctuation), # the comma is made optional here, since haxe2
1419
1456
  # requires the comma but haxe3 does not allow it
1420
- (r'', Text, '#pop'),
1457
+ default('#pop'),
1421
1458
  ],
1422
1459
 
1423
1460
  'bracket-open': [
@@ -1436,13 +1473,13 @@ class HaxeLexer(ExtendedRegexLexer):
1436
1473
  (r'\}', Punctuation, '#pop'),
1437
1474
  (r'(?:static|public|private|override|dynamic|inline|macro)\b',
1438
1475
  Keyword.Declaration),
1439
- (r'', Text, 'class-member'),
1476
+ default('class-member'),
1440
1477
  ],
1441
1478
 
1442
1479
  'class-member': [
1443
1480
  include('spaces'),
1444
1481
  (r'(var)\b', Keyword.Declaration,
1445
- ('#pop', 'optional-semicolon', 'prop')),
1482
+ ('#pop', 'optional-semicolon', 'var')),
1446
1483
  (r'(function)\b', Keyword.Declaration,
1447
1484
  ('#pop', 'optional-semicolon', 'class-method')),
1448
1485
  ],
@@ -1451,14 +1488,14 @@ class HaxeLexer(ExtendedRegexLexer):
1451
1488
  'function-local': [
1452
1489
  include('spaces'),
1453
1490
  (r'(' + ident_no_keyword + ')?', Name.Function,
1454
- ('#pop', 'expr', 'flag', 'function-param',
1491
+ ('#pop', 'optional-expr', 'flag', 'function-param',
1455
1492
  'parenthesis-open', 'type-param-constraint')),
1456
1493
  ],
1457
1494
 
1458
1495
  'optional-expr': [
1459
1496
  include('spaces'),
1460
1497
  include('expr'),
1461
- (r'', Text, '#pop'),
1498
+ default('#pop'),
1462
1499
  ],
1463
1500
 
1464
1501
  'class-method': [
@@ -1483,18 +1520,11 @@ class HaxeLexer(ExtendedRegexLexer):
1483
1520
  (r',', Punctuation, ('#pop', 'function-param')),
1484
1521
  ],
1485
1522
 
1486
- # class property
1487
- # eg. var prop(default, null):String;
1488
- 'prop': [
1489
- include('spaces'),
1490
- (ident_no_keyword, Name, ('#pop', 'assign', 'flag', 'prop-get-set')),
1491
- ],
1492
-
1493
1523
  'prop-get-set': [
1494
1524
  include('spaces'),
1495
1525
  (r'\(', Punctuation, ('#pop', 'parenthesis-close',
1496
1526
  'prop-get-set-opt', 'comma', 'prop-get-set-opt')),
1497
- (r'', Text, '#pop'),
1527
+ default('#pop'),
1498
1528
  ],
1499
1529
 
1500
1530
  'prop-get-set-opt': [
@@ -1507,7 +1537,7 @@ class HaxeLexer(ExtendedRegexLexer):
1507
1537
  include('spaces'),
1508
1538
  # makes semicolon optional here, just to avoid checking the last
1509
1539
  # one is bracket or not.
1510
- (r'', Text, ('#pop', 'optional-semicolon', 'expr')),
1540
+ default(('#pop', 'optional-semicolon', 'expr')),
1511
1541
  ],
1512
1542
 
1513
1543
  'expr': [
@@ -1516,7 +1546,8 @@ class HaxeLexer(ExtendedRegexLexer):
1516
1546
  'meta-ident', 'meta-colon')),
1517
1547
  (r'(?:\+\+|\-\-|~(?!/)|!|\-)', Operator),
1518
1548
  (r'\(', Punctuation, ('#pop', 'expr-chain', 'parenthesis')),
1519
- (r'(?:inline)\b', Keyword.Declaration),
1549
+ (r'(?:static|public|private|override|dynamic|inline)\b',
1550
+ Keyword.Declaration),
1520
1551
  (r'(?:function)\b', Keyword.Declaration, ('#pop', 'expr-chain',
1521
1552
  'function-local')),
1522
1553
  (r'\{', Punctuation, ('#pop', 'expr-chain', 'bracket')),
@@ -1569,14 +1600,22 @@ class HaxeLexer(ExtendedRegexLexer):
1569
1600
  (r'(\.)(' + ident_no_keyword + ')', bygroups(Punctuation, Name)),
1570
1601
  (r'\[', Punctuation, 'array-access'),
1571
1602
  (r'\(', Punctuation, 'call'),
1572
- (r'', Text, '#pop'),
1603
+ default('#pop'),
1573
1604
  ],
1574
1605
 
1575
1606
  # macro reification
1576
1607
  'macro': [
1577
1608
  include('spaces'),
1609
+ include('meta'),
1578
1610
  (r':', Punctuation, ('#pop', 'type')),
1579
- (r'', Text, ('#pop', 'expr')),
1611
+
1612
+ (r'(?:extern|private)\b', Keyword.Declaration),
1613
+ (r'(?:abstract)\b', Keyword.Declaration, ('#pop', 'optional-semicolon', 'abstract')),
1614
+ (r'(?:class|interface)\b', Keyword.Declaration, ('#pop', 'optional-semicolon', 'class')),
1615
+ (r'(?:enum)\b', Keyword.Declaration, ('#pop', 'optional-semicolon', 'enum')),
1616
+ (r'(?:typedef)\b', Keyword.Declaration, ('#pop', 'optional-semicolon', 'typedef')),
1617
+
1618
+ default(('#pop', 'expr')),
1580
1619
  ],
1581
1620
 
1582
1621
  # cast can be written as "cast expr" or "cast(expr, type)"
@@ -1584,27 +1623,27 @@ class HaxeLexer(ExtendedRegexLexer):
1584
1623
  include('spaces'),
1585
1624
  (r'\(', Punctuation, ('#pop', 'parenthesis-close',
1586
1625
  'cast-type', 'expr')),
1587
- (r'', Text, ('#pop', 'expr')),
1626
+ default(('#pop', 'expr')),
1588
1627
  ],
1589
1628
 
1590
1629
  # optionally give a type as the 2nd argument of cast()
1591
1630
  'cast-type': [
1592
1631
  include('spaces'),
1593
1632
  (r',', Punctuation, ('#pop', 'type')),
1594
- (r'', Text, '#pop'),
1633
+ default('#pop'),
1595
1634
  ],
1596
1635
 
1597
1636
  'catch': [
1598
1637
  include('spaces'),
1599
1638
  (r'(?:catch)\b', Keyword, ('expr', 'function-param',
1600
1639
  'parenthesis-open')),
1601
- (r'', Text, '#pop'),
1640
+ default('#pop'),
1602
1641
  ],
1603
1642
 
1604
1643
  # do-while loop
1605
1644
  'do': [
1606
1645
  include('spaces'),
1607
- (r'', Punctuation, ('#pop', 'do-while', 'expr')),
1646
+ default(('#pop', 'do-while', 'expr')),
1608
1647
  ],
1609
1648
 
1610
1649
  # the while after do
@@ -1633,12 +1672,12 @@ class HaxeLexer(ExtendedRegexLexer):
1633
1672
  'else': [
1634
1673
  include('spaces'),
1635
1674
  (r'(?:else)\b', Keyword, ('#pop', 'expr')),
1636
- (r'', Text, '#pop'),
1675
+ default('#pop'),
1637
1676
  ],
1638
1677
 
1639
1678
  'switch': [
1640
1679
  include('spaces'),
1641
- (r'', Text, ('#pop', 'switch-body', 'bracket-open', 'expr')),
1680
+ default(('#pop', 'switch-body', 'bracket-open', 'expr')),
1642
1681
  ],
1643
1682
 
1644
1683
  'switch-body': [
@@ -1650,7 +1689,7 @@ class HaxeLexer(ExtendedRegexLexer):
1650
1689
  'case': [
1651
1690
  include('spaces'),
1652
1691
  (r':', Punctuation, '#pop'),
1653
- (r'', Text, ('#pop', 'case-sep', 'case-guard', 'expr')),
1692
+ default(('#pop', 'case-sep', 'case-guard', 'expr')),
1654
1693
  ],
1655
1694
 
1656
1695
  'case-sep': [
@@ -1662,25 +1701,25 @@ class HaxeLexer(ExtendedRegexLexer):
1662
1701
  'case-guard': [
1663
1702
  include('spaces'),
1664
1703
  (r'(?:if)\b', Keyword, ('#pop', 'parenthesis', 'parenthesis-open')),
1665
- (r'', Text, '#pop'),
1704
+ default('#pop'),
1666
1705
  ],
1667
1706
 
1668
1707
  # optional multiple expr under a case
1669
1708
  'case-block': [
1670
1709
  include('spaces'),
1671
1710
  (r'(?!(?:case|default)\b|\})', Keyword, 'expr-statement'),
1672
- (r'', Text, '#pop'),
1711
+ default('#pop'),
1673
1712
  ],
1674
1713
 
1675
1714
  'new': [
1676
1715
  include('spaces'),
1677
- (r'', Text, ('#pop', 'call', 'parenthesis-open', 'type')),
1716
+ default(('#pop', 'call', 'parenthesis-open', 'type')),
1678
1717
  ],
1679
1718
 
1680
1719
  'array-decl': [
1681
1720
  include('spaces'),
1682
1721
  (r'\]', Punctuation, '#pop'),
1683
- (r'', Text, ('#pop', 'array-decl-sep', 'expr')),
1722
+ default(('#pop', 'array-decl-sep', 'expr')),
1684
1723
  ],
1685
1724
 
1686
1725
  'array-decl-sep': [
@@ -1691,7 +1730,7 @@ class HaxeLexer(ExtendedRegexLexer):
1691
1730
 
1692
1731
  'array-access': [
1693
1732
  include('spaces'),
1694
- (r'', Text, ('#pop', 'array-access-close', 'expr')),
1733
+ default(('#pop', 'array-access-close', 'expr')),
1695
1734
  ],
1696
1735
 
1697
1736
  'array-access-close': [
@@ -1717,7 +1756,7 @@ class HaxeLexer(ExtendedRegexLexer):
1717
1756
  'optional-semicolon': [
1718
1757
  include('spaces'),
1719
1758
  (r';', Punctuation, '#pop'),
1720
- (r'', Text, '#pop'),
1759
+ default('#pop'),
1721
1760
  ],
1722
1761
 
1723
1762
  # identity that CAN be a Haxe keyword
@@ -1728,8 +1767,8 @@ class HaxeLexer(ExtendedRegexLexer):
1728
1767
 
1729
1768
  'dollar': [
1730
1769
  include('spaces'),
1731
- (r'\{', Keyword, ('#pop', 'bracket-close', 'expr')),
1732
- (r'', Text, ('#pop', 'expr-chain')),
1770
+ (r'\{', Punctuation, ('#pop', 'expr-chain', 'bracket-close', 'expr')),
1771
+ default(('#pop', 'expr-chain')),
1733
1772
  ],
1734
1773
 
1735
1774
  'type-name': [
@@ -1740,7 +1779,7 @@ class HaxeLexer(ExtendedRegexLexer):
1740
1779
  'type-full-name': [
1741
1780
  include('spaces'),
1742
1781
  (r'\.', Punctuation, 'ident'),
1743
- (r'', Text, '#pop'),
1782
+ default('#pop'),
1744
1783
  ],
1745
1784
 
1746
1785
  'type': [
@@ -1753,14 +1792,14 @@ class HaxeLexer(ExtendedRegexLexer):
1753
1792
 
1754
1793
  'type-parenthesis': [
1755
1794
  include('spaces'),
1756
- (r'', Text, ('#pop', 'parenthesis-close', 'type')),
1795
+ default(('#pop', 'parenthesis-close', 'type')),
1757
1796
  ],
1758
1797
 
1759
1798
  'type-check': [
1760
1799
  include('spaces'),
1761
1800
  (r'->', Punctuation, ('#pop', 'type')),
1762
1801
  (r'<(?!=)', Punctuation, 'type-param'),
1763
- (r'', Text, '#pop'),
1802
+ default('#pop'),
1764
1803
  ],
1765
1804
 
1766
1805
  'type-struct': [
@@ -1808,7 +1847,7 @@ class HaxeLexer(ExtendedRegexLexer):
1808
1847
  # ie. the <A,B> path in Map<A,B>
1809
1848
  'type-param': [
1810
1849
  include('spaces'),
1811
- (r'', Text, ('#pop', 'type-param-sep', 'type-param-type')),
1850
+ default(('#pop', 'type-param-sep', 'type-param-type')),
1812
1851
  ],
1813
1852
 
1814
1853
  'type-param-sep': [
@@ -1823,7 +1862,7 @@ class HaxeLexer(ExtendedRegexLexer):
1823
1862
  include('spaces'),
1824
1863
  (r'<(?!=)', Punctuation, ('#pop', 'type-param-constraint-sep',
1825
1864
  'type-param-constraint-flag', 'type-name')),
1826
- (r'', Text, '#pop'),
1865
+ default('#pop'),
1827
1866
  ],
1828
1867
 
1829
1868
  'type-param-constraint-sep': [
@@ -1837,14 +1876,14 @@ class HaxeLexer(ExtendedRegexLexer):
1837
1876
  'type-param-constraint-flag': [
1838
1877
  include('spaces'),
1839
1878
  (r':', Punctuation, ('#pop', 'type-param-constraint-flag-type')),
1840
- (r'', Text, '#pop'),
1879
+ default('#pop'),
1841
1880
  ],
1842
1881
 
1843
1882
  'type-param-constraint-flag-type': [
1844
1883
  include('spaces'),
1845
1884
  (r'\(', Punctuation, ('#pop', 'type-param-constraint-flag-type-sep',
1846
1885
  'type')),
1847
- (r'', Text, ('#pop', 'type')),
1886
+ default(('#pop', 'type')),
1848
1887
  ],
1849
1888
 
1850
1889
  'type-param-constraint-flag-type-sep': [
@@ -1856,7 +1895,7 @@ class HaxeLexer(ExtendedRegexLexer):
1856
1895
  # a parenthesis expr that contain exactly one expr
1857
1896
  'parenthesis': [
1858
1897
  include('spaces'),
1859
- (r'', Text, ('#pop', 'parenthesis-close', 'expr')),
1898
+ default(('#pop', 'parenthesis-close', 'flag', 'expr')),
1860
1899
  ],
1861
1900
 
1862
1901
  'parenthesis-open': [
@@ -1871,28 +1910,28 @@ class HaxeLexer(ExtendedRegexLexer):
1871
1910
 
1872
1911
  'var': [
1873
1912
  include('spaces'),
1874
- (ident_no_keyword, Text, ('#pop', 'var-sep', 'assign', 'flag')),
1913
+ (ident_no_keyword, Text, ('#pop', 'var-sep', 'assign', 'flag', 'prop-get-set')),
1875
1914
  ],
1876
1915
 
1877
1916
  # optional more var decl.
1878
1917
  'var-sep': [
1879
1918
  include('spaces'),
1880
1919
  (r',', Punctuation, ('#pop', 'var')),
1881
- (r'', Text, '#pop'),
1920
+ default('#pop'),
1882
1921
  ],
1883
1922
 
1884
1923
  # optional assignment
1885
1924
  'assign': [
1886
1925
  include('spaces'),
1887
1926
  (r'=', Operator, ('#pop', 'expr')),
1888
- (r'', Text, '#pop'),
1927
+ default('#pop'),
1889
1928
  ],
1890
1929
 
1891
1930
  # optional type flag
1892
1931
  'flag': [
1893
1932
  include('spaces'),
1894
1933
  (r':', Punctuation, ('#pop', 'type')),
1895
- (r'', Text, '#pop'),
1934
+ default('#pop'),
1896
1935
  ],
1897
1936
 
1898
1937
  # colon as part of a ternary operator (?:)
@@ -1905,7 +1944,7 @@ class HaxeLexer(ExtendedRegexLexer):
1905
1944
  'call': [
1906
1945
  include('spaces'),
1907
1946
  (r'\)', Punctuation, '#pop'),
1908
- (r'', Text, ('#pop', 'call-sep', 'expr')),
1947
+ default(('#pop', 'call-sep', 'expr')),
1909
1948
  ],
1910
1949
 
1911
1950
  # after a call param
@@ -1922,27 +1961,27 @@ class HaxeLexer(ExtendedRegexLexer):
1922
1961
  ('#pop', 'bracket-check')),
1923
1962
  (r"'", String.Single, ('#pop', 'bracket-check', 'string-single')),
1924
1963
  (r'"', String.Double, ('#pop', 'bracket-check', 'string-double')),
1925
- (r'', Text, ('#pop', 'block')),
1964
+ default(('#pop', 'block')),
1926
1965
  ],
1927
1966
 
1928
1967
  'bracket-check': [
1929
1968
  include('spaces'),
1930
1969
  (r':', Punctuation, ('#pop', 'object-sep', 'expr')), #is object
1931
- (r'', Text, ('#pop', 'block', 'optional-semicolon', 'expr-chain')), #is block
1970
+ default(('#pop', 'block', 'optional-semicolon', 'expr-chain')), #is block
1932
1971
  ],
1933
1972
 
1934
1973
  # code block
1935
1974
  'block': [
1936
1975
  include('spaces'),
1937
1976
  (r'\}', Punctuation, '#pop'),
1938
- (r'', Text, 'expr-statement'),
1977
+ default('expr-statement'),
1939
1978
  ],
1940
1979
 
1941
1980
  # object in key-value pairs
1942
1981
  'object': [
1943
1982
  include('spaces'),
1944
1983
  (r'\}', Punctuation, '#pop'),
1945
- (r'', Text, ('#pop', 'object-sep', 'expr', 'colon', 'ident-or-string'))
1984
+ default(('#pop', 'object-sep', 'expr', 'colon', 'ident-or-string'))
1946
1985
  ],
1947
1986
 
1948
1987
  # a key of an object
@@ -2002,11 +2041,11 @@ class HamlLexer(ExtendedRegexLexer):
2002
2041
  """
2003
2042
  For Haml markup.
2004
2043
 
2005
- *New in Pygments 1.3.*
2044
+ .. versionadded:: 1.3
2006
2045
  """
2007
2046
 
2008
2047
  name = 'Haml'
2009
- aliases = ['haml', 'HAML']
2048
+ aliases = ['haml']
2010
2049
  filenames = ['*.haml']
2011
2050
  mimetypes = ['text/x-haml']
2012
2051
 
@@ -2026,8 +2065,8 @@ class HamlLexer(ExtendedRegexLexer):
2026
2065
  ],
2027
2066
 
2028
2067
  'css': [
2029
- (r'\.[a-z0-9_:-]+', Name.Class, 'tag'),
2030
- (r'\#[a-z0-9_:-]+', Name.Function, 'tag'),
2068
+ (r'\.[\w:-]+', Name.Class, 'tag'),
2069
+ (r'\#[\w:-]+', Name.Function, 'tag'),
2031
2070
  ],
2032
2071
 
2033
2072
  'eval-or-plain': [
@@ -2035,12 +2074,12 @@ class HamlLexer(ExtendedRegexLexer):
2035
2074
  (r'([&!]?[=~])(' + _comma_dot + r'*\n)',
2036
2075
  bygroups(Punctuation, using(RubyLexer)),
2037
2076
  'root'),
2038
- (r'', Text, 'plain'),
2077
+ default('plain'),
2039
2078
  ],
2040
2079
 
2041
2080
  'content': [
2042
2081
  include('css'),
2043
- (r'%[a-z0-9_:-]+', Name.Tag, 'tag'),
2082
+ (r'%[\w:-]+', Name.Tag, 'tag'),
2044
2083
  (r'!!!' + _dot + r'*\n', Name.Namespace, '#pop'),
2045
2084
  (r'(/)(\[' + _dot + '*?\])(' + _dot + r'*\n)',
2046
2085
  bygroups(Comment, Comment.Special, Comment),
@@ -2076,16 +2115,16 @@ class HamlLexer(ExtendedRegexLexer):
2076
2115
 
2077
2116
  'html-attributes': [
2078
2117
  (r'\s+', Text),
2079
- (r'[a-z0-9_:-]+[ \t]*=', Name.Attribute, 'html-attribute-value'),
2080
- (r'[a-z0-9_:-]+', Name.Attribute),
2118
+ (r'[\w:-]+[ \t]*=', Name.Attribute, 'html-attribute-value'),
2119
+ (r'[\w:-]+', Name.Attribute),
2081
2120
  (r'\)', Text, '#pop'),
2082
2121
  ],
2083
2122
 
2084
2123
  'html-attribute-value': [
2085
2124
  (r'[ \t]+', Text),
2086
- (r'[a-z0-9_]+', Name.Variable, '#pop'),
2087
- (r'@[a-z0-9_]+', Name.Variable.Instance, '#pop'),
2088
- (r'\$[a-z0-9_]+', Name.Variable.Global, '#pop'),
2125
+ (r'\w+', Name.Variable, '#pop'),
2126
+ (r'@\w+', Name.Variable.Instance, '#pop'),
2127
+ (r'\$\w+', Name.Variable.Global, '#pop'),
2089
2128
  (r"'(\\\\|\\'|[^'\n])*'", String, '#pop'),
2090
2129
  (r'"(\\\\|\\"|[^"\n])*"', String, '#pop'),
2091
2130
  ],
@@ -2225,7 +2264,7 @@ common_sass_tokens = {
2225
2264
  (r'\:', Name.Decorator, 'pseudo-class'),
2226
2265
  (r'\.', Name.Class, 'class'),
2227
2266
  (r'\#', Name.Namespace, 'id'),
2228
- (r'[a-zA-Z0-9_-]+', Name.Tag),
2267
+ (r'[\w-]+', Name.Tag),
2229
2268
  (r'#\{', String.Interpol, 'interpolation'),
2230
2269
  (r'&', Keyword),
2231
2270
  (r'[~\^\*!&\[\]\(\)<>\|+=@:;,./?-]', Operator),
@@ -2254,19 +2293,19 @@ common_sass_tokens = {
2254
2293
  'pseudo-class': [
2255
2294
  (r'[\w-]+', Name.Decorator),
2256
2295
  (r'#\{', String.Interpol, 'interpolation'),
2257
- (r'', Text, '#pop'),
2296
+ default('#pop'),
2258
2297
  ],
2259
2298
 
2260
2299
  'class': [
2261
2300
  (r'[\w-]+', Name.Class),
2262
2301
  (r'#\{', String.Interpol, 'interpolation'),
2263
- (r'', Text, '#pop'),
2302
+ default('#pop'),
2264
2303
  ],
2265
2304
 
2266
2305
  'id': [
2267
2306
  (r'[\w-]+', Name.Namespace),
2268
2307
  (r'#\{', String.Interpol, 'interpolation'),
2269
- (r'', Text, '#pop'),
2308
+ default('#pop'),
2270
2309
  ],
2271
2310
 
2272
2311
  'for': [
@@ -2279,11 +2318,11 @@ class SassLexer(ExtendedRegexLexer):
2279
2318
  """
2280
2319
  For Sass stylesheets.
2281
2320
 
2282
- *New in Pygments 1.3.*
2321
+ .. versionadded:: 1.3
2283
2322
  """
2284
2323
 
2285
2324
  name = 'Sass'
2286
- aliases = ['sass', 'SASS']
2325
+ aliases = ['sass']
2287
2326
  filenames = ['*.sass']
2288
2327
  mimetypes = ['text/x-sass']
2289
2328
 
@@ -2305,14 +2344,14 @@ class SassLexer(ExtendedRegexLexer):
2305
2344
  (r'(@mixin)( [\w-]+)', bygroups(Keyword, Name.Function), 'value'),
2306
2345
  (r'(@include)( [\w-]+)', bygroups(Keyword, Name.Decorator), 'value'),
2307
2346
  (r'@extend', Keyword, 'selector'),
2308
- (r'@[a-z0-9_-]+', Keyword, 'selector'),
2347
+ (r'@[\w-]+', Keyword, 'selector'),
2309
2348
  (r'=[\w-]+', Name.Function, 'value'),
2310
2349
  (r'\+[\w-]+', Name.Decorator, 'value'),
2311
2350
  (r'([!$][\w-]\w*)([ \t]*(?:(?:\|\|)?=|:))',
2312
2351
  bygroups(Name.Variable, Operator), 'value'),
2313
2352
  (r':', Name.Attribute, 'old-style-attr'),
2314
2353
  (r'(?=.+?[=:]([^a-z]|$))', Name.Attribute, 'new-style-attr'),
2315
- (r'', Text, 'selector'),
2354
+ default('selector'),
2316
2355
  ],
2317
2356
 
2318
2357
  'single-comment': [
@@ -2335,7 +2374,7 @@ class SassLexer(ExtendedRegexLexer):
2335
2374
  (r'[^\s:="\[]+', Name.Attribute),
2336
2375
  (r'#{', String.Interpol, 'interpolation'),
2337
2376
  (r'[ \t]*=', Operator, 'value'),
2338
- (r'', Text, 'value'),
2377
+ default('value'),
2339
2378
  ],
2340
2379
 
2341
2380
  'new-style-attr': [
@@ -2350,7 +2389,7 @@ class SassLexer(ExtendedRegexLexer):
2350
2389
  (r"\*/", Comment, '#pop'),
2351
2390
  ],
2352
2391
  }
2353
- for group, common in common_sass_tokens.iteritems():
2392
+ for group, common in iteritems(common_sass_tokens):
2354
2393
  tokens[group] = copy.copy(common)
2355
2394
  tokens['value'].append((r'\n', Text, 'root'))
2356
2395
  tokens['selector'].append((r'\n', Text, 'root'))
@@ -2378,11 +2417,11 @@ class ScssLexer(RegexLexer):
2378
2417
  (r'(@mixin)( [\w-]+)', bygroups(Keyword, Name.Function), 'value'),
2379
2418
  (r'(@include)( [\w-]+)', bygroups(Keyword, Name.Decorator), 'value'),
2380
2419
  (r'@extend', Keyword, 'selector'),
2381
- (r'@[a-z0-9_-]+', Keyword, 'selector'),
2420
+ (r'@[\w-]+', Keyword, 'selector'),
2382
2421
  (r'(\$[\w-]*\w)([ \t]*:)', bygroups(Name.Variable, Operator), 'value'),
2383
2422
  (r'(?=[^;{}][;}])', Name.Attribute, 'attr'),
2384
2423
  (r'(?=[^;{}:]+:[^a-z])', Name.Attribute, 'attr'),
2385
- (r'', Text, 'selector'),
2424
+ default('selector'),
2386
2425
  ],
2387
2426
 
2388
2427
  'attr': [
@@ -2397,7 +2436,7 @@ class ScssLexer(RegexLexer):
2397
2436
  (r"\*/", Comment, '#pop'),
2398
2437
  ],
2399
2438
  }
2400
- for group, common in common_sass_tokens.iteritems():
2439
+ for group, common in iteritems(common_sass_tokens):
2401
2440
  tokens[group] = copy.copy(common)
2402
2441
  tokens['value'].extend([(r'\n', Text), (r'[;{}]', Punctuation, 'root')])
2403
2442
  tokens['selector'].extend([(r'\n', Text), (r'[;{}]', Punctuation, 'root')])
@@ -2409,7 +2448,7 @@ class CoffeeScriptLexer(RegexLexer):
2409
2448
 
2410
2449
  .. _CoffeeScript: http://coffeescript.org
2411
2450
 
2412
- *New in Pygments 1.3.*
2451
+ .. versionadded:: 1.3
2413
2452
  """
2414
2453
 
2415
2454
  name = 'CoffeeScript'
@@ -2435,17 +2474,17 @@ class CoffeeScriptLexer(RegexLexer):
2435
2474
  (r'///', String.Regex, ('#pop', 'multilineregex')),
2436
2475
  (r'/(?! )(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/'
2437
2476
  r'([gim]+\b|\B)', String.Regex, '#pop'),
2438
- (r'', Text, '#pop'),
2477
+ default('#pop'),
2439
2478
  ],
2440
2479
  'root': [
2441
2480
  # this next expr leads to infinite loops root -> slashstartsregex
2442
2481
  #(r'^(?=\s|/|<!--)', Text, 'slashstartsregex'),
2443
2482
  include('commentsandwhitespace'),
2444
2483
  (r'\+\+|~|&&|\band\b|\bor\b|\bis\b|\bisnt\b|\bnot\b|\?|:|'
2445
- r'\|\||\\(?=\n)|(<<|>>>?|==?|!=?|'
2446
- r'=(?!>)|-(?!>)|[<>+*`%&\|\^/])=?',
2484
+ r'\|\||\\(?=\n)|'
2485
+ r'(<<|>>>?|==?(?!>)|!=?|=(?!>)|-(?!>)|[<>+*`%&\|\^/])=?',
2447
2486
  Operator, 'slashstartsregex'),
2448
- (r'(?:\([^()]+\))?\s*[=-]>', Name.Function),
2487
+ (r'(?:\([^()]*\))?\s*[=-]>', Name.Function),
2449
2488
  (r'[{(\[;,]', Punctuation, 'slashstartsregex'),
2450
2489
  (r'[})\].]', Punctuation),
2451
2490
  (r'(?<![\.\$])(for|own|in|of|while|until|'
@@ -2461,12 +2500,12 @@ class CoffeeScriptLexer(RegexLexer):
2461
2500
  r'decodeURIComponent|encodeURI|encodeURIComponent|'
2462
2501
  r'eval|isFinite|isNaN|parseFloat|parseInt|document|window)\b',
2463
2502
  Name.Builtin),
2464
- (r'[$a-zA-Z_][a-zA-Z0-9_\.:\$]*\s*[:=]\s', Name.Variable,
2503
+ (r'[$a-zA-Z_][\w\.:\$]*\s*[:=]\s', Name.Variable,
2465
2504
  'slashstartsregex'),
2466
- (r'@[$a-zA-Z_][a-zA-Z0-9_\.:\$]*\s*[:=]\s', Name.Variable.Instance,
2505
+ (r'@[$a-zA-Z_][\w\.:\$]*\s*[:=]\s', Name.Variable.Instance,
2467
2506
  'slashstartsregex'),
2468
2507
  (r'@', Name.Other, 'slashstartsregex'),
2469
- (r'@?[$a-zA-Z_][a-zA-Z0-9_\$]*', Name.Other, 'slashstartsregex'),
2508
+ (r'@?[$a-zA-Z_][\w\$]*', Name.Other, 'slashstartsregex'),
2470
2509
  (r'[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?', Number.Float),
2471
2510
  (r'0x[0-9a-fA-F]+', Number.Hex),
2472
2511
  (r'[0-9]+', Number.Integer),
@@ -2484,6 +2523,125 @@ class CoffeeScriptLexer(RegexLexer):
2484
2523
  (r'}', String.Interpol, "#pop"),
2485
2524
  include('root')
2486
2525
  ],
2526
+ 'dqs': [
2527
+ (r'"', String, '#pop'),
2528
+ (r'\\.|\'', String), # double-quoted string don't need ' escapes
2529
+ (r'#{', String.Interpol, "interpoling_string"),
2530
+ (r'#', String),
2531
+ include('strings')
2532
+ ],
2533
+ 'sqs': [
2534
+ (r"'", String, '#pop'),
2535
+ (r'#|\\.|"', String), # single quoted strings don't need " escapses
2536
+ include('strings')
2537
+ ],
2538
+ 'tdqs': [
2539
+ (r'"""', String, '#pop'),
2540
+ (r'\\.|\'|"', String), # no need to escape quotes in triple-string
2541
+ (r'#{', String.Interpol, "interpoling_string"),
2542
+ (r'#', String),
2543
+ include('strings'),
2544
+ ],
2545
+ 'tsqs': [
2546
+ (r"'''", String, '#pop'),
2547
+ (r'#|\\.|\'|"', String), # no need to escape quotes in triple-strings
2548
+ include('strings')
2549
+ ],
2550
+ }
2551
+
2552
+
2553
+ class KalLexer(RegexLexer):
2554
+ """
2555
+ For `Kal`_ source code.
2556
+
2557
+ .. _Kal: http://rzimmerman.github.io/kal
2558
+
2559
+
2560
+ .. versionadded:: 2.0
2561
+ """
2562
+
2563
+ name = 'Kal'
2564
+ aliases = ['kal']
2565
+ filenames = ['*.kal']
2566
+ mimetypes = ['text/kal', 'application/kal']
2567
+
2568
+ flags = re.DOTALL
2569
+ tokens = {
2570
+ 'commentsandwhitespace': [
2571
+ (r'\s+', Text),
2572
+ (r'###[^#].*?###', Comment.Multiline),
2573
+ (r'#(?!##[^#]).*?\n', Comment.Single),
2574
+ ],
2575
+ 'functiondef': [
2576
+ (r'[$a-zA-Z_][\w\$]*\s*', Name.Function, '#pop'),
2577
+ include('commentsandwhitespace'),
2578
+ ],
2579
+ 'classdef': [
2580
+ (r'\binherits\s+from\b', Keyword),
2581
+ (r'[$a-zA-Z_][\w\$]*\s*\n', Name.Class, '#pop'),
2582
+ (r'[$a-zA-Z_][\w\$]*\s*', Name.Class),
2583
+ include('commentsandwhitespace'),
2584
+ ],
2585
+ 'listcomprehension': [
2586
+ (r'\]', Punctuation, '#pop'),
2587
+ (r'\b(property|value)\b', Keyword),
2588
+ include('root'),
2589
+ ],
2590
+ 'waitfor': [
2591
+ (r'\n', Punctuation, '#pop'),
2592
+ (r'\bfrom\b', Keyword),
2593
+ include('root'),
2594
+ ],
2595
+ 'root': [
2596
+ include('commentsandwhitespace'),
2597
+ (r'/(?! )(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/'
2598
+ r'([gim]+\b|\B)', String.Regex),
2599
+ (r'\?|:|_(?=\n)|==?|!=|-(?!>)|[<>+*/-]=?',
2600
+ Operator),
2601
+ (r'\band\b|\bor\b|\bis\b|\bisnt\b|\bnot\b|'
2602
+ r'\bbut\b|\bbitwise\b|\bmod\b|\^|\bxor\b|\bexists\b|\bdoesnt\s+exist\b',
2603
+ Operator.Word),
2604
+ (r'(?:\([^()]+\))?\s*>', Name.Function),
2605
+ (r'[{(]', Punctuation),
2606
+ (r'\[', Punctuation, 'listcomprehension'),
2607
+ (r'[})\]\.\,]', Punctuation),
2608
+ (r'\b(function|method|task)\b', Keyword.Declaration, 'functiondef'),
2609
+ (r'\bclass\b', Keyword.Declaration, 'classdef'),
2610
+ (r'\b(safe\s+)?wait\s+for\b', Keyword, 'waitfor'),
2611
+ (r'\b(me|this)(\.[$a-zA-Z_][\w\.\$]*)?\b', Name.Variable.Instance),
2612
+ (r'(?<![\.\$])(for(\s+(parallel|series))?|in|of|while|until|'
2613
+ r'break|return|continue|'
2614
+ r'when|if|unless|else|otherwise|except\s+when|'
2615
+ r'throw|raise|fail\s+with|try|catch|finally|new|delete|'
2616
+ r'typeof|instanceof|super|run\s+in\s+parallel|'
2617
+ r'inherits\s+from)\b', Keyword),
2618
+ (r'(?<![\.\$])(true|false|yes|no|on|off|null|nothing|none|'
2619
+ r'NaN|Infinity|undefined)\b',
2620
+ Keyword.Constant),
2621
+ (r'(Array|Boolean|Date|Error|Function|Math|netscape|'
2622
+ r'Number|Object|Packages|RegExp|String|sun|decodeURI|'
2623
+ r'decodeURIComponent|encodeURI|encodeURIComponent|'
2624
+ r'eval|isFinite|isNaN|parseFloat|parseInt|document|window|'
2625
+ r'print)\b',
2626
+ Name.Builtin),
2627
+ (r'[$a-zA-Z_][\w\.\$]*\s*(:|[\+\-\*\/]?\=)?\b', Name.Variable),
2628
+ (r'[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?', Number.Float),
2629
+ (r'0x[0-9a-fA-F]+', Number.Hex),
2630
+ (r'[0-9]+', Number.Integer),
2631
+ ('"""', String, 'tdqs'),
2632
+ ("'''", String, 'tsqs'),
2633
+ ('"', String, 'dqs'),
2634
+ ("'", String, 'sqs'),
2635
+ ],
2636
+ 'strings': [
2637
+ (r'[^#\\\'"]+', String),
2638
+ # note that all kal strings are multi-line.
2639
+ # hashmarks, quotes and backslashes must be parsed one at a time
2640
+ ],
2641
+ 'interpoling_string' : [
2642
+ (r'}', String.Interpol, "#pop"),
2643
+ include('root')
2644
+ ],
2487
2645
  'dqs': [
2488
2646
  (r'"', String, '#pop'),
2489
2647
  (r'\\.|\'', String), # double-quoted string don't need ' escapes
@@ -2541,7 +2699,7 @@ class LiveScriptLexer(RegexLexer):
2541
2699
  (r'//', String.Regex, ('#pop', 'multilineregex')),
2542
2700
  (r'/(?! )(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/'
2543
2701
  r'([gim]+\b|\B)', String.Regex, '#pop'),
2544
- (r'', Text, '#pop'),
2702
+ default('#pop'),
2545
2703
  ],
2546
2704
  'root': [
2547
2705
  # this next expr leads to infinite loops root -> slashstartsregex
@@ -2569,20 +2727,20 @@ class LiveScriptLexer(RegexLexer):
2569
2727
  r'decodeURIComponent|encodeURI|encodeURIComponent|'
2570
2728
  r'eval|isFinite|isNaN|parseFloat|parseInt|document|window)\b',
2571
2729
  Name.Builtin),
2572
- (r'[$a-zA-Z_][a-zA-Z0-9_\.\-:\$]*\s*[:=]\s', Name.Variable,
2730
+ (r'[$a-zA-Z_][\w\.\-:\$]*\s*[:=]\s', Name.Variable,
2573
2731
  'slashstartsregex'),
2574
- (r'@[$a-zA-Z_][a-zA-Z0-9_\.\-:\$]*\s*[:=]\s', Name.Variable.Instance,
2732
+ (r'@[$a-zA-Z_][\w\.\-:\$]*\s*[:=]\s', Name.Variable.Instance,
2575
2733
  'slashstartsregex'),
2576
2734
  (r'@', Name.Other, 'slashstartsregex'),
2577
- (r'@?[$a-zA-Z_][a-zA-Z0-9_\-]*', Name.Other, 'slashstartsregex'),
2735
+ (r'@?[$a-zA-Z_][\w\-]*', Name.Other, 'slashstartsregex'),
2578
2736
  (r'[0-9]+\.[0-9]+([eE][0-9]+)?[fd]?(?:[a-zA-Z_]+)?', Number.Float),
2579
2737
  (r'[0-9]+(~[0-9a-z]+)?(?:[a-zA-Z_]+)?', Number.Integer),
2580
2738
  ('"""', String, 'tdqs'),
2581
2739
  ("'''", String, 'tsqs'),
2582
2740
  ('"', String, 'dqs'),
2583
2741
  ("'", String, 'sqs'),
2584
- (r'\\[\w$-]+', String),
2585
- (r'<\[.*\]>', String),
2742
+ (r'\\\S+', String),
2743
+ (r'<\[.*?\]>', String),
2586
2744
  ],
2587
2745
  'strings': [
2588
2746
  (r'[^#\\\'"]+', String),
@@ -2626,11 +2784,11 @@ class DuelLexer(RegexLexer):
2626
2784
  See http://duelengine.org/.
2627
2785
  See http://jsonml.org/jbst/.
2628
2786
 
2629
- *New in Pygments 1.4.*
2787
+ .. versionadded:: 1.4
2630
2788
  """
2631
2789
 
2632
2790
  name = 'Duel'
2633
- aliases = ['duel', 'Duel Engine', 'Duel View', 'JBST', 'jbst', 'JsonML+BST']
2791
+ aliases = ['duel', 'jbst', 'jsonml+bst']
2634
2792
  filenames = ['*.duel','*.jbst']
2635
2793
  mimetypes = ['text/x-duel','text/x-jbst']
2636
2794
 
@@ -2657,11 +2815,11 @@ class ScamlLexer(ExtendedRegexLexer):
2657
2815
  """
2658
2816
  For `Scaml markup <http://scalate.fusesource.org/>`_. Scaml is Haml for Scala.
2659
2817
 
2660
- *New in Pygments 1.4.*
2818
+ .. versionadded:: 1.4
2661
2819
  """
2662
2820
 
2663
2821
  name = 'Scaml'
2664
- aliases = ['scaml', 'SCAML']
2822
+ aliases = ['scaml']
2665
2823
  filenames = ['*.scaml']
2666
2824
  mimetypes = ['text/x-scaml']
2667
2825
 
@@ -2679,8 +2837,8 @@ class ScamlLexer(ExtendedRegexLexer):
2679
2837
  ],
2680
2838
 
2681
2839
  'css': [
2682
- (r'\.[a-z0-9_:-]+', Name.Class, 'tag'),
2683
- (r'\#[a-z0-9_:-]+', Name.Function, 'tag'),
2840
+ (r'\.[\w:-]+', Name.Class, 'tag'),
2841
+ (r'\#[\w:-]+', Name.Function, 'tag'),
2684
2842
  ],
2685
2843
 
2686
2844
  'eval-or-plain': [
@@ -2688,12 +2846,12 @@ class ScamlLexer(ExtendedRegexLexer):
2688
2846
  (r'([&!]?[=~])(' + _dot + r'*\n)',
2689
2847
  bygroups(Punctuation, using(ScalaLexer)),
2690
2848
  'root'),
2691
- (r'', Text, 'plain'),
2849
+ default('plain'),
2692
2850
  ],
2693
2851
 
2694
2852
  'content': [
2695
2853
  include('css'),
2696
- (r'%[a-z0-9_:-]+', Name.Tag, 'tag'),
2854
+ (r'%[\w:-]+', Name.Tag, 'tag'),
2697
2855
  (r'!!!' + _dot + r'*\n', Name.Namespace, '#pop'),
2698
2856
  (r'(/)(\[' + _dot + '*?\])(' + _dot + r'*\n)',
2699
2857
  bygroups(Comment, Comment.Special, Comment),
@@ -2732,16 +2890,16 @@ class ScamlLexer(ExtendedRegexLexer):
2732
2890
 
2733
2891
  'html-attributes': [
2734
2892
  (r'\s+', Text),
2735
- (r'[a-z0-9_:-]+[ \t]*=', Name.Attribute, 'html-attribute-value'),
2736
- (r'[a-z0-9_:-]+', Name.Attribute),
2893
+ (r'[\w:-]+[ \t]*=', Name.Attribute, 'html-attribute-value'),
2894
+ (r'[\w:-]+', Name.Attribute),
2737
2895
  (r'\)', Text, '#pop'),
2738
2896
  ],
2739
2897
 
2740
2898
  'html-attribute-value': [
2741
2899
  (r'[ \t]+', Text),
2742
- (r'[a-z0-9_]+', Name.Variable, '#pop'),
2743
- (r'@[a-z0-9_]+', Name.Variable.Instance, '#pop'),
2744
- (r'\$[a-z0-9_]+', Name.Variable.Global, '#pop'),
2900
+ (r'\w+', Name.Variable, '#pop'),
2901
+ (r'@\w+', Name.Variable.Instance, '#pop'),
2902
+ (r'\$\w+', Name.Variable.Global, '#pop'),
2745
2903
  (r"'(\\\\|\\'|[^'\n])*'", String, '#pop'),
2746
2904
  (r'"(\\\\|\\"|[^"\n])*"', String, '#pop'),
2747
2905
  ],
@@ -2771,11 +2929,11 @@ class JadeLexer(ExtendedRegexLexer):
2771
2929
  Jade is a variant of Scaml, see:
2772
2930
  http://scalate.fusesource.org/documentation/scaml-reference.html
2773
2931
 
2774
- *New in Pygments 1.4.*
2932
+ .. versionadded:: 1.4
2775
2933
  """
2776
2934
 
2777
2935
  name = 'Jade'
2778
- aliases = ['jade', 'JADE']
2936
+ aliases = ['jade']
2779
2937
  filenames = ['*.jade']
2780
2938
  mimetypes = ['text/x-jade']
2781
2939
 
@@ -2789,15 +2947,15 @@ class JadeLexer(ExtendedRegexLexer):
2789
2947
  ],
2790
2948
 
2791
2949
  'css': [
2792
- (r'\.[a-z0-9_:-]+', Name.Class, 'tag'),
2793
- (r'\#[a-z0-9_:-]+', Name.Function, 'tag'),
2950
+ (r'\.[\w:-]+', Name.Class, 'tag'),
2951
+ (r'\#[\w:-]+', Name.Function, 'tag'),
2794
2952
  ],
2795
2953
 
2796
2954
  'eval-or-plain': [
2797
2955
  (r'[&!]?==', Punctuation, 'plain'),
2798
2956
  (r'([&!]?[=~])(' + _dot + r'*\n)',
2799
2957
  bygroups(Punctuation, using(ScalaLexer)), 'root'),
2800
- (r'', Text, 'plain'),
2958
+ default('plain'),
2801
2959
  ],
2802
2960
 
2803
2961
  'content': [
@@ -2818,7 +2976,7 @@ class JadeLexer(ExtendedRegexLexer):
2818
2976
  '#pop'),
2819
2977
  (r':' + _dot + r'*\n', _starts_block(Name.Decorator, 'filter-block'),
2820
2978
  '#pop'),
2821
- (r'[a-z0-9_:-]+', Name.Tag, 'tag'),
2979
+ (r'[\w:-]+', Name.Tag, 'tag'),
2822
2980
  (r'\|', Text, 'eval-or-plain'),
2823
2981
  ],
2824
2982
 
@@ -2841,16 +2999,16 @@ class JadeLexer(ExtendedRegexLexer):
2841
2999
 
2842
3000
  'html-attributes': [
2843
3001
  (r'\s+', Text),
2844
- (r'[a-z0-9_:-]+[ \t]*=', Name.Attribute, 'html-attribute-value'),
2845
- (r'[a-z0-9_:-]+', Name.Attribute),
3002
+ (r'[\w:-]+[ \t]*=', Name.Attribute, 'html-attribute-value'),
3003
+ (r'[\w:-]+', Name.Attribute),
2846
3004
  (r'\)', Text, '#pop'),
2847
3005
  ],
2848
3006
 
2849
3007
  'html-attribute-value': [
2850
3008
  (r'[ \t]+', Text),
2851
- (r'[a-z0-9_]+', Name.Variable, '#pop'),
2852
- (r'@[a-z0-9_]+', Name.Variable.Instance, '#pop'),
2853
- (r'\$[a-z0-9_]+', Name.Variable.Global, '#pop'),
3009
+ (r'\w+', Name.Variable, '#pop'),
3010
+ (r'@\w+', Name.Variable.Instance, '#pop'),
3011
+ (r'\$\w+', Name.Variable.Global, '#pop'),
2854
3012
  (r"'(\\\\|\\'|[^'\n])*'", String, '#pop'),
2855
3013
  (r'"(\\\\|\\"|[^"\n])*"', String, '#pop'),
2856
3014
  ],
@@ -2879,7 +3037,7 @@ class XQueryLexer(ExtendedRegexLexer):
2879
3037
  An XQuery lexer, parsing a stream and outputting the tokens needed to
2880
3038
  highlight xquery code.
2881
3039
 
2882
- *New in Pygments 1.4.*
3040
+ .. versionadded:: 1.4
2883
3041
  """
2884
3042
  name = 'XQuery'
2885
3043
  aliases = ['xquery', 'xqy', 'xq', 'xql', 'xqm']
@@ -3284,7 +3442,7 @@ class XQueryLexer(ExtendedRegexLexer):
3284
3442
  'xml_comment': [
3285
3443
  (r'(-->)', popstate_xmlcomment_callback),
3286
3444
  (r'[^-]{1,2}', Literal),
3287
- (ur'\t|\r|\n|[\u0020-\uD7FF]|[\uE000-\uFFFD]|' +
3445
+ (u'\\t|\\r|\\n|[\u0020-\uD7FF]|[\uE000-\uFFFD]|' +
3288
3446
  unirange(0x10000, 0x10ffff), Literal),
3289
3447
  ],
3290
3448
  'processing_instruction': [
@@ -3294,12 +3452,12 @@ class XQueryLexer(ExtendedRegexLexer):
3294
3452
  ],
3295
3453
  'processing_instruction_content': [
3296
3454
  (r'\?>', String.Doc, '#pop'),
3297
- (ur'\t|\r|\n|[\u0020-\uD7FF]|[\uE000-\uFFFD]|' +
3455
+ (u'\\t|\\r|\\n|[\u0020-\uD7FF]|[\uE000-\uFFFD]|' +
3298
3456
  unirange(0x10000, 0x10ffff), Literal),
3299
3457
  ],
3300
3458
  'cdata_section': [
3301
3459
  (r']]>', String.Doc, '#pop'),
3302
- (ur'\t|\r|\n|[\u0020-\uD7FF]|[\uE000-\uFFFD]|' +
3460
+ (u'\\t|\\r|\\n|[\u0020-\uD7FF]|[\uE000-\uFFFD]|' +
3303
3461
  unirange(0x10000, 0x10ffff), Literal),
3304
3462
  ],
3305
3463
  'start_tag': [
@@ -3368,7 +3526,7 @@ class XQueryLexer(ExtendedRegexLexer):
3368
3526
  ],
3369
3527
  'pragmacontents': [
3370
3528
  (r'#\)', Punctuation, 'operator'),
3371
- (ur'\t|\r|\n|[\u0020-\uD7FF]|[\uE000-\uFFFD]|' +
3529
+ (u'\\t|\\r|\\n|[\u0020-\uD7FF]|[\uE000-\uFFFD]|' +
3372
3530
  unirange(0x10000, 0x10ffff), Literal),
3373
3531
  (r'(\s+)', Text),
3374
3532
  ],
@@ -3377,7 +3535,7 @@ class XQueryLexer(ExtendedRegexLexer):
3377
3535
  (r'\(:', Comment, 'comment'),
3378
3536
  (r'\*|\?|\+', Operator, 'operator'),
3379
3537
  (r':=', Operator, 'root'),
3380
- (r'', Text, 'operator'),
3538
+ default('operator'),
3381
3539
  ],
3382
3540
  'option': [
3383
3541
  include('whitespace'),
@@ -3400,9 +3558,9 @@ class XQueryLexer(ExtendedRegexLexer):
3400
3558
 
3401
3559
  # handle operator state
3402
3560
  # order on numbers matters - handle most complex first
3403
- (r'\d+(\.\d*)?[eE][\+\-]?\d+', Number.Double, 'operator'),
3404
- (r'(\.\d+)[eE][\+\-]?\d+', Number.Double, 'operator'),
3405
- (r'(\.\d+|\d+\.\d*)', Number, 'operator'),
3561
+ (r'\d+(\.\d*)?[eE][\+\-]?\d+', Number.Float, 'operator'),
3562
+ (r'(\.\d+)[eE][\+\-]?\d+', Number.Float, 'operator'),
3563
+ (r'(\.\d+|\d+\.\d*)', Number.Float, 'operator'),
3406
3564
  (r'(\d+)', Number.Integer, 'operator'),
3407
3565
  (r'(\.\.|\.|\))', Punctuation, 'operator'),
3408
3566
  (r'(declare)(\s+)(construction)',
@@ -3541,7 +3699,7 @@ class DartLexer(RegexLexer):
3541
3699
  """
3542
3700
  For `Dart <http://dartlang.org/>`_ source code.
3543
3701
 
3544
- *New in Pygments 1.5.*
3702
+ .. versionadded:: 1.5
3545
3703
  """
3546
3704
 
3547
3705
  name = 'Dart'
@@ -3569,9 +3727,9 @@ class DartLexer(RegexLexer):
3569
3727
  r'native|operator|set|static|typedef|var)\b', Keyword.Declaration),
3570
3728
  (r'\b(bool|double|Dynamic|int|num|Object|String|void)\b', Keyword.Type),
3571
3729
  (r'\b(false|null|true)\b', Keyword.Constant),
3572
- (r'[~!%^&*+=|?:<>/-]|as', Operator),
3573
- (r'[a-zA-Z_$][a-zA-Z0-9_]*:', Name.Label),
3574
- (r'[a-zA-Z_$][a-zA-Z0-9_]*', Name),
3730
+ (r'[~!%^&*+=|?:<>/-]|as\b', Operator),
3731
+ (r'[a-zA-Z_$]\w*:', Name.Label),
3732
+ (r'[a-zA-Z_$]\w*', Name),
3575
3733
  (r'[(){}\[\],.;]', Punctuation),
3576
3734
  (r'0[xX][0-9a-fA-F]+', Number.Hex),
3577
3735
  # DIGIT+ (‘.’ DIGIT*)? EXPONENT?
@@ -3581,13 +3739,13 @@ class DartLexer(RegexLexer):
3581
3739
  # pseudo-keyword negate intentionally left out
3582
3740
  ],
3583
3741
  'class': [
3584
- (r'[a-zA-Z_$][a-zA-Z0-9_]*', Name.Class, '#pop')
3742
+ (r'[a-zA-Z_$]\w*', Name.Class, '#pop')
3585
3743
  ],
3586
3744
  'import_decl': [
3587
3745
  include('string_literal'),
3588
3746
  (r'\s+', Text),
3589
3747
  (r'\b(as|show|hide)\b', Keyword),
3590
- (r'[a-zA-Z_$][a-zA-Z0-9_]*', Name),
3748
+ (r'[a-zA-Z_$]\w*', Name),
3591
3749
  (r'\,', Punctuation),
3592
3750
  (r'\;', Punctuation, '#pop')
3593
3751
  ],
@@ -3606,7 +3764,7 @@ class DartLexer(RegexLexer):
3606
3764
  'string_common': [
3607
3765
  (r"\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\{[0-9A-Fa-f]*\}|[a-z\'\"$\\])",
3608
3766
  String.Escape),
3609
- (r'(\$)([a-zA-Z_][a-zA-Z0-9_]*)', bygroups(String.Interpol, Name)),
3767
+ (r'(\$)([a-zA-Z_]\w*)', bygroups(String.Interpol, Name)),
3610
3768
  (r'(\$\{)(.*?)(\})',
3611
3769
  bygroups(String.Interpol, using(this), String.Interpol))
3612
3770
  ],
@@ -3639,9 +3797,9 @@ class DartLexer(RegexLexer):
3639
3797
 
3640
3798
  class TypeScriptLexer(RegexLexer):
3641
3799
  """
3642
- For `TypeScript <http://www.python.org>`_ source code.
3800
+ For `TypeScript <http://typescriptlang.org/>`_ source code.
3643
3801
 
3644
- *New in Pygments 1.6.*
3802
+ .. versionadded:: 1.6
3645
3803
  """
3646
3804
 
3647
3805
  name = 'TypeScript'
@@ -3662,7 +3820,7 @@ class TypeScriptLexer(RegexLexer):
3662
3820
  (r'/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/'
3663
3821
  r'([gim]+\b|\B)', String.Regex, '#pop'),
3664
3822
  (r'(?=/)', Text, ('#pop', 'badregex')),
3665
- (r'', Text, '#pop')
3823
+ default('#pop')
3666
3824
  ],
3667
3825
  'badregex': [
3668
3826
  (r'\n', Text, '#pop')
@@ -3689,7 +3847,7 @@ class TypeScriptLexer(RegexLexer):
3689
3847
  r'Error|eval|isFinite|isNaN|parseFloat|parseInt|document|this|'
3690
3848
  r'window)\b', Name.Builtin),
3691
3849
  # Match stuff like: module name {...}
3692
- (r'\b(module)(\s*)(\s*[a-zA-Z0-9_?.$][\w?.$]*)(\s*)',
3850
+ (r'\b(module)(\s*)(\s*[\w?.$][\w?.$]*)(\s*)',
3693
3851
  bygroups(Keyword.Reserved, Text, Name.Other, Text), 'slashstartsregex'),
3694
3852
  # Match variable type keywords
3695
3853
  (r'\b(string|bool|number)\b', Keyword.Type),
@@ -3701,9 +3859,9 @@ class TypeScriptLexer(RegexLexer):
3701
3859
  # Match stuff like: function() {...}
3702
3860
  (r'([a-zA-Z_?.$][\w?.$]*)\(\) \{', Name.Other, 'slashstartsregex'),
3703
3861
  # Match stuff like: (function: return type)
3704
- (r'([a-zA-Z0-9_?.$][\w?.$]*)(\s*:\s*)([a-zA-Z0-9_?.$][\w?.$]*)',
3862
+ (r'([\w?.$][\w?.$]*)(\s*:\s*)([\w?.$][\w?.$]*)',
3705
3863
  bygroups(Name.Other, Text, Keyword.Type)),
3706
- (r'[$a-zA-Z_][a-zA-Z0-9_]*', Name.Other),
3864
+ (r'[$a-zA-Z_]\w*', Name.Other),
3707
3865
  (r'[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?', Number.Float),
3708
3866
  (r'0x[0-9a-fA-F]+', Number.Hex),
3709
3867
  (r'[0-9]+', Number.Integer),
@@ -3728,7 +3886,7 @@ class LassoLexer(RegexLexer):
3728
3886
  If given and ``True``, only highlight code between delimiters as Lasso
3729
3887
  (default: ``False``).
3730
3888
 
3731
- *New in Pygments 1.6.*
3889
+ .. versionadded:: 1.6
3732
3890
  """
3733
3891
 
3734
3892
  name = 'Lasso'
@@ -3746,16 +3904,16 @@ class LassoLexer(RegexLexer):
3746
3904
  (r'\[', Comment.Preproc, ('delimiters', 'squarebrackets')),
3747
3905
  (r'<\?(LassoScript|lasso|=)', Comment.Preproc,
3748
3906
  ('delimiters', 'anglebrackets')),
3749
- (r'<', Other, 'delimiters'),
3907
+ (r'<(!--.*?-->)?', Other, 'delimiters'),
3750
3908
  (r'\s+', Other),
3751
- (r'', Other, ('delimiters', 'lassofile')),
3909
+ default(('delimiters', 'lassofile')),
3752
3910
  ],
3753
3911
  'delimiters': [
3754
3912
  (r'\[no_square_brackets\]', Comment.Preproc, 'nosquarebrackets'),
3755
3913
  (r'\[noprocess\]', Comment.Preproc, 'noprocess'),
3756
3914
  (r'\[', Comment.Preproc, 'squarebrackets'),
3757
3915
  (r'<\?(LassoScript|lasso|=)', Comment.Preproc, 'anglebrackets'),
3758
- (r'<', Other),
3916
+ (r'<(!--.*?-->)?', Other),
3759
3917
  (r'[^[<]+', Other),
3760
3918
  ],
3761
3919
  'nosquarebrackets': [
@@ -3777,8 +3935,7 @@ class LassoLexer(RegexLexer):
3777
3935
  include('lasso'),
3778
3936
  ],
3779
3937
  'lassofile': [
3780
- (r'\]', Comment.Preproc, '#pop'),
3781
- (r'\?>', Comment.Preproc, '#pop'),
3938
+ (r'\]|\?>', Comment.Preproc, '#pop'),
3782
3939
  include('lasso'),
3783
3940
  ],
3784
3941
  'whitespacecomments': [
@@ -3807,13 +3964,13 @@ class LassoLexer(RegexLexer):
3807
3964
  bygroups(Name.Builtin.Pseudo, Name.Variable.Class)),
3808
3965
  (r"(self)(\s*->\s*)('[a-z_][\w.]*')",
3809
3966
  bygroups(Name.Builtin.Pseudo, Operator, Name.Variable.Class)),
3810
- (r'(\.\.?)([a-z_][\w.]*)',
3967
+ (r'(\.\.?)([a-z_][\w.]*(=(?!=))?)',
3811
3968
  bygroups(Name.Builtin.Pseudo, Name.Other.Member)),
3812
- (r'(->\\?\s*|&\s*)([a-z_][\w.]*)',
3969
+ (r'(->\\?\s*|&\s*)([a-z_][\w.]*(=(?!=))?)',
3813
3970
  bygroups(Operator, Name.Other.Member)),
3814
- (r'(self|inherited|global|void)\b', Name.Builtin.Pseudo),
3971
+ (r'(self|inherited)\b', Name.Builtin.Pseudo),
3815
3972
  (r'-[a-z_][\w.]*', Name.Attribute),
3816
- (r'(::\s*)([a-z_][\w.]*)', bygroups(Punctuation, Name.Label)),
3973
+ (r'::\s*[a-z_][\w.]*', Name.Label),
3817
3974
  (r'(error_(code|msg)_\w+|Error_AddError|Error_ColumnRestriction|'
3818
3975
  r'Error_DatabaseConnectionUnavailable|Error_DatabaseTimeout|'
3819
3976
  r'Error_DeleteError|Error_FieldRestriction|Error_FileNotFound|'
@@ -3827,22 +3984,22 @@ class LassoLexer(RegexLexer):
3827
3984
  # definitions
3828
3985
  (r'(define)(\s+)([a-z_][\w.]*)(\s*=>\s*)(type|trait|thread)\b',
3829
3986
  bygroups(Keyword.Declaration, Text, Name.Class, Operator, Keyword)),
3830
- (r'(define)(\s+)([a-z_][\w.]*)(\s*->\s*)([a-z_][\w.]*=?|[-+*/%<>]|==)',
3987
+ (r'(define)(\s+)([a-z_][\w.]*)(\s*->\s*)([a-z_][\w.]*=?|[-+*/%])',
3831
3988
  bygroups(Keyword.Declaration, Text, Name.Class, Operator,
3832
3989
  Name.Function), 'signature'),
3833
3990
  (r'(define)(\s+)([a-z_][\w.]*)',
3834
3991
  bygroups(Keyword.Declaration, Text, Name.Function), 'signature'),
3835
- (r'(public|protected|private|provide)(\s+)(([a-z_][\w.]*=?|'
3836
- r'[-+*/%<>]|==)(?=\s*\())', bygroups(Keyword, Text, Name.Function),
3992
+ (r'(public|protected|private|provide)(\s+)(([a-z_][\w.]*=?|[-+*/%])'
3993
+ r'(?=\s*\())', bygroups(Keyword, Text, Name.Function),
3837
3994
  'signature'),
3838
- (r'(public|protected|private)(\s+)([a-z_][\w.]*)',
3995
+ (r'(public|protected|private|provide)(\s+)([a-z_][\w.]*)',
3839
3996
  bygroups(Keyword, Text, Name.Function)),
3840
3997
 
3841
3998
  # keywords
3842
- (r'(true|false|none|minimal|full|all)\b', Keyword.Constant),
3843
- (r'(local|var|variable|data(?=\s))\b', Keyword.Declaration),
3999
+ (r'(true|false|none|minimal|full|all|void)\b', Keyword.Constant),
4000
+ (r'(local|var|variable|global|data(?=\s))\b', Keyword.Declaration),
3844
4001
  (r'(array|date|decimal|duration|integer|map|pair|string|tag|xml|'
3845
- r'null|list|queue|set|stack|staticarray)\b', Keyword.Type),
4002
+ r'null|bytes|list|queue|set|stack|staticarray|tie)\b', Keyword.Type),
3846
4003
  (r'([a-z_][\w.]*)(\s+)(in)\b', bygroups(Name, Text, Keyword)),
3847
4004
  (r'(let|into)(\s+)([a-z_][\w.]*)', bygroups(Keyword, Text, Name)),
3848
4005
  (r'require\b', Keyword, 'requiresection'),
@@ -3862,17 +4019,18 @@ class LassoLexer(RegexLexer):
3862
4019
  r'Run_Children|SOAP_DefineTag|SOAP_LastRequest|SOAP_LastResponse|'
3863
4020
  r'Tag_Name|ascending|average|by|define|descending|do|equals|'
3864
4021
  r'frozen|group|handle_failure|import|in|into|join|let|match|max|'
3865
- r'min|on|order|parent|protected|provide|public|require|skip|'
3866
- r'split_thread|sum|take|thread|to|trait|type|where|with|yield)\b',
4022
+ r'min|on|order|parent|protected|provide|public|require|returnhome|'
4023
+ r'skip|split_thread|sum|take|thread|to|trait|type|where|with|'
4024
+ r'yield|yieldhome)\b',
3867
4025
  bygroups(Punctuation, Keyword)),
3868
4026
 
3869
4027
  # other
3870
4028
  (r',', Punctuation, 'commamember'),
3871
4029
  (r'(and|or|not)\b', Operator.Word),
3872
- (r'([a-z_][\w.]*)(\s*::\s*)?([a-z_][\w.]*)?(\s*=(?!=))',
3873
- bygroups(Name, Punctuation, Name.Label, Operator)),
4030
+ (r'([a-z_][\w.]*)(\s*::\s*[a-z_][\w.]*)?(\s*=(?!=))',
4031
+ bygroups(Name, Name.Label, Operator)),
3874
4032
  (r'(/?)([\w.]+)', bygroups(Punctuation, Name.Other)),
3875
- (r'(=)(bw|ew|cn|lte?|gte?|n?eq|ft|n?rx)\b',
4033
+ (r'(=)(n?bw|n?ew|n?cn|lte?|gte?|n?eq|n?rx|ft)\b',
3876
4034
  bygroups(Operator, Operator.Word)),
3877
4035
  (r':=|[-+*/%=<>&|!?\\]+', Operator),
3878
4036
  (r'[{}():;,@^]', Punctuation),
@@ -3881,13 +4039,13 @@ class LassoLexer(RegexLexer):
3881
4039
  (r"'", String.Single, '#pop'),
3882
4040
  (r"[^'\\]+", String.Single),
3883
4041
  include('escape'),
3884
- (r"\\+", String.Single),
4042
+ (r"\\", String.Single),
3885
4043
  ],
3886
4044
  'doublestring': [
3887
4045
  (r'"', String.Double, '#pop'),
3888
4046
  (r'[^"\\]+', String.Double),
3889
4047
  include('escape'),
3890
- (r'\\+', String.Double),
4048
+ (r'\\', String.Double),
3891
4049
  ],
3892
4050
  'escape': [
3893
4051
  (r'\\(U[\da-f]{8}|u[\da-f]{4}|x[\da-f]{1,2}|[0-7]{1,3}|:[^:]+:|'
@@ -3906,10 +4064,10 @@ class LassoLexer(RegexLexer):
3906
4064
  include('lasso'),
3907
4065
  ],
3908
4066
  'requiresection': [
3909
- (r'(([a-z_][\w.]*=?|[-+*/%<>]|==)(?=\s*\())', Name, 'requiresignature'),
3910
- (r'(([a-z_][\w.]*=?|[-+*/%<>]|==)(?=(\s*::\s*[\w.]+)?\s*,))', Name),
3911
- (r'[a-z_][\w.]*=?|[-+*/%<>]|==', Name, '#pop'),
3912
- (r'(::\s*)([a-z_][\w.]*)', bygroups(Punctuation, Name.Label)),
4067
+ (r'(([a-z_][\w.]*=?|[-+*/%])(?=\s*\())', Name, 'requiresignature'),
4068
+ (r'(([a-z_][\w.]*=?|[-+*/%])(?=(\s*::\s*[\w.]+)?\s*,))', Name),
4069
+ (r'[a-z_][\w.]*=?|[-+*/%]', Name, '#pop'),
4070
+ (r'::\s*[a-z_][\w.]*', Name.Label),
3913
4071
  (r',', Punctuation),
3914
4072
  include('whitespacecomments'),
3915
4073
  ],
@@ -3917,17 +4075,17 @@ class LassoLexer(RegexLexer):
3917
4075
  (r'(\)(?=(\s*::\s*[\w.]+)?\s*,))', Punctuation, '#pop'),
3918
4076
  (r'\)', Punctuation, '#pop:2'),
3919
4077
  (r'-?[a-z_][\w.]*', Name.Attribute),
3920
- (r'(::\s*)([a-z_][\w.]*)', bygroups(Punctuation, Name.Label)),
4078
+ (r'::\s*[a-z_][\w.]*', Name.Label),
3921
4079
  (r'\.\.\.', Name.Builtin.Pseudo),
3922
4080
  (r'[(,]', Punctuation),
3923
4081
  include('whitespacecomments'),
3924
4082
  ],
3925
4083
  'commamember': [
3926
- (r'(([a-z_][\w.]*=?|[-+*/%<>]|==)'
4084
+ (r'(([a-z_][\w.]*=?|[-+*/%])'
3927
4085
  r'(?=\s*(\(([^()]*\([^()]*\))*[^)]*\)\s*)?(::[\w.\s]+)?=>))',
3928
4086
  Name.Function, 'signature'),
3929
4087
  include('whitespacecomments'),
3930
- (r'', Text, '#pop'),
4088
+ default('#pop'),
3931
4089
  ],
3932
4090
  }
3933
4091
 
@@ -3941,9 +4099,9 @@ class LassoLexer(RegexLexer):
3941
4099
  self._members = set()
3942
4100
  if self.builtinshighlighting:
3943
4101
  from pygments.lexers._lassobuiltins import BUILTINS, MEMBERS
3944
- for key, value in BUILTINS.iteritems():
4102
+ for key, value in iteritems(BUILTINS):
3945
4103
  self._builtins.update(value)
3946
- for key, value in MEMBERS.iteritems():
4104
+ for key, value in iteritems(MEMBERS):
3947
4105
  self._members.update(value)
3948
4106
  RegexLexer.__init__(self, **options)
3949
4107
 
@@ -3954,7 +4112,8 @@ class LassoLexer(RegexLexer):
3954
4112
  for index, token, value in \
3955
4113
  RegexLexer.get_tokens_unprocessed(self, text, stack):
3956
4114
  if (token is Name.Other and value.lower() in self._builtins or
3957
- token is Name.Other.Member and value.lower() in self._members):
4115
+ token is Name.Other.Member and
4116
+ value.lower().rstrip('=') in self._members):
3958
4117
  yield index, Name.Builtin, value
3959
4118
  continue
3960
4119
  yield index, token, value
@@ -3976,14 +4135,14 @@ class QmlLexer(RegexLexer):
3976
4135
  """
3977
4136
  For QML files. See http://doc.qt.digia.com/4.7/qdeclarativeintroduction.html.
3978
4137
 
3979
- *New in Pygments 1.6.*
4138
+ .. versionadded:: 1.6
3980
4139
  """
3981
4140
 
3982
4141
  # QML is based on javascript, so much of this is taken from the
3983
4142
  # JavascriptLexer above.
3984
4143
 
3985
4144
  name = 'QML'
3986
- aliases = ['qml', 'Qt Meta Language', 'Qt modeling Language']
4145
+ aliases = ['qml']
3987
4146
  filenames = ['*.qml',]
3988
4147
  mimetypes = [ 'application/x-qml',]
3989
4148
 
@@ -4002,7 +4161,7 @@ class QmlLexer(RegexLexer):
4002
4161
  (r'/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/'
4003
4162
  r'([gim]+\b|\B)', String.Regex, '#pop'),
4004
4163
  (r'(?=/)', Text, ('#pop', 'badregex')),
4005
- (r'', Text, '#pop')
4164
+ default('#pop')
4006
4165
  ],
4007
4166
  'badregex': [
4008
4167
  (r'\n', Text, '#pop')
@@ -4035,7 +4194,7 @@ class QmlLexer(RegexLexer):
4035
4194
  r'decodeURIComponent|encodeURI|encodeURIComponent|'
4036
4195
  r'Error|eval|isFinite|isNaN|parseFloat|parseInt|document|this|'
4037
4196
  r'window)\b', Name.Builtin),
4038
- (r'[$a-zA-Z_][a-zA-Z0-9_]*', Name.Other),
4197
+ (r'[$a-zA-Z_]\w*', Name.Other),
4039
4198
  (r'[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?', Number.Float),
4040
4199
  (r'0x[0-9a-fA-F]+', Number.Hex),
4041
4200
  (r'[0-9]+', Number.Integer),
@@ -4043,3 +4202,309 @@ class QmlLexer(RegexLexer):
4043
4202
  (r"'(\\\\|\\'|[^'])*'", String.Single),
4044
4203
  ]
4045
4204
  }
4205
+
4206
+
4207
+ class CirruLexer(RegexLexer):
4208
+ """
4209
+ Syntax rules of Cirru can be found at:
4210
+ http://grammar.cirru.org/
4211
+
4212
+ * using ``()`` to markup blocks, but limited in the same line
4213
+ * using ``""`` to markup strings, allow ``\`` to escape
4214
+ * using ``$`` as a shorthand for ``()`` till indentation end or ``)``
4215
+ * using indentations for create nesting
4216
+
4217
+ .. versionadded:: 2.0
4218
+ """
4219
+
4220
+ name = 'Cirru'
4221
+ aliases = ['cirru']
4222
+ filenames = ['*.cirru', '*.cr']
4223
+ mimetypes = ['text/x-cirru']
4224
+ flags = re.MULTILINE
4225
+
4226
+ tokens = {
4227
+ 'string': [
4228
+ (r'[^"\\\n]', String),
4229
+ (r'\\', String.Escape, 'escape'),
4230
+ (r'"', String, '#pop'),
4231
+ ],
4232
+ 'escape': [
4233
+ (r'.', String.Escape, '#pop'),
4234
+ ],
4235
+ 'function': [
4236
+ (r'[\w-][^\s\(\)\"]*', Name.Function, '#pop'),
4237
+ (r'\)', Operator, '#pop'),
4238
+ (r'(?=\n)', Text, '#pop'),
4239
+ (r'\(', Operator, '#push'),
4240
+ (r'"', String, ('#pop', 'string')),
4241
+ (r'\s+', Text.Whitespace),
4242
+ (r'\,', Operator, '#pop'),
4243
+ ],
4244
+ 'line': [
4245
+ (r'^\B', Text.Whitespace, 'function'),
4246
+ (r'\$', Operator, 'function'),
4247
+ (r'\(', Operator, 'function'),
4248
+ (r'\)', Operator),
4249
+ (r'(?=\n)', Text, '#pop'),
4250
+ (r'\n', Text, '#pop'),
4251
+ (r'"', String, 'string'),
4252
+ (r'\s+', Text.Whitespace),
4253
+ (r'[\d\.]+', Number),
4254
+ (r'[\w-][^\"\(\)\s]*', Name.Variable),
4255
+ (r'--', Comment.Single)
4256
+ ],
4257
+ 'root': [
4258
+ (r'^\s*', Text.Whitespace, ('line', 'function')),
4259
+ (r'^\s+$', Text.Whitespace),
4260
+ ]
4261
+ }
4262
+
4263
+
4264
+ class MaskLexer(RegexLexer):
4265
+ """
4266
+ For `Mask <http://github.com/atmajs/MaskJS>`__ markup.
4267
+
4268
+ .. versionadded:: 2.0
4269
+ """
4270
+ name = 'Mask'
4271
+ aliases = ['mask']
4272
+ filenames = ['*.mask']
4273
+ mimetypes = ['text/x-mask']
4274
+
4275
+ flags = re.MULTILINE | re.IGNORECASE | re.DOTALL
4276
+ tokens = {
4277
+ 'root': [
4278
+ (r'\s+', Text),
4279
+ (r'//.*?\n', Comment.Single),
4280
+ (r'/\*.*?\*/', Comment.Multiline),
4281
+ (r'[\{\};>]', Punctuation),
4282
+ (r"'''", String, 'string-trpl-single'),
4283
+ (r'"""', String, 'string-trpl-double'),
4284
+ (r"'", String, 'string-single'),
4285
+ (r'"', String, 'string-double'),
4286
+ (r'([\w-]+)', Name.Tag, 'node'),
4287
+ (r'([^\.#;{>\s]+)', Name.Class, 'node'),
4288
+ (r'(#[\w-]+)', Name.Function, 'node'),
4289
+ (r'(\.[\w-]+)', Name.Variable.Class, 'node')
4290
+ ],
4291
+ 'string-base': [
4292
+ (r'\\.', String.Escape),
4293
+ (r'~\[', String.Interpol, 'interpolation'),
4294
+ (r'.', String.Single),
4295
+ ],
4296
+ 'string-single':[
4297
+ (r"'", String.Single, '#pop'),
4298
+ include('string-base')
4299
+ ],
4300
+ 'string-double':[
4301
+ (r'"', String.Single, '#pop'),
4302
+ include('string-base')
4303
+ ],
4304
+ 'string-trpl-single':[
4305
+ (r"'''", String.Single, '#pop'),
4306
+ include('string-base')
4307
+ ],
4308
+ 'string-trpl-double':[
4309
+ (r'"""', String.Single, '#pop'),
4310
+ include('string-base')
4311
+ ],
4312
+ 'interpolation': [
4313
+ (r'\]', String.Interpol, '#pop'),
4314
+ (r'\s*:', String.Interpol, 'expression'),
4315
+ (r'\s*\w+:', Name.Other),
4316
+ (r'[^\]]+', String.Interpol)
4317
+ ],
4318
+ 'expression': [
4319
+ (r'[^\]]+', using(JavascriptLexer), '#pop')
4320
+ ],
4321
+ 'node': [
4322
+ (r'\s+', Text),
4323
+ (r'\.', Name.Variable.Class, 'node-class'),
4324
+ (r'\#', Name.Function, 'node-id'),
4325
+ (r'style[ \t]*=', Name.Attribute, 'node-attr-style-value'),
4326
+ (r'[\w:-]+[ \t]*=', Name.Attribute, 'node-attr-value'),
4327
+ (r'[\w:-]+', Name.Attribute),
4328
+ (r'[>{;]', Punctuation, '#pop')
4329
+ ],
4330
+ 'node-class': [
4331
+ (r'[\w-]+', Name.Variable.Class),
4332
+ (r'~\[', String.Interpol, 'interpolation'),
4333
+ default('#pop')
4334
+ ],
4335
+ 'node-id': [
4336
+ (r'[\w-]+', Name.Function),
4337
+ (r'~\[', String.Interpol, 'interpolation'),
4338
+ default('#pop')
4339
+ ],
4340
+ 'node-attr-value':[
4341
+ (r'\s+', Text),
4342
+ (r'\w+', Name.Variable, '#pop'),
4343
+ (r"'", String, 'string-single-pop2'),
4344
+ (r'"', String, 'string-double-pop2'),
4345
+ default('#pop')
4346
+ ],
4347
+ 'node-attr-style-value':[
4348
+ (r'\s+', Text),
4349
+ (r"'", String.Single, 'css-single-end'),
4350
+ (r'"', String.Single, 'css-double-end'),
4351
+ include('node-attr-value')
4352
+ ],
4353
+ 'css-base': [
4354
+ (r'\s+', Text),
4355
+ (r";", Punctuation),
4356
+ (r"[\w\-]+\s*:", Name.Builtin)
4357
+ ],
4358
+ 'css-single-end': [
4359
+ include('css-base'),
4360
+ (r"'", String.Single, '#pop:2'),
4361
+ (r"[^;']+", Name.Entity)
4362
+ ],
4363
+ 'css-double-end': [
4364
+ include('css-base'),
4365
+ (r'"', String.Single, '#pop:2'),
4366
+ (r"[^;\"]+", Name.Entity)
4367
+ ],
4368
+ 'string-single-pop2':[
4369
+ (r"'", String.Single, '#pop:2'),
4370
+ include('string-base')
4371
+ ],
4372
+ 'string-double-pop2':[
4373
+ (r'"', String.Single, '#pop:2'),
4374
+ include('string-base')
4375
+ ],
4376
+ }
4377
+
4378
+
4379
+ class ZephirLexer(RegexLexer):
4380
+ """
4381
+ For `Zephir language <http://zephir-lang.com/>`_ source code.
4382
+
4383
+ Zephir is a compiled high level language aimed
4384
+ to the creation of C-extensions for PHP.
4385
+
4386
+ .. versionadded:: 2.0
4387
+ """
4388
+
4389
+ name = 'Zephir'
4390
+ aliases = ['zephir']
4391
+ filenames = ['*.zep']
4392
+
4393
+ zephir_keywords = [ 'fetch', 'echo', 'isset', 'empty']
4394
+ zephir_type = [ 'bit', 'bits' , 'string' ]
4395
+
4396
+ flags = re.DOTALL | re.MULTILINE
4397
+
4398
+ tokens = {
4399
+ 'commentsandwhitespace': [
4400
+ (r'\s+', Text),
4401
+ (r'//.*?\n', Comment.Single),
4402
+ (r'/\*.*?\*/', Comment.Multiline)
4403
+ ],
4404
+ 'slashstartsregex': [
4405
+ include('commentsandwhitespace'),
4406
+ (r'/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/'
4407
+ r'([gim]+\b|\B)', String.Regex, '#pop'),
4408
+ default('#pop')
4409
+ ],
4410
+ 'badregex': [
4411
+ (r'\n', Text, '#pop')
4412
+ ],
4413
+ 'root': [
4414
+ (r'^(?=\s|/|<!--)', Text, 'slashstartsregex'),
4415
+ include('commentsandwhitespace'),
4416
+ (r'\+\+|--|~|&&|\?|:|\|\||\\(?=\n)|'
4417
+ r'(<<|>>>?|==?|!=?|->|[-<>+*%&\|\^/])=?', Operator, 'slashstartsregex'),
4418
+ (r'[{(\[;,]', Punctuation, 'slashstartsregex'),
4419
+ (r'[})\].]', Punctuation),
4420
+ (r'(for|in|while|do|break|return|continue|switch|case|default|if|else|loop|'
4421
+ r'require|inline|throw|try|catch|finally|new|delete|typeof|instanceof|void|'
4422
+ r'namespace|use|extends|this|fetch|isset|unset|echo|fetch|likely|unlikely|'
4423
+ r'empty)\b', Keyword, 'slashstartsregex'),
4424
+ (r'(var|let|with|function)\b', Keyword.Declaration, 'slashstartsregex'),
4425
+ (r'(abstract|boolean|bool|char|class|const|double|enum|export|extends|final|'
4426
+ r'native|goto|implements|import|int|string|interface|long|ulong|char|uchar|'
4427
+ r'float|unsigned|private|protected|public|short|static|self|throws|reverse|'
4428
+ r'transient|volatile)\b', Keyword.Reserved),
4429
+ (r'(true|false|null|undefined)\b', Keyword.Constant),
4430
+ (r'(Array|Boolean|Date|_REQUEST|_COOKIE|_SESSION|'
4431
+ r'_GET|_POST|_SERVER|this|stdClass|range|count|iterator|'
4432
+ r'window)\b', Name.Builtin),
4433
+ (r'[$a-zA-Z_][\w\\]*', Name.Other),
4434
+ (r'[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?', Number.Float),
4435
+ (r'0x[0-9a-fA-F]+', Number.Hex),
4436
+ (r'[0-9]+', Number.Integer),
4437
+ (r'"(\\\\|\\"|[^"])*"', String.Double),
4438
+ (r"'(\\\\|\\'|[^'])*'", String.Single),
4439
+ ]
4440
+ }
4441
+
4442
+ class SlimLexer(ExtendedRegexLexer):
4443
+ """
4444
+ For Slim markup.
4445
+ """
4446
+
4447
+ name = 'Slim'
4448
+ aliases = ['slim']
4449
+ filenames = ['*.slim']
4450
+ mimetypes = ['text/x-slim']
4451
+
4452
+ flags = re.IGNORECASE
4453
+ _dot = r'(?: \|\n(?=.* \|)|.)'
4454
+ tokens = {
4455
+ 'root': [
4456
+ (r'[ \t]*\n', Text),
4457
+ (r'[ \t]*', _indentation),
4458
+ ],
4459
+
4460
+ 'css': [
4461
+ (r'\.[\w:-]+', Name.Class, 'tag'),
4462
+ (r'\#[\w:-]+', Name.Function, 'tag'),
4463
+ ],
4464
+
4465
+ 'eval-or-plain': [
4466
+ (r'([ \t]*==?)(.*\n)',
4467
+ bygroups(Punctuation, using(RubyLexer)),
4468
+ 'root'),
4469
+ (r'[ \t]+[\w:-]+(?=[=])', Name.Attribute, 'html-attributes'),
4470
+ (r'', Text, 'plain'),
4471
+ ],
4472
+
4473
+ 'content': [
4474
+ include('css'),
4475
+ (r'[\w:-]+:[ \t]*\n', Text, 'plain'),
4476
+ (r'(-)(.*\n)',
4477
+ bygroups(Punctuation, using(RubyLexer)),
4478
+ '#pop'),
4479
+ (r'\|' + _dot + r'*\n', _starts_block(Text, 'plain'), '#pop'),
4480
+ (r'/' + _dot + r'*\n', _starts_block(Comment.Preproc, 'slim-comment-block'), '#pop'),
4481
+ (r'[\w:-]+', Name.Tag, 'tag'),
4482
+ include('eval-or-plain'),
4483
+ ],
4484
+
4485
+ 'tag': [
4486
+ include('css'),
4487
+ (r'[<>]{1,2}(?=[ \t=])', Punctuation),
4488
+ (r'[ \t]+\n', Punctuation, '#pop:2'),
4489
+ include('eval-or-plain'),
4490
+ ],
4491
+
4492
+ 'plain': [
4493
+ (r'([^#\n]|#[^{\n]|(\\\\)*\\#\{)+', Text),
4494
+ (r'(#\{)(.*?)(\})',
4495
+ bygroups(String.Interpol, using(RubyLexer), String.Interpol)),
4496
+ (r'\n', Text, 'root'),
4497
+ ],
4498
+
4499
+ 'html-attributes': [
4500
+ (r'=', Punctuation),
4501
+ (r'"[^\"]+"', using(RubyLexer), 'tag'),
4502
+ (r'\'[^\']+\'', using(RubyLexer), 'tag'),
4503
+ (r'[\w]+', Text, 'tag'),
4504
+ ],
4505
+
4506
+ 'slim-comment-block': [
4507
+ (_dot + '+', Comment.Preproc),
4508
+ (r'\n', Text, 'root'),
4509
+ ],
4510
+ }