rougegal 2.1.2

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 (311) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +26 -0
  3. data/LICENSE +186 -0
  4. data/bin/rougify +17 -0
  5. data/lib/rouge/cli.rb +394 -0
  6. data/lib/rouge/demos/abap +6 -0
  7. data/lib/rouge/demos/actionscript +4 -0
  8. data/lib/rouge/demos/apache +21 -0
  9. data/lib/rouge/demos/apiblueprint +33 -0
  10. data/lib/rouge/demos/applescript +2 -0
  11. data/lib/rouge/demos/awk +4 -0
  12. data/lib/rouge/demos/biml +38 -0
  13. data/lib/rouge/demos/bsl +7 -0
  14. data/lib/rouge/demos/c +8 -0
  15. data/lib/rouge/demos/ceylon +7 -0
  16. data/lib/rouge/demos/cfscript +18 -0
  17. data/lib/rouge/demos/clojure +5 -0
  18. data/lib/rouge/demos/cmake +7 -0
  19. data/lib/rouge/demos/coffeescript +5 -0
  20. data/lib/rouge/demos/common_lisp +1 -0
  21. data/lib/rouge/demos/conf +4 -0
  22. data/lib/rouge/demos/console +6 -0
  23. data/lib/rouge/demos/coq +13 -0
  24. data/lib/rouge/demos/cpp +8 -0
  25. data/lib/rouge/demos/csharp +5 -0
  26. data/lib/rouge/demos/css +4 -0
  27. data/lib/rouge/demos/d +16 -0
  28. data/lib/rouge/demos/dart +6 -0
  29. data/lib/rouge/demos/diff +7 -0
  30. data/lib/rouge/demos/digdag +19 -0
  31. data/lib/rouge/demos/docker +9 -0
  32. data/lib/rouge/demos/dot +5 -0
  33. data/lib/rouge/demos/eiffel +30 -0
  34. data/lib/rouge/demos/elixir +1 -0
  35. data/lib/rouge/demos/erb +1 -0
  36. data/lib/rouge/demos/erlang +7 -0
  37. data/lib/rouge/demos/factor +5 -0
  38. data/lib/rouge/demos/fortran +22 -0
  39. data/lib/rouge/demos/fsharp +12 -0
  40. data/lib/rouge/demos/gal +22 -0
  41. data/lib/rouge/demos/gherkin +17 -0
  42. data/lib/rouge/demos/glsl +14 -0
  43. data/lib/rouge/demos/go +7 -0
  44. data/lib/rouge/demos/gradle +10 -0
  45. data/lib/rouge/demos/graphql +17 -0
  46. data/lib/rouge/demos/groovy +9 -0
  47. data/lib/rouge/demos/haml +5 -0
  48. data/lib/rouge/demos/handlebars +7 -0
  49. data/lib/rouge/demos/haskell +6 -0
  50. data/lib/rouge/demos/html +8 -0
  51. data/lib/rouge/demos/http +14 -0
  52. data/lib/rouge/demos/hylang +10 -0
  53. data/lib/rouge/demos/idlang +8 -0
  54. data/lib/rouge/demos/igorpro +9 -0
  55. data/lib/rouge/demos/ini +4 -0
  56. data/lib/rouge/demos/io +11 -0
  57. data/lib/rouge/demos/irb +4 -0
  58. data/lib/rouge/demos/irb_output +2 -0
  59. data/lib/rouge/demos/java +5 -0
  60. data/lib/rouge/demos/javascript +1 -0
  61. data/lib/rouge/demos/jinja +9 -0
  62. data/lib/rouge/demos/json +1 -0
  63. data/lib/rouge/demos/json-doc +1 -0
  64. data/lib/rouge/demos/jsonnet +28 -0
  65. data/lib/rouge/demos/jsx +17 -0
  66. data/lib/rouge/demos/julia +11 -0
  67. data/lib/rouge/demos/kotlin +3 -0
  68. data/lib/rouge/demos/lasso +12 -0
  69. data/lib/rouge/demos/liquid +11 -0
  70. data/lib/rouge/demos/literate_coffeescript +3 -0
  71. data/lib/rouge/demos/literate_haskell +7 -0
  72. data/lib/rouge/demos/llvm +20 -0
  73. data/lib/rouge/demos/lua +12 -0
  74. data/lib/rouge/demos/make +6 -0
  75. data/lib/rouge/demos/markdown +4 -0
  76. data/lib/rouge/demos/matlab +6 -0
  77. data/lib/rouge/demos/moonscript +16 -0
  78. data/lib/rouge/demos/mosel +10 -0
  79. data/lib/rouge/demos/mxml +22 -0
  80. data/lib/rouge/demos/nasm +26 -0
  81. data/lib/rouge/demos/nginx +5 -0
  82. data/lib/rouge/demos/nim +27 -0
  83. data/lib/rouge/demos/objective_c +18 -0
  84. data/lib/rouge/demos/ocaml +12 -0
  85. data/lib/rouge/demos/pascal +14 -0
  86. data/lib/rouge/demos/perl +5 -0
  87. data/lib/rouge/demos/php +3 -0
  88. data/lib/rouge/demos/plaintext +1 -0
  89. data/lib/rouge/demos/plist +142 -0
  90. data/lib/rouge/demos/pony +17 -0
  91. data/lib/rouge/demos/powershell +49 -0
  92. data/lib/rouge/demos/praat +26 -0
  93. data/lib/rouge/demos/prolog +9 -0
  94. data/lib/rouge/demos/prometheus +9 -0
  95. data/lib/rouge/demos/properties +7 -0
  96. data/lib/rouge/demos/protobuf +5 -0
  97. data/lib/rouge/demos/puppet +6 -0
  98. data/lib/rouge/demos/python +6 -0
  99. data/lib/rouge/demos/q +2 -0
  100. data/lib/rouge/demos/qml +9 -0
  101. data/lib/rouge/demos/r +8 -0
  102. data/lib/rouge/demos/racket +24 -0
  103. data/lib/rouge/demos/ruby +9 -0
  104. data/lib/rouge/demos/rust +12 -0
  105. data/lib/rouge/demos/sass +3 -0
  106. data/lib/rouge/demos/scala +3 -0
  107. data/lib/rouge/demos/scheme +4 -0
  108. data/lib/rouge/demos/scss +5 -0
  109. data/lib/rouge/demos/sed +4 -0
  110. data/lib/rouge/demos/shell +2 -0
  111. data/lib/rouge/demos/sieve +10 -0
  112. data/lib/rouge/demos/slim +17 -0
  113. data/lib/rouge/demos/smalltalk +6 -0
  114. data/lib/rouge/demos/smarty +12 -0
  115. data/lib/rouge/demos/sml +4 -0
  116. data/lib/rouge/demos/sql +1 -0
  117. data/lib/rouge/demos/swift +5 -0
  118. data/lib/rouge/demos/tap +5 -0
  119. data/lib/rouge/demos/tcl +1 -0
  120. data/lib/rouge/demos/tex +1 -0
  121. data/lib/rouge/demos/toml +9 -0
  122. data/lib/rouge/demos/tsx +17 -0
  123. data/lib/rouge/demos/tulip +13 -0
  124. data/lib/rouge/demos/turtle +26 -0
  125. data/lib/rouge/demos/twig +9 -0
  126. data/lib/rouge/demos/typescript +1 -0
  127. data/lib/rouge/demos/vala +8 -0
  128. data/lib/rouge/demos/vb +4 -0
  129. data/lib/rouge/demos/verilog +27 -0
  130. data/lib/rouge/demos/vhdl +23 -0
  131. data/lib/rouge/demos/viml +14 -0
  132. data/lib/rouge/demos/vue +11 -0
  133. data/lib/rouge/demos/wollok +11 -0
  134. data/lib/rouge/demos/xml +2 -0
  135. data/lib/rouge/demos/yaml +4 -0
  136. data/lib/rouge/formatter.rb +75 -0
  137. data/lib/rouge/formatters/html.rb +37 -0
  138. data/lib/rouge/formatters/html_inline.rb +30 -0
  139. data/lib/rouge/formatters/html_legacy.rb +44 -0
  140. data/lib/rouge/formatters/html_linewise.rb +27 -0
  141. data/lib/rouge/formatters/html_pygments.rb +16 -0
  142. data/lib/rouge/formatters/html_table.rb +61 -0
  143. data/lib/rouge/formatters/null.rb +19 -0
  144. data/lib/rouge/formatters/terminal256.rb +172 -0
  145. data/lib/rouge/guesser.rb +55 -0
  146. data/lib/rouge/guessers/filename.rb +25 -0
  147. data/lib/rouge/guessers/glob_mapping.rb +46 -0
  148. data/lib/rouge/guessers/mimetype.rb +14 -0
  149. data/lib/rouge/guessers/modeline.rb +42 -0
  150. data/lib/rouge/guessers/source.rb +39 -0
  151. data/lib/rouge/lexer.rb +452 -0
  152. data/lib/rouge/lexers/abap.rb +238 -0
  153. data/lib/rouge/lexers/actionscript.rb +195 -0
  154. data/lib/rouge/lexers/apache.rb +71 -0
  155. data/lib/rouge/lexers/apache/keywords.yml +764 -0
  156. data/lib/rouge/lexers/apiblueprint.rb +51 -0
  157. data/lib/rouge/lexers/apple_script.rb +367 -0
  158. data/lib/rouge/lexers/awk.rb +161 -0
  159. data/lib/rouge/lexers/biml.rb +41 -0
  160. data/lib/rouge/lexers/bsl.rb +81 -0
  161. data/lib/rouge/lexers/c.rb +217 -0
  162. data/lib/rouge/lexers/ceylon.rb +123 -0
  163. data/lib/rouge/lexers/cfscript.rb +153 -0
  164. data/lib/rouge/lexers/clojure.rb +112 -0
  165. data/lib/rouge/lexers/cmake.rb +206 -0
  166. data/lib/rouge/lexers/coffeescript.rb +174 -0
  167. data/lib/rouge/lexers/common_lisp.rb +345 -0
  168. data/lib/rouge/lexers/conf.rb +24 -0
  169. data/lib/rouge/lexers/console.rb +136 -0
  170. data/lib/rouge/lexers/coq.rb +191 -0
  171. data/lib/rouge/lexers/cpp.rb +78 -0
  172. data/lib/rouge/lexers/csharp.rb +114 -0
  173. data/lib/rouge/lexers/css.rb +273 -0
  174. data/lib/rouge/lexers/d.rb +176 -0
  175. data/lib/rouge/lexers/dart.rb +104 -0
  176. data/lib/rouge/lexers/diff.rb +31 -0
  177. data/lib/rouge/lexers/digdag.rb +72 -0
  178. data/lib/rouge/lexers/docker.rb +50 -0
  179. data/lib/rouge/lexers/dot.rb +68 -0
  180. data/lib/rouge/lexers/eiffel.rb +65 -0
  181. data/lib/rouge/lexers/elixir.rb +133 -0
  182. data/lib/rouge/lexers/erb.rb +56 -0
  183. data/lib/rouge/lexers/erlang.rb +118 -0
  184. data/lib/rouge/lexers/factor.rb +302 -0
  185. data/lib/rouge/lexers/fortran.rb +170 -0
  186. data/lib/rouge/lexers/fsharp.rb +118 -0
  187. data/lib/rouge/lexers/gal.rb +50 -0
  188. data/lib/rouge/lexers/gherkin.rb +137 -0
  189. data/lib/rouge/lexers/gherkin/keywords.rb +14 -0
  190. data/lib/rouge/lexers/glsl.rb +135 -0
  191. data/lib/rouge/lexers/go.rb +178 -0
  192. data/lib/rouge/lexers/gradle.rb +37 -0
  193. data/lib/rouge/lexers/graphql.rb +243 -0
  194. data/lib/rouge/lexers/groovy.rb +112 -0
  195. data/lib/rouge/lexers/haml.rb +233 -0
  196. data/lib/rouge/lexers/handlebars.rb +79 -0
  197. data/lib/rouge/lexers/haskell.rb +183 -0
  198. data/lib/rouge/lexers/html.rb +138 -0
  199. data/lib/rouge/lexers/http.rb +80 -0
  200. data/lib/rouge/lexers/hylang.rb +93 -0
  201. data/lib/rouge/lexers/idlang.rb +316 -0
  202. data/lib/rouge/lexers/igorpro.rb +407 -0
  203. data/lib/rouge/lexers/ini.rb +57 -0
  204. data/lib/rouge/lexers/io.rb +68 -0
  205. data/lib/rouge/lexers/irb.rb +66 -0
  206. data/lib/rouge/lexers/java.rb +87 -0
  207. data/lib/rouge/lexers/javascript.rb +269 -0
  208. data/lib/rouge/lexers/jinja.rb +137 -0
  209. data/lib/rouge/lexers/json.rb +29 -0
  210. data/lib/rouge/lexers/json_doc.rb +23 -0
  211. data/lib/rouge/lexers/jsonnet.rb +151 -0
  212. data/lib/rouge/lexers/jsx.rb +102 -0
  213. data/lib/rouge/lexers/julia.rb +172 -0
  214. data/lib/rouge/lexers/kotlin.rb +84 -0
  215. data/lib/rouge/lexers/lasso.rb +217 -0
  216. data/lib/rouge/lexers/lasso/keywords.yml +446 -0
  217. data/lib/rouge/lexers/liquid.rb +287 -0
  218. data/lib/rouge/lexers/literate_coffeescript.rb +33 -0
  219. data/lib/rouge/lexers/literate_haskell.rb +36 -0
  220. data/lib/rouge/lexers/llvm.rb +84 -0
  221. data/lib/rouge/lexers/lua.rb +125 -0
  222. data/lib/rouge/lexers/lua/builtins.rb +22 -0
  223. data/lib/rouge/lexers/make.rb +116 -0
  224. data/lib/rouge/lexers/markdown.rb +154 -0
  225. data/lib/rouge/lexers/matlab.rb +75 -0
  226. data/lib/rouge/lexers/matlab/builtins.rb +11 -0
  227. data/lib/rouge/lexers/moonscript.rb +114 -0
  228. data/lib/rouge/lexers/mosel.rb +231 -0
  229. data/lib/rouge/lexers/mxml.rb +68 -0
  230. data/lib/rouge/lexers/nasm.rb +203 -0
  231. data/lib/rouge/lexers/nginx.rb +71 -0
  232. data/lib/rouge/lexers/nim.rb +152 -0
  233. data/lib/rouge/lexers/objective_c.rb +208 -0
  234. data/lib/rouge/lexers/ocaml.rb +100 -0
  235. data/lib/rouge/lexers/pascal.rb +66 -0
  236. data/lib/rouge/lexers/perl.rb +197 -0
  237. data/lib/rouge/lexers/php.rb +193 -0
  238. data/lib/rouge/lexers/php/builtins.rb +194 -0
  239. data/lib/rouge/lexers/plain_text.rb +26 -0
  240. data/lib/rouge/lexers/plist.rb +49 -0
  241. data/lib/rouge/lexers/pony.rb +93 -0
  242. data/lib/rouge/lexers/powershell.rb +132 -0
  243. data/lib/rouge/lexers/praat.rb +350 -0
  244. data/lib/rouge/lexers/prolog.rb +64 -0
  245. data/lib/rouge/lexers/prometheus.rb +121 -0
  246. data/lib/rouge/lexers/properties.rb +55 -0
  247. data/lib/rouge/lexers/protobuf.rb +70 -0
  248. data/lib/rouge/lexers/puppet.rb +128 -0
  249. data/lib/rouge/lexers/python.rb +231 -0
  250. data/lib/rouge/lexers/q.rb +124 -0
  251. data/lib/rouge/lexers/qml.rb +73 -0
  252. data/lib/rouge/lexers/r.rb +89 -0
  253. data/lib/rouge/lexers/racket.rb +542 -0
  254. data/lib/rouge/lexers/ruby.rb +437 -0
  255. data/lib/rouge/lexers/rust.rb +192 -0
  256. data/lib/rouge/lexers/sass.rb +74 -0
  257. data/lib/rouge/lexers/sass/common.rb +180 -0
  258. data/lib/rouge/lexers/scala.rb +142 -0
  259. data/lib/rouge/lexers/scheme.rb +112 -0
  260. data/lib/rouge/lexers/scss.rb +34 -0
  261. data/lib/rouge/lexers/sed.rb +172 -0
  262. data/lib/rouge/lexers/shell.rb +180 -0
  263. data/lib/rouge/lexers/sieve.rb +96 -0
  264. data/lib/rouge/lexers/slim.rb +228 -0
  265. data/lib/rouge/lexers/smalltalk.rb +116 -0
  266. data/lib/rouge/lexers/smarty.rb +91 -0
  267. data/lib/rouge/lexers/sml.rb +348 -0
  268. data/lib/rouge/lexers/sql.rb +140 -0
  269. data/lib/rouge/lexers/swift.rb +161 -0
  270. data/lib/rouge/lexers/tap.rb +91 -0
  271. data/lib/rouge/lexers/tcl.rb +192 -0
  272. data/lib/rouge/lexers/tex.rb +69 -0
  273. data/lib/rouge/lexers/toml.rb +71 -0
  274. data/lib/rouge/lexers/tsx.rb +19 -0
  275. data/lib/rouge/lexers/tulip.rb +107 -0
  276. data/lib/rouge/lexers/turtle.rb +72 -0
  277. data/lib/rouge/lexers/twig.rb +39 -0
  278. data/lib/rouge/lexers/typescript.rb +22 -0
  279. data/lib/rouge/lexers/typescript/common.rb +33 -0
  280. data/lib/rouge/lexers/vala.rb +77 -0
  281. data/lib/rouge/lexers/vb.rb +164 -0
  282. data/lib/rouge/lexers/verilog.rb +164 -0
  283. data/lib/rouge/lexers/vhdl.rb +97 -0
  284. data/lib/rouge/lexers/viml.rb +101 -0
  285. data/lib/rouge/lexers/viml/keywords.rb +12 -0
  286. data/lib/rouge/lexers/vue.rb +124 -0
  287. data/lib/rouge/lexers/wollok.rb +107 -0
  288. data/lib/rouge/lexers/xml.rb +59 -0
  289. data/lib/rouge/lexers/yaml.rb +373 -0
  290. data/lib/rouge/plugins/redcarpet.rb +30 -0
  291. data/lib/rouge/regex_lexer.rb +441 -0
  292. data/lib/rouge/template_lexer.rb +20 -0
  293. data/lib/rouge/text_analyzer.rb +48 -0
  294. data/lib/rouge/theme.rb +213 -0
  295. data/lib/rouge/themes/base16.rb +130 -0
  296. data/lib/rouge/themes/colorful.rb +67 -0
  297. data/lib/rouge/themes/github.rb +71 -0
  298. data/lib/rouge/themes/gruvbox.rb +167 -0
  299. data/lib/rouge/themes/igor_pro.rb +20 -0
  300. data/lib/rouge/themes/molokai.rb +82 -0
  301. data/lib/rouge/themes/monokai.rb +92 -0
  302. data/lib/rouge/themes/monokai_sublime.rb +90 -0
  303. data/lib/rouge/themes/pastie.rb +69 -0
  304. data/lib/rouge/themes/thankful_eyes.rb +74 -0
  305. data/lib/rouge/themes/tulip.rb +69 -0
  306. data/lib/rouge/token.rb +182 -0
  307. data/lib/rouge/util.rb +101 -0
  308. data/lib/rouge/version.rb +7 -0
  309. data/lib/rougegal.rb +80 -0
  310. data/rougegal.gemspec +18 -0
  311. metadata +356 -0
@@ -0,0 +1,66 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Pascal < RegexLexer
6
+ tag 'pascal'
7
+ title "Pascal"
8
+ desc 'a procedural programming language commonly used as a teaching language.'
9
+ filenames '*.pas'
10
+
11
+ mimetypes 'text/x-pascal'
12
+
13
+ id = /@?[_a-z]\w*/i
14
+
15
+ keywords = %w(
16
+ absolute abstract all and and_then array as asm assembler attribute
17
+ begin bindable case class const constructor delay destructor div do
18
+ downto else end except exit export exports external far file finalization
19
+ finally for forward function goto if implementation import in inc index
20
+ inherited initialization inline interface interrupt is label library
21
+ message mod module near nil not object of on only operator or or_else
22
+ otherwise out overload override packed pascal pow private procedure program
23
+ property protected public published qualified raise read record register
24
+ repeat resident resourcestring restricted safecall segment set shl shr
25
+ stdcall stored string then threadvar to try type unit until uses value var
26
+ view virtual while with write writeln xor
27
+ )
28
+
29
+ keywords_type = %w(
30
+ ansichar ansistring bool boolean byte bytebool cardinal char comp currency
31
+ double dword extended int64 integer iunknown longbool longint longword pansichar
32
+ pansistring pbool pboolean pbyte pbytearray pcardinal pchar pcomp pcurrency
33
+ pdate pdatetime pdouble pdword pextended phandle pint64 pinteger plongint plongword
34
+ pointer ppointer pshortint pshortstring psingle psmallint pstring pvariant pwidechar
35
+ pwidestring pword pwordarray pwordbool real real48 shortint shortstring single
36
+ smallint string tclass tdate tdatetime textfile thandle tobject ttime variant
37
+ widechar widestring word wordbool
38
+ )
39
+
40
+ state :whitespace do
41
+ # Spaces
42
+ rule /\s+/m, Text
43
+ # // Comments
44
+ rule %r((//).*$\n?), Comment::Single
45
+ # -- Comments
46
+ rule %r((--).*$\n?), Comment::Single
47
+ # (* Comments *)
48
+ rule %r(\(\*.*?\*\))m, Comment::Multiline
49
+ # { Comments }
50
+ rule %r(\{.*?\})m, Comment::Multiline
51
+ end
52
+
53
+ state :root do
54
+ mixin :whitespace
55
+
56
+ rule %r{((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?}, Num
57
+ rule %r{[~!@#\$%\^&\*\(\)\+`\-={}\[\]:;<>\?,\.\/\|\\]}, Punctuation
58
+ rule %r{'([^']|'')*'}, Str
59
+ rule /(true|false|nil)\b/i, Name::Builtin
60
+ rule /\b(#{keywords.join('|')})\b/i, Keyword
61
+ rule /\b(#{keywords_type.join('|')})\b/i, Keyword::Type
62
+ rule id, Name
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,197 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Perl < RegexLexer
6
+ title "Perl"
7
+ desc "The Perl scripting language (perl.org)"
8
+
9
+ tag 'perl'
10
+ aliases 'pl'
11
+
12
+ filenames '*.pl', '*.pm'
13
+ mimetypes 'text/x-perl', 'application/x-perl'
14
+
15
+ def self.analyze_text(text)
16
+ return 1 if text.shebang? 'perl'
17
+ return 0.4 if text.include? 'my $'
18
+ end
19
+
20
+ keywords = %w(
21
+ case continue do else elsif for foreach if last my next our
22
+ redo reset then unless until while use print new BEGIN CHECK
23
+ INIT END return
24
+ )
25
+
26
+ builtins = %w(
27
+ abs accept alarm atan2 bind binmode bless caller chdir chmod
28
+ chomp chop chown chr chroot close closedir connect continue cos
29
+ crypt dbmclose dbmopen defined delete die dump each endgrent
30
+ endhostent endnetent endprotoent endpwent endservent eof eval
31
+ exec exists exit exp fcntl fileno flock fork format formline getc
32
+ getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent
33
+ getlogin getnetbyaddr getnetbyname getnetent getpeername
34
+ getpgrp getppid getpriority getprotobyname getprotobynumber
35
+ getprotoent getpwent getpwnam getpwuid getservbyname getservbyport
36
+ getservent getsockname getsockopt glob gmtime goto grep hex
37
+ import index int ioctl join keys kill last lc lcfirst length
38
+ link listen local localtime log lstat map mkdir msgctl msgget
39
+ msgrcv msgsnd my next no oct open opendir ord our pack package
40
+ pipe pop pos printf prototype push quotemeta rand read readdir
41
+ readline readlink readpipe recv redo ref rename require reverse
42
+ rewinddir rindex rmdir scalar seek seekdir select semctl semget
43
+ semop send setgrent sethostent setnetent setpgrp setpriority
44
+ setprotoent setpwent setservent setsockopt shift shmctl shmget
45
+ shmread shmwrite shutdown sin sleep socket socketpair sort splice
46
+ split sprintf sqrt srand stat study substr symlink syscall sysopen
47
+ sysread sysseek system syswrite tell telldir tie tied time times
48
+ tr truncate uc ucfirst umask undef unlink unpack unshift untie
49
+ utime values vec wait waitpid wantarray warn write
50
+ )
51
+
52
+ re_tok = Str::Regex
53
+
54
+ state :balanced_regex do
55
+ rule %r(/(\\[\\/]|[^/])*/[egimosx]*)m, re_tok, :pop!
56
+ rule %r(!(\\[\\!]|[^!])*![egimosx]*)m, re_tok, :pop!
57
+ rule %r(\\(\\\\|[^\\])*\\[egimosx]*)m, re_tok, :pop!
58
+ rule %r({(\\[\\}]|[^}])*}[egimosx]*), re_tok, :pop!
59
+ rule %r(<(\\[\\>]|[^>])*>[egimosx]*), re_tok, :pop!
60
+ rule %r(\[(\\[\\\]]|[^\]])*\][egimosx]*), re_tok, :pop!
61
+ rule %r[\((\\[\\\)]|[^\)])*\)[egimosx]*], re_tok, :pop!
62
+ rule %r(@(\\[\\@]|[^@])*@[egimosx]*), re_tok, :pop!
63
+ rule %r(%(\\[\\%]|[^%])*%[egimosx]*), re_tok, :pop!
64
+ rule %r(\$(\\[\\\$]|[^\$])*\$[egimosx]*), re_tok, :pop!
65
+ end
66
+
67
+ state :root do
68
+ rule /#.*?$/, Comment::Single
69
+ rule /^=[a-zA-Z0-9]+\s+.*?\n=cut/m, Comment::Multiline
70
+ rule /(?:#{keywords.join('|')})\b/, Keyword
71
+
72
+ rule /(format)(\s+)([a-zA-Z0-9_]+)(\s*)(=)(\s*\n)/ do
73
+ groups Keyword, Text, Name, Text, Punctuation, Text
74
+
75
+ push :format
76
+ end
77
+
78
+ rule /(?:eq|lt|gt|le|ge|ne|not|and|or|cmp)\b/, Operator::Word
79
+
80
+ # common delimiters
81
+ rule %r(s/(\\\\|\\/|[^/])*/(\\\\|\\/|[^/])*/[egimosx]*), re_tok
82
+ rule %r(s!(\\\\|\\!|[^!])*!(\\\\|\\!|[^!])*![egimosx]*), re_tok
83
+ rule %r(s\\(\\\\|[^\\])*\\(\\\\|[^\\])*\\[egimosx]*), re_tok
84
+ rule %r(s@(\\\\|\\@|[^@])*@(\\\\|\\@|[^@])*@[egimosx]*), re_tok
85
+ rule %r(s%(\\\\|\\%|[^%])*%(\\\\|\\%|[^%])*%[egimosx]*), re_tok
86
+
87
+ # balanced delimiters
88
+ rule %r(s{(\\\\|\\}|[^}])*}\s*), re_tok, :balanced_regex
89
+ rule %r(s<(\\\\|\\>|[^>])*>\s*), re_tok, :balanced_regex
90
+ rule %r(s\[(\\\\|\\\]|[^\]])*\]\s*), re_tok, :balanced_regex
91
+ rule %r[s\((\\\\|\\\)|[^\)])*\)\s*], re_tok, :balanced_regex
92
+
93
+ rule %r(m?/(\\\\|\\/|[^/\n])*/[gcimosx]*), re_tok
94
+ rule %r(m(?=[/!\\{<\[\(@%\$])), re_tok, :balanced_regex
95
+ rule %r(((?<==~)|(?<=\())\s*/(\\\\|\\/|[^/])*/[gcimosx]*),
96
+ re_tok, :balanced_regex
97
+
98
+ rule /\s+/, Text
99
+ rule /(?:#{builtins.join('|')})\b/, Name::Builtin
100
+ rule /((__(DATA|DIE|WARN)__)|(STD(IN|OUT|ERR)))\b/,
101
+ Name::Builtin::Pseudo
102
+
103
+ rule /<<([\'"]?)([a-zA-Z_][a-zA-Z0-9_]*)\1;?\n.*?\n\2\n/m, Str
104
+
105
+ rule /__END__\b/, Comment::Preproc, :end_part
106
+ rule /\$\^[ADEFHILMOPSTWX]/, Name::Variable::Global
107
+ rule /\$[\\"'\[\]&`+*.,;=%~?@$!<>(^\|\/-](?!\w)/, Name::Variable::Global
108
+ rule /[$@%#]+/, Name::Variable, :varname
109
+
110
+ rule /0_?[0-7]+(_[0-7]+)*/, Num::Oct
111
+ rule /0x[0-9A-Fa-f]+(_[0-9A-Fa-f]+)*/, Num::Hex
112
+ rule /0b[01]+(_[01]+)*/, Num::Bin
113
+ rule /(\d*(_\d*)*\.\d+(_\d*)*|\d+(_\d*)*\.\d+(_\d*)*)(e[+-]?\d+)?/i,
114
+ Num::Float
115
+ rule /\d+(_\d*)*e[+-]?\d+(_\d*)*/i, Num::Float
116
+ rule /\d+(_\d+)*/, Num::Integer
117
+
118
+ rule /'(\\\\|\\'|[^'])*'/, Str
119
+ rule /"(\\\\|\\"|[^"])*"/, Str
120
+ rule /`(\\\\|\\`|[^`])*`/, Str::Backtick
121
+ rule /<([^\s>]+)>/, re_tok
122
+ rule /(q|qq|qw|qr|qx)\{/, Str::Other, :cb_string
123
+ rule /(q|qq|qw|qr|qx)\(/, Str::Other, :rb_string
124
+ rule /(q|qq|qw|qr|qx)\[/, Str::Other, :sb_string
125
+ rule /(q|qq|qw|qr|qx)</, Str::Other, :lt_string
126
+ rule /(q|qq|qw|qr|qx)([^a-zA-Z0-9])(.|\n)*?\2/, Str::Other
127
+
128
+ rule /package\s+/, Keyword, :modulename
129
+ rule /sub\s+/, Keyword, :funcname
130
+ rule /\[\]|\*\*|::|<<|>>|>=|<=|<=>|={3}|!=|=~|!~|&&?|\|\||\.{1,3}/,
131
+ Operator
132
+ rule /[-+\/*%=<>&^\|!\\~]=?/, Operator
133
+ rule /[()\[\]:;,<>\/?{}]/, Punctuation
134
+ rule(/(?=\w)/) { push :name }
135
+ end
136
+
137
+ state :format do
138
+ rule /\.\n/, Str::Interpol, :pop!
139
+ rule /.*?\n/, Str::Interpol
140
+ end
141
+
142
+ state :name_common do
143
+ rule /\w+::/, Name::Namespace
144
+ rule /[\w:]+/, Name::Variable, :pop!
145
+ end
146
+
147
+ state :varname do
148
+ rule /\s+/, Text
149
+ rule /\{/, Punctuation, :pop! # hash syntax
150
+ rule /\)|,/, Punctuation, :pop! # arg specifier
151
+ mixin :name_common
152
+ end
153
+
154
+ state :name do
155
+ mixin :name_common
156
+ rule /[A-Z_]+(?=[^a-zA-Z0-9_])/, Name::Constant, :pop!
157
+ rule(/(?=\W)/) { pop! }
158
+ end
159
+
160
+ state :modulename do
161
+ rule /[a-z_]\w*/i, Name::Namespace, :pop!
162
+ end
163
+
164
+ state :funcname do
165
+ rule /[a-zA-Z_]\w*[!?]?/, Name::Function
166
+ rule /\s+/, Text
167
+
168
+ # argument declaration
169
+ rule /(\([$@%]*\))(\s*)/ do
170
+ groups Punctuation, Text
171
+ end
172
+
173
+ rule /.*?{/, Punctuation, :pop!
174
+ rule /;/, Punctuation, :pop!
175
+ end
176
+
177
+ [[:cb, '\{', '\}'],
178
+ [:rb, '\(', '\)'],
179
+ [:sb, '\[', '\]'],
180
+ [:lt, '<', '>']].each do |name, open, close|
181
+ tok = Str::Other
182
+ state :"#{name}_string" do
183
+ rule /\\[#{open}#{close}\\]/, tok
184
+ rule /\\/, tok
185
+ rule(/#{open}/) { token tok; push }
186
+ rule /#{close}/, tok, :pop!
187
+ rule /[^#{open}#{close}\\]+/, tok
188
+ end
189
+ end
190
+
191
+ state :end_part do
192
+ # eat the rest of the stream
193
+ rule /.+/m, Comment::Preproc, :pop!
194
+ end
195
+ end
196
+ end
197
+ end
@@ -0,0 +1,193 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class PHP < TemplateLexer
6
+ title "PHP"
7
+ desc "The PHP scripting language (php.net)"
8
+ tag 'php'
9
+ aliases 'php', 'php3', 'php4', 'php5'
10
+ filenames '*.php', '*.php[345t]','*.phtml',
11
+ # Support Drupal file extensions, see:
12
+ # https://github.com/gitlabhq/gitlabhq/issues/8900
13
+ '*.module', '*.inc', '*.profile', '*.install', '*.test'
14
+ mimetypes 'text/x-php'
15
+
16
+ option :start_inline, 'Whether to start with inline php or require <?php ... ?>. (default: best guess)'
17
+ option :funcnamehighlighting, 'Whether to highlight builtin functions (default: true)'
18
+ option :disabledmodules, 'Disable certain modules from being highlighted as builtins (default: empty)'
19
+
20
+ def initialize(*)
21
+ super
22
+
23
+ # if truthy, the lexer starts highlighting with php code
24
+ # (no <?php required)
25
+ @start_inline = bool_option(:start_inline) { :guess }
26
+ @funcnamehighlighting = bool_option(:funcnamehighlighting) { true }
27
+ @disabledmodules = list_option(:disabledmodules)
28
+ end
29
+
30
+ def self.builtins
31
+ load Pathname.new(__FILE__).dirname.join('php/builtins.rb')
32
+ self.builtins
33
+ end
34
+
35
+ def builtins
36
+ return [] unless @funcnamehighlighting
37
+
38
+ @builtins ||= Set.new.tap do |builtins|
39
+ self.class.builtins.each do |mod, fns|
40
+ next if @disabledmodules.include? mod
41
+ builtins.merge(fns)
42
+ end
43
+ end
44
+ end
45
+
46
+ # source: http://php.net/manual/en/language.variables.basics.php
47
+ # the given regex is invalid utf8, so... we're using the unicode
48
+ # "Letter" property instead.
49
+ id = /[\p{L}_][\p{L}\p{N}_]*/
50
+ nsid = /#{id}(?:\\#{id})*/
51
+
52
+ start do
53
+ case @start_inline
54
+ when true
55
+ push :template
56
+ push :php
57
+ when false
58
+ push :template
59
+ when :guess
60
+ # pass
61
+ end
62
+ end
63
+
64
+ def self.keywords
65
+ @keywords ||= Set.new %w(
66
+ and E_PARSE old_function E_ERROR or as E_WARNING parent eval
67
+ PHP_OS break exit case extends PHP_VERSION cfunction FALSE
68
+ print for require continue foreach require_once declare return
69
+ default static do switch die stdClass echo else TRUE elseif
70
+ var empty if xor enddeclare include virtual endfor include_once
71
+ while endforeach global __FILE__ endif list __LINE__ endswitch
72
+ new __sleep endwhile not array __wakeup E_ALL NULL final
73
+ php_user_filter interface implements public private protected
74
+ abstract clone try catch throw this use namespace yield
75
+ )
76
+ end
77
+
78
+ def self.analyze_text(text)
79
+ return 1 if text.shebang?('php')
80
+ return 0.3 if /<\?(?!xml)/ =~ text
81
+ 0
82
+ end
83
+
84
+ state :root do
85
+ # some extremely rough heuristics to decide whether to start inline or not
86
+ rule(/\s*(?=<)/m) { delegate parent; push :template }
87
+ rule(/[^$]+(?=<\?(php|=))/) { delegate parent; push :template }
88
+
89
+ rule(//) { push :template; push :php }
90
+ end
91
+
92
+ state :template do
93
+ rule /<\?(php|=)?/, Comment::Preproc, :php
94
+ rule(/.*?(?=<\?)|.*/m) { delegate parent }
95
+ end
96
+
97
+ state :php do
98
+ rule /\?>/, Comment::Preproc, :pop!
99
+ # heredocs
100
+ rule /<<<('?)(#{id})\1\n.*?\n\2;?\n/im, Str::Heredoc
101
+ rule /\s+/, Text
102
+ rule /#.*?\n/, Comment::Single
103
+ rule %r(//.*?\n), Comment::Single
104
+ # empty comment, otherwise seen as the start of a docstring
105
+ rule %r(/\*\*/), Comment::Multiline
106
+ rule %r(/\*\*.*?\*/)m, Str::Doc
107
+ rule %r(/\*.*?\*/)m, Comment::Multiline
108
+ rule /(->|::)(\s*)(#{id})/ do
109
+ groups Operator, Text, Name::Attribute
110
+ end
111
+
112
+ rule /[~!%^&*+=\|:.<>\/?@-]+/, Operator
113
+ rule /[\[\]{}();,]/, Punctuation
114
+ rule /class\b/, Keyword, :classname
115
+ # anonymous functions
116
+ rule /(function)(\s*)(?=\()/ do
117
+ groups Keyword, Text
118
+ end
119
+
120
+ # named functions
121
+ rule /(function)(\s+)(&?)(\s*)/ do
122
+ groups Keyword, Text, Operator, Text
123
+ push :funcname
124
+ end
125
+
126
+ rule /(const)(\s+)(#{id})/i do
127
+ groups Keyword, Text, Name::Constant
128
+ end
129
+
130
+ rule /(true|false|null)\b/, Keyword::Constant
131
+ rule /\$\{\$+#{id}\}/i, Name::Variable
132
+ rule /\$+#{id}/i, Name::Variable
133
+
134
+ # may be intercepted for builtin highlighting
135
+ rule /\\?#{nsid}/i do |m|
136
+ name = m[0]
137
+
138
+ if self.class.keywords.include? name
139
+ token Keyword
140
+ elsif self.builtins.include? name
141
+ token Name::Builtin
142
+ else
143
+ token Name::Other
144
+ end
145
+ end
146
+
147
+ rule /(\d+\.\d*|\d*\.\d+)(e[+-]?\d+)?/i, Num::Float
148
+ rule /\d+e[+-]?\d+/i, Num::Float
149
+ rule /0[0-7]+/, Num::Oct
150
+ rule /0x[a-f0-9]+/i, Num::Hex
151
+ rule /\d+/, Num::Integer
152
+ rule /'([^'\\]*(?:\\.[^'\\]*)*)'/, Str::Single
153
+ rule /`([^`\\]*(?:\\.[^`\\]*)*)`/, Str::Backtick
154
+ rule /"/, Str::Double, :string
155
+ end
156
+
157
+ state :classname do
158
+ rule /\s+/, Text
159
+ rule /#{nsid}/, Name::Class, :pop!
160
+ end
161
+
162
+ state :funcname do
163
+ rule /#{id}/, Name::Function, :pop!
164
+ end
165
+
166
+ state :string do
167
+ rule /"/, Str::Double, :pop!
168
+ rule /[^\\{$"]+/, Str::Double
169
+ rule /\\([nrt\"$\\]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})/,
170
+ Str::Escape
171
+ rule /\$#{id}(\[\S+\]|->#{id})?/, Name::Variable
172
+
173
+ rule /\{\$\{/, Str::Interpol, :interp_double
174
+ rule /\{(?=\$)/, Str::Interpol, :interp_single
175
+ rule /(\{)(\S+)(\})/ do
176
+ groups Str::Interpol, Name::Variable, Str::Interpol
177
+ end
178
+
179
+ rule /[${\\]+/, Str::Double
180
+ end
181
+
182
+ state :interp_double do
183
+ rule /\}\}/, Str::Interpol, :pop!
184
+ mixin :php
185
+ end
186
+
187
+ state :interp_single do
188
+ rule /\}/, Str::Interpol, :pop!
189
+ mixin :php
190
+ end
191
+ end
192
+ end
193
+ end