pygments.rb-jruby 0.5.4

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 (473) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/CHANGELOG.md +71 -0
  4. data/Gemfile +2 -0
  5. data/LICENSE +17 -0
  6. data/README.md +118 -0
  7. data/Rakefile +66 -0
  8. data/bench.rb +22 -0
  9. data/cache-lexers.rb +8 -0
  10. data/lexers +0 -0
  11. data/lib/pygments.rb +8 -0
  12. data/lib/pygments/lexer.rb +148 -0
  13. data/lib/pygments/mentos.py +351 -0
  14. data/lib/pygments/popen.rb +404 -0
  15. data/lib/pygments/version.rb +3 -0
  16. data/pygments.rb.gemspec +24 -0
  17. data/test/test_data.c +2581 -0
  18. data/test/test_data.py +514 -0
  19. data/test/test_data_generated +2582 -0
  20. data/test/test_pygments.rb +287 -0
  21. data/vendor/custom_lexers/github.py +565 -0
  22. data/vendor/pygments-main/AUTHORS +153 -0
  23. data/vendor/pygments-main/CHANGES +889 -0
  24. data/vendor/pygments-main/LICENSE +25 -0
  25. data/vendor/pygments-main/MANIFEST.in +6 -0
  26. data/vendor/pygments-main/Makefile +59 -0
  27. data/vendor/pygments-main/REVISION +1 -0
  28. data/vendor/pygments-main/TODO +15 -0
  29. data/vendor/pygments-main/docs/generate.py +472 -0
  30. data/vendor/pygments-main/docs/pygmentize.1 +94 -0
  31. data/vendor/pygments-main/docs/src/api.txt +270 -0
  32. data/vendor/pygments-main/docs/src/authors.txt +5 -0
  33. data/vendor/pygments-main/docs/src/changelog.txt +5 -0
  34. data/vendor/pygments-main/docs/src/cmdline.txt +147 -0
  35. data/vendor/pygments-main/docs/src/filterdevelopment.txt +70 -0
  36. data/vendor/pygments-main/docs/src/filters.txt +42 -0
  37. data/vendor/pygments-main/docs/src/formatterdevelopment.txt +169 -0
  38. data/vendor/pygments-main/docs/src/formatters.txt +48 -0
  39. data/vendor/pygments-main/docs/src/index.txt +69 -0
  40. data/vendor/pygments-main/docs/src/installation.txt +71 -0
  41. data/vendor/pygments-main/docs/src/integrate.txt +48 -0
  42. data/vendor/pygments-main/docs/src/java.txt +70 -0
  43. data/vendor/pygments-main/docs/src/lexerdevelopment.txt +603 -0
  44. data/vendor/pygments-main/docs/src/lexers.txt +67 -0
  45. data/vendor/pygments-main/docs/src/moinmoin.txt +39 -0
  46. data/vendor/pygments-main/docs/src/plugins.txt +93 -0
  47. data/vendor/pygments-main/docs/src/quickstart.txt +202 -0
  48. data/vendor/pygments-main/docs/src/rstdirective.txt +22 -0
  49. data/vendor/pygments-main/docs/src/styles.txt +143 -0
  50. data/vendor/pygments-main/docs/src/tokens.txt +349 -0
  51. data/vendor/pygments-main/docs/src/unicode.txt +49 -0
  52. data/vendor/pygments-main/external/autopygmentize +64 -0
  53. data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +144 -0
  54. data/vendor/pygments-main/external/markdown-processor.py +67 -0
  55. data/vendor/pygments-main/external/moin-parser.py +112 -0
  56. data/vendor/pygments-main/external/pygments.bashcomp +38 -0
  57. data/vendor/pygments-main/external/rst-directive-old.py +77 -0
  58. data/vendor/pygments-main/external/rst-directive.py +83 -0
  59. data/vendor/pygments-main/ez_setup.py +276 -0
  60. data/vendor/pygments-main/pygmentize +7 -0
  61. data/vendor/pygments-main/pygments/__init__.py +91 -0
  62. data/vendor/pygments-main/pygments/cmdline.py +441 -0
  63. data/vendor/pygments-main/pygments/console.py +74 -0
  64. data/vendor/pygments-main/pygments/filter.py +74 -0
  65. data/vendor/pygments-main/pygments/filters/__init__.py +356 -0
  66. data/vendor/pygments-main/pygments/formatter.py +95 -0
  67. data/vendor/pygments-main/pygments/formatters/__init__.py +68 -0
  68. data/vendor/pygments-main/pygments/formatters/_mapping.py +92 -0
  69. data/vendor/pygments-main/pygments/formatters/bbcode.py +109 -0
  70. data/vendor/pygments-main/pygments/formatters/html.py +821 -0
  71. data/vendor/pygments-main/pygments/formatters/img.py +553 -0
  72. data/vendor/pygments-main/pygments/formatters/latex.py +378 -0
  73. data/vendor/pygments-main/pygments/formatters/other.py +115 -0
  74. data/vendor/pygments-main/pygments/formatters/rtf.py +136 -0
  75. data/vendor/pygments-main/pygments/formatters/svg.py +154 -0
  76. data/vendor/pygments-main/pygments/formatters/terminal.py +112 -0
  77. data/vendor/pygments-main/pygments/formatters/terminal256.py +222 -0
  78. data/vendor/pygments-main/pygments/lexer.py +765 -0
  79. data/vendor/pygments-main/pygments/lexers/__init__.py +240 -0
  80. data/vendor/pygments-main/pygments/lexers/_asybuiltins.py +1645 -0
  81. data/vendor/pygments-main/pygments/lexers/_clbuiltins.py +232 -0
  82. data/vendor/pygments-main/pygments/lexers/_lassobuiltins.py +5172 -0
  83. data/vendor/pygments-main/pygments/lexers/_luabuiltins.py +249 -0
  84. data/vendor/pygments-main/pygments/lexers/_mapping.py +354 -0
  85. data/vendor/pygments-main/pygments/lexers/_openedgebuiltins.py +562 -0
  86. data/vendor/pygments-main/pygments/lexers/_phpbuiltins.py +3787 -0
  87. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +233 -0
  88. data/vendor/pygments-main/pygments/lexers/_robotframeworklexer.py +557 -0
  89. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +40 -0
  90. data/vendor/pygments-main/pygments/lexers/_sourcemodbuiltins.py +1072 -0
  91. data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +360 -0
  92. data/vendor/pygments-main/pygments/lexers/_vimbuiltins.py +13 -0
  93. data/vendor/pygments-main/pygments/lexers/agile.py +2290 -0
  94. data/vendor/pygments-main/pygments/lexers/asm.py +398 -0
  95. data/vendor/pygments-main/pygments/lexers/compiled.py +3723 -0
  96. data/vendor/pygments-main/pygments/lexers/dalvik.py +104 -0
  97. data/vendor/pygments-main/pygments/lexers/dotnet.py +671 -0
  98. data/vendor/pygments-main/pygments/lexers/foxpro.py +428 -0
  99. data/vendor/pygments-main/pygments/lexers/functional.py +2731 -0
  100. data/vendor/pygments-main/pygments/lexers/github.py +565 -0
  101. data/vendor/pygments-main/pygments/lexers/hdl.py +356 -0
  102. data/vendor/pygments-main/pygments/lexers/jvm.py +1112 -0
  103. data/vendor/pygments-main/pygments/lexers/math.py +1918 -0
  104. data/vendor/pygments-main/pygments/lexers/other.py +3778 -0
  105. data/vendor/pygments-main/pygments/lexers/parsers.py +778 -0
  106. data/vendor/pygments-main/pygments/lexers/shell.py +424 -0
  107. data/vendor/pygments-main/pygments/lexers/special.py +100 -0
  108. data/vendor/pygments-main/pygments/lexers/sql.py +559 -0
  109. data/vendor/pygments-main/pygments/lexers/templates.py +1742 -0
  110. data/vendor/pygments-main/pygments/lexers/text.py +1893 -0
  111. data/vendor/pygments-main/pygments/lexers/web.py +4045 -0
  112. data/vendor/pygments-main/pygments/modeline.py +40 -0
  113. data/vendor/pygments-main/pygments/plugin.py +74 -0
  114. data/vendor/pygments-main/pygments/scanner.py +104 -0
  115. data/vendor/pygments-main/pygments/style.py +117 -0
  116. data/vendor/pygments-main/pygments/styles/__init__.py +70 -0
  117. data/vendor/pygments-main/pygments/styles/autumn.py +65 -0
  118. data/vendor/pygments-main/pygments/styles/borland.py +51 -0
  119. data/vendor/pygments-main/pygments/styles/bw.py +49 -0
  120. data/vendor/pygments-main/pygments/styles/colorful.py +81 -0
  121. data/vendor/pygments-main/pygments/styles/default.py +73 -0
  122. data/vendor/pygments-main/pygments/styles/emacs.py +72 -0
  123. data/vendor/pygments-main/pygments/styles/friendly.py +72 -0
  124. data/vendor/pygments-main/pygments/styles/fruity.py +42 -0
  125. data/vendor/pygments-main/pygments/styles/manni.py +75 -0
  126. data/vendor/pygments-main/pygments/styles/monokai.py +106 -0
  127. data/vendor/pygments-main/pygments/styles/murphy.py +80 -0
  128. data/vendor/pygments-main/pygments/styles/native.py +65 -0
  129. data/vendor/pygments-main/pygments/styles/pastie.py +75 -0
  130. data/vendor/pygments-main/pygments/styles/perldoc.py +69 -0
  131. data/vendor/pygments-main/pygments/styles/rrt.py +33 -0
  132. data/vendor/pygments-main/pygments/styles/tango.py +141 -0
  133. data/vendor/pygments-main/pygments/styles/trac.py +63 -0
  134. data/vendor/pygments-main/pygments/styles/vim.py +63 -0
  135. data/vendor/pygments-main/pygments/styles/vs.py +38 -0
  136. data/vendor/pygments-main/pygments/token.py +195 -0
  137. data/vendor/pygments-main/pygments/unistring.py +140 -0
  138. data/vendor/pygments-main/pygments/util.py +277 -0
  139. data/vendor/pygments-main/scripts/check_sources.py +242 -0
  140. data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +32 -0
  141. data/vendor/pygments-main/scripts/epydoc.css +280 -0
  142. data/vendor/pygments-main/scripts/find_codetags.py +205 -0
  143. data/vendor/pygments-main/scripts/find_error.py +170 -0
  144. data/vendor/pygments-main/scripts/get_vimkw.py +43 -0
  145. data/vendor/pygments-main/scripts/pylintrc +301 -0
  146. data/vendor/pygments-main/scripts/reindent.py +291 -0
  147. data/vendor/pygments-main/scripts/vim2pygments.py +933 -0
  148. data/vendor/pygments-main/setup.cfg +7 -0
  149. data/vendor/pygments-main/setup.py +90 -0
  150. data/vendor/pygments-main/tests/dtds/HTML4-f.dtd +37 -0
  151. data/vendor/pygments-main/tests/dtds/HTML4-s.dtd +869 -0
  152. data/vendor/pygments-main/tests/dtds/HTML4.dcl +88 -0
  153. data/vendor/pygments-main/tests/dtds/HTML4.dtd +1092 -0
  154. data/vendor/pygments-main/tests/dtds/HTML4.soc +9 -0
  155. data/vendor/pygments-main/tests/dtds/HTMLlat1.ent +195 -0
  156. data/vendor/pygments-main/tests/dtds/HTMLspec.ent +77 -0
  157. data/vendor/pygments-main/tests/dtds/HTMLsym.ent +241 -0
  158. data/vendor/pygments-main/tests/examplefiles/ANTLRv3.g +608 -0
  159. data/vendor/pygments-main/tests/examplefiles/AcidStateAdvanced.hs +209 -0
  160. data/vendor/pygments-main/tests/examplefiles/AlternatingGroup.mu +102 -0
  161. data/vendor/pygments-main/tests/examplefiles/BOM.js +1 -0
  162. data/vendor/pygments-main/tests/examplefiles/CPDictionary.j +611 -0
  163. data/vendor/pygments-main/tests/examplefiles/Config.in.cache +1973 -0
  164. data/vendor/pygments-main/tests/examplefiles/Constants.mo +158 -0
  165. data/vendor/pygments-main/tests/examplefiles/DancingSudoku.lhs +411 -0
  166. data/vendor/pygments-main/tests/examplefiles/Deflate.fs +578 -0
  167. data/vendor/pygments-main/tests/examplefiles/Errors.scala +18 -0
  168. data/vendor/pygments-main/tests/examplefiles/File.hy +174 -0
  169. data/vendor/pygments-main/tests/examplefiles/Get-CommandDefinitionHtml.ps1 +66 -0
  170. data/vendor/pygments-main/tests/examplefiles/IPDispatchC.nc +104 -0
  171. data/vendor/pygments-main/tests/examplefiles/IPDispatchP.nc +671 -0
  172. data/vendor/pygments-main/tests/examplefiles/Intro.java +1660 -0
  173. data/vendor/pygments-main/tests/examplefiles/Makefile +1131 -0
  174. data/vendor/pygments-main/tests/examplefiles/Object.st +4394 -0
  175. data/vendor/pygments-main/tests/examplefiles/OrderedMap.hx +584 -0
  176. data/vendor/pygments-main/tests/examplefiles/RoleQ.pm6 +23 -0
  177. data/vendor/pygments-main/tests/examplefiles/SmallCheck.hs +378 -0
  178. data/vendor/pygments-main/tests/examplefiles/Sorting.mod +470 -0
  179. data/vendor/pygments-main/tests/examplefiles/Sudoku.lhs +382 -0
  180. data/vendor/pygments-main/tests/examplefiles/addressbook.proto +30 -0
  181. data/vendor/pygments-main/tests/examplefiles/antlr_throws +1 -0
  182. data/vendor/pygments-main/tests/examplefiles/apache2.conf +393 -0
  183. data/vendor/pygments-main/tests/examplefiles/as3_test.as +143 -0
  184. data/vendor/pygments-main/tests/examplefiles/as3_test2.as +46 -0
  185. data/vendor/pygments-main/tests/examplefiles/as3_test3.as +3 -0
  186. data/vendor/pygments-main/tests/examplefiles/aspx-cs_example +27 -0
  187. data/vendor/pygments-main/tests/examplefiles/autoit_submit.au3 +25 -0
  188. data/vendor/pygments-main/tests/examplefiles/badcase.java +2 -0
  189. data/vendor/pygments-main/tests/examplefiles/batchfile.bat +49 -0
  190. data/vendor/pygments-main/tests/examplefiles/bigtest.nsi +308 -0
  191. data/vendor/pygments-main/tests/examplefiles/boot-9.scm +1557 -0
  192. data/vendor/pygments-main/tests/examplefiles/ca65_example +284 -0
  193. data/vendor/pygments-main/tests/examplefiles/cbmbas_example +9 -0
  194. data/vendor/pygments-main/tests/examplefiles/cells.ps +515 -0
  195. data/vendor/pygments-main/tests/examplefiles/ceval.c +2604 -0
  196. data/vendor/pygments-main/tests/examplefiles/cheetah_example.html +13 -0
  197. data/vendor/pygments-main/tests/examplefiles/classes.dylan +125 -0
  198. data/vendor/pygments-main/tests/examplefiles/condensed_ruby.rb +10 -0
  199. data/vendor/pygments-main/tests/examplefiles/coq_RelationClasses +447 -0
  200. data/vendor/pygments-main/tests/examplefiles/database.pytb +20 -0
  201. data/vendor/pygments-main/tests/examplefiles/de.MoinMoin.po +2461 -0
  202. data/vendor/pygments-main/tests/examplefiles/demo.ahk +181 -0
  203. data/vendor/pygments-main/tests/examplefiles/demo.cfm +38 -0
  204. data/vendor/pygments-main/tests/examplefiles/django_sample.html+django +68 -0
  205. data/vendor/pygments-main/tests/examplefiles/dwarf.cw +17 -0
  206. data/vendor/pygments-main/tests/examplefiles/erl_session +10 -0
  207. data/vendor/pygments-main/tests/examplefiles/escape_semicolon.clj +1 -0
  208. data/vendor/pygments-main/tests/examplefiles/evil_regex.js +48 -0
  209. data/vendor/pygments-main/tests/examplefiles/example.Rd +78 -0
  210. data/vendor/pygments-main/tests/examplefiles/example.bug +54 -0
  211. data/vendor/pygments-main/tests/examplefiles/example.c +2080 -0
  212. data/vendor/pygments-main/tests/examplefiles/example.ceylon +52 -0
  213. data/vendor/pygments-main/tests/examplefiles/example.clay +33 -0
  214. data/vendor/pygments-main/tests/examplefiles/example.cls +15 -0
  215. data/vendor/pygments-main/tests/examplefiles/example.cob +3556 -0
  216. data/vendor/pygments-main/tests/examplefiles/example.cpp +2363 -0
  217. data/vendor/pygments-main/tests/examplefiles/example.gs +106 -0
  218. data/vendor/pygments-main/tests/examplefiles/example.gst +7 -0
  219. data/vendor/pygments-main/tests/examplefiles/example.hx +142 -0
  220. data/vendor/pygments-main/tests/examplefiles/example.jag +48 -0
  221. data/vendor/pygments-main/tests/examplefiles/example.kt +47 -0
  222. data/vendor/pygments-main/tests/examplefiles/example.lagda +19 -0
  223. data/vendor/pygments-main/tests/examplefiles/example.lua +250 -0
  224. data/vendor/pygments-main/tests/examplefiles/example.monkey +152 -0
  225. data/vendor/pygments-main/tests/examplefiles/example.moo +26 -0
  226. data/vendor/pygments-main/tests/examplefiles/example.moon +629 -0
  227. data/vendor/pygments-main/tests/examplefiles/example.msc +43 -0
  228. data/vendor/pygments-main/tests/examplefiles/example.nim +1010 -0
  229. data/vendor/pygments-main/tests/examplefiles/example.ns2 +69 -0
  230. data/vendor/pygments-main/tests/examplefiles/example.p +34 -0
  231. data/vendor/pygments-main/tests/examplefiles/example.pas +2708 -0
  232. data/vendor/pygments-main/tests/examplefiles/example.prg +161 -0
  233. data/vendor/pygments-main/tests/examplefiles/example.rb +1852 -0
  234. data/vendor/pygments-main/tests/examplefiles/example.reg +19 -0
  235. data/vendor/pygments-main/tests/examplefiles/example.rexx +50 -0
  236. data/vendor/pygments-main/tests/examplefiles/example.rhtml +561 -0
  237. data/vendor/pygments-main/tests/examplefiles/example.rkt +95 -0
  238. data/vendor/pygments-main/tests/examplefiles/example.rpf +4 -0
  239. data/vendor/pygments-main/tests/examplefiles/example.sh-session +19 -0
  240. data/vendor/pygments-main/tests/examplefiles/example.shell-session +45 -0
  241. data/vendor/pygments-main/tests/examplefiles/example.sml +156 -0
  242. data/vendor/pygments-main/tests/examplefiles/example.snobol +15 -0
  243. data/vendor/pygments-main/tests/examplefiles/example.stan +108 -0
  244. data/vendor/pygments-main/tests/examplefiles/example.tea +34 -0
  245. data/vendor/pygments-main/tests/examplefiles/example.ts +28 -0
  246. data/vendor/pygments-main/tests/examplefiles/example.u +548 -0
  247. data/vendor/pygments-main/tests/examplefiles/example.weechatlog +9 -0
  248. data/vendor/pygments-main/tests/examplefiles/example.xhtml +376 -0
  249. data/vendor/pygments-main/tests/examplefiles/example.xtend +34 -0
  250. data/vendor/pygments-main/tests/examplefiles/example.yaml +302 -0
  251. data/vendor/pygments-main/tests/examplefiles/example2.aspx +29 -0
  252. data/vendor/pygments-main/tests/examplefiles/example2.msc +79 -0
  253. data/vendor/pygments-main/tests/examplefiles/example_elixir.ex +363 -0
  254. data/vendor/pygments-main/tests/examplefiles/example_file.fy +128 -0
  255. data/vendor/pygments-main/tests/examplefiles/firefox.mak +586 -0
  256. data/vendor/pygments-main/tests/examplefiles/flipflop.sv +19 -0
  257. data/vendor/pygments-main/tests/examplefiles/foo.sce +6 -0
  258. data/vendor/pygments-main/tests/examplefiles/format.ml +1213 -0
  259. data/vendor/pygments-main/tests/examplefiles/fucked_up.rb +77 -0
  260. data/vendor/pygments-main/tests/examplefiles/function.mu +1 -0
  261. data/vendor/pygments-main/tests/examplefiles/functional.rst +1472 -0
  262. data/vendor/pygments-main/tests/examplefiles/garcia-wachs.kk +133 -0
  263. data/vendor/pygments-main/tests/examplefiles/genclass.clj +510 -0
  264. data/vendor/pygments-main/tests/examplefiles/genshi_example.xml+genshi +193 -0
  265. data/vendor/pygments-main/tests/examplefiles/genshitext_example.genshitext +33 -0
  266. data/vendor/pygments-main/tests/examplefiles/glsl.frag +7 -0
  267. data/vendor/pygments-main/tests/examplefiles/glsl.vert +13 -0
  268. data/vendor/pygments-main/tests/examplefiles/grammar-test.p6 +22 -0
  269. data/vendor/pygments-main/tests/examplefiles/hello.smali +40 -0
  270. data/vendor/pygments-main/tests/examplefiles/hello.sp +9 -0
  271. data/vendor/pygments-main/tests/examplefiles/html+php_faulty.php +1 -0
  272. data/vendor/pygments-main/tests/examplefiles/http_request_example +15 -0
  273. data/vendor/pygments-main/tests/examplefiles/http_response_example +29 -0
  274. data/vendor/pygments-main/tests/examplefiles/import.hs +4 -0
  275. data/vendor/pygments-main/tests/examplefiles/inet_pton6.dg +71 -0
  276. data/vendor/pygments-main/tests/examplefiles/intro.ik +24 -0
  277. data/vendor/pygments-main/tests/examplefiles/ints.php +10 -0
  278. data/vendor/pygments-main/tests/examplefiles/intsyn.fun +675 -0
  279. data/vendor/pygments-main/tests/examplefiles/intsyn.sig +286 -0
  280. data/vendor/pygments-main/tests/examplefiles/irb_heredoc +8 -0
  281. data/vendor/pygments-main/tests/examplefiles/irc.lsp +214 -0
  282. data/vendor/pygments-main/tests/examplefiles/java.properties +16 -0
  283. data/vendor/pygments-main/tests/examplefiles/jbst_example1.jbst +28 -0
  284. data/vendor/pygments-main/tests/examplefiles/jbst_example2.jbst +45 -0
  285. data/vendor/pygments-main/tests/examplefiles/jinjadesignerdoc.rst +713 -0
  286. data/vendor/pygments-main/tests/examplefiles/json.lasso +301 -0
  287. data/vendor/pygments-main/tests/examplefiles/json.lasso9 +213 -0
  288. data/vendor/pygments-main/tests/examplefiles/lighttpd_config.conf +13 -0
  289. data/vendor/pygments-main/tests/examplefiles/linecontinuation.py +47 -0
  290. data/vendor/pygments-main/tests/examplefiles/livescript-demo.ls +41 -0
  291. data/vendor/pygments-main/tests/examplefiles/logos_example.xm +28 -0
  292. data/vendor/pygments-main/tests/examplefiles/ltmain.sh +2849 -0
  293. data/vendor/pygments-main/tests/examplefiles/main.cmake +42 -0
  294. data/vendor/pygments-main/tests/examplefiles/markdown.lsp +679 -0
  295. data/vendor/pygments-main/tests/examplefiles/matlab_noreturn +3 -0
  296. data/vendor/pygments-main/tests/examplefiles/matlab_sample +30 -0
  297. data/vendor/pygments-main/tests/examplefiles/matlabsession_sample.txt +37 -0
  298. data/vendor/pygments-main/tests/examplefiles/metagrammar.treetop +455 -0
  299. data/vendor/pygments-main/tests/examplefiles/mg_sample.pro +73 -0
  300. data/vendor/pygments-main/tests/examplefiles/minehunt.qml +112 -0
  301. data/vendor/pygments-main/tests/examplefiles/minimal.ns2 +4 -0
  302. data/vendor/pygments-main/tests/examplefiles/moin_SyntaxReference.txt +340 -0
  303. data/vendor/pygments-main/tests/examplefiles/multiline_regexes.rb +38 -0
  304. data/vendor/pygments-main/tests/examplefiles/nanomsg.intr +95 -0
  305. data/vendor/pygments-main/tests/examplefiles/nasm_aoutso.asm +96 -0
  306. data/vendor/pygments-main/tests/examplefiles/nasm_objexe.asm +30 -0
  307. data/vendor/pygments-main/tests/examplefiles/nemerle_sample.n +87 -0
  308. data/vendor/pygments-main/tests/examplefiles/nginx_nginx.conf +118 -0
  309. data/vendor/pygments-main/tests/examplefiles/numbers.c +12 -0
  310. data/vendor/pygments-main/tests/examplefiles/objc_example.m +32 -0
  311. data/vendor/pygments-main/tests/examplefiles/objc_example2.m +24 -0
  312. data/vendor/pygments-main/tests/examplefiles/perl_misc +62 -0
  313. data/vendor/pygments-main/tests/examplefiles/perl_perl5db +998 -0
  314. data/vendor/pygments-main/tests/examplefiles/perl_regex-delims +120 -0
  315. data/vendor/pygments-main/tests/examplefiles/perlfunc.1 +856 -0
  316. data/vendor/pygments-main/tests/examplefiles/phpMyAdmin.spec +163 -0
  317. data/vendor/pygments-main/tests/examplefiles/phpcomplete.vim +567 -0
  318. data/vendor/pygments-main/tests/examplefiles/pleac.in.rb +1223 -0
  319. data/vendor/pygments-main/tests/examplefiles/postgresql_test.txt +47 -0
  320. data/vendor/pygments-main/tests/examplefiles/pppoe.applescript +10 -0
  321. data/vendor/pygments-main/tests/examplefiles/psql_session.txt +122 -0
  322. data/vendor/pygments-main/tests/examplefiles/py3_test.txt +2 -0
  323. data/vendor/pygments-main/tests/examplefiles/py3tb_test.py3tb +4 -0
  324. data/vendor/pygments-main/tests/examplefiles/pycon_test.pycon +14 -0
  325. data/vendor/pygments-main/tests/examplefiles/pytb_test2.pytb +2 -0
  326. data/vendor/pygments-main/tests/examplefiles/pytb_test3.pytb +4 -0
  327. data/vendor/pygments-main/tests/examplefiles/python25-bsd.mak +234 -0
  328. data/vendor/pygments-main/tests/examplefiles/qsort.prolog +13 -0
  329. data/vendor/pygments-main/tests/examplefiles/r-console-transcript.Rout +38 -0
  330. data/vendor/pygments-main/tests/examplefiles/ragel-cpp_rlscan +280 -0
  331. data/vendor/pygments-main/tests/examplefiles/ragel-cpp_snippet +2 -0
  332. data/vendor/pygments-main/tests/examplefiles/regex.js +22 -0
  333. data/vendor/pygments-main/tests/examplefiles/reversi.lsp +427 -0
  334. data/vendor/pygments-main/tests/examplefiles/robotframework.txt +39 -0
  335. data/vendor/pygments-main/tests/examplefiles/ruby_func_def.rb +11 -0
  336. data/vendor/pygments-main/tests/examplefiles/rust_example.rs +233 -0
  337. data/vendor/pygments-main/tests/examplefiles/scilab.sci +30 -0
  338. data/vendor/pygments-main/tests/examplefiles/session.dylan-console +9 -0
  339. data/vendor/pygments-main/tests/examplefiles/sibling.prolog +19 -0
  340. data/vendor/pygments-main/tests/examplefiles/simple.md +747 -0
  341. data/vendor/pygments-main/tests/examplefiles/smarty_example.html +209 -0
  342. data/vendor/pygments-main/tests/examplefiles/source.lgt +343 -0
  343. data/vendor/pygments-main/tests/examplefiles/sources.list +62 -0
  344. data/vendor/pygments-main/tests/examplefiles/sphere.pov +18 -0
  345. data/vendor/pygments-main/tests/examplefiles/sqlite3.sqlite3-console +27 -0
  346. data/vendor/pygments-main/tests/examplefiles/squid.conf +30 -0
  347. data/vendor/pygments-main/tests/examplefiles/string.jl +1031 -0
  348. data/vendor/pygments-main/tests/examplefiles/string_delimiters.d +21 -0
  349. data/vendor/pygments-main/tests/examplefiles/stripheredoc.sh +3 -0
  350. data/vendor/pygments-main/tests/examplefiles/swig_java.swg +1329 -0
  351. data/vendor/pygments-main/tests/examplefiles/swig_std_vector.i +225 -0
  352. data/vendor/pygments-main/tests/examplefiles/test.R +153 -0
  353. data/vendor/pygments-main/tests/examplefiles/test.adb +211 -0
  354. data/vendor/pygments-main/tests/examplefiles/test.agda +102 -0
  355. data/vendor/pygments-main/tests/examplefiles/test.asy +131 -0
  356. data/vendor/pygments-main/tests/examplefiles/test.awk +121 -0
  357. data/vendor/pygments-main/tests/examplefiles/test.bas +29 -0
  358. data/vendor/pygments-main/tests/examplefiles/test.bb +95 -0
  359. data/vendor/pygments-main/tests/examplefiles/test.bmx +145 -0
  360. data/vendor/pygments-main/tests/examplefiles/test.boo +39 -0
  361. data/vendor/pygments-main/tests/examplefiles/test.bro +250 -0
  362. data/vendor/pygments-main/tests/examplefiles/test.cs +374 -0
  363. data/vendor/pygments-main/tests/examplefiles/test.css +54 -0
  364. data/vendor/pygments-main/tests/examplefiles/test.cu +36 -0
  365. data/vendor/pygments-main/tests/examplefiles/test.d +135 -0
  366. data/vendor/pygments-main/tests/examplefiles/test.dart +23 -0
  367. data/vendor/pygments-main/tests/examplefiles/test.dtd +89 -0
  368. data/vendor/pygments-main/tests/examplefiles/test.ebnf +31 -0
  369. data/vendor/pygments-main/tests/examplefiles/test.ec +605 -0
  370. data/vendor/pygments-main/tests/examplefiles/test.ecl +58 -0
  371. data/vendor/pygments-main/tests/examplefiles/test.eh +315 -0
  372. data/vendor/pygments-main/tests/examplefiles/test.erl +169 -0
  373. data/vendor/pygments-main/tests/examplefiles/test.evoque +33 -0
  374. data/vendor/pygments-main/tests/examplefiles/test.fan +818 -0
  375. data/vendor/pygments-main/tests/examplefiles/test.flx +57 -0
  376. data/vendor/pygments-main/tests/examplefiles/test.gdc +13 -0
  377. data/vendor/pygments-main/tests/examplefiles/test.groovy +97 -0
  378. data/vendor/pygments-main/tests/examplefiles/test.html +339 -0
  379. data/vendor/pygments-main/tests/examplefiles/test.ini +10 -0
  380. data/vendor/pygments-main/tests/examplefiles/test.java +653 -0
  381. data/vendor/pygments-main/tests/examplefiles/test.jsp +24 -0
  382. data/vendor/pygments-main/tests/examplefiles/test.maql +45 -0
  383. data/vendor/pygments-main/tests/examplefiles/test.mod +374 -0
  384. data/vendor/pygments-main/tests/examplefiles/test.moo +51 -0
  385. data/vendor/pygments-main/tests/examplefiles/test.myt +166 -0
  386. data/vendor/pygments-main/tests/examplefiles/test.nim +93 -0
  387. data/vendor/pygments-main/tests/examplefiles/test.opa +10 -0
  388. data/vendor/pygments-main/tests/examplefiles/test.p6 +252 -0
  389. data/vendor/pygments-main/tests/examplefiles/test.pas +743 -0
  390. data/vendor/pygments-main/tests/examplefiles/test.php +505 -0
  391. data/vendor/pygments-main/tests/examplefiles/test.plot +333 -0
  392. data/vendor/pygments-main/tests/examplefiles/test.ps1 +108 -0
  393. data/vendor/pygments-main/tests/examplefiles/test.pypylog +1839 -0
  394. data/vendor/pygments-main/tests/examplefiles/test.r3 +94 -0
  395. data/vendor/pygments-main/tests/examplefiles/test.rb +177 -0
  396. data/vendor/pygments-main/tests/examplefiles/test.rhtml +43 -0
  397. data/vendor/pygments-main/tests/examplefiles/test.scaml +8 -0
  398. data/vendor/pygments-main/tests/examplefiles/test.ssp +12 -0
  399. data/vendor/pygments-main/tests/examplefiles/test.tcsh +830 -0
  400. data/vendor/pygments-main/tests/examplefiles/test.vb +407 -0
  401. data/vendor/pygments-main/tests/examplefiles/test.vhdl +161 -0
  402. data/vendor/pygments-main/tests/examplefiles/test.xqy +138 -0
  403. data/vendor/pygments-main/tests/examplefiles/test.xsl +23 -0
  404. data/vendor/pygments-main/tests/examplefiles/test2.pypylog +120 -0
  405. data/vendor/pygments-main/tests/examplefiles/truncated.pytb +15 -0
  406. data/vendor/pygments-main/tests/examplefiles/type.lisp +1218 -0
  407. data/vendor/pygments-main/tests/examplefiles/underscore.coffee +603 -0
  408. data/vendor/pygments-main/tests/examplefiles/unicode.applescript +5 -0
  409. data/vendor/pygments-main/tests/examplefiles/unicodedoc.py +11 -0
  410. data/vendor/pygments-main/tests/examplefiles/unix-io.lid +37 -0
  411. data/vendor/pygments-main/tests/examplefiles/webkit-transition.css +3 -0
  412. data/vendor/pygments-main/tests/examplefiles/while.pov +13 -0
  413. data/vendor/pygments-main/tests/examplefiles/wiki.factor +384 -0
  414. data/vendor/pygments-main/tests/examplefiles/xml_example +1897 -0
  415. data/vendor/pygments-main/tests/examplefiles/zmlrpc.f90 +798 -0
  416. data/vendor/pygments-main/tests/old_run.py +138 -0
  417. data/vendor/pygments-main/tests/run.py +49 -0
  418. data/vendor/pygments-main/tests/support.py +15 -0
  419. data/vendor/pygments-main/tests/support/tags +36 -0
  420. data/vendor/pygments-main/tests/test_basic_api.py +295 -0
  421. data/vendor/pygments-main/tests/test_clexer.py +31 -0
  422. data/vendor/pygments-main/tests/test_cmdline.py +105 -0
  423. data/vendor/pygments-main/tests/test_examplefiles.py +99 -0
  424. data/vendor/pygments-main/tests/test_html_formatter.py +178 -0
  425. data/vendor/pygments-main/tests/test_latex_formatter.py +55 -0
  426. data/vendor/pygments-main/tests/test_lexers_other.py +68 -0
  427. data/vendor/pygments-main/tests/test_perllexer.py +137 -0
  428. data/vendor/pygments-main/tests/test_regexlexer.py +47 -0
  429. data/vendor/pygments-main/tests/test_token.py +46 -0
  430. data/vendor/pygments-main/tests/test_using_api.py +40 -0
  431. data/vendor/pygments-main/tests/test_util.py +135 -0
  432. data/vendor/simplejson/.gitignore +10 -0
  433. data/vendor/simplejson/.travis.yml +5 -0
  434. data/vendor/simplejson/CHANGES.txt +291 -0
  435. data/vendor/simplejson/LICENSE.txt +19 -0
  436. data/vendor/simplejson/MANIFEST.in +5 -0
  437. data/vendor/simplejson/README.rst +19 -0
  438. data/vendor/simplejson/conf.py +179 -0
  439. data/vendor/simplejson/index.rst +628 -0
  440. data/vendor/simplejson/scripts/make_docs.py +18 -0
  441. data/vendor/simplejson/setup.py +104 -0
  442. data/vendor/simplejson/simplejson/__init__.py +510 -0
  443. data/vendor/simplejson/simplejson/_speedups.c +2745 -0
  444. data/vendor/simplejson/simplejson/decoder.py +425 -0
  445. data/vendor/simplejson/simplejson/encoder.py +567 -0
  446. data/vendor/simplejson/simplejson/ordered_dict.py +119 -0
  447. data/vendor/simplejson/simplejson/scanner.py +77 -0
  448. data/vendor/simplejson/simplejson/tests/__init__.py +67 -0
  449. data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +55 -0
  450. data/vendor/simplejson/simplejson/tests/test_check_circular.py +30 -0
  451. data/vendor/simplejson/simplejson/tests/test_decimal.py +66 -0
  452. data/vendor/simplejson/simplejson/tests/test_decode.py +83 -0
  453. data/vendor/simplejson/simplejson/tests/test_default.py +9 -0
  454. data/vendor/simplejson/simplejson/tests/test_dump.py +67 -0
  455. data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +46 -0
  456. data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +32 -0
  457. data/vendor/simplejson/simplejson/tests/test_errors.py +34 -0
  458. data/vendor/simplejson/simplejson/tests/test_fail.py +91 -0
  459. data/vendor/simplejson/simplejson/tests/test_float.py +19 -0
  460. data/vendor/simplejson/simplejson/tests/test_indent.py +86 -0
  461. data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +20 -0
  462. data/vendor/simplejson/simplejson/tests/test_namedtuple.py +121 -0
  463. data/vendor/simplejson/simplejson/tests/test_pass1.py +76 -0
  464. data/vendor/simplejson/simplejson/tests/test_pass2.py +14 -0
  465. data/vendor/simplejson/simplejson/tests/test_pass3.py +20 -0
  466. data/vendor/simplejson/simplejson/tests/test_recursion.py +67 -0
  467. data/vendor/simplejson/simplejson/tests/test_scanstring.py +117 -0
  468. data/vendor/simplejson/simplejson/tests/test_separators.py +42 -0
  469. data/vendor/simplejson/simplejson/tests/test_speedups.py +20 -0
  470. data/vendor/simplejson/simplejson/tests/test_tuple.py +49 -0
  471. data/vendor/simplejson/simplejson/tests/test_unicode.py +109 -0
  472. data/vendor/simplejson/simplejson/tool.py +39 -0
  473. metadata +557 -0
@@ -0,0 +1,43 @@
1
+ msc {
2
+ hscale=5;
3
+
4
+ //test comment
5
+
6
+ a,b,c,d;
7
+
8
+ /* another
9
+ comment
10
+ goes here */ /* too */ // now
11
+
12
+ ... [label="test1", id="1"];
13
+ --- [label="test2", id="2"];
14
+ ||| [label="test3", id="2"];
15
+ a ABOX b;
16
+ a--b [label="test4", id="2"];
17
+ a == b [label="test5", id="2"];
18
+ a .. b [label="test6", id="2"];
19
+ a::b [label="test7", id="2"];
20
+ a<<=>> b [label="test8", id="2"],
21
+ b <->c [label="test9", id="2"],
22
+ b RBOX c;
23
+ a BOX d;
24
+ a<=> b [label="test10", id="2"];
25
+ a <<>> b [label="test11", id="2"];
26
+ a<:>b [label="test12", id="2"];
27
+ a->b [label="test13", id="2"];
28
+ a =>> b [label="test14", id="2"],
29
+ b >> c [label="test15", id="2"],
30
+ a=> b [label="test16", id="2"];
31
+ a :>b [label="test17", id="2"];
32
+ a-x b [label="test18", id="2"];
33
+ a -Xb [label="test19", id="2"];
34
+ a<- b [label="test20", id="2"];
35
+ a <<=b [label="test21", id="2"];
36
+ a<< b [label="test22", id="2"];
37
+ a <= b [label="test23", id="2"];
38
+ a<: b [label="test24", id="2"];
39
+ a -xb [label="test25", id="2"];
40
+ a-X b [ label="test26",id="2" ];
41
+ a->* [label="test27" , id="2"];
42
+ *<-b [label="test28",id="28"];
43
+ }
@@ -0,0 +1,1010 @@
1
+ import glib2, gtk2, gdk2, gtksourceview, dialogs, os, pango, osproc, strutils
2
+ import pegs, streams
3
+ import settings, types, cfg, search
4
+
5
+ {.push callConv:cdecl.}
6
+
7
+ const
8
+ NimrodProjectExt = ".nimprj"
9
+
10
+ var win: types.MainWin
11
+ win.Tabs = @[]
12
+
13
+ search.win = addr(win)
14
+
15
+ var lastSession: seq[string] = @[]
16
+
17
+ var confParseFail = False # This gets set to true
18
+ # When there is an error parsing the config
19
+
20
+ # Load the settings
21
+ try:
22
+ win.settings = cfg.load(lastSession)
23
+ except ECFGParse:
24
+ # TODO: Make the dialog show the exception
25
+ confParseFail = True
26
+ win.settings = cfg.defaultSettings()
27
+ except EIO:
28
+ win.settings = cfg.defaultSettings()
29
+
30
+ proc getProjectTab(): int =
31
+ for i in 0..high(win.tabs):
32
+ if win.tabs[i].filename.endswith(NimrodProjectExt): return i
33
+
34
+ proc saveTab(tabNr: int, startpath: string) =
35
+ if tabNr < 0: return
36
+ if win.Tabs[tabNr].saved: return
37
+ var path = ""
38
+ if win.Tabs[tabNr].filename == "":
39
+ path = ChooseFileToSave(win.w, startpath)
40
+ # dialogs.nim STOCK_OPEN instead of STOCK_SAVE
41
+ else:
42
+ path = win.Tabs[tabNr].filename
43
+
44
+ if path != "":
45
+ var buffer = PTextBuffer(win.Tabs[tabNr].buffer)
46
+ # Get the text from the TextView
47
+ var startIter: TTextIter
48
+ buffer.getStartIter(addr(startIter))
49
+
50
+ var endIter: TTextIter
51
+ buffer.getEndIter(addr(endIter))
52
+
53
+ var text = buffer.getText(addr(startIter), addr(endIter), False)
54
+ # Save it to a file
55
+ var f: TFile
56
+ if open(f, path, fmWrite):
57
+ f.write(text)
58
+ f.close()
59
+
60
+ win.tempStuff.lastSaveDir = splitFile(path).dir
61
+
62
+ # Change the tab name and .Tabs.filename etc.
63
+ win.Tabs[tabNr].filename = path
64
+ win.Tabs[tabNr].saved = True
65
+ var name = extractFilename(path)
66
+
67
+ var cTab = win.Tabs[tabNr]
68
+ cTab.label.setText(name)
69
+ else:
70
+ error(win.w, "Unable to write to file")
71
+
72
+ proc saveAllTabs() =
73
+ for i in 0..high(win.tabs):
74
+ saveTab(i, os.splitFile(win.tabs[i].filename).dir)
75
+
76
+ # GTK Events
77
+ # -- w(PWindow)
78
+ proc destroy(widget: PWidget, data: pgpointer) {.cdecl.} =
79
+ # gather some settings
80
+ win.settings.VPanedPos = PPaned(win.sourceViewTabs.getParent()).getPosition()
81
+ win.settings.winWidth = win.w.allocation.width
82
+ win.settings.winHeight = win.w.allocation.height
83
+
84
+ # save the settings
85
+ win.save()
86
+ # then quit
87
+ main_quit()
88
+
89
+ proc delete_event(widget: PWidget, event: PEvent, user_data: pgpointer): bool =
90
+ var quit = True
91
+ for i in low(win.Tabs)..len(win.Tabs)-1:
92
+ if not win.Tabs[i].saved:
93
+ var askSave = dialogNewWithButtons("", win.w, 0,
94
+ STOCK_SAVE, RESPONSE_ACCEPT, STOCK_CANCEL,
95
+ RESPONSE_CANCEL,
96
+ "Close without saving", RESPONSE_REJECT, nil)
97
+ askSave.setTransientFor(win.w)
98
+ # TODO: Make this dialog look better
99
+ var label = labelNew(win.Tabs[i].filename &
100
+ " is unsaved, would you like to save it ?")
101
+ PBox(askSave.vbox).pack_start(label, False, False, 0)
102
+ label.show()
103
+
104
+ var resp = askSave.run()
105
+ gtk2.destroy(PWidget(askSave))
106
+ case resp
107
+ of RESPONSE_ACCEPT:
108
+ saveTab(i, os.splitFile(win.tabs[i].filename).dir)
109
+ quit = True
110
+ of RESPONSE_CANCEL:
111
+ quit = False
112
+ break
113
+ of RESPONSE_REJECT:
114
+ quit = True
115
+ else:
116
+ quit = False
117
+ break
118
+
119
+ # If False is returned the window will close
120
+ return not quit
121
+
122
+ proc windowState_Changed(widget: PWidget, event: PEventWindowState,
123
+ user_data: pgpointer) =
124
+ win.settings.winMaximized = (event.newWindowState and
125
+ WINDOW_STATE_MAXIMIZED) != 0
126
+
127
+ # -- SourceView(PSourceView) & SourceBuffer
128
+ proc updateStatusBar(buffer: PTextBuffer){.cdecl.} =
129
+ # Incase this event gets fired before
130
+ # bottomBar is initialized
131
+ if win.bottomBar != nil and not win.tempStuff.stopSBUpdates:
132
+ var iter: TTextIter
133
+
134
+ win.bottomBar.pop(0)
135
+ buffer.getIterAtMark(addr(iter), buffer.getInsert())
136
+ var row = getLine(addr(iter)) + 1
137
+ var col = getLineOffset(addr(iter))
138
+ discard win.bottomBar.push(0, "Line: " & $row & " Column: " & $col)
139
+
140
+ proc cursorMoved(buffer: PTextBuffer, location: PTextIter,
141
+ mark: PTextMark, user_data: pgpointer){.cdecl.} =
142
+ updateStatusBar(buffer)
143
+
144
+ proc onCloseTab(btn: PButton, user_data: PWidget) =
145
+ if win.sourceViewTabs.getNPages() > 1:
146
+ var tab = win.sourceViewTabs.pageNum(user_data)
147
+ win.sourceViewTabs.removePage(tab)
148
+
149
+ win.Tabs.delete(tab)
150
+
151
+ proc onSwitchTab(notebook: PNotebook, page: PNotebookPage, pageNum: guint,
152
+ user_data: pgpointer) =
153
+ if win.Tabs.len()-1 >= pageNum:
154
+ win.w.setTitle("Aporia IDE - " & win.Tabs[pageNum].filename)
155
+
156
+ proc createTabLabel(name: string, t_child: PWidget): tuple[box: PWidget,
157
+ label: PLabel] =
158
+ var box = hboxNew(False, 0)
159
+ var label = labelNew(name)
160
+ var closebtn = buttonNew()
161
+ closeBtn.setLabel(nil)
162
+ var iconSize = iconSizeFromName("tabIconSize")
163
+ if iconSize == 0:
164
+ iconSize = iconSizeRegister("tabIconSize", 10, 10)
165
+ var image = imageNewFromStock(STOCK_CLOSE, iconSize)
166
+ discard gSignalConnect(closebtn, "clicked", G_Callback(onCloseTab), t_child)
167
+ closebtn.setImage(image)
168
+ gtk2.setRelief(closebtn, RELIEF_NONE)
169
+ box.packStart(label, True, True, 0)
170
+ box.packEnd(closebtn, False, False, 0)
171
+ box.showAll()
172
+ return (box, label)
173
+
174
+ proc changed(buffer: PTextBuffer, user_data: pgpointer) =
175
+ # Update the 'Line & Column'
176
+ #updateStatusBar(buffer)
177
+
178
+ # Change the tabs state to 'unsaved'
179
+ # and add '*' to the Tab Name
180
+ var current = win.SourceViewTabs.getCurrentPage()
181
+ var name = ""
182
+ if win.Tabs[current].filename == "":
183
+ win.Tabs[current].saved = False
184
+ name = "Untitled *"
185
+ else:
186
+ win.Tabs[current].saved = False
187
+ name = extractFilename(win.Tabs[current].filename) & " *"
188
+
189
+ var cTab = win.Tabs[current]
190
+ cTab.label.setText(name)
191
+
192
+ # Other(Helper) functions
193
+
194
+ proc initSourceView(SourceView: var PWidget, scrollWindow: var PScrolledWindow,
195
+ buffer: var PSourceBuffer) =
196
+ # This gets called by addTab
197
+ # Each tabs creates a new SourceView
198
+ # SourceScrolledWindow(ScrolledWindow)
199
+ scrollWindow = scrolledWindowNew(nil, nil)
200
+ scrollWindow.setPolicy(POLICY_AUTOMATIC, POLICY_AUTOMATIC)
201
+ scrollWindow.show()
202
+
203
+ # SourceView(gtkSourceView)
204
+ SourceView = sourceViewNew(buffer)
205
+ PSourceView(SourceView).setInsertSpacesInsteadOfTabs(True)
206
+ PSourceView(SourceView).setIndentWidth(win.settings.indentWidth)
207
+ PSourceView(SourceView).setShowLineNumbers(win.settings.showLineNumbers)
208
+ PSourceView(SourceView).setHighlightCurrentLine(
209
+ win.settings.highlightCurrentLine)
210
+ PSourceView(SourceView).setShowRightMargin(win.settings.rightMargin)
211
+ PSourceView(SourceView).setAutoIndent(win.settings.autoIndent)
212
+
213
+ var font = font_description_from_string(win.settings.font)
214
+ SourceView.modifyFont(font)
215
+
216
+ scrollWindow.add(SourceView)
217
+ SourceView.show()
218
+
219
+ buffer.setHighlightMatchingBrackets(
220
+ win.settings.highlightMatchingBrackets)
221
+
222
+ # UGLY workaround for yet another compiler bug:
223
+ discard gsignalConnect(buffer, "mark-set",
224
+ GCallback(aporia.cursorMoved), nil)
225
+ discard gsignalConnect(buffer, "changed", GCallback(aporia.changed), nil)
226
+
227
+ # -- Set the syntax highlighter scheme
228
+ buffer.setScheme(win.scheme)
229
+
230
+ proc addTab(name, filename: string) =
231
+ ## Adds a tab, if filename is not "" reads the file. And sets
232
+ ## the tabs SourceViews text to that files contents.
233
+ assert(win.nimLang != nil)
234
+ var buffer: PSourceBuffer = sourceBufferNew(win.nimLang)
235
+
236
+ if filename != nil and filename != "":
237
+ var lang = win.langMan.guessLanguage(filename, nil)
238
+ if lang != nil:
239
+ buffer.setLanguage(lang)
240
+ else:
241
+ buffer.setHighlightSyntax(False)
242
+
243
+ var nam = name
244
+ if nam == "": nam = "Untitled"
245
+ if filename == "": nam.add(" *")
246
+ elif filename != "" and name == "":
247
+ # Disable the undo/redo manager.
248
+ buffer.begin_not_undoable_action()
249
+
250
+ # Load the file.
251
+ var file: string = readFile(filename)
252
+ if file != nil:
253
+ buffer.set_text(file, len(file))
254
+
255
+ # Enable the undo/redo manager.
256
+ buffer.end_not_undoable_action()
257
+
258
+ # Get the name.ext of the filename, for the tabs title
259
+ nam = extractFilename(filename)
260
+
261
+ # Init the sourceview
262
+ var sourceView: PWidget
263
+ var scrollWindow: PScrolledWindow
264
+ initSourceView(sourceView, scrollWindow, buffer)
265
+
266
+ var (TabLabel, labelText) = createTabLabel(nam, scrollWindow)
267
+ # Add a tab
268
+ discard win.SourceViewTabs.appendPage(scrollWindow, TabLabel)
269
+
270
+ var nTab: Tab
271
+ nTab.buffer = buffer
272
+ nTab.sourceView = sourceView
273
+ nTab.label = labelText
274
+ nTab.saved = (filename != "")
275
+ nTab.filename = filename
276
+ win.Tabs.add(nTab)
277
+
278
+ PTextView(SourceView).setBuffer(nTab.buffer)
279
+
280
+ # GTK Events Contd.
281
+ # -- TopMenu & TopBar
282
+
283
+ proc newFile(menuItem: PMenuItem, user_data: pgpointer) =
284
+ addTab("", "")
285
+ win.sourceViewTabs.setCurrentPage(win.Tabs.len()-1)
286
+
287
+ proc openFile(menuItem: PMenuItem, user_data: pgpointer) =
288
+ var startpath = ""
289
+ var currPage = win.SourceViewTabs.getCurrentPage()
290
+ if currPage <% win.tabs.len:
291
+ startpath = os.splitFile(win.tabs[currPage].filename).dir
292
+
293
+ if startpath.len == 0:
294
+ # Use lastSavePath as the startpath
295
+ startpath = win.tempStuff.lastSaveDir
296
+ if startpath.len == 0:
297
+ startpath = os.getHomeDir()
298
+
299
+ var files = ChooseFilesToOpen(win.w, startpath)
300
+ if files.len() > 0:
301
+ for f in items(files):
302
+ try:
303
+ addTab("", f)
304
+ except EIO:
305
+ error(win.w, "Unable to read from file")
306
+ # Switch to the newly created tab
307
+ win.sourceViewTabs.setCurrentPage(win.Tabs.len()-1)
308
+
309
+ proc saveFile_Activate(menuItem: PMenuItem, user_data: pgpointer) =
310
+ var current = win.SourceViewTabs.getCurrentPage()
311
+ saveTab(current, os.splitFile(win.tabs[current].filename).dir)
312
+
313
+ proc saveFileAs_Activate(menuItem: PMenuItem, user_data: pgpointer) =
314
+ var current = win.SourceViewTabs.getCurrentPage()
315
+ var (filename, saved) = (win.Tabs[current].filename, win.Tabs[current].saved)
316
+
317
+ win.Tabs[current].saved = False
318
+ win.Tabs[current].filename = ""
319
+ saveTab(current, os.splitFile(filename).dir)
320
+ # If the user cancels the save file dialog. Restore the previous filename
321
+ # and saved state
322
+ if win.Tabs[current].filename == "":
323
+ win.Tabs[current].filename = filename
324
+ win.Tabs[current].saved = saved
325
+
326
+ proc undo(menuItem: PMenuItem, user_data: pgpointer) =
327
+ var current = win.SourceViewTabs.getCurrentPage()
328
+ if win.Tabs[current].buffer.canUndo():
329
+ win.Tabs[current].buffer.undo()
330
+
331
+ proc redo(menuItem: PMenuItem, user_data: pgpointer) =
332
+ var current = win.SourceViewTabs.getCurrentPage()
333
+ if win.Tabs[current].buffer.canRedo():
334
+ win.Tabs[current].buffer.redo()
335
+
336
+ proc find_Activate(menuItem: PMenuItem, user_data: pgpointer) =
337
+ # Get the selected text, and set the findEntry to it.
338
+ var currentTab = win.SourceViewTabs.getCurrentPage()
339
+ var insertIter: TTextIter
340
+ win.Tabs[currentTab].buffer.getIterAtMark(addr(insertIter),
341
+ win.Tabs[currentTab].buffer.getInsert())
342
+ var insertOffset = addr(insertIter).getOffset()
343
+
344
+ var selectIter: TTextIter
345
+ win.Tabs[currentTab].buffer.getIterAtMark(addr(selectIter),
346
+ win.Tabs[currentTab].buffer.getSelectionBound())
347
+ var selectOffset = addr(selectIter).getOffset()
348
+
349
+ if insertOffset != selectOffset:
350
+ var text = win.Tabs[currentTab].buffer.getText(addr(insertIter),
351
+ addr(selectIter), false)
352
+ win.findEntry.setText(text)
353
+
354
+ win.findBar.show()
355
+ win.findEntry.grabFocus()
356
+ win.replaceEntry.hide()
357
+ win.replaceLabel.hide()
358
+ win.replaceBtn.hide()
359
+ win.replaceAllBtn.hide()
360
+
361
+ proc replace_Activate(menuitem: PMenuItem, user_data: pgpointer) =
362
+ win.findBar.show()
363
+ win.findEntry.grabFocus()
364
+ win.replaceEntry.show()
365
+ win.replaceLabel.show()
366
+ win.replaceBtn.show()
367
+ win.replaceAllBtn.show()
368
+
369
+ proc settings_Activate(menuitem: PMenuItem, user_data: pgpointer) =
370
+ settings.showSettings(win)
371
+
372
+ proc viewBottomPanel_Toggled(menuitem: PCheckMenuItem, user_data: pgpointer) =
373
+ win.settings.bottomPanelVisible = menuitem.itemGetActive()
374
+ if win.settings.bottomPanelVisible:
375
+ win.bottomPanelTabs.show()
376
+ else:
377
+ win.bottomPanelTabs.hide()
378
+
379
+ var
380
+ pegLineError = peg"{[^(]*} '(' {\d+} ', ' \d+ ') Error:' \s* {.*}"
381
+ pegLineWarning = peg"{[^(]*} '(' {\d+} ', ' \d+ ') ' ('Warning:'/'Hint:') \s* {.*}"
382
+ pegOtherError = peg"'Error:' \s* {.*}"
383
+ pegSuccess = peg"'Hint: operation successful'.*"
384
+
385
+ proc addText(textView: PTextView, text: string, colorTag: PTextTag = nil) =
386
+ if text != nil:
387
+ var iter: TTextIter
388
+ textView.getBuffer().getEndIter(addr(iter))
389
+
390
+ if colorTag == nil:
391
+ textView.getBuffer().insert(addr(iter), text, len(text))
392
+ else:
393
+ textView.getBuffer().insertWithTags(addr(iter), text, len(text), colorTag,
394
+ nil)
395
+
396
+ proc createColor(textView: PTextView, name, color: string): PTextTag =
397
+ var tagTable = textView.getBuffer().getTagTable()
398
+ result = tagTable.tableLookup(name)
399
+ if result == nil:
400
+ result = textView.getBuffer().createTag(name, "foreground", color, nil)
401
+
402
+ when not defined(os.findExe):
403
+ proc findExe(exe: string): string =
404
+ ## returns "" if the exe cannot be found
405
+ result = addFileExt(exe, os.exeExt)
406
+ if ExistsFile(result): return
407
+ var path = os.getEnv("PATH")
408
+ for candidate in split(path, pathSep):
409
+ var x = candidate / result
410
+ if ExistsFile(x): return x
411
+ result = ""
412
+
413
+ proc GetCmd(cmd, filename: string): string =
414
+ var f = quoteIfContainsWhite(filename)
415
+ if cmd =~ peg"\s* '$' y'findExe' '(' {[^)]+} ')' {.*}":
416
+ var exe = quoteIfContainsWhite(findExe(matches[0]))
417
+ if exe.len == 0: exe = matches[0]
418
+ result = exe & " " & matches[1] % f
419
+ else:
420
+ result = cmd % f
421
+
422
+ proc showBottomPanel() =
423
+ if not win.settings.bottomPanelVisible:
424
+ win.bottomPanelTabs.show()
425
+ win.settings.bottomPanelVisible = true
426
+ PCheckMenuItem(win.viewBottomPanelMenuItem).itemSetActive(true)
427
+ # Scroll to the end of the TextView
428
+ # This is stupid, it works sometimes... it's random
429
+ var endIter: TTextIter
430
+ win.outputTextView.getBuffer().getEndIter(addr(endIter))
431
+ discard win.outputTextView.scrollToIter(
432
+ addr(endIter), 0.25, False, 0.0, 0.0)
433
+
434
+ proc compileRun(currentTab: int, shouldRun: bool) =
435
+ if win.Tabs[currentTab].filename.len == 0: return
436
+ # Clear the outputTextView
437
+ win.outputTextView.getBuffer().setText("", 0)
438
+
439
+ var outp = osProc.execProcess(GetCmd(win.settings.nimrodCmd,
440
+ win.Tabs[currentTab].filename))
441
+ # Colors
442
+ var normalTag = createColor(win.outputTextView, "normalTag", "#3d3d3d")
443
+ var errorTag = createColor(win.outputTextView, "errorTag", "red")
444
+ var warningTag = createColor(win.outputTextView, "warningTag", "darkorange")
445
+ var successTag = createColor(win.outputTextView, "successTag", "darkgreen")
446
+ for x in outp.splitLines():
447
+ if x =~ pegLineError / pegOtherError:
448
+ win.outputTextView.addText("\n" & x, errorTag)
449
+ elif x=~ pegSuccess:
450
+ win.outputTextView.addText("\n" & x, successTag)
451
+
452
+ # Launch the process
453
+ if shouldRun:
454
+ var filename = changeFileExt(win.Tabs[currentTab].filename, os.ExeExt)
455
+ var output = "\n" & osProc.execProcess(filename)
456
+ win.outputTextView.addText(output)
457
+ elif x =~ pegLineWarning:
458
+ win.outputTextView.addText("\n" & x, warningTag)
459
+ else:
460
+ win.outputTextView.addText("\n" & x, normalTag)
461
+ showBottomPanel()
462
+
463
+ proc CompileCurrent_Activate(menuitem: PMenuItem, user_data: pgpointer) =
464
+ saveFile_Activate(nil, nil)
465
+ compileRun(win.SourceViewTabs.getCurrentPage(), false)
466
+
467
+ proc CompileRunCurrent_Activate(menuitem: PMenuItem, user_data: pgpointer) =
468
+ saveFile_Activate(nil, nil)
469
+ compileRun(win.SourceViewTabs.getCurrentPage(), true)
470
+
471
+ proc CompileProject_Activate(menuitem: PMenuItem, user_data: pgpointer) =
472
+ saveAllTabs()
473
+ compileRun(getProjectTab(), false)
474
+
475
+ proc CompileRunProject_Activate(menuitem: PMenuItem, user_data: pgpointer) =
476
+ saveAllTabs()
477
+ compileRun(getProjectTab(), true)
478
+
479
+ proc RunCustomCommand(cmd: string) =
480
+ saveFile_Activate(nil, nil)
481
+ var currentTab = win.SourceViewTabs.getCurrentPage()
482
+ if win.Tabs[currentTab].filename.len == 0 or cmd.len == 0: return
483
+ # Clear the outputTextView
484
+ win.outputTextView.getBuffer().setText("", 0)
485
+ var outp = osProc.execProcess(GetCmd(cmd, win.Tabs[currentTab].filename))
486
+ var normalTag = createColor(win.outputTextView, "normalTag", "#3d3d3d")
487
+ for x in outp.splitLines():
488
+ win.outputTextView.addText("\n" & x, normalTag)
489
+ showBottomPanel()
490
+
491
+ proc RunCustomCommand1(menuitem: PMenuItem, user_data: pgpointer) =
492
+ RunCustomCommand(win.settings.customCmd1)
493
+
494
+ proc RunCustomCommand2(menuitem: PMenuItem, user_data: pgpointer) =
495
+ RunCustomCommand(win.settings.customCmd2)
496
+
497
+ proc RunCustomCommand3(menuitem: PMenuItem, user_data: pgpointer) =
498
+ RunCustomCommand(win.settings.customCmd3)
499
+
500
+ # -- FindBar
501
+
502
+ proc nextBtn_Clicked(button: PButton, user_data: pgpointer) = findText(True)
503
+ proc prevBtn_Clicked(button: PButton, user_data: pgpointer) = findText(False)
504
+
505
+ proc replaceBtn_Clicked(button: PButton, user_data: pgpointer) =
506
+ var currentTab = win.SourceViewTabs.getCurrentPage()
507
+ var start, theEnd: TTextIter
508
+ if not win.Tabs[currentTab].buffer.getSelectionBounds(
509
+ addr(start), addr(theEnd)):
510
+ # If no text is selected, try finding a match.
511
+ findText(True)
512
+ if not win.Tabs[currentTab].buffer.getSelectionBounds(
513
+ addr(start), addr(theEnd)):
514
+ # No match
515
+ return
516
+
517
+ # Remove the text
518
+ win.Tabs[currentTab].buffer.delete(addr(start), addr(theEnd))
519
+ # Insert the replacement
520
+ var text = getText(win.replaceEntry)
521
+ win.Tabs[currentTab].buffer.insert(addr(start), text, len(text))
522
+
523
+ proc replaceAllBtn_Clicked(button: PButton, user_data: pgpointer) =
524
+ var find = getText(win.findEntry)
525
+ var replace = getText(win.replaceEntry)
526
+ discard replaceAll(find, replace)
527
+
528
+ proc closeBtn_Clicked(button: PButton, user_data: pgpointer) =
529
+ win.findBar.hide()
530
+
531
+ proc caseSens_Changed(radiomenuitem: PRadioMenuitem, user_data: pgpointer) =
532
+ win.settings.search = "casesens"
533
+ proc caseInSens_Changed(radiomenuitem: PRadioMenuitem, user_data: pgpointer) =
534
+ win.settings.search = "caseinsens"
535
+ proc style_Changed(radiomenuitem: PRadioMenuitem, user_data: pgpointer) =
536
+ win.settings.search = "style"
537
+ proc regex_Changed(radiomenuitem: PRadioMenuitem, user_data: pgpointer) =
538
+ win.settings.search = "regex"
539
+ proc peg_Changed(radiomenuitem: PRadioMenuitem, user_data: pgpointer) =
540
+ win.settings.search = "peg"
541
+
542
+ proc extraBtn_Clicked(button: PButton, user_data: pgpointer) =
543
+ var extraMenu = menuNew()
544
+ var group: PGSList
545
+
546
+ var caseSensMenuItem = radio_menu_item_new(group, "Case sensitive")
547
+ extraMenu.append(caseSensMenuItem)
548
+ discard signal_connect(caseSensMenuItem, "toggled",
549
+ SIGNAL_FUNC(caseSens_Changed), nil)
550
+ caseSensMenuItem.show()
551
+ group = caseSensMenuItem.ItemGetGroup()
552
+
553
+ var caseInSensMenuItem = radio_menu_item_new(group, "Case insensitive")
554
+ extraMenu.append(caseInSensMenuItem)
555
+ discard signal_connect(caseInSensMenuItem, "toggled",
556
+ SIGNAL_FUNC(caseInSens_Changed), nil)
557
+ caseInSensMenuItem.show()
558
+ group = caseInSensMenuItem.ItemGetGroup()
559
+
560
+ var styleMenuItem = radio_menu_item_new(group, "Style insensitive")
561
+ extraMenu.append(styleMenuItem)
562
+ discard signal_connect(styleMenuItem, "toggled",
563
+ SIGNAL_FUNC(style_Changed), nil)
564
+ styleMenuItem.show()
565
+ group = styleMenuItem.ItemGetGroup()
566
+
567
+ var regexMenuItem = radio_menu_item_new(group, "Regex")
568
+ extraMenu.append(regexMenuItem)
569
+ discard signal_connect(regexMenuItem, "toggled",
570
+ SIGNAL_FUNC(regex_Changed), nil)
571
+ regexMenuItem.show()
572
+ group = regexMenuItem.ItemGetGroup()
573
+
574
+ var pegMenuItem = radio_menu_item_new(group, "Pegs")
575
+ extraMenu.append(pegMenuItem)
576
+ discard signal_connect(pegMenuItem, "toggled",
577
+ SIGNAL_FUNC(peg_Changed), nil)
578
+ pegMenuItem.show()
579
+
580
+ # Make the correct radio button active
581
+ case win.settings.search
582
+ of "casesens":
583
+ PCheckMenuItem(caseSensMenuItem).ItemSetActive(True)
584
+ of "caseinsens":
585
+ PCheckMenuItem(caseInSensMenuItem).ItemSetActive(True)
586
+ of "style":
587
+ PCheckMenuItem(styleMenuItem).ItemSetActive(True)
588
+ of "regex":
589
+ PCheckMenuItem(regexMenuItem).ItemSetActive(True)
590
+ of "peg":
591
+ PCheckMenuItem(pegMenuItem).ItemSetActive(True)
592
+
593
+ extraMenu.popup(nil, nil, nil, nil, 0, get_current_event_time())
594
+
595
+ # GUI Initialization
596
+
597
+ proc createAccelMenuItem(toolsMenu: PMenu, accGroup: PAccelGroup,
598
+ label: string, acc: gint,
599
+ action: proc (i: PMenuItem, p: pgpointer)) =
600
+ var result = menu_item_new(label)
601
+ result.addAccelerator("activate", accGroup, acc, 0, ACCEL_VISIBLE)
602
+ ToolsMenu.append(result)
603
+ show(result)
604
+ discard signal_connect(result, "activate", SIGNAL_FUNC(action), nil)
605
+
606
+ proc createSeparator(menu: PMenu) =
607
+ var sep = separator_menu_item_new()
608
+ menu.append(sep)
609
+ sep.show()
610
+
611
+ proc initTopMenu(MainBox: PBox) =
612
+ # Create a accelerator group, used for shortcuts
613
+ # like CTRL + S in SaveMenuItem
614
+ var accGroup = accel_group_new()
615
+ add_accel_group(win.w, accGroup)
616
+
617
+ # TopMenu(MenuBar)
618
+ var TopMenu = menuBarNew()
619
+
620
+ # FileMenu
621
+ var FileMenu = menuNew()
622
+
623
+ var NewMenuItem = menu_item_new("New") # New
624
+ FileMenu.append(NewMenuItem)
625
+ show(NewMenuItem)
626
+ discard signal_connect(NewMenuItem, "activate",
627
+ SIGNAL_FUNC(newFile), nil)
628
+
629
+ createSeparator(FileMenu)
630
+
631
+ var OpenMenuItem = menu_item_new("Open...") # Open...
632
+ # CTRL + O
633
+ OpenMenuItem.add_accelerator("activate", accGroup,
634
+ KEY_o, CONTROL_MASK, ACCEL_VISIBLE)
635
+ FileMenu.append(OpenMenuItem)
636
+ show(OpenMenuItem)
637
+ discard signal_connect(OpenMenuItem, "activate",
638
+ SIGNAL_FUNC(aporia.openFile), nil)
639
+
640
+ var SaveMenuItem = menu_item_new("Save") # Save
641
+ # CTRL + S
642
+ SaveMenuItem.add_accelerator("activate", accGroup,
643
+ KEY_s, CONTROL_MASK, ACCEL_VISIBLE)
644
+ FileMenu.append(SaveMenuItem)
645
+ show(SaveMenuItem)
646
+ discard signal_connect(SaveMenuItem, "activate",
647
+ SIGNAL_FUNC(saveFile_activate), nil)
648
+
649
+ var SaveAsMenuItem = menu_item_new("Save As...") # Save as...
650
+
651
+ SaveAsMenuItem.add_accelerator("activate", accGroup,
652
+ KEY_s, CONTROL_MASK or gdk2.SHIFT_MASK, ACCEL_VISIBLE)
653
+ FileMenu.append(SaveAsMenuItem)
654
+ show(SaveAsMenuItem)
655
+ discard signal_connect(SaveAsMenuItem, "activate",
656
+ SIGNAL_FUNC(saveFileAs_Activate), nil)
657
+
658
+ var FileMenuItem = menuItemNewWithMnemonic("_File")
659
+
660
+ FileMenuItem.setSubMenu(FileMenu)
661
+ FileMenuItem.show()
662
+ TopMenu.append(FileMenuItem)
663
+
664
+ # Edit menu
665
+ var EditMenu = menuNew()
666
+
667
+ var UndoMenuItem = menu_item_new("Undo") # Undo
668
+ EditMenu.append(UndoMenuItem)
669
+ show(UndoMenuItem)
670
+ discard signal_connect(UndoMenuItem, "activate",
671
+ SIGNAL_FUNC(aporia.undo), nil)
672
+
673
+ var RedoMenuItem = menu_item_new("Redo") # Undo
674
+ EditMenu.append(RedoMenuItem)
675
+ show(RedoMenuItem)
676
+ discard signal_connect(RedoMenuItem, "activate",
677
+ SIGNAL_FUNC(aporia.redo), nil)
678
+
679
+ createSeparator(EditMenu)
680
+
681
+ var FindMenuItem = menu_item_new("Find") # Find
682
+ FindMenuItem.add_accelerator("activate", accGroup,
683
+ KEY_f, CONTROL_MASK, ACCEL_VISIBLE)
684
+ EditMenu.append(FindMenuItem)
685
+ show(FindMenuItem)
686
+ discard signal_connect(FindMenuItem, "activate",
687
+ SIGNAL_FUNC(aporia.find_Activate), nil)
688
+
689
+ var ReplaceMenuItem = menu_item_new("Replace") # Replace
690
+ ReplaceMenuItem.add_accelerator("activate", accGroup,
691
+ KEY_h, CONTROL_MASK, ACCEL_VISIBLE)
692
+ EditMenu.append(ReplaceMenuItem)
693
+ show(ReplaceMenuItem)
694
+ discard signal_connect(ReplaceMenuItem, "activate",
695
+ SIGNAL_FUNC(aporia.replace_Activate), nil)
696
+
697
+ createSeparator(EditMenu)
698
+
699
+ var SettingsMenuItem = menu_item_new("Settings...") # Settings
700
+ EditMenu.append(SettingsMenuItem)
701
+ show(SettingsMenuItem)
702
+ discard signal_connect(SettingsMenuItem, "activate",
703
+ SIGNAL_FUNC(aporia.Settings_Activate), nil)
704
+
705
+ var EditMenuItem = menuItemNewWithMnemonic("_Edit")
706
+
707
+ EditMenuItem.setSubMenu(EditMenu)
708
+ EditMenuItem.show()
709
+ TopMenu.append(EditMenuItem)
710
+
711
+ # View menu
712
+ var ViewMenu = menuNew()
713
+
714
+ win.viewBottomPanelMenuItem = check_menu_item_new("Bottom Panel")
715
+ PCheckMenuItem(win.viewBottomPanelMenuItem).itemSetActive(
716
+ win.settings.bottomPanelVisible)
717
+ win.viewBottomPanelMenuItem.add_accelerator("activate", accGroup,
718
+ KEY_f9, CONTROL_MASK, ACCEL_VISIBLE)
719
+ ViewMenu.append(win.viewBottomPanelMenuItem)
720
+ show(win.viewBottomPanelMenuItem)
721
+ discard signal_connect(win.viewBottomPanelMenuItem, "toggled",
722
+ SIGNAL_FUNC(aporia.viewBottomPanel_Toggled), nil)
723
+
724
+ var ViewMenuItem = menuItemNewWithMnemonic("_View")
725
+
726
+ ViewMenuItem.setSubMenu(ViewMenu)
727
+ ViewMenuItem.show()
728
+ TopMenu.append(ViewMenuItem)
729
+
730
+
731
+ # Tools menu
732
+ var ToolsMenu = menuNew()
733
+
734
+ createAccelMenuItem(ToolsMenu, accGroup, "Compile current file",
735
+ KEY_F4, aporia.CompileCurrent_Activate)
736
+ createAccelMenuItem(ToolsMenu, accGroup, "Compile & run current file",
737
+ KEY_F5, aporia.CompileRunCurrent_Activate)
738
+ createSeparator(ToolsMenu)
739
+ createAccelMenuItem(ToolsMenu, accGroup, "Compile project",
740
+ KEY_F8, aporia.CompileProject_Activate)
741
+ createAccelMenuItem(ToolsMenu, accGroup, "Compile & run project",
742
+ KEY_F9, aporia.CompileRunProject_Activate)
743
+ createSeparator(ToolsMenu)
744
+ createAccelMenuItem(ToolsMenu, accGroup, "Run custom command 1",
745
+ KEY_F1, aporia.RunCustomCommand1)
746
+ createAccelMenuItem(ToolsMenu, accGroup, "Run custom command 2",
747
+ KEY_F2, aporia.RunCustomCommand2)
748
+ createAccelMenuItem(ToolsMenu, accGroup, "Run custom command 3",
749
+ KEY_F3, aporia.RunCustomCommand3)
750
+
751
+ var ToolsMenuItem = menuItemNewWithMnemonic("_Tools")
752
+
753
+ ToolsMenuItem.setSubMenu(ToolsMenu)
754
+ ToolsMenuItem.show()
755
+ TopMenu.append(ToolsMenuItem)
756
+
757
+ # Help menu
758
+ MainBox.packStart(TopMenu, False, False, 0)
759
+ TopMenu.show()
760
+
761
+ proc initToolBar(MainBox: PBox) =
762
+ # TopBar(ToolBar)
763
+ var TopBar = toolbarNew()
764
+ TopBar.setStyle(TOOLBAR_ICONS)
765
+
766
+ var NewFileItem = TopBar.insertStock(STOCK_NEW, "New File",
767
+ "New File", SIGNAL_FUNC(aporia.newFile), nil, 0)
768
+ TopBar.appendSpace()
769
+ var OpenItem = TopBar.insertStock(STOCK_OPEN, "Open",
770
+ "Open", SIGNAL_FUNC(aporia.openFile), nil, -1)
771
+ var SaveItem = TopBar.insertStock(STOCK_SAVE, "Save",
772
+ "Save", SIGNAL_FUNC(saveFile_Activate), nil, -1)
773
+ TopBar.appendSpace()
774
+ var UndoItem = TopBar.insertStock(STOCK_UNDO, "Undo",
775
+ "Undo", SIGNAL_FUNC(aporia.undo), nil, -1)
776
+ var RedoItem = TopBar.insertStock(STOCK_REDO, "Redo",
777
+ "Redo", SIGNAL_FUNC(aporia.redo), nil, -1)
778
+
779
+ MainBox.packStart(TopBar, False, False, 0)
780
+ TopBar.show()
781
+
782
+ proc initSourceViewTabs() =
783
+ win.SourceViewTabs = notebookNew()
784
+ #win.sourceViewTabs.dragDestSet(DEST_DEFAULT_DROP, nil, 0, ACTION_MOVE)
785
+ discard win.SourceViewTabs.signalConnect(
786
+ "switch-page", SIGNAL_FUNC(onSwitchTab), nil)
787
+ #discard win.SourceViewTabs.signalConnect(
788
+ # "drag-drop", SIGNAL_FUNC(svTabs_DragDrop), nil)
789
+ #discard win.SourceViewTabs.signalConnect(
790
+ # "drag-data-received", SIGNAL_FUNC(svTabs_DragDataRecv), nil)
791
+ #discard win.SourceViewTabs.signalConnect(
792
+ # "drag-motion", SIGNAL_FUNC(svTabs_DragMotion), nil)
793
+ win.SourceViewTabs.set_scrollable(True)
794
+
795
+ win.SourceViewTabs.show()
796
+ if lastSession.len != 0:
797
+ for i in 0 .. len(lastSession)-1:
798
+ var splitUp = lastSession[i].split('|')
799
+ var (filename, offset) = (splitUp[0], splitUp[1])
800
+ addTab("", filename)
801
+
802
+ var iter: TTextIter
803
+ win.Tabs[i].buffer.getIterAtOffset(addr(iter), offset.parseInt())
804
+ win.Tabs[i].buffer.moveMarkByName("insert", addr(iter))
805
+ win.Tabs[i].buffer.moveMarkByName("selection_bound", addr(iter))
806
+
807
+ # TODO: Fix this..... :(
808
+ discard PTextView(win.Tabs[i].sourceView).
809
+ scrollToIter(addr(iter), 0.25, true, 0.0, 0.0)
810
+ else:
811
+ addTab("", "")
812
+
813
+ # This doesn't work :\
814
+ win.Tabs[0].sourceView.grabFocus()
815
+
816
+
817
+ proc initBottomTabs() =
818
+ win.bottomPanelTabs = notebookNew()
819
+ if win.settings.bottomPanelVisible:
820
+ win.bottomPanelTabs.show()
821
+
822
+ # output tab
823
+ var tabLabel = labelNew("Output")
824
+ var outputTab = vboxNew(False, 0)
825
+ discard win.bottomPanelTabs.appendPage(outputTab, tabLabel)
826
+ # Compiler tabs, gtktextview
827
+ var outputScrolledWindow = scrolledwindowNew(nil, nil)
828
+ outputScrolledWindow.setPolicy(POLICY_AUTOMATIC, POLICY_AUTOMATIC)
829
+ outputTab.packStart(outputScrolledWindow, true, true, 0)
830
+ outputScrolledWindow.show()
831
+
832
+ win.outputTextView = textviewNew()
833
+ outputScrolledWindow.add(win.outputTextView)
834
+ win.outputTextView.show()
835
+
836
+ outputTab.show()
837
+
838
+ proc initTAndBP(MainBox: PBox) =
839
+ # This init's the HPaned, which splits the sourceViewTabs
840
+ # and the BottomPanelTabs
841
+ initSourceViewTabs()
842
+ initBottomTabs()
843
+
844
+ var TAndBPVPaned = vpanedNew()
845
+ tandbpVPaned.pack1(win.sourceViewTabs, resize=True, shrink=False)
846
+ tandbpVPaned.pack2(win.bottomPanelTabs, resize=False, shrink=False)
847
+ MainBox.packStart(TAndBPVPaned, True, True, 0)
848
+ tandbpVPaned.setPosition(win.settings.VPanedPos)
849
+ TAndBPVPaned.show()
850
+
851
+ proc initFindBar(MainBox: PBox) =
852
+ # Create a fixed container
853
+ win.findBar = HBoxNew(False, 0)
854
+ win.findBar.setSpacing(4)
855
+
856
+ # Add a Label 'Find'
857
+ var findLabel = labelNew("Find:")
858
+ win.findBar.packStart(findLabel, False, False, 0)
859
+ findLabel.show()
860
+
861
+ # Add a (find) text entry
862
+ win.findEntry = entryNew()
863
+ win.findBar.packStart(win.findEntry, False, False, 0)
864
+ discard win.findEntry.signalConnect("activate", SIGNAL_FUNC(
865
+ aporia.nextBtn_Clicked), nil)
866
+ win.findEntry.show()
867
+ var rq: TRequisition
868
+ win.findEntry.sizeRequest(addr(rq))
869
+
870
+ # Make the (find) text entry longer
871
+ win.findEntry.set_size_request(190, rq.height)
872
+
873
+ # Add a Label 'Replace'
874
+ # - This Is only shown, when the 'Search & Replace'(CTRL + H) is shown
875
+ win.replaceLabel = labelNew("Replace:")
876
+ win.findBar.packStart(win.replaceLabel, False, False, 0)
877
+ #replaceLabel.show()
878
+
879
+ # Add a (replace) text entry
880
+ # - This Is only shown, when the 'Search & Replace'(CTRL + H) is shown
881
+ win.replaceEntry = entryNew()
882
+ win.findBar.packStart(win.replaceEntry, False, False, 0)
883
+ #win.replaceEntry.show()
884
+ var rq1: TRequisition
885
+ win.replaceEntry.sizeRequest(addr(rq1))
886
+
887
+ # Make the (replace) text entry longer
888
+ win.replaceEntry.set_size_request(100, rq1.height)
889
+
890
+ # Find next button
891
+ var nextBtn = buttonNew("Next")
892
+ win.findBar.packStart(nextBtn, false, false, 0)
893
+ discard nextBtn.signalConnect("clicked",
894
+ SIGNAL_FUNC(aporia.nextBtn_Clicked), nil)
895
+ nextBtn.show()
896
+ var nxtBtnRq: TRequisition
897
+ nextBtn.sizeRequest(addr(nxtBtnRq))
898
+
899
+ # Find previous button
900
+ var prevBtn = buttonNew("Previous")
901
+ win.findBar.packStart(prevBtn, false, false, 0)
902
+ discard prevBtn.signalConnect("clicked",
903
+ SIGNAL_FUNC(aporia.prevBtn_Clicked), nil)
904
+ prevBtn.show()
905
+
906
+ # Replace button
907
+ # - This Is only shown, when the 'Search & Replace'(CTRL + H) is shown
908
+ win.replaceBtn = buttonNew("Replace")
909
+ win.findBar.packStart(win.replaceBtn, false, false, 0)
910
+ discard win.replaceBtn.signalConnect("clicked",
911
+ SIGNAL_FUNC(aporia.replaceBtn_Clicked), nil)
912
+ #replaceBtn.show()
913
+
914
+ # Replace all button
915
+ # - this Is only shown, when the 'Search & Replace'(CTRL + H) is shown
916
+ win.replaceAllBtn = buttonNew("Replace All")
917
+ win.findBar.packStart(win.replaceAllBtn, false, false, 0)
918
+ discard win.replaceAllBtn.signalConnect("clicked",
919
+ SIGNAL_FUNC(aporia.replaceAllBtn_Clicked), nil)
920
+ #replaceAllBtn.show()
921
+
922
+ # Right side ...
923
+
924
+ # Close button - With a close stock image
925
+ var closeBtn = buttonNew()
926
+ var closeImage = imageNewFromStock(STOCK_CLOSE, ICON_SIZE_SMALL_TOOLBAR)
927
+ var closeBox = hboxNew(False, 0)
928
+ closeBtn.add(closeBox)
929
+ closeBox.show()
930
+ closeBox.add(closeImage)
931
+ closeImage.show()
932
+ discard closeBtn.signalConnect("clicked",
933
+ SIGNAL_FUNC(aporia.closeBtn_Clicked), nil)
934
+ win.findBar.packEnd(closeBtn, False, False, 2)
935
+ closeBtn.show()
936
+
937
+ # Extra button - When clicked shows a menu with options like 'Use regex'
938
+ var extraBtn = buttonNew()
939
+ var extraImage = imageNewFromStock(STOCK_PROPERTIES, ICON_SIZE_SMALL_TOOLBAR)
940
+
941
+ var extraBox = hboxNew(False, 0)
942
+ extraBtn.add(extraBox)
943
+ extraBox.show()
944
+ extraBox.add(extraImage)
945
+ extraImage.show()
946
+ discard extraBtn.signalConnect("clicked",
947
+ SIGNAL_FUNC(aporia.extraBtn_Clicked), nil)
948
+ win.findBar.packEnd(extraBtn, False, False, 0)
949
+ extraBtn.show()
950
+
951
+ MainBox.packStart(win.findBar, False, False, 0)
952
+ win.findBar.show()
953
+
954
+ proc initStatusBar(MainBox: PBox) =
955
+ win.bottomBar = statusbarNew()
956
+ MainBox.packStart(win.bottomBar, False, False, 0)
957
+ win.bottomBar.show()
958
+
959
+ discard win.bottomBar.push(0, "Line: 0 Column: 0")
960
+
961
+ proc initControls() =
962
+ # Load up the language style
963
+ win.langMan = languageManagerGetDefault()
964
+ var langpaths: array[0..1, cstring] =
965
+ [cstring(os.getApplicationDir() / langSpecs), nil]
966
+ win.langMan.setSearchPath(addr(langpaths))
967
+ var nimLang = win.langMan.getLanguage("nimrod")
968
+ win.nimLang = nimLang
969
+
970
+ # Load the scheme
971
+ var schemeMan = schemeManagerGetDefault()
972
+ var schemepaths: array[0..1, cstring] =
973
+ [cstring(os.getApplicationDir() / styles), nil]
974
+ schemeMan.setSearchPath(addr(schemepaths))
975
+ win.scheme = schemeMan.getScheme(win.settings.colorSchemeID)
976
+
977
+ # Window
978
+ win.w = windowNew(gtk2.WINDOW_TOPLEVEL)
979
+ win.w.setDefaultSize(win.settings.winWidth, win.settings.winHeight)
980
+ win.w.setTitle("Aporia IDE")
981
+ if win.settings.winMaximized: win.w.maximize()
982
+
983
+ win.w.show() # The window has to be shown before
984
+ # setting the position of the VPaned so that
985
+ # it gets set correctly, when the window is maximized.
986
+
987
+ discard win.w.signalConnect("destroy", SIGNAL_FUNC(aporia.destroy), nil)
988
+ discard win.w.signalConnect("delete_event",
989
+ SIGNAL_FUNC(aporia.delete_event), nil)
990
+ discard win.w.signalConnect("window-state-event",
991
+ SIGNAL_FUNC(aporia.windowState_Changed), nil)
992
+
993
+ # MainBox (vbox)
994
+ var MainBox = vboxNew(False, 0)
995
+ win.w.add(MainBox)
996
+
997
+ initTopMenu(MainBox)
998
+ initToolBar(MainBox)
999
+ initTAndBP(MainBox)
1000
+ initFindBar(MainBox)
1001
+ initStatusBar(MainBox)
1002
+
1003
+ MainBox.show()
1004
+ if confParseFail:
1005
+ dialogs.warning(win.w, "Error parsing config file, using default settings.")
1006
+
1007
+ nimrod_init()
1008
+ initControls()
1009
+ main()
1010
+