pygments.rb 1.2.1 → 2.0.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 (381) hide show
  1. checksums.yaml +5 -5
  2. data/.github/dependabot.yml +13 -0
  3. data/.github/workflows/ci.yml +28 -0
  4. data/.github/workflows/release.yml +24 -0
  5. data/.gitignore +5 -6
  6. data/CHANGELOG.adoc +128 -0
  7. data/Gemfile +3 -1
  8. data/LICENSE +1 -1
  9. data/README.adoc +160 -0
  10. data/Rakefile +11 -21
  11. data/bench.rb +8 -7
  12. data/cache-lexers.rb +3 -2
  13. data/lexers +0 -0
  14. data/lib/pygments/lexer.rb +5 -5
  15. data/lib/pygments/mentos.py +23 -110
  16. data/lib/pygments/popen.rb +148 -229
  17. data/lib/pygments/version.rb +2 -2
  18. data/lib/pygments.rb +10 -11
  19. data/pygments.rb.gemspec +12 -10
  20. data/test/test_pygments.rb +46 -104
  21. data/vendor/pygments-main/{AUTHORS → Pygments-2.7.3.dist-info/AUTHORS} +21 -3
  22. data/vendor/pygments-main/Pygments-2.7.3.dist-info/INSTALLER +1 -0
  23. data/vendor/pygments-main/{LICENSE → Pygments-2.7.3.dist-info/LICENSE} +1 -1
  24. data/vendor/pygments-main/Pygments-2.7.3.dist-info/METADATA +49 -0
  25. data/vendor/pygments-main/Pygments-2.7.3.dist-info/RECORD +482 -0
  26. data/vendor/pygments-main/Pygments-2.7.3.dist-info/REQUESTED +0 -0
  27. data/vendor/pygments-main/Pygments-2.7.3.dist-info/WHEEL +5 -0
  28. data/vendor/pygments-main/Pygments-2.7.3.dist-info/entry_points.txt +3 -0
  29. data/vendor/pygments-main/Pygments-2.7.3.dist-info/top_level.txt +1 -0
  30. data/vendor/pygments-main/bin/pygmentize +8 -0
  31. data/vendor/pygments-main/pygments/__init__.py +6 -11
  32. data/vendor/pygments-main/pygments/__main__.py +18 -0
  33. data/vendor/pygments-main/pygments/cmdline.py +38 -29
  34. data/vendor/pygments-main/pygments/console.py +6 -9
  35. data/vendor/pygments-main/pygments/filter.py +4 -6
  36. data/vendor/pygments-main/pygments/filters/__init__.py +609 -21
  37. data/vendor/pygments-main/pygments/formatter.py +4 -4
  38. data/vendor/pygments-main/pygments/formatters/__init__.py +9 -8
  39. data/vendor/pygments-main/pygments/formatters/_mapping.py +1 -3
  40. data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -1
  41. data/vendor/pygments-main/pygments/formatters/html.py +223 -135
  42. data/vendor/pygments-main/pygments/formatters/img.py +68 -41
  43. data/vendor/pygments-main/pygments/formatters/irc.py +39 -39
  44. data/vendor/pygments-main/pygments/formatters/latex.py +56 -26
  45. data/vendor/pygments-main/pygments/formatters/other.py +12 -8
  46. data/vendor/pygments-main/pygments/formatters/rtf.py +29 -29
  47. data/vendor/pygments-main/pygments/formatters/svg.py +38 -4
  48. data/vendor/pygments-main/pygments/formatters/terminal.py +25 -31
  49. data/vendor/pygments-main/pygments/formatters/terminal256.py +22 -12
  50. data/vendor/pygments-main/pygments/lexer.py +41 -39
  51. data/vendor/pygments-main/pygments/lexers/__init__.py +28 -15
  52. data/vendor/pygments-main/pygments/lexers/_asy_builtins.py +5 -5
  53. data/vendor/pygments-main/pygments/lexers/_cl_builtins.py +15 -15
  54. data/vendor/pygments-main/pygments/lexers/_cocoa_builtins.py +11 -12
  55. data/vendor/pygments-main/pygments/lexers/_csound_builtins.py +1717 -1338
  56. data/vendor/pygments-main/pygments/lexers/_lasso_builtins.py +1 -1
  57. data/vendor/pygments-main/pygments/lexers/_lua_builtins.py +2 -4
  58. data/vendor/pygments-main/pygments/lexers/_mapping.py +74 -29
  59. data/vendor/pygments-main/pygments/lexers/_mql_builtins.py +2 -2
  60. data/vendor/pygments-main/pygments/lexers/_mysql_builtins.py +1282 -0
  61. data/vendor/pygments-main/pygments/lexers/_openedge_builtins.py +1 -1
  62. data/vendor/pygments-main/pygments/lexers/_php_builtins.py +17 -20
  63. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +73 -16
  64. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +2 -2
  65. data/vendor/pygments-main/pygments/lexers/_sourcemod_builtins.py +1 -3
  66. data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +151 -125
  67. data/vendor/pygments-main/pygments/lexers/_stata_builtins.py +6 -4
  68. data/vendor/pygments-main/pygments/lexers/_tsql_builtins.py +1 -1
  69. data/vendor/pygments-main/pygments/lexers/_usd_builtins.py +113 -0
  70. data/vendor/pygments-main/pygments/lexers/_vbscript_builtins.py +280 -0
  71. data/vendor/pygments-main/pygments/lexers/_vim_builtins.py +1 -1
  72. data/vendor/pygments-main/pygments/lexers/actionscript.py +8 -3
  73. data/vendor/pygments-main/pygments/lexers/agile.py +1 -1
  74. data/vendor/pygments-main/pygments/lexers/algebra.py +20 -1
  75. data/vendor/pygments-main/pygments/lexers/ambient.py +1 -1
  76. data/vendor/pygments-main/pygments/lexers/ampl.py +3 -3
  77. data/vendor/pygments-main/pygments/lexers/apl.py +15 -15
  78. data/vendor/pygments-main/pygments/lexers/archetype.py +3 -3
  79. data/vendor/pygments-main/pygments/lexers/arrow.py +117 -0
  80. data/vendor/pygments-main/pygments/lexers/asm.py +440 -76
  81. data/vendor/pygments-main/pygments/lexers/automation.py +1 -1
  82. data/vendor/pygments-main/pygments/lexers/bare.py +104 -0
  83. data/vendor/pygments-main/pygments/lexers/basic.py +166 -4
  84. data/vendor/pygments-main/pygments/lexers/bibtex.py +5 -5
  85. data/vendor/pygments-main/pygments/lexers/boa.py +102 -0
  86. data/vendor/pygments-main/pygments/lexers/business.py +17 -2
  87. data/vendor/pygments-main/pygments/lexers/c_cpp.py +137 -45
  88. data/vendor/pygments-main/pygments/lexers/c_like.py +67 -42
  89. data/vendor/pygments-main/pygments/lexers/capnproto.py +7 -7
  90. data/vendor/pygments-main/pygments/lexers/chapel.py +23 -13
  91. data/vendor/pygments-main/pygments/lexers/clean.py +135 -244
  92. data/vendor/pygments-main/pygments/lexers/compiled.py +1 -1
  93. data/vendor/pygments-main/pygments/lexers/configs.py +187 -36
  94. data/vendor/pygments-main/pygments/lexers/console.py +1 -1
  95. data/vendor/pygments-main/pygments/lexers/crystal.py +3 -4
  96. data/vendor/pygments-main/pygments/lexers/csound.py +288 -187
  97. data/vendor/pygments-main/pygments/lexers/css.py +18 -16
  98. data/vendor/pygments-main/pygments/lexers/d.py +10 -5
  99. data/vendor/pygments-main/pygments/lexers/dalvik.py +1 -1
  100. data/vendor/pygments-main/pygments/lexers/data.py +240 -97
  101. data/vendor/pygments-main/pygments/lexers/devicetree.py +109 -0
  102. data/vendor/pygments-main/pygments/lexers/diff.py +4 -4
  103. data/vendor/pygments-main/pygments/lexers/dotnet.py +40 -24
  104. data/vendor/pygments-main/pygments/lexers/dsls.py +144 -62
  105. data/vendor/pygments-main/pygments/lexers/dylan.py +16 -18
  106. data/vendor/pygments-main/pygments/lexers/ecl.py +16 -2
  107. data/vendor/pygments-main/pygments/lexers/eiffel.py +1 -1
  108. data/vendor/pygments-main/pygments/lexers/elm.py +5 -5
  109. data/vendor/pygments-main/pygments/lexers/email.py +151 -0
  110. data/vendor/pygments-main/pygments/lexers/erlang.py +29 -32
  111. data/vendor/pygments-main/pygments/lexers/esoteric.py +46 -19
  112. data/vendor/pygments-main/pygments/lexers/ezhil.py +21 -13
  113. data/vendor/pygments-main/pygments/lexers/factor.py +1 -1
  114. data/vendor/pygments-main/pygments/lexers/fantom.py +1 -1
  115. data/vendor/pygments-main/pygments/lexers/felix.py +1 -1
  116. data/vendor/pygments-main/pygments/lexers/floscript.py +83 -0
  117. data/vendor/pygments-main/pygments/lexers/forth.py +41 -40
  118. data/vendor/pygments-main/pygments/lexers/fortran.py +5 -4
  119. data/vendor/pygments-main/pygments/lexers/foxpro.py +2 -2
  120. data/vendor/pygments-main/pygments/lexers/freefem.py +898 -0
  121. data/vendor/pygments-main/pygments/lexers/functional.py +1 -1
  122. data/vendor/pygments-main/pygments/lexers/gdscript.py +346 -0
  123. data/vendor/pygments-main/pygments/lexers/go.py +1 -1
  124. data/vendor/pygments-main/pygments/lexers/grammar_notation.py +62 -5
  125. data/vendor/pygments-main/pygments/lexers/graph.py +14 -9
  126. data/vendor/pygments-main/pygments/lexers/graphics.py +272 -25
  127. data/vendor/pygments-main/pygments/lexers/haskell.py +48 -21
  128. data/vendor/pygments-main/pygments/lexers/haxe.py +6 -6
  129. data/vendor/pygments-main/pygments/lexers/hdl.py +176 -86
  130. data/vendor/pygments-main/pygments/lexers/hexdump.py +1 -1
  131. data/vendor/pygments-main/pygments/lexers/html.py +31 -19
  132. data/vendor/pygments-main/pygments/lexers/idl.py +19 -8
  133. data/vendor/pygments-main/pygments/lexers/igor.py +244 -112
  134. data/vendor/pygments-main/pygments/lexers/inferno.py +2 -2
  135. data/vendor/pygments-main/pygments/lexers/installers.py +1 -1
  136. data/vendor/pygments-main/pygments/lexers/int_fiction.py +40 -15
  137. data/vendor/pygments-main/pygments/lexers/iolang.py +2 -2
  138. data/vendor/pygments-main/pygments/lexers/j.py +3 -3
  139. data/vendor/pygments-main/pygments/lexers/javascript.py +60 -45
  140. data/vendor/pygments-main/pygments/lexers/julia.py +44 -46
  141. data/vendor/pygments-main/pygments/lexers/jvm.py +265 -165
  142. data/vendor/pygments-main/pygments/lexers/lisp.py +882 -804
  143. data/vendor/pygments-main/pygments/lexers/make.py +10 -6
  144. data/vendor/pygments-main/pygments/lexers/markup.py +213 -43
  145. data/vendor/pygments-main/pygments/lexers/math.py +1 -1
  146. data/vendor/pygments-main/pygments/lexers/matlab.py +98 -41
  147. data/vendor/pygments-main/pygments/lexers/mime.py +226 -0
  148. data/vendor/pygments-main/pygments/lexers/ml.py +198 -9
  149. data/vendor/pygments-main/pygments/lexers/modeling.py +26 -18
  150. data/vendor/pygments-main/pygments/lexers/modula2.py +25 -6
  151. data/vendor/pygments-main/pygments/lexers/monte.py +1 -1
  152. data/vendor/pygments-main/pygments/lexers/mosel.py +448 -0
  153. data/vendor/pygments-main/pygments/lexers/ncl.py +1 -1
  154. data/vendor/pygments-main/pygments/lexers/nimrod.py +4 -4
  155. data/vendor/pygments-main/pygments/lexers/nit.py +1 -1
  156. data/vendor/pygments-main/pygments/lexers/nix.py +1 -1
  157. data/vendor/pygments-main/pygments/lexers/oberon.py +17 -1
  158. data/vendor/pygments-main/pygments/lexers/objective.py +16 -16
  159. data/vendor/pygments-main/pygments/lexers/ooc.py +1 -1
  160. data/vendor/pygments-main/pygments/lexers/other.py +1 -1
  161. data/vendor/pygments-main/pygments/lexers/parasail.py +1 -1
  162. data/vendor/pygments-main/pygments/lexers/parsers.py +23 -58
  163. data/vendor/pygments-main/pygments/lexers/pascal.py +22 -22
  164. data/vendor/pygments-main/pygments/lexers/pawn.py +30 -24
  165. data/vendor/pygments-main/pygments/lexers/perl.py +260 -148
  166. data/vendor/pygments-main/pygments/lexers/php.py +64 -10
  167. data/vendor/pygments-main/pygments/lexers/pointless.py +71 -0
  168. data/vendor/pygments-main/pygments/lexers/pony.py +94 -0
  169. data/vendor/pygments-main/pygments/lexers/praat.py +38 -30
  170. data/vendor/pygments-main/pygments/lexers/prolog.py +36 -36
  171. data/vendor/pygments-main/pygments/lexers/promql.py +183 -0
  172. data/vendor/pygments-main/pygments/lexers/python.py +439 -227
  173. data/vendor/pygments-main/pygments/lexers/qvt.py +6 -6
  174. data/vendor/pygments-main/pygments/lexers/r.py +13 -275
  175. data/vendor/pygments-main/pygments/lexers/rdf.py +232 -39
  176. data/vendor/pygments-main/pygments/lexers/rebol.py +8 -8
  177. data/vendor/pygments-main/pygments/lexers/resource.py +2 -2
  178. data/vendor/pygments-main/pygments/lexers/ride.py +139 -0
  179. data/vendor/pygments-main/pygments/lexers/rnc.py +1 -1
  180. data/vendor/pygments-main/pygments/lexers/roboconf.py +1 -1
  181. data/vendor/pygments-main/pygments/lexers/robotframework.py +23 -31
  182. data/vendor/pygments-main/pygments/lexers/ruby.py +22 -24
  183. data/vendor/pygments-main/pygments/lexers/rust.py +76 -72
  184. data/vendor/pygments-main/pygments/lexers/sas.py +1 -1
  185. data/vendor/pygments-main/pygments/lexers/scdoc.py +83 -0
  186. data/vendor/pygments-main/pygments/lexers/scripting.py +75 -13
  187. data/vendor/pygments-main/pygments/lexers/sgf.py +61 -0
  188. data/vendor/pygments-main/pygments/lexers/shell.py +162 -42
  189. data/vendor/pygments-main/pygments/lexers/sieve.py +69 -0
  190. data/vendor/pygments-main/pygments/lexers/slash.py +185 -0
  191. data/vendor/pygments-main/pygments/lexers/smalltalk.py +2 -2
  192. data/vendor/pygments-main/pygments/lexers/smv.py +3 -3
  193. data/vendor/pygments-main/pygments/lexers/snobol.py +1 -1
  194. data/vendor/pygments-main/pygments/lexers/solidity.py +92 -0
  195. data/vendor/pygments-main/pygments/lexers/special.py +5 -3
  196. data/vendor/pygments-main/pygments/lexers/sql.py +333 -177
  197. data/vendor/pygments-main/pygments/lexers/stata.py +107 -44
  198. data/vendor/pygments-main/pygments/lexers/supercollider.py +6 -1
  199. data/vendor/pygments-main/pygments/lexers/tcl.py +1 -1
  200. data/vendor/pygments-main/pygments/lexers/templates.py +102 -121
  201. data/vendor/pygments-main/pygments/lexers/teraterm.py +335 -0
  202. data/vendor/pygments-main/pygments/lexers/testing.py +6 -6
  203. data/vendor/pygments-main/pygments/lexers/text.py +2 -1
  204. data/vendor/pygments-main/pygments/lexers/textedit.py +4 -4
  205. data/vendor/pygments-main/pygments/lexers/textfmts.py +146 -13
  206. data/vendor/pygments-main/pygments/lexers/theorem.py +69 -53
  207. data/vendor/pygments-main/pygments/lexers/tnt.py +263 -0
  208. data/vendor/pygments-main/pygments/lexers/trafficscript.py +1 -1
  209. data/vendor/pygments-main/pygments/lexers/typoscript.py +4 -11
  210. data/vendor/pygments-main/pygments/lexers/unicon.py +412 -0
  211. data/vendor/pygments-main/pygments/lexers/urbi.py +14 -1
  212. data/vendor/pygments-main/pygments/lexers/usd.py +90 -0
  213. data/vendor/pygments-main/pygments/lexers/varnish.py +3 -3
  214. data/vendor/pygments-main/pygments/lexers/verification.py +13 -10
  215. data/vendor/pygments-main/pygments/lexers/web.py +1 -1
  216. data/vendor/pygments-main/pygments/lexers/webidl.py +299 -0
  217. data/vendor/pygments-main/pygments/lexers/webmisc.py +31 -28
  218. data/vendor/pygments-main/pygments/lexers/whiley.py +5 -5
  219. data/vendor/pygments-main/pygments/lexers/x10.py +1 -1
  220. data/vendor/pygments-main/pygments/lexers/xorg.py +5 -4
  221. data/vendor/pygments-main/pygments/lexers/yang.py +104 -0
  222. data/vendor/pygments-main/pygments/lexers/zig.py +124 -0
  223. data/vendor/pygments-main/pygments/modeline.py +1 -1
  224. data/vendor/pygments-main/pygments/plugin.py +4 -2
  225. data/vendor/pygments-main/pygments/regexopt.py +1 -1
  226. data/vendor/pygments-main/pygments/scanner.py +2 -2
  227. data/vendor/pygments-main/pygments/sphinxext.py +2 -4
  228. data/vendor/pygments-main/pygments/style.py +61 -24
  229. data/vendor/pygments-main/pygments/styles/__init__.py +10 -4
  230. data/vendor/pygments-main/pygments/styles/abap.py +1 -1
  231. data/vendor/pygments-main/pygments/styles/algol.py +1 -1
  232. data/vendor/pygments-main/pygments/styles/algol_nu.py +1 -1
  233. data/vendor/pygments-main/pygments/styles/arduino.py +2 -2
  234. data/vendor/pygments-main/pygments/styles/autumn.py +1 -1
  235. data/vendor/pygments-main/pygments/styles/borland.py +1 -1
  236. data/vendor/pygments-main/pygments/styles/bw.py +1 -1
  237. data/vendor/pygments-main/pygments/styles/colorful.py +1 -1
  238. data/vendor/pygments-main/pygments/styles/default.py +1 -1
  239. data/vendor/pygments-main/pygments/styles/emacs.py +1 -1
  240. data/vendor/pygments-main/pygments/styles/friendly.py +1 -1
  241. data/vendor/pygments-main/pygments/styles/fruity.py +1 -1
  242. data/vendor/pygments-main/pygments/styles/igor.py +1 -1
  243. data/vendor/pygments-main/pygments/styles/inkpot.py +67 -0
  244. data/vendor/pygments-main/pygments/styles/lovelace.py +1 -1
  245. data/vendor/pygments-main/pygments/styles/manni.py +1 -1
  246. data/vendor/pygments-main/pygments/styles/monokai.py +4 -3
  247. data/vendor/pygments-main/pygments/styles/murphy.py +1 -1
  248. data/vendor/pygments-main/pygments/styles/native.py +1 -1
  249. data/vendor/pygments-main/pygments/styles/paraiso_dark.py +1 -1
  250. data/vendor/pygments-main/pygments/styles/paraiso_light.py +1 -1
  251. data/vendor/pygments-main/pygments/styles/pastie.py +1 -1
  252. data/vendor/pygments-main/pygments/styles/perldoc.py +1 -1
  253. data/vendor/pygments-main/pygments/styles/rainbow_dash.py +1 -1
  254. data/vendor/pygments-main/pygments/styles/rrt.py +1 -1
  255. data/vendor/pygments-main/pygments/styles/sas.py +1 -1
  256. data/vendor/pygments-main/pygments/styles/solarized.py +134 -0
  257. data/vendor/pygments-main/pygments/styles/stata_dark.py +41 -0
  258. data/vendor/pygments-main/pygments/styles/{stata.py → stata_light.py} +14 -15
  259. data/vendor/pygments-main/pygments/styles/tango.py +1 -1
  260. data/vendor/pygments-main/pygments/styles/trac.py +1 -1
  261. data/vendor/pygments-main/pygments/styles/vim.py +1 -1
  262. data/vendor/pygments-main/pygments/styles/vs.py +1 -1
  263. data/vendor/pygments-main/pygments/styles/xcode.py +1 -1
  264. data/vendor/pygments-main/pygments/token.py +1 -1
  265. data/vendor/pygments-main/pygments/unistring.py +47 -108
  266. data/vendor/pygments-main/pygments/util.py +15 -92
  267. metadata +68 -136
  268. data/CHANGELOG.md +0 -111
  269. data/README.md +0 -121
  270. data/circle.yml +0 -20
  271. data/test/test_data.c +0 -2581
  272. data/test/test_data.py +0 -514
  273. data/test/test_data_generated +0 -2582
  274. data/vendor/custom_lexers/github.py +0 -565
  275. data/vendor/pygments-main/CHANGES +0 -1186
  276. data/vendor/pygments-main/MANIFEST.in +0 -6
  277. data/vendor/pygments-main/Makefile +0 -65
  278. data/vendor/pygments-main/README.rst +0 -39
  279. data/vendor/pygments-main/REVISION +0 -1
  280. data/vendor/pygments-main/TODO +0 -12
  281. data/vendor/pygments-main/doc/Makefile +0 -153
  282. data/vendor/pygments-main/doc/_static/favicon.ico +0 -0
  283. data/vendor/pygments-main/doc/_static/logo_new.png +0 -0
  284. data/vendor/pygments-main/doc/_static/logo_only.png +0 -0
  285. data/vendor/pygments-main/doc/_templates/docssidebar.html +0 -3
  286. data/vendor/pygments-main/doc/_templates/indexsidebar.html +0 -25
  287. data/vendor/pygments-main/doc/_themes/pygments14/layout.html +0 -98
  288. data/vendor/pygments-main/doc/_themes/pygments14/static/bodybg.png +0 -0
  289. data/vendor/pygments-main/doc/_themes/pygments14/static/docbg.png +0 -0
  290. data/vendor/pygments-main/doc/_themes/pygments14/static/listitem.png +0 -0
  291. data/vendor/pygments-main/doc/_themes/pygments14/static/logo.png +0 -0
  292. data/vendor/pygments-main/doc/_themes/pygments14/static/pocoo.png +0 -0
  293. data/vendor/pygments-main/doc/_themes/pygments14/static/pygments14.css_t +0 -401
  294. data/vendor/pygments-main/doc/_themes/pygments14/theme.conf +0 -15
  295. data/vendor/pygments-main/doc/conf.py +0 -241
  296. data/vendor/pygments-main/doc/docs/api.rst +0 -354
  297. data/vendor/pygments-main/doc/docs/authors.rst +0 -4
  298. data/vendor/pygments-main/doc/docs/changelog.rst +0 -1
  299. data/vendor/pygments-main/doc/docs/cmdline.rst +0 -166
  300. data/vendor/pygments-main/doc/docs/filterdevelopment.rst +0 -71
  301. data/vendor/pygments-main/doc/docs/filters.rst +0 -41
  302. data/vendor/pygments-main/doc/docs/formatterdevelopment.rst +0 -169
  303. data/vendor/pygments-main/doc/docs/formatters.rst +0 -48
  304. data/vendor/pygments-main/doc/docs/index.rst +0 -66
  305. data/vendor/pygments-main/doc/docs/integrate.rst +0 -40
  306. data/vendor/pygments-main/doc/docs/java.rst +0 -70
  307. data/vendor/pygments-main/doc/docs/lexerdevelopment.rst +0 -728
  308. data/vendor/pygments-main/doc/docs/lexers.rst +0 -69
  309. data/vendor/pygments-main/doc/docs/moinmoin.rst +0 -39
  310. data/vendor/pygments-main/doc/docs/plugins.rst +0 -93
  311. data/vendor/pygments-main/doc/docs/quickstart.rst +0 -205
  312. data/vendor/pygments-main/doc/docs/rstdirective.rst +0 -22
  313. data/vendor/pygments-main/doc/docs/styles.rst +0 -201
  314. data/vendor/pygments-main/doc/docs/tokens.rst +0 -372
  315. data/vendor/pygments-main/doc/docs/unicode.rst +0 -58
  316. data/vendor/pygments-main/doc/download.rst +0 -41
  317. data/vendor/pygments-main/doc/faq.rst +0 -139
  318. data/vendor/pygments-main/doc/index.rst +0 -54
  319. data/vendor/pygments-main/doc/languages.rst +0 -154
  320. data/vendor/pygments-main/doc/make.bat +0 -190
  321. data/vendor/pygments-main/doc/pygmentize.1 +0 -94
  322. data/vendor/pygments-main/external/autopygmentize +0 -101
  323. data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +0 -162
  324. data/vendor/pygments-main/external/markdown-processor.py +0 -67
  325. data/vendor/pygments-main/external/moin-parser.py +0 -112
  326. data/vendor/pygments-main/external/pygments.bashcomp +0 -38
  327. data/vendor/pygments-main/external/rst-directive.py +0 -82
  328. data/vendor/pygments-main/pygmentize +0 -8
  329. data/vendor/pygments-main/pygments/lexers/github.py +0 -565
  330. data/vendor/pygments-main/requirements.txt +0 -5
  331. data/vendor/pygments-main/scripts/check_sources.py +0 -211
  332. data/vendor/pygments-main/scripts/debug_lexer.py +0 -246
  333. data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +0 -33
  334. data/vendor/pygments-main/scripts/epydoc.css +0 -280
  335. data/vendor/pygments-main/scripts/get_vimkw.py +0 -74
  336. data/vendor/pygments-main/scripts/pylintrc +0 -301
  337. data/vendor/pygments-main/scripts/vim2pygments.py +0 -935
  338. data/vendor/pygments-main/setup.cfg +0 -10
  339. data/vendor/pygments-main/setup.py +0 -77
  340. data/vendor/pygments-main/tox.ini +0 -7
  341. data/vendor/simplejson/.gitignore +0 -10
  342. data/vendor/simplejson/.travis.yml +0 -5
  343. data/vendor/simplejson/CHANGES.txt +0 -291
  344. data/vendor/simplejson/LICENSE.txt +0 -19
  345. data/vendor/simplejson/MANIFEST.in +0 -5
  346. data/vendor/simplejson/README.rst +0 -19
  347. data/vendor/simplejson/conf.py +0 -179
  348. data/vendor/simplejson/index.rst +0 -628
  349. data/vendor/simplejson/scripts/make_docs.py +0 -18
  350. data/vendor/simplejson/setup.py +0 -104
  351. data/vendor/simplejson/simplejson/__init__.py +0 -510
  352. data/vendor/simplejson/simplejson/_speedups.c +0 -2745
  353. data/vendor/simplejson/simplejson/decoder.py +0 -425
  354. data/vendor/simplejson/simplejson/encoder.py +0 -567
  355. data/vendor/simplejson/simplejson/ordered_dict.py +0 -119
  356. data/vendor/simplejson/simplejson/scanner.py +0 -77
  357. data/vendor/simplejson/simplejson/tests/__init__.py +0 -67
  358. data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +0 -55
  359. data/vendor/simplejson/simplejson/tests/test_check_circular.py +0 -30
  360. data/vendor/simplejson/simplejson/tests/test_decimal.py +0 -66
  361. data/vendor/simplejson/simplejson/tests/test_decode.py +0 -83
  362. data/vendor/simplejson/simplejson/tests/test_default.py +0 -9
  363. data/vendor/simplejson/simplejson/tests/test_dump.py +0 -67
  364. data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +0 -46
  365. data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +0 -32
  366. data/vendor/simplejson/simplejson/tests/test_errors.py +0 -34
  367. data/vendor/simplejson/simplejson/tests/test_fail.py +0 -91
  368. data/vendor/simplejson/simplejson/tests/test_float.py +0 -19
  369. data/vendor/simplejson/simplejson/tests/test_indent.py +0 -86
  370. data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +0 -20
  371. data/vendor/simplejson/simplejson/tests/test_namedtuple.py +0 -121
  372. data/vendor/simplejson/simplejson/tests/test_pass1.py +0 -76
  373. data/vendor/simplejson/simplejson/tests/test_pass2.py +0 -14
  374. data/vendor/simplejson/simplejson/tests/test_pass3.py +0 -20
  375. data/vendor/simplejson/simplejson/tests/test_recursion.py +0 -67
  376. data/vendor/simplejson/simplejson/tests/test_scanstring.py +0 -117
  377. data/vendor/simplejson/simplejson/tests/test_separators.py +0 -42
  378. data/vendor/simplejson/simplejson/tests/test_speedups.py +0 -20
  379. data/vendor/simplejson/simplejson/tests/test_tuple.py +0 -49
  380. data/vendor/simplejson/simplejson/tests/test_unicode.py +0 -109
  381. data/vendor/simplejson/simplejson/tool.py +0 -39
@@ -1,9 +1,7 @@
1
- # coding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
3
+ require 'json'
4
4
  require 'open3'
5
- require 'multi_json'
6
- require 'timeout'
7
5
  require 'logger'
8
6
  require 'time'
9
7
 
@@ -15,38 +13,36 @@ end
15
13
  # Python process.
16
14
  module Pygments
17
15
  class Popen
18
-
19
- def popen4(cmd)
20
- stdin, stdout, stderr, wait_thr = Open3.popen3(cmd)
21
- [wait_thr[:pid], stdin, stdout, stderr]
16
+ def popen4(argv)
17
+ stdin, stdout, stderr, wait_thr = Open3.popen3(*argv, { close_others: true })
18
+ while (pid = wait_thr.pid).nil? && wait_thr.alive?
19
+ # For unknown reasons, wait_thr.pid is not immediately available on JRuby
20
+ end
21
+ [pid, stdin, stdout, stderr]
22
22
  end
23
23
 
24
24
  # Get things started by opening a pipe to mentos (the freshmaker), a
25
25
  # Python process that talks to the Pygments library. We'll talk back and
26
26
  # forth across this pipe.
27
- def start(pygments_path = File.expand_path('../../../vendor/pygments-main/', __FILE__))
27
+ def start(pygments_path = File.expand_path('../../vendor/pygments-main', __dir__))
28
28
  begin
29
- @log = Logger.new(ENV['MENTOS_LOG'] ||= File::NULL)
29
+ @log = Logger.new(ENV['MENTOS_LOG'] || File::NULL)
30
30
  @log.level = Logger::INFO
31
- @log.datetime_format = "%Y-%m-%d %H:%M "
32
- rescue
33
- @log = Logger.new(File::NULL)
31
+ @log.datetime_format = '%Y-%m-%d %H:%M '
34
32
  end
35
33
 
36
34
  ENV['PYGMENTS_PATH'] = pygments_path
37
35
 
38
36
  # Make sure we kill off the child when we're done
39
- at_exit { stop "Exiting" }
37
+ at_exit { stop 'Exiting' }
40
38
 
41
39
  # A pipe to the mentos python process. #popen4 gives us
42
40
  # the pid and three IO objects to write and read.
43
- script = "#{python_binary} #{File.expand_path('../mentos.py', __FILE__)}"
44
- @pid, @in, @out, @err = popen4(script)
45
- @log.info "Starting pid #{@pid} with fd #{@out.to_i} and python #{python_binary}."
46
- end
47
-
48
- def windows?
49
- RUBY_PLATFORM =~ /mswin|mingw/
41
+ argv = [*python_binary, File.expand_path('mentos.py', __dir__)]
42
+ @pid, @in, @out, @err = popen4(argv)
43
+ @in.binmode
44
+ @out.binmode
45
+ @log.info "Starting pid #{@pid} with python #{python_binary}."
50
46
  end
51
47
 
52
48
  def python_binary
@@ -58,14 +54,13 @@ module Pygments
58
54
  end
59
55
 
60
56
  # Detect a suitable Python binary to use.
61
- # Or return $PYGMENTS_RB_PYTHON if it's exists.
62
57
  def find_python_binary
63
- if ENV['PYGMENTS_RB_PYTHON']
64
- return which(ENV['PYGMENTS_RB_PYTHON'])
65
- elsif windows? && which('py')
66
- return 'py -2'
58
+ if Gem.win_platform?
59
+ return %w[py python3 python].first { |py| !which(py).nil? }
67
60
  end
68
- return which('python2') || which('python')
61
+
62
+ # On non-Windows platforms, we simply rely on shebang
63
+ []
69
64
  end
70
65
 
71
66
  # Cross platform which command
@@ -73,12 +68,12 @@ module Pygments
73
68
  def which(command)
74
69
  exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
75
70
  ENV['PATH'].split(File::PATH_SEPARATOR).each do |dir|
76
- exts.each { |ext|
71
+ exts.each do |ext|
77
72
  path = File.join(dir, "#{command}#{ext}")
78
73
  return path if File.executable?(path) && !File.directory?(path)
79
- }
74
+ end
80
75
  end
81
- return nil
76
+ nil
82
77
  end
83
78
 
84
79
  # Stop the child process by issuing a kill -9.
@@ -94,14 +89,14 @@ module Pygments
94
89
  # the signal isn't sent); but we have permissions, and
95
90
  # we're not doing anything invalid here.
96
91
  def stop(reason)
97
- if @pid
92
+ unless @pid.nil?
93
+ @log.info "Killing pid: #{@pid}. Reason: #{reason}"
98
94
  begin
99
95
  Process.kill('KILL', @pid)
100
96
  Process.waitpid(@pid)
101
97
  rescue Errno::ESRCH, Errno::ECHILD
102
98
  end
103
99
  end
104
- @log.info "Killing pid: #{@pid.to_s}. Reason: #{reason}"
105
100
  @pid = nil
106
101
  end
107
102
 
@@ -116,30 +111,29 @@ module Pygments
116
111
  # Returns true if the child is alive.
117
112
  def alive?
118
113
  return true if defined?(@pid) && @pid && Process.kill(0, @pid)
114
+
119
115
  false
120
116
  rescue Errno::ENOENT, Errno::ESRCH
121
117
  false
122
118
  rescue Errno::EPERM
123
- raise MentosError, "EPERM checking if child process is alive."
119
+ raise MentosError, 'EPERM checking if child process is alive.'
124
120
  end
125
121
 
126
122
  # Public: Get an array of available Pygments formatters
127
123
  #
128
124
  # Returns an array of formatters.
129
125
  def formatters
130
- mentos(:get_all_formatters).inject(Hash.new) do | hash, (name, desc, aliases) |
126
+ mentos(:get_all_formatters).each_with_object({}) do |(name, desc, aliases), hash|
131
127
  # Remove the long-winded and repetitive 'Formatter' suffix
132
128
  name.sub!(/Formatter$/, '')
133
129
  hash[name] = {
134
- :name => name,
135
- :description => desc,
136
- :aliases => aliases
130
+ name: name,
131
+ description: desc,
132
+ aliases: aliases
137
133
  }
138
- hash
139
134
  end
140
135
  end
141
136
 
142
-
143
137
  # Public: Get all lexers from a serialized array. This avoids needing to spawn
144
138
  # mentos when it's not really needed (e.g., one-off jobs, loading the Rails env, etc).
145
139
  #
@@ -147,33 +141,25 @@ module Pygments
147
141
  #
148
142
  # Returns an array of lexers.
149
143
  def lexers
150
- begin
151
- lexer_file = File.expand_path('../../../lexers', __FILE__)
152
- raw = File.open(lexer_file, "rb").read
153
- Marshal.load(raw)
154
- rescue Errno::ENOENT
155
- raise MentosError, "Error loading lexer file. Was it created and vendored?"
156
- end
144
+ lexer_file = File.expand_path('../../lexers', __dir__)
145
+ raw = File.open(lexer_file, 'rb').read
146
+ Marshal.load(raw)
147
+ rescue Errno::ENOENT
148
+ raise MentosError, 'Error loading lexer file. Was it created and vendored?'
157
149
  end
158
150
 
159
151
  # Public: Get back all available lexers from mentos itself
160
152
  #
161
153
  # Returns an array of lexers.
162
154
  def lexers!
163
- mentos(:get_all_lexers).inject(Hash.new) do |hash, lxr|
155
+ mentos(:get_all_lexers).each_with_object({}) do |lxr, hash|
164
156
  name = lxr[0]
165
157
  hash[name] = {
166
- :name => name,
167
- :aliases => lxr[1],
168
- :filenames => lxr[2],
169
- :mimetypes => lxr[3]
158
+ name: name,
159
+ aliases: lxr[1],
160
+ filenames: lxr[2],
161
+ mimetypes: lxr[3]
170
162
  }
171
- hash["dasm16"] = {:name=>"dasm16", :aliases=>["DASM16"], :filenames=>["*.dasm16", "*.dasm"], :mimetypes=>['text/x-dasm16']}
172
- hash["Puppet"] = {:name=>"Puppet", :aliases=>["puppet"], :filenames=>["*.pp"], :mimetypes=>[]}
173
- hash["Augeas"] = {:name=>"Augeas", :aliases=>["augeas"], :filenames=>["*.aug"], :mimetypes=>[]}
174
- hash["TOML"] = {:name=>"TOML", :aliases=>["toml"], :filenames=>["*.toml"], :mimetypes=>[]}
175
- hash["Slash"] = {:name=>"Slash", :aliases=>["slash"], :filenames=>["*.sl"], :mimetypes=>[]}
176
- hash
177
163
  end
178
164
  end
179
165
 
@@ -188,7 +174,7 @@ module Pygments
188
174
  end
189
175
 
190
176
  # Public: Return css for highlighted code
191
- def css(klass='', opts={})
177
+ def css(klass = '', opts = {})
192
178
  if klass.is_a?(Hash)
193
179
  opts = klass
194
180
  klass = ''
@@ -199,17 +185,13 @@ module Pygments
199
185
  # Public: Return the name of a lexer.
200
186
  def lexer_name_for(*args)
201
187
  # Pop off the last arg if it's a hash, which becomes our opts
202
- if args.last.is_a?(Hash)
203
- opts = args.pop
204
- else
205
- opts = {}
206
- end
188
+ opts = if args.last.is_a?(Hash)
189
+ args.pop
190
+ else
191
+ {}
192
+ end
207
193
 
208
- if args.last.is_a?(String)
209
- code = args.pop
210
- else
211
- code = nil
212
- end
194
+ code = (args.pop if args.last.is_a?(String))
213
195
 
214
196
  mentos(:lexer_name_for, args, opts, code)
215
197
  end
@@ -221,7 +203,7 @@ module Pygments
221
203
  #
222
204
  # Returns the highlighted string
223
205
  # or nil when the request to the Python process timed out.
224
- def highlight(code, opts={})
206
+ def highlight(code, opts = {})
225
207
  # If the caller didn't give us any code, we have nothing to do,
226
208
  # so return right away.
227
209
  return code if code.nil? || code.empty?
@@ -234,191 +216,142 @@ module Pygments
234
216
 
235
217
  # Get back the string from mentos and force encoding if we can
236
218
  str = mentos(:highlight, nil, opts, code)
237
- str.force_encoding(opts[:options][:outencoding]) if str.respond_to?(:force_encoding)
219
+ if str.respond_to?(:force_encoding)
220
+ str.force_encoding(opts[:options][:outencoding])
221
+ end
238
222
  str
239
223
  end
240
224
 
241
225
  private
242
226
 
227
+ def with_watchdog(timeout_time, error_message)
228
+ state_mutex = Mutex.new
229
+ state = :alive
230
+ wd_cleanup = ConditionVariable.new
231
+
232
+ watchdog = timeout_time > 0 ? Thread.new do
233
+ state_mutex.synchronize do
234
+ wd_cleanup.wait(state_mutex, timeout_time) if state != :finished
235
+ if state != :finished
236
+ @log.error error_message
237
+ stop error_message
238
+ state = :timeout
239
+ end
240
+ end
241
+ end : nil
242
+ begin
243
+ yield
244
+ ensure
245
+ if watchdog
246
+ state_mutex.synchronize do
247
+ state = :finished if state == :alive
248
+ # wake up watchdog thread
249
+ wd_cleanup.signal
250
+ end
251
+ watchdog.join
252
+ end
253
+
254
+ raise MentosError, error_message if state == :timeout
255
+ end
256
+ end
257
+
243
258
  # Our 'rpc'-ish request to mentos. Requires a method name, and then optional
244
259
  # args, kwargs, code.
245
- def mentos(method, args=[], kwargs={}, original_code=nil)
260
+ def mentos(method, args = [], kwargs = {}, code = nil)
246
261
  # Open the pipe if necessary
247
262
  start unless alive?
248
263
 
249
- begin
250
- # Timeout requests that take too long.
251
- # Invalid MENTOS_TIMEOUT results in just using default.
252
- timeout_time = Integer(ENV["MENTOS_TIMEOUT"]) rescue 8
253
-
254
- Timeout::timeout(timeout_time) do
255
- # For sanity checking on both sides of the pipe when highlighting, we prepend and
256
- # append an id. mentos checks that these are 8 character ids and that they match.
257
- # It then returns the id's back to Rubyland.
258
- id = (0...8).map{65.+(rand(25)).chr}.join
259
- code = add_ids(original_code, id) if original_code
260
-
261
- # Add metadata to the header and generate it.
262
- if code
263
- bytesize = code.bytesize
264
- else
265
- bytesize = 0
266
- end
264
+ # Timeout requests that take too long.
265
+ # Invalid MENTOS_TIMEOUT results in just using default.
266
+ timeout_time = kwargs.delete(:timeout)
267
+ if timeout_time.nil?
268
+ timeout_time = begin
269
+ Integer(ENV['MENTOS_TIMEOUT'])
270
+ rescue TypeError
271
+ 0
272
+ end
273
+ end
267
274
 
268
- kwargs.freeze
269
- kwargs = kwargs.merge("fd" => @out.to_i, "id" => id, "bytes" => bytesize)
270
- out_header = MultiJson.dump(:method => method, :args => args, :kwargs => kwargs)
275
+ # Add metadata to the header and generate it.
276
+ bytesize = if code
277
+ code.bytesize
278
+ else
279
+ 0
280
+ end
271
281
 
282
+ kwargs.freeze
283
+ kwargs = kwargs.merge('bytes' => bytesize)
284
+ out_header = JSON.generate(method: method, args: args, kwargs: kwargs)
285
+
286
+ begin
287
+ res = with_watchdog(timeout_time, "Timeout on a mentos #{method} call") do
272
288
  # Get the size of the header itself and write that.
273
- bits = get_fixed_bits_from_header(out_header)
274
- @in.write(bits)
289
+ @in.write([out_header.bytesize].pack('N'))
290
+ @log.info "Size out: #{out_header.bytesize}"
275
291
 
276
292
  # mentos is now waiting for the header, and, potentially, code.
277
- write_data(out_header, code)
293
+ @in.write(out_header)
294
+ @log.info "Out header: #{out_header}"
295
+ @in.write(code) unless code.nil?
278
296
 
279
- check_for_error
297
+ @in.flush
280
298
 
281
299
  # mentos will now return data to us. First it sends the header.
282
- header = get_header
283
300
 
284
- # Now handle the header, any read any more data required.
285
- res = handle_header_and_return(header, id)
286
-
287
- # Finally, return what we got.
288
- return_result(res, method)
289
- end
290
- rescue Timeout::Error
291
- # If we timeout, we need to clear out the pipe and start over.
292
- @log.error "Timeout on a mentos #{method} call"
293
- stop "Timeout on mentos #{method} call."
294
- end
295
-
296
- rescue Errno::EPIPE, EOFError
297
- stop "EPIPE"
298
- raise MentosError, "EPIPE"
299
- end
300
-
301
- def check_for_error
302
- return if @err.closed?
301
+ header_len_bytes = @out.read(4)
302
+ if header_len_bytes.nil?
303
+ raise Errno::EPIPE, %(Failed to read response from Python process on a mentos #{method} call)
304
+ end
303
305
 
304
- timeout_time = 0.25 # set a very little timeout so that we do not hang the parser
306
+ header_len = header_len_bytes.unpack('N')[0]
307
+ @log.info "Size in: #{header_len}"
308
+ header = @out.read(header_len)
305
309
 
306
- Timeout::timeout(timeout_time) do
307
- error_msg = @err.read
310
+ # Now handle the header, any read any more data required.
311
+ handle_header_and_return(header)
312
+ end
308
313
 
309
- unless error_msg.empty?
310
- @log.error "Error running python script: #{error_msg}"
311
- stop "Error running python script: #{error_msg}"
312
- raise MentosError, error_msg
314
+ # Finally, return what we got.
315
+ return_result(res, method)
316
+ rescue Errno::EPIPE => e
317
+ begin
318
+ error_msg = @err.read
319
+ @log.error "Error running Python script: #{error_msg}"
320
+ stop "Error running Python script: #{error_msg}"
321
+ raise MentosError, %(#{e}: #{error_msg})
322
+ rescue Errno::EPIPE
323
+ @log.error e.to_s
324
+ stop e.to_s
325
+ raise e
313
326
  end
327
+ rescue StandardError => e
328
+ @log.error e.to_s
329
+ stop e.to_s
330
+ raise e
314
331
  end
315
- rescue Timeout::Error
316
- # during the specified time no error were found
317
- @err.close
318
332
  end
319
333
 
320
-
321
334
  # Based on the header we receive, determine if we need
322
335
  # to read more bytes, and read those bytes if necessary.
323
336
  #
324
- # Then, do a sanity check with the ids.
325
- #
326
- # Returns a result — either highlighted text or metadata.
327
- def handle_header_and_return(header, id)
337
+ # Returns a result - either highlighted text or metadata.
338
+ def handle_header_and_return(header)
328
339
  if header
340
+ @log.info "In header: #{header}"
329
341
  header = header_to_json(header)
330
342
  bytes = header[:bytes]
331
343
 
332
344
  # Read more bytes (the actual response body)
333
345
  res = @out.read(bytes.to_i)
334
346
 
335
- if header[:method] == "highlight"
347
+ if header[:method] == 'highlight'
336
348
  # Make sure we have a result back; else consider this an error.
337
- if res.nil?
338
- @log.warn "No highlight result back from mentos."
339
- stop "No highlight result back from mentos."
340
- raise MentosError, "No highlight result back from mentos."
341
- end
342
-
343
- # Remove the newline from Python
344
- res = res[0..-2]
345
- @log.info "Highlight in process."
346
-
347
- # Get the id's
348
- start_id = res[0..7]
349
- end_id = res[-8..-1]
350
-
351
- # Sanity check.
352
- if not (start_id == id and end_id == id)
353
- @log.error "ID's did not match. Aborting."
354
- stop "ID's did not match. Aborting."
355
- raise MentosError, "ID's did not match. Aborting."
356
- else
357
- # We're good. Remove the padding
358
- res = res[10..-11]
359
- @log.info "Highlighting complete."
360
- res
361
- end
349
+ raise MentosError, 'No highlight result back from mentos.' if res.nil?
362
350
  end
363
- res
364
- else
365
- @log.error "No header data back."
366
- stop "No header data back."
367
- raise MentosError, "No header received back."
368
- end
369
- end
370
351
 
371
- # With the code, prepend the id (with two spaces to avoid escaping weirdness if
372
- # the following text starts with a slash (like terminal code), and append the
373
- # id, with two padding also. This means we are sending over the 8 characters +
374
- # code + 8 characters.
375
- def add_ids(code, id)
376
- (id + " #{code} #{id}").freeze
377
- end
378
-
379
- # Write data to mentos, the Python process.
380
- #
381
- # Returns nothing.
382
- def write_data(out_header, code=nil)
383
- @in.write(out_header)
384
- @log.info "Out header: #{out_header}"
385
- @in.write(code) if code
386
- end
387
-
388
- # Sanity check for size (32-arity of 0's and 1's)
389
- def size_check(size)
390
- size_regex = /[0-1]{32}/
391
- if size_regex.match(size)
392
- true
352
+ res
393
353
  else
394
- false
395
- end
396
- end
397
-
398
- # Read the header via the pipe.
399
- #
400
- # Returns a header.
401
- def get_header
402
- begin
403
- size = @out.read(33)
404
- size = size[0..-2]
405
-
406
- # Sanity check the size
407
- if not size_check(size)
408
- @log.error "Size returned from mentos.py invalid."
409
- stop "Size returned from mentos.py invalid."
410
- raise MentosError, "Size returned from mentos.py invalid."
411
- end
412
-
413
- # Read the amount of bytes we should be expecting. We first
414
- # convert the string of bits into an integer.
415
- header_bytes = size.to_s.to_i(2) + 1
416
- @log.info "Size in: #{size.to_s} (#{header_bytes.to_s})"
417
- @out.read(header_bytes)
418
- rescue
419
- @log.error "Failed to get header."
420
- stop "Failed to get header."
421
- raise MentosError, "Failed to get header."
354
+ raise MentosError, 'No header received back.'
422
355
  end
423
356
  end
424
357
 
@@ -426,7 +359,7 @@ module Pygments
426
359
  # want them, text otherwise.
427
360
  def return_result(res, method)
428
361
  unless method == :lexer_name_for || method == :highlight || method == :css
429
- res = MultiJson.load(res, :symbolize_keys => true)
362
+ res = JSON.parse(res, symbolize_names: true)
430
363
  end
431
364
  res = res.rstrip if res.class == String
432
365
  res
@@ -434,27 +367,13 @@ module Pygments
434
367
 
435
368
  # Convert a text header into JSON for easy access.
436
369
  def header_to_json(header)
437
- @log.info "[In header: #{header} "
438
- header = MultiJson.load(header, :symbolize_keys => true)
370
+ header = JSON.parse(header, symbolize_names: true)
439
371
 
440
372
  if header[:error]
441
- # Raise this as a Ruby exception of the MentosError class.
442
- # Stop so we don't leave the pipe in an inconsistent state.
443
- @log.error "Failed to convert header to JSON."
444
- stop header[:error]
445
373
  raise MentosError, header[:error]
446
374
  else
447
375
  header
448
376
  end
449
377
  end
450
-
451
- def get_fixed_bits_from_header(out_header)
452
- size = out_header.bytesize
453
-
454
- # Fixed 32 bits to represent the int. We return a string
455
- # representation: e.g, "00000000000000000000000000011110"
456
- Array.new(32) { |i| size[i] }.reverse!.join
457
- end
458
378
  end
459
379
  end
460
-
@@ -1,5 +1,5 @@
1
- # coding: utf-8
2
1
  # frozen_string_literal: true
2
+
3
3
  module Pygments
4
- VERSION = '1.2.1'
4
+ VERSION = '2.0.0'
5
5
  end
data/lib/pygments.rb CHANGED
@@ -1,10 +1,9 @@
1
- # coding: utf-8
2
1
  # frozen_string_literal: true
2
+
3
3
  require File.join(File.dirname(__FILE__), 'pygments/popen')
4
4
  require 'forwardable'
5
5
 
6
6
  module Pygments
7
-
8
7
  autoload :Lexer, 'pygments/lexer'
9
8
 
10
9
  class << self
@@ -16,14 +15,14 @@ module Pygments
16
15
  end
17
16
 
18
17
  def_delegators :engine,
19
- :formatters,
20
- :lexers,
21
- :lexers!,
22
- :filters,
23
- :styles,
24
- :css,
25
- :lexer_name_for,
26
- :highlight,
27
- :start
18
+ :formatters,
19
+ :lexers,
20
+ :lexers!,
21
+ :filters,
22
+ :styles,
23
+ :css,
24
+ :lexer_name_for,
25
+ :highlight,
26
+ :start
28
27
  end
29
28
  end
data/pygments.rb.gemspec CHANGED
@@ -1,25 +1,27 @@
1
- require File.expand_path('../lib/pygments/version', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path('lib/pygments/version', __dir__)
2
4
 
3
5
  Gem::Specification.new do |s|
4
6
  s.name = 'pygments.rb'
5
7
  s.version = Pygments::VERSION
6
8
 
7
9
  s.summary = 'pygments wrapper for ruby'
8
- s.description = 'pygments.rb exposes the pygments syntax highlighter to Ruby'
10
+ s.description = 'pygments.rb is a Ruby wrapper for Pygments syntax highlighter'
9
11
 
10
- s.homepage = 'https://github.com/tmm1/pygments.rb'
11
- s.has_rdoc = false
12
+ s.homepage = 'https://github.com/pygments/pygments.rb'
13
+ s.required_ruby_version = '>= 2.3.0'
12
14
 
13
- s.authors = ['Aman Gupta', 'Ted Nyman']
14
- s.email = ['aman@tmm1.net']
15
+ s.authors = ['Aman Gupta', 'Ted Nyman', 'Marat Radchenko']
16
+ s.email = ['marat@slonopotamus.org']
15
17
  s.license = 'MIT'
16
18
 
17
- s.add_dependency 'multi_json', '>= 1.0.0'
18
- s.add_development_dependency 'rake-compiler', '~> 0.7.6'
19
- s.add_development_dependency 'test-unit', '~> 3.0.0'
19
+ s.add_development_dependency 'rake', '~> 13.0.0'
20
+ s.add_development_dependency 'rubocop', '~> 0.81.0'
21
+ s.add_development_dependency 'test-unit', '~> 3.3.0'
20
22
 
21
23
  # s.extensions = ['ext/extconf.rb']
22
24
  s.require_paths = ['lib']
23
25
 
24
- s.files = `git ls-files`.split("\n").select { |f| !File.symlink?(f) } + ['lexers']
26
+ s.files = `git ls-files`.split("\n").reject { |f| File.symlink?(f) } + ['lexers']
25
27
  end