pygments.rb 0.5.4 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+ }