lines-engine 0.6.2 → 0.9.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 (572) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/.gitignore +1 -0
  5. data/CHANGELOG.md +10 -3
  6. data/Gemfile +1 -0
  7. data/Gemfile.lock +10 -6
  8. data/app/assets/images/favicon.ico +0 -0
  9. data/app/assets/images/gplus.svg +17 -0
  10. data/app/assets/javascripts/lines/admin/admin.js +299 -0
  11. data/app/assets/javascripts/lines/{autosize.min.js → admin/autosize.min.js} +0 -0
  12. data/app/assets/javascripts/lines/admin/navbar.js +51 -0
  13. data/app/assets/javascripts/lines/{pictures.js.coffee → admin/pictures.js.coffee} +2 -1
  14. data/app/assets/javascripts/lines/application.js +3 -0
  15. data/app/assets/javascripts/lines/articles.js.coffee +1 -0
  16. data/app/assets/javascripts/lines/viewer.js.coffee +3 -0
  17. data/app/assets/stylesheets/lines/admin/admin.scss +609 -0
  18. data/app/assets/stylesheets/lines/admin/variables_and_mixins.scss +36 -0
  19. data/app/assets/stylesheets/lines/application.scss +2 -13
  20. data/app/assets/stylesheets/lines/article.scss +165 -69
  21. data/app/assets/stylesheets/lines/fonts.scss +2 -2
  22. data/app/assets/stylesheets/lines/footer.scss +10 -56
  23. data/app/assets/stylesheets/lines/general.scss +18 -13
  24. data/app/assets/stylesheets/lines/media_queries.scss +5 -1
  25. data/app/assets/stylesheets/lines/messages.scss +28 -0
  26. data/app/assets/stylesheets/lines/navbar.scss +199 -122
  27. data/app/assets/stylesheets/lines/pagination.scss +8 -31
  28. data/app/assets/stylesheets/lines/pygments.css.erb +1 -2
  29. data/app/assets/stylesheets/lines/variables_and_mixins.scss +4 -0
  30. data/app/controllers/lines/admin/articles_controller.rb +8 -6
  31. data/app/controllers/lines/admin/authors_controller.rb +2 -2
  32. data/app/controllers/lines/admin/pictures_controller.rb +1 -1
  33. data/app/controllers/lines/application_controller.rb +1 -1
  34. data/app/controllers/lines/articles_controller.rb +3 -1
  35. data/app/controllers/lines/password_resets_controller.rb +4 -7
  36. data/app/controllers/lines/sessions_controller.rb +3 -3
  37. data/app/helpers/lines/application_helper.rb +25 -4
  38. data/app/mailers/lines/user_mailer.rb +1 -1
  39. data/app/models/lines/article.rb +13 -3
  40. data/app/models/lines/user.rb +2 -2
  41. data/app/uploaders/picture_uploader.rb +1 -1
  42. data/app/views/layouts/lines/_markdown_cheatsheet.html.erb +72 -0
  43. data/app/views/layouts/lines/admin.html.erb +15 -4
  44. data/app/views/layouts/lines/application.html.erb +16 -4
  45. data/app/views/layouts/lines/preview.html.erb +30 -2
  46. data/app/views/lines/admin/articles/_form.html.erb +50 -148
  47. data/app/views/lines/admin/articles/_picture_box.html.erb +37 -8
  48. data/app/views/lines/admin/articles/edit.html.erb +2 -12
  49. data/app/views/lines/admin/articles/index.html.erb +40 -28
  50. data/app/views/lines/admin/articles/new.html.erb +3 -10
  51. data/app/views/lines/admin/articles/show.html.erb +6 -4
  52. data/app/views/lines/admin/authors/_form.html.erb +12 -41
  53. data/app/views/lines/admin/authors/index.html.erb +18 -13
  54. data/app/views/lines/admin/authors/show.html.erb +19 -48
  55. data/app/views/lines/admin/pictures/_picture.html.erb +5 -4
  56. data/app/views/lines/admin/pictures/create.js.erb +1 -1
  57. data/app/views/lines/admin/pictures/destroy.js.erb +1 -1
  58. data/app/views/lines/articles/_article.html.erb +10 -6
  59. data/app/views/lines/articles/_article_collection.html.erb +1 -1
  60. data/app/views/lines/articles/_article_small.html.erb +9 -7
  61. data/app/views/lines/articles/index.atom.builder +10 -9
  62. data/app/views/lines/articles/index.html.erb +2 -2
  63. data/app/views/lines/articles/show.html.erb +5 -1
  64. data/app/views/lines/password_resets/edit.html.erb +25 -12
  65. data/app/views/lines/password_resets/new.html.erb +14 -8
  66. data/app/views/lines/sessions/new.html.erb +6 -10
  67. data/app/views/lines/shared/_flash.html.erb +1 -1
  68. data/app/views/lines/shared/_footer.html.erb +5 -28
  69. data/app/views/lines/user_mailer/password_reset.html.erb +6 -5
  70. data/app/views/lines/user_mailer/password_reset.text.erb +8 -4
  71. data/config/lines_config.yml +15 -14
  72. data/config/routes.rb +2 -2
  73. data/db/seeds.rb +5 -5
  74. data/lib/lines/engine.rb +1 -1
  75. data/lib/lines/version.rb +1 -1
  76. data/lines.gemspec +1 -1
  77. data/public/codemirror/.gitattributes +8 -0
  78. data/public/codemirror/.gitignore +8 -0
  79. data/public/codemirror/.npmignore +9 -0
  80. data/public/codemirror/.travis.yml +4 -0
  81. data/public/codemirror/AUTHORS +474 -0
  82. data/public/codemirror/CONTRIBUTING.md +88 -0
  83. data/public/codemirror/LICENSE +19 -0
  84. data/public/codemirror/README.md +27 -0
  85. data/public/codemirror/addon/comment/comment.js +183 -0
  86. data/public/codemirror/addon/comment/continuecomment.js +85 -0
  87. data/public/codemirror/addon/dialog/dialog.css +32 -0
  88. data/public/codemirror/addon/dialog/dialog.js +157 -0
  89. data/public/codemirror/addon/display/fullscreen.css +6 -0
  90. data/public/codemirror/addon/display/fullscreen.js +41 -0
  91. data/public/codemirror/addon/display/panel.js +112 -0
  92. data/public/codemirror/addon/display/placeholder.js +58 -0
  93. data/public/codemirror/addon/display/rulers.js +63 -0
  94. data/public/codemirror/addon/edit/closebrackets.js +185 -0
  95. data/public/codemirror/addon/edit/closetag.js +166 -0
  96. data/public/codemirror/addon/edit/continuelist.js +51 -0
  97. data/public/codemirror/addon/edit/matchbrackets.js +120 -0
  98. data/public/codemirror/addon/edit/matchtags.js +66 -0
  99. data/public/codemirror/addon/edit/trailingspace.js +27 -0
  100. data/public/codemirror/addon/fold/brace-fold.js +105 -0
  101. data/public/codemirror/addon/fold/comment-fold.js +57 -0
  102. data/public/codemirror/addon/fold/foldcode.js +149 -0
  103. data/public/codemirror/addon/fold/foldgutter.css +20 -0
  104. data/public/codemirror/addon/fold/foldgutter.js +146 -0
  105. data/public/codemirror/addon/fold/indent-fold.js +44 -0
  106. data/public/codemirror/addon/fold/markdown-fold.js +49 -0
  107. data/public/codemirror/addon/fold/xml-fold.js +182 -0
  108. data/public/codemirror/addon/hint/anyword-hint.js +41 -0
  109. data/public/codemirror/addon/hint/css-hint.js +60 -0
  110. data/public/codemirror/addon/hint/html-hint.js +348 -0
  111. data/public/codemirror/addon/hint/javascript-hint.js +146 -0
  112. data/public/codemirror/addon/hint/show-hint.css +38 -0
  113. data/public/codemirror/addon/hint/show-hint.js +386 -0
  114. data/public/codemirror/addon/hint/sql-hint.js +254 -0
  115. data/public/codemirror/addon/hint/xml-hint.js +110 -0
  116. data/public/codemirror/addon/lint/coffeescript-lint.js +41 -0
  117. data/public/codemirror/addon/lint/css-lint.js +35 -0
  118. data/public/codemirror/addon/lint/javascript-lint.js +136 -0
  119. data/public/codemirror/addon/lint/json-lint.js +31 -0
  120. data/public/codemirror/addon/lint/lint.css +73 -0
  121. data/public/codemirror/addon/lint/lint.js +207 -0
  122. data/public/codemirror/addon/lint/yaml-lint.js +28 -0
  123. data/public/codemirror/addon/merge/merge.css +112 -0
  124. data/public/codemirror/addon/merge/merge.js +775 -0
  125. data/public/codemirror/addon/mode/loadmode.js +64 -0
  126. data/public/codemirror/addon/mode/multiplex.js +123 -0
  127. data/public/codemirror/addon/mode/multiplex_test.js +33 -0
  128. data/public/codemirror/addon/mode/overlay.js +85 -0
  129. data/public/codemirror/addon/mode/simple.js +213 -0
  130. data/public/codemirror/addon/runmode/colorize.js +40 -0
  131. data/public/codemirror/addon/runmode/runmode-standalone.js +157 -0
  132. data/public/codemirror/addon/runmode/runmode.js +72 -0
  133. data/public/codemirror/addon/runmode/runmode.node.js +178 -0
  134. data/public/codemirror/addon/scroll/annotatescrollbar.js +115 -0
  135. data/public/codemirror/addon/scroll/scrollpastend.js +46 -0
  136. data/public/codemirror/addon/scroll/simplescrollbars.css +66 -0
  137. data/public/codemirror/addon/scroll/simplescrollbars.js +147 -0
  138. data/public/codemirror/addon/search/match-highlighter.js +128 -0
  139. data/public/codemirror/addon/search/matchesonscrollbar.css +8 -0
  140. data/public/codemirror/addon/search/matchesonscrollbar.js +97 -0
  141. data/public/codemirror/addon/search/search.js +202 -0
  142. data/public/codemirror/addon/search/searchcursor.js +189 -0
  143. data/public/codemirror/addon/selection/active-line.js +71 -0
  144. data/public/codemirror/addon/selection/mark-selection.js +118 -0
  145. data/public/codemirror/addon/selection/selection-pointer.js +98 -0
  146. data/public/codemirror/addon/tern/tern.css +87 -0
  147. data/public/codemirror/addon/tern/tern.js +699 -0
  148. data/public/codemirror/addon/tern/worker.js +44 -0
  149. data/public/codemirror/addon/wrap/hardwrap.js +139 -0
  150. data/public/codemirror/bin/authors.sh +6 -0
  151. data/public/codemirror/bin/compress +92 -0
  152. data/public/codemirror/bin/lint +3 -0
  153. data/public/codemirror/bin/release +45 -0
  154. data/public/codemirror/bin/source-highlight +51 -0
  155. data/public/codemirror/bower.json +17 -0
  156. data/public/codemirror/demo/activeline.html +78 -0
  157. data/public/codemirror/demo/anywordhint.html +79 -0
  158. data/public/codemirror/demo/bidi.html +74 -0
  159. data/public/codemirror/demo/btree.html +85 -0
  160. data/public/codemirror/demo/buffers.html +109 -0
  161. data/public/codemirror/demo/changemode.html +58 -0
  162. data/public/codemirror/demo/closebrackets.html +52 -0
  163. data/public/codemirror/demo/closetag.html +41 -0
  164. data/public/codemirror/demo/complete.html +79 -0
  165. data/public/codemirror/demo/emacs.html +75 -0
  166. data/public/codemirror/demo/folding.html +95 -0
  167. data/public/codemirror/demo/fullscreen.html +83 -0
  168. data/public/codemirror/demo/hardwrap.html +72 -0
  169. data/public/codemirror/demo/html5complete.html +56 -0
  170. data/public/codemirror/demo/indentwrap.html +59 -0
  171. data/public/codemirror/demo/lint.html +171 -0
  172. data/public/codemirror/demo/loadmode.html +72 -0
  173. data/public/codemirror/demo/marker.html +52 -0
  174. data/public/codemirror/demo/markselection.html +52 -0
  175. data/public/codemirror/demo/matchhighlighter.html +47 -0
  176. data/public/codemirror/demo/matchtags.html +48 -0
  177. data/public/codemirror/demo/merge.html +122 -0
  178. data/public/codemirror/demo/multiplex.html +75 -0
  179. data/public/codemirror/demo/mustache.html +69 -0
  180. data/public/codemirror/demo/panel.html +136 -0
  181. data/public/codemirror/demo/placeholder.html +45 -0
  182. data/public/codemirror/demo/preview.html +87 -0
  183. data/public/codemirror/demo/requirejs.html +70 -0
  184. data/public/codemirror/demo/resize.html +51 -0
  185. data/public/codemirror/demo/rulers.html +49 -0
  186. data/public/codemirror/demo/runmode.html +62 -0
  187. data/public/codemirror/demo/search.html +95 -0
  188. data/public/codemirror/demo/simplemode.html +186 -0
  189. data/public/codemirror/demo/simplescrollbars.html +82 -0
  190. data/public/codemirror/demo/spanaffectswrapping_shim.html +85 -0
  191. data/public/codemirror/demo/sublime.html +76 -0
  192. data/public/codemirror/demo/tern.html +133 -0
  193. data/public/codemirror/demo/theme.html +152 -0
  194. data/public/codemirror/demo/trailingspace.html +48 -0
  195. data/public/codemirror/demo/variableheight.html +67 -0
  196. data/public/codemirror/demo/vim.html +104 -0
  197. data/public/codemirror/demo/visibletabs.html +62 -0
  198. data/public/codemirror/demo/widget.html +85 -0
  199. data/public/codemirror/demo/xmlcomplete.html +119 -0
  200. data/public/codemirror/doc/activebookmark.js +57 -0
  201. data/public/codemirror/doc/compress.html +329 -0
  202. data/public/codemirror/doc/docs.css +271 -0
  203. data/public/codemirror/doc/internals.html +503 -0
  204. data/public/codemirror/doc/logo.png +0 -0
  205. data/public/codemirror/doc/logo.svg +181 -0
  206. data/public/codemirror/doc/manual.html +3327 -0
  207. data/public/codemirror/doc/realworld.html +174 -0
  208. data/public/codemirror/doc/releases.html +1116 -0
  209. data/public/codemirror/doc/reporting.html +61 -0
  210. data/public/codemirror/doc/upgrade_v2.2.html +96 -0
  211. data/public/codemirror/doc/upgrade_v3.html +230 -0
  212. data/public/codemirror/doc/upgrade_v4.html +144 -0
  213. data/public/codemirror/doc/yinyang.png +0 -0
  214. data/public/codemirror/index.html +199 -0
  215. data/public/codemirror/keymap/emacs.js +412 -0
  216. data/public/codemirror/keymap/sublime.js +555 -0
  217. data/public/codemirror/keymap/vim.js +5060 -0
  218. data/public/codemirror/lib/codemirror.css +332 -0
  219. data/public/codemirror/lib/codemirror.js +8788 -0
  220. data/public/codemirror/mode/apl/apl.js +174 -0
  221. data/public/codemirror/mode/apl/index.html +72 -0
  222. data/public/codemirror/mode/asciiarmor/asciiarmor.js +73 -0
  223. data/public/codemirror/mode/asciiarmor/index.html +46 -0
  224. data/public/codemirror/mode/asn.1/asn.1.js +204 -0
  225. data/public/codemirror/mode/asn.1/index.html +78 -0
  226. data/public/codemirror/mode/asterisk/asterisk.js +196 -0
  227. data/public/codemirror/mode/asterisk/index.html +154 -0
  228. data/public/codemirror/mode/brainfuck/brainfuck.js +85 -0
  229. data/public/codemirror/mode/brainfuck/index.html +85 -0
  230. data/public/codemirror/mode/clike/clike.js +604 -0
  231. data/public/codemirror/mode/clike/index.html +252 -0
  232. data/public/codemirror/mode/clike/scala.html +767 -0
  233. data/public/codemirror/mode/clike/test.js +33 -0
  234. data/public/codemirror/mode/clojure/clojure.js +244 -0
  235. data/public/codemirror/mode/clojure/index.html +88 -0
  236. data/public/codemirror/mode/cmake/cmake.js +97 -0
  237. data/public/codemirror/mode/cmake/index.html +129 -0
  238. data/public/codemirror/mode/cobol/cobol.js +255 -0
  239. data/public/codemirror/mode/cobol/index.html +210 -0
  240. data/public/codemirror/mode/coffeescript/coffeescript.js +369 -0
  241. data/public/codemirror/mode/coffeescript/index.html +740 -0
  242. data/public/codemirror/mode/commonlisp/commonlisp.js +123 -0
  243. data/public/codemirror/mode/commonlisp/index.html +177 -0
  244. data/public/codemirror/mode/css/css.js +756 -0
  245. data/public/codemirror/mode/css/index.html +75 -0
  246. data/public/codemirror/mode/css/less.html +152 -0
  247. data/public/codemirror/mode/css/less_test.js +54 -0
  248. data/public/codemirror/mode/css/scss.html +157 -0
  249. data/public/codemirror/mode/css/scss_test.js +110 -0
  250. data/public/codemirror/mode/css/test.js +188 -0
  251. data/public/codemirror/mode/cypher/cypher.js +146 -0
  252. data/public/codemirror/mode/cypher/index.html +63 -0
  253. data/public/codemirror/mode/d/d.js +218 -0
  254. data/public/codemirror/mode/d/index.html +273 -0
  255. data/public/codemirror/mode/dart/dart.js +50 -0
  256. data/public/codemirror/mode/dart/index.html +71 -0
  257. data/public/codemirror/mode/diff/diff.js +47 -0
  258. data/public/codemirror/mode/diff/index.html +117 -0
  259. data/public/codemirror/mode/django/django.js +350 -0
  260. data/public/codemirror/mode/django/index.html +73 -0
  261. data/public/codemirror/mode/dockerfile/dockerfile.js +76 -0
  262. data/public/codemirror/mode/dockerfile/index.html +73 -0
  263. data/public/codemirror/mode/dtd/dtd.js +142 -0
  264. data/public/codemirror/mode/dtd/index.html +89 -0
  265. data/public/codemirror/mode/dylan/dylan.js +291 -0
  266. data/public/codemirror/mode/dylan/index.html +407 -0
  267. data/public/codemirror/mode/ebnf/ebnf.js +195 -0
  268. data/public/codemirror/mode/ebnf/index.html +102 -0
  269. data/public/codemirror/mode/ecl/ecl.js +206 -0
  270. data/public/codemirror/mode/ecl/index.html +52 -0
  271. data/public/codemirror/mode/eiffel/eiffel.js +160 -0
  272. data/public/codemirror/mode/eiffel/index.html +429 -0
  273. data/public/codemirror/mode/elm/elm.js +205 -0
  274. data/public/codemirror/mode/elm/index.html +61 -0
  275. data/public/codemirror/mode/erlang/erlang.js +618 -0
  276. data/public/codemirror/mode/erlang/index.html +76 -0
  277. data/public/codemirror/mode/factor/factor.js +83 -0
  278. data/public/codemirror/mode/factor/index.html +77 -0
  279. data/public/codemirror/mode/forth/forth.js +180 -0
  280. data/public/codemirror/mode/forth/index.html +75 -0
  281. data/public/codemirror/mode/fortran/fortran.js +188 -0
  282. data/public/codemirror/mode/fortran/index.html +81 -0
  283. data/public/codemirror/mode/gas/gas.js +345 -0
  284. data/public/codemirror/mode/gas/index.html +68 -0
  285. data/public/codemirror/mode/gfm/gfm.js +124 -0
  286. data/public/codemirror/mode/gfm/index.html +93 -0
  287. data/public/codemirror/mode/gfm/test.js +213 -0
  288. data/public/codemirror/mode/gherkin/gherkin.js +178 -0
  289. data/public/codemirror/mode/gherkin/index.html +48 -0
  290. data/public/codemirror/mode/go/go.js +185 -0
  291. data/public/codemirror/mode/go/index.html +85 -0
  292. data/public/codemirror/mode/groovy/groovy.js +230 -0
  293. data/public/codemirror/mode/groovy/index.html +84 -0
  294. data/public/codemirror/mode/haml/haml.js +159 -0
  295. data/public/codemirror/mode/haml/index.html +79 -0
  296. data/public/codemirror/mode/haml/test.js +97 -0
  297. data/public/codemirror/mode/handlebars/handlebars.js +53 -0
  298. data/public/codemirror/mode/handlebars/index.html +83 -0
  299. data/public/codemirror/mode/haskell/haskell.js +267 -0
  300. data/public/codemirror/mode/haskell/index.html +73 -0
  301. data/public/codemirror/mode/haxe/haxe.js +518 -0
  302. data/public/codemirror/mode/haxe/index.html +124 -0
  303. data/public/codemirror/mode/htmlembedded/htmlembedded.js +28 -0
  304. data/public/codemirror/mode/htmlembedded/index.html +59 -0
  305. data/public/codemirror/mode/htmlmixed/htmlmixed.js +121 -0
  306. data/public/codemirror/mode/htmlmixed/index.html +89 -0
  307. data/public/codemirror/mode/http/http.js +113 -0
  308. data/public/codemirror/mode/http/index.html +45 -0
  309. data/public/codemirror/mode/idl/idl.js +290 -0
  310. data/public/codemirror/mode/idl/index.html +64 -0
  311. data/public/codemirror/mode/index.html +149 -0
  312. data/public/codemirror/mode/jade/index.html +70 -0
  313. data/public/codemirror/mode/jade/jade.js +590 -0
  314. data/public/codemirror/mode/javascript/index.html +114 -0
  315. data/public/codemirror/mode/javascript/javascript.js +704 -0
  316. data/public/codemirror/mode/javascript/json-ld.html +72 -0
  317. data/public/codemirror/mode/javascript/test.js +205 -0
  318. data/public/codemirror/mode/javascript/typescript.html +61 -0
  319. data/public/codemirror/mode/jinja2/index.html +54 -0
  320. data/public/codemirror/mode/jinja2/jinja2.js +142 -0
  321. data/public/codemirror/mode/julia/index.html +195 -0
  322. data/public/codemirror/mode/julia/julia.js +299 -0
  323. data/public/codemirror/mode/kotlin/index.html +89 -0
  324. data/public/codemirror/mode/kotlin/kotlin.js +284 -0
  325. data/public/codemirror/mode/livescript/index.html +459 -0
  326. data/public/codemirror/mode/livescript/livescript.js +280 -0
  327. data/public/codemirror/mode/lua/index.html +85 -0
  328. data/public/codemirror/mode/lua/lua.js +159 -0
  329. data/public/codemirror/mode/markdown/index.html +359 -0
  330. data/public/codemirror/mode/markdown/markdown.js +781 -0
  331. data/public/codemirror/mode/markdown/test.js +792 -0
  332. data/public/codemirror/mode/mathematica/index.html +72 -0
  333. data/public/codemirror/mode/mathematica/mathematica.js +175 -0
  334. data/public/codemirror/mode/meta.js +190 -0
  335. data/public/codemirror/mode/mirc/index.html +160 -0
  336. data/public/codemirror/mode/mirc/mirc.js +193 -0
  337. data/public/codemirror/mode/mllike/index.html +179 -0
  338. data/public/codemirror/mode/mllike/mllike.js +205 -0
  339. data/public/codemirror/mode/modelica/index.html +67 -0
  340. data/public/codemirror/mode/modelica/modelica.js +245 -0
  341. data/public/codemirror/mode/mumps/index.html +85 -0
  342. data/public/codemirror/mode/mumps/mumps.js +148 -0
  343. data/public/codemirror/mode/nginx/index.html +181 -0
  344. data/public/codemirror/mode/nginx/nginx.js +178 -0
  345. data/public/codemirror/mode/ntriples/index.html +45 -0
  346. data/public/codemirror/mode/ntriples/ntriples.js +186 -0
  347. data/public/codemirror/mode/octave/index.html +83 -0
  348. data/public/codemirror/mode/octave/octave.js +135 -0
  349. data/public/codemirror/mode/pascal/index.html +61 -0
  350. data/public/codemirror/mode/pascal/pascal.js +109 -0
  351. data/public/codemirror/mode/pegjs/index.html +66 -0
  352. data/public/codemirror/mode/pegjs/pegjs.js +114 -0
  353. data/public/codemirror/mode/perl/index.html +75 -0
  354. data/public/codemirror/mode/perl/perl.js +837 -0
  355. data/public/codemirror/mode/php/index.html +64 -0
  356. data/public/codemirror/mode/php/php.js +230 -0
  357. data/public/codemirror/mode/php/test.js +154 -0
  358. data/public/codemirror/mode/pig/index.html +55 -0
  359. data/public/codemirror/mode/pig/pig.js +178 -0
  360. data/public/codemirror/mode/properties/index.html +53 -0
  361. data/public/codemirror/mode/properties/properties.js +78 -0
  362. data/public/codemirror/mode/puppet/index.html +121 -0
  363. data/public/codemirror/mode/puppet/puppet.js +220 -0
  364. data/public/codemirror/mode/python/index.html +198 -0
  365. data/public/codemirror/mode/python/python.js +358 -0
  366. data/public/codemirror/mode/q/index.html +144 -0
  367. data/public/codemirror/mode/q/q.js +139 -0
  368. data/public/codemirror/mode/r/index.html +85 -0
  369. data/public/codemirror/mode/r/r.js +162 -0
  370. data/public/codemirror/mode/rpm/changes/index.html +66 -0
  371. data/public/codemirror/mode/rpm/index.html +149 -0
  372. data/public/codemirror/mode/rpm/rpm.js +101 -0
  373. data/public/codemirror/mode/rst/index.html +535 -0
  374. data/public/codemirror/mode/rst/rst.js +557 -0
  375. data/public/codemirror/mode/ruby/index.html +183 -0
  376. data/public/codemirror/mode/ruby/ruby.js +285 -0
  377. data/public/codemirror/mode/ruby/test.js +14 -0
  378. data/public/codemirror/mode/rust/index.html +60 -0
  379. data/public/codemirror/mode/rust/rust.js +451 -0
  380. data/public/codemirror/mode/sass/index.html +66 -0
  381. data/public/codemirror/mode/sass/sass.js +414 -0
  382. data/public/codemirror/mode/scheme/index.html +77 -0
  383. data/public/codemirror/mode/scheme/scheme.js +249 -0
  384. data/public/codemirror/mode/shell/index.html +66 -0
  385. data/public/codemirror/mode/shell/shell.js +139 -0
  386. data/public/codemirror/mode/shell/test.js +58 -0
  387. data/public/codemirror/mode/sieve/index.html +93 -0
  388. data/public/codemirror/mode/sieve/sieve.js +193 -0
  389. data/public/codemirror/mode/slim/index.html +96 -0
  390. data/public/codemirror/mode/slim/slim.js +575 -0
  391. data/public/codemirror/mode/slim/test.js +96 -0
  392. data/public/codemirror/mode/smalltalk/index.html +68 -0
  393. data/public/codemirror/mode/smalltalk/smalltalk.js +168 -0
  394. data/public/codemirror/mode/smarty/index.html +138 -0
  395. data/public/codemirror/mode/smarty/smarty.js +225 -0
  396. data/public/codemirror/mode/solr/index.html +57 -0
  397. data/public/codemirror/mode/solr/solr.js +104 -0
  398. data/public/codemirror/mode/soy/index.html +68 -0
  399. data/public/codemirror/mode/soy/soy.js +198 -0
  400. data/public/codemirror/mode/sparql/index.html +61 -0
  401. data/public/codemirror/mode/sparql/sparql.js +174 -0
  402. data/public/codemirror/mode/spreadsheet/index.html +42 -0
  403. data/public/codemirror/mode/spreadsheet/spreadsheet.js +109 -0
  404. data/public/codemirror/mode/sql/index.html +84 -0
  405. data/public/codemirror/mode/sql/sql.js +391 -0
  406. data/public/codemirror/mode/stex/index.html +110 -0
  407. data/public/codemirror/mode/stex/stex.js +251 -0
  408. data/public/codemirror/mode/stex/test.js +123 -0
  409. data/public/codemirror/mode/stylus/index.html +106 -0
  410. data/public/codemirror/mode/stylus/stylus.js +768 -0
  411. data/public/codemirror/mode/swift/index.html +88 -0
  412. data/public/codemirror/mode/swift/swift.js +203 -0
  413. data/public/codemirror/mode/tcl/index.html +142 -0
  414. data/public/codemirror/mode/tcl/tcl.js +147 -0
  415. data/public/codemirror/mode/textile/index.html +191 -0
  416. data/public/codemirror/mode/textile/test.js +417 -0
  417. data/public/codemirror/mode/textile/textile.js +469 -0
  418. data/public/codemirror/mode/tiddlywiki/index.html +154 -0
  419. data/public/codemirror/mode/tiddlywiki/tiddlywiki.css +14 -0
  420. data/public/codemirror/mode/tiddlywiki/tiddlywiki.js +358 -0
  421. data/public/codemirror/mode/tiki/index.html +95 -0
  422. data/public/codemirror/mode/tiki/tiki.css +26 -0
  423. data/public/codemirror/mode/tiki/tiki.js +312 -0
  424. data/public/codemirror/mode/toml/index.html +73 -0
  425. data/public/codemirror/mode/toml/toml.js +88 -0
  426. data/public/codemirror/mode/tornado/index.html +63 -0
  427. data/public/codemirror/mode/tornado/tornado.js +68 -0
  428. data/public/codemirror/mode/troff/index.html +146 -0
  429. data/public/codemirror/mode/troff/troff.js +82 -0
  430. data/public/codemirror/mode/ttcn-cfg/index.html +115 -0
  431. data/public/codemirror/mode/ttcn-cfg/ttcn-cfg.js +214 -0
  432. data/public/codemirror/mode/ttcn/index.html +118 -0
  433. data/public/codemirror/mode/ttcn/ttcn.js +283 -0
  434. data/public/codemirror/mode/turtle/index.html +50 -0
  435. data/public/codemirror/mode/turtle/turtle.js +162 -0
  436. data/public/codemirror/mode/twig/index.html +45 -0
  437. data/public/codemirror/mode/twig/twig.js +132 -0
  438. data/public/codemirror/mode/vb/index.html +102 -0
  439. data/public/codemirror/mode/vb/vb.js +276 -0
  440. data/public/codemirror/mode/vbscript/index.html +55 -0
  441. data/public/codemirror/mode/vbscript/vbscript.js +350 -0
  442. data/public/codemirror/mode/velocity/index.html +118 -0
  443. data/public/codemirror/mode/velocity/velocity.js +201 -0
  444. data/public/codemirror/mode/verilog/index.html +120 -0
  445. data/public/codemirror/mode/verilog/test.js +273 -0
  446. data/public/codemirror/mode/verilog/verilog.js +537 -0
  447. data/public/codemirror/mode/vhdl/index.html +95 -0
  448. data/public/codemirror/mode/vhdl/vhdl.js +189 -0
  449. data/public/codemirror/mode/xml/index.html +57 -0
  450. data/public/codemirror/mode/xml/test.js +51 -0
  451. data/public/codemirror/mode/xml/xml.js +385 -0
  452. data/public/codemirror/mode/xquery/index.html +210 -0
  453. data/public/codemirror/mode/xquery/test.js +67 -0
  454. data/public/codemirror/mode/xquery/xquery.js +437 -0
  455. data/public/codemirror/mode/yaml/index.html +80 -0
  456. data/public/codemirror/mode/yaml/yaml.js +117 -0
  457. data/public/codemirror/mode/z80/index.html +53 -0
  458. data/public/codemirror/mode/z80/z80.js +116 -0
  459. data/public/codemirror/package.json +20 -0
  460. data/public/codemirror/test/comment_test.js +100 -0
  461. data/public/codemirror/test/doc_test.js +371 -0
  462. data/public/codemirror/test/driver.js +138 -0
  463. data/public/codemirror/test/emacs_test.js +147 -0
  464. data/public/codemirror/test/index.html +241 -0
  465. data/public/codemirror/test/lint.js +11 -0
  466. data/public/codemirror/test/mode_test.css +23 -0
  467. data/public/codemirror/test/mode_test.js +192 -0
  468. data/public/codemirror/test/multi_test.js +285 -0
  469. data/public/codemirror/test/phantom_driver.js +31 -0
  470. data/public/codemirror/test/run.js +31 -0
  471. data/public/codemirror/test/scroll_test.js +115 -0
  472. data/public/codemirror/test/search_test.js +62 -0
  473. data/public/codemirror/test/sql-hint-test.js +189 -0
  474. data/public/codemirror/test/sublime_test.js +303 -0
  475. data/public/codemirror/test/test.js +2142 -0
  476. data/public/codemirror/test/vim_test.js +3955 -0
  477. data/public/codemirror/theme/3024-day.css +41 -0
  478. data/public/codemirror/theme/3024-night.css +39 -0
  479. data/public/codemirror/theme/ambiance-mobile.css +5 -0
  480. data/public/codemirror/theme/ambiance.css +76 -0
  481. data/public/codemirror/theme/base16-dark.css +38 -0
  482. data/public/codemirror/theme/base16-light.css +38 -0
  483. data/public/codemirror/theme/blackboard.css +32 -0
  484. data/public/codemirror/theme/cobalt.css +25 -0
  485. data/public/codemirror/theme/colorforth.css +33 -0
  486. data/public/codemirror/theme/dracula.css +87 -0
  487. data/public/codemirror/theme/eclipse.css +23 -0
  488. data/public/codemirror/theme/elegant.css +13 -0
  489. data/public/codemirror/theme/erlang-dark.css +34 -0
  490. data/public/codemirror/theme/icecoder.css +42 -0
  491. data/public/codemirror/theme/lesser-dark.css +47 -0
  492. data/public/codemirror/theme/lines.css +109 -0
  493. data/public/codemirror/theme/liquibyte.css +95 -0
  494. data/public/codemirror/theme/material.css +105 -0
  495. data/public/codemirror/theme/mbo.css +37 -0
  496. data/public/codemirror/theme/mdn-like.css +46 -0
  497. data/public/codemirror/theme/midnight.css +47 -0
  498. data/public/codemirror/theme/monokai.css +35 -0
  499. data/public/codemirror/theme/neat.css +12 -0
  500. data/public/codemirror/theme/neo.css +43 -0
  501. data/public/codemirror/theme/night.css +28 -0
  502. data/public/codemirror/theme/paraiso-dark.css +38 -0
  503. data/public/codemirror/theme/paraiso-light.css +38 -0
  504. data/public/codemirror/theme/pastel-on-dark.css +53 -0
  505. data/public/codemirror/theme/rubyblue.css +25 -0
  506. data/public/codemirror/theme/seti.css +88 -0
  507. data/public/codemirror/theme/solarized.css +165 -0
  508. data/public/codemirror/theme/the-matrix.css +30 -0
  509. data/public/codemirror/theme/tomorrow-night-bright.css +35 -0
  510. data/public/codemirror/theme/tomorrow-night-eighties.css +38 -0
  511. data/public/codemirror/theme/ttcn.css +65 -0
  512. data/public/codemirror/theme/twilight.css +32 -0
  513. data/public/codemirror/theme/vibrant-ink.css +34 -0
  514. data/public/codemirror/theme/xq-dark.css +53 -0
  515. data/public/codemirror/theme/xq-light.css +43 -0
  516. data/public/codemirror/theme/yeti.css +86 -0
  517. data/public/codemirror/theme/zenburn.css +37 -0
  518. data/public/fira-mono/FiraMono-Bold.eot +0 -0
  519. data/public/fira-mono/FiraMono-Bold.otf +0 -0
  520. data/public/fira-mono/FiraMono-Bold.ttf +0 -0
  521. data/public/fira-mono/FiraMono-Bold.woff +0 -0
  522. data/public/fira-mono/FiraMono-Medium.eot +0 -0
  523. data/public/fira-mono/FiraMono-Medium.otf +0 -0
  524. data/public/fira-mono/FiraMono-Medium.ttf +0 -0
  525. data/public/fira-mono/FiraMono-Medium.woff +0 -0
  526. data/public/fira-mono/FiraMono-Regular.eot +0 -0
  527. data/public/fira-mono/FiraMono-Regular.otf +0 -0
  528. data/public/fira-mono/FiraMono-Regular.ttf +0 -0
  529. data/public/fira-mono/FiraMono-Regular.woff +0 -0
  530. data/public/fira-mono/fira-mono.css +32 -0
  531. data/public/heroes/lines_default_01.png +0 -0
  532. data/public/heroes/lines_default_02.png +0 -0
  533. data/public/heroes/lines_default_03.png +0 -0
  534. data/public/iconfont/iconfont.css +48 -0
  535. data/public/iconfont/iconfont.eot +0 -0
  536. data/public/iconfont/iconfont.svg +18 -0
  537. data/public/iconfont/iconfont.ttf +0 -0
  538. data/public/iconfont/iconfont.woff +0 -0
  539. data/spec/dummy/config/environments/test.rb +3 -1
  540. data/spec/dummy/db/migrate/20140505122014_base_migration.rb +84 -0
  541. data/spec/dummy/db/migrate/20140702160602_acts_as_taggable_on_migration.acts_as_taggable_on_engine.rb +31 -0
  542. data/spec/dummy/db/migrate/20140702160603_add_missing_unique_indices.acts_as_taggable_on_engine.rb +20 -0
  543. data/spec/dummy/db/migrate/20140702160604_add_taggings_counter_cache_to_tags.acts_as_taggable_on_engine.rb +15 -0
  544. data/spec/dummy/db/migrate/20141027143656_add_teaser_to_article.rb +5 -0
  545. data/spec/dummy/db/migrate/20150421093311_add_reset_password_fields_to_users.rb +6 -0
  546. data/spec/dummy/db/schema.rb +50 -50
  547. data/spec/dummy/db/seeds.rb +5 -5
  548. data/spec/factories/users.rb +1 -1
  549. data/spec/features/article_spec.rb +4 -4
  550. data/spec/features/password_reset_spec.rb +17 -17
  551. data/spec/features/user_logs_in_spec.rb +6 -8
  552. data/spec/mailers/lines/user_mailer_spec.rb +1 -1
  553. data/spec/models/article_spec.rb +6 -6
  554. data/spec/support/auth_macros.rb +2 -2
  555. metadata +492 -26
  556. metadata.gz.sig +0 -0
  557. data/app/assets/images/ic_gplus.png +0 -0
  558. data/app/assets/images/ic_gplus_hover.png +0 -0
  559. data/app/assets/images/logo.png +0 -0
  560. data/app/assets/images/logo_opoloo.png +0 -0
  561. data/app/assets/images/signet.png +0 -0
  562. data/app/assets/javascripts/lines/admin.js +0 -201
  563. data/app/assets/stylesheets/lines/admin.scss +0 -970
  564. data/app/views/layouts/lines/_messages.html.erb +0 -8
  565. data/app/views/lines/admin/articles/_formatting_guide.html.erb +0 -89
  566. data/public/heroes/001.jpg +0 -0
  567. data/public/heroes/001_dark.jpg +0 -0
  568. data/public/heroes/002.jpg +0 -0
  569. data/public/heroes/002_dark.jpg +0 -0
  570. data/public/heroes/003.jpg +0 -0
  571. data/public/heroes/003_dark.jpg +0 -0
  572. data/spec/dummy/config/lines_config.yml +0 -58
@@ -0,0 +1,537 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
4
+ (function(mod) {
5
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
6
+ mod(require("../../lib/codemirror"));
7
+ else if (typeof define == "function" && define.amd) // AMD
8
+ define(["../../lib/codemirror"], mod);
9
+ else // Plain browser env
10
+ mod(CodeMirror);
11
+ })(function(CodeMirror) {
12
+ "use strict";
13
+
14
+ CodeMirror.defineMode("verilog", function(config, parserConfig) {
15
+
16
+ var indentUnit = config.indentUnit,
17
+ statementIndentUnit = parserConfig.statementIndentUnit || indentUnit,
18
+ dontAlignCalls = parserConfig.dontAlignCalls,
19
+ noIndentKeywords = parserConfig.noIndentKeywords || [],
20
+ multiLineStrings = parserConfig.multiLineStrings,
21
+ hooks = parserConfig.hooks || {};
22
+
23
+ function words(str) {
24
+ var obj = {}, words = str.split(" ");
25
+ for (var i = 0; i < words.length; ++i) obj[words[i]] = true;
26
+ return obj;
27
+ }
28
+
29
+ /**
30
+ * Keywords from IEEE 1800-2012
31
+ */
32
+ var keywords = words(
33
+ "accept_on alias always always_comb always_ff always_latch and assert assign assume automatic before begin bind " +
34
+ "bins binsof bit break buf bufif0 bufif1 byte case casex casez cell chandle checker class clocking cmos config " +
35
+ "const constraint context continue cover covergroup coverpoint cross deassign default defparam design disable " +
36
+ "dist do edge else end endcase endchecker endclass endclocking endconfig endfunction endgenerate endgroup " +
37
+ "endinterface endmodule endpackage endprimitive endprogram endproperty endspecify endsequence endtable endtask " +
38
+ "enum event eventually expect export extends extern final first_match for force foreach forever fork forkjoin " +
39
+ "function generate genvar global highz0 highz1 if iff ifnone ignore_bins illegal_bins implements implies import " +
40
+ "incdir include initial inout input inside instance int integer interconnect interface intersect join join_any " +
41
+ "join_none large let liblist library local localparam logic longint macromodule matches medium modport module " +
42
+ "nand negedge nettype new nexttime nmos nor noshowcancelled not notif0 notif1 null or output package packed " +
43
+ "parameter pmos posedge primitive priority program property protected pull0 pull1 pulldown pullup " +
44
+ "pulsestyle_ondetect pulsestyle_onevent pure rand randc randcase randsequence rcmos real realtime ref reg " +
45
+ "reject_on release repeat restrict return rnmos rpmos rtran rtranif0 rtranif1 s_always s_eventually s_nexttime " +
46
+ "s_until s_until_with scalared sequence shortint shortreal showcancelled signed small soft solve specify " +
47
+ "specparam static string strong strong0 strong1 struct super supply0 supply1 sync_accept_on sync_reject_on " +
48
+ "table tagged task this throughout time timeprecision timeunit tran tranif0 tranif1 tri tri0 tri1 triand trior " +
49
+ "trireg type typedef union unique unique0 unsigned until until_with untyped use uwire var vectored virtual void " +
50
+ "wait wait_order wand weak weak0 weak1 while wildcard wire with within wor xnor xor");
51
+
52
+ /** Operators from IEEE 1800-2012
53
+ unary_operator ::=
54
+ + | - | ! | ~ | & | ~& | | | ~| | ^ | ~^ | ^~
55
+ binary_operator ::=
56
+ + | - | * | / | % | == | != | === | !== | ==? | !=? | && | || | **
57
+ | < | <= | > | >= | & | | | ^ | ^~ | ~^ | >> | << | >>> | <<<
58
+ | -> | <->
59
+ inc_or_dec_operator ::= ++ | --
60
+ unary_module_path_operator ::=
61
+ ! | ~ | & | ~& | | | ~| | ^ | ~^ | ^~
62
+ binary_module_path_operator ::=
63
+ == | != | && | || | & | | | ^ | ^~ | ~^
64
+ */
65
+ var isOperatorChar = /[\+\-\*\/!~&|^%=?:]/;
66
+ var isBracketChar = /[\[\]{}()]/;
67
+
68
+ var unsignedNumber = /\d[0-9_]*/;
69
+ var decimalLiteral = /\d*\s*'s?d\s*\d[0-9_]*/i;
70
+ var binaryLiteral = /\d*\s*'s?b\s*[xz01][xz01_]*/i;
71
+ var octLiteral = /\d*\s*'s?o\s*[xz0-7][xz0-7_]*/i;
72
+ var hexLiteral = /\d*\s*'s?h\s*[0-9a-fxz?][0-9a-fxz?_]*/i;
73
+ var realLiteral = /(\d[\d_]*(\.\d[\d_]*)?E-?[\d_]+)|(\d[\d_]*\.\d[\d_]*)/i;
74
+
75
+ var closingBracketOrWord = /^((\w+)|[)}\]])/;
76
+ var closingBracket = /[)}\]]/;
77
+
78
+ var curPunc;
79
+ var curKeyword;
80
+
81
+ // Block openings which are closed by a matching keyword in the form of ("end" + keyword)
82
+ // E.g. "task" => "endtask"
83
+ var blockKeywords = words(
84
+ "case checker class clocking config function generate interface module package" +
85
+ "primitive program property specify sequence table task"
86
+ );
87
+
88
+ // Opening/closing pairs
89
+ var openClose = {};
90
+ for (var keyword in blockKeywords) {
91
+ openClose[keyword] = "end" + keyword;
92
+ }
93
+ openClose["begin"] = "end";
94
+ openClose["casex"] = "endcase";
95
+ openClose["casez"] = "endcase";
96
+ openClose["do" ] = "while";
97
+ openClose["fork" ] = "join;join_any;join_none";
98
+ openClose["covergroup"] = "endgroup";
99
+
100
+ for (var i in noIndentKeywords) {
101
+ var keyword = noIndentKeywords[i];
102
+ if (openClose[keyword]) {
103
+ openClose[keyword] = undefined;
104
+ }
105
+ }
106
+
107
+ // Keywords which open statements that are ended with a semi-colon
108
+ var statementKeywords = words("always always_comb always_ff always_latch assert assign assume else export for foreach forever if import initial repeat while");
109
+
110
+ function tokenBase(stream, state) {
111
+ var ch = stream.peek(), style;
112
+ if (hooks[ch] && (style = hooks[ch](stream, state)) != false) return style;
113
+ if (hooks.tokenBase && (style = hooks.tokenBase(stream, state)) != false)
114
+ return style;
115
+
116
+ if (/[,;:\.]/.test(ch)) {
117
+ curPunc = stream.next();
118
+ return null;
119
+ }
120
+ if (isBracketChar.test(ch)) {
121
+ curPunc = stream.next();
122
+ return "bracket";
123
+ }
124
+ // Macros (tick-defines)
125
+ if (ch == '`') {
126
+ stream.next();
127
+ if (stream.eatWhile(/[\w\$_]/)) {
128
+ return "def";
129
+ } else {
130
+ return null;
131
+ }
132
+ }
133
+ // System calls
134
+ if (ch == '$') {
135
+ stream.next();
136
+ if (stream.eatWhile(/[\w\$_]/)) {
137
+ return "meta";
138
+ } else {
139
+ return null;
140
+ }
141
+ }
142
+ // Time literals
143
+ if (ch == '#') {
144
+ stream.next();
145
+ stream.eatWhile(/[\d_.]/);
146
+ return "def";
147
+ }
148
+ // Strings
149
+ if (ch == '"') {
150
+ stream.next();
151
+ state.tokenize = tokenString(ch);
152
+ return state.tokenize(stream, state);
153
+ }
154
+ // Comments
155
+ if (ch == "/") {
156
+ stream.next();
157
+ if (stream.eat("*")) {
158
+ state.tokenize = tokenComment;
159
+ return tokenComment(stream, state);
160
+ }
161
+ if (stream.eat("/")) {
162
+ stream.skipToEnd();
163
+ return "comment";
164
+ }
165
+ stream.backUp(1);
166
+ }
167
+
168
+ // Numeric literals
169
+ if (stream.match(realLiteral) ||
170
+ stream.match(decimalLiteral) ||
171
+ stream.match(binaryLiteral) ||
172
+ stream.match(octLiteral) ||
173
+ stream.match(hexLiteral) ||
174
+ stream.match(unsignedNumber) ||
175
+ stream.match(realLiteral)) {
176
+ return "number";
177
+ }
178
+
179
+ // Operators
180
+ if (stream.eatWhile(isOperatorChar)) {
181
+ return "meta";
182
+ }
183
+
184
+ // Keywords / plain variables
185
+ if (stream.eatWhile(/[\w\$_]/)) {
186
+ var cur = stream.current();
187
+ if (keywords[cur]) {
188
+ if (openClose[cur]) {
189
+ curPunc = "newblock";
190
+ }
191
+ if (statementKeywords[cur]) {
192
+ curPunc = "newstatement";
193
+ }
194
+ curKeyword = cur;
195
+ return "keyword";
196
+ }
197
+ return "variable";
198
+ }
199
+
200
+ stream.next();
201
+ return null;
202
+ }
203
+
204
+ function tokenString(quote) {
205
+ return function(stream, state) {
206
+ var escaped = false, next, end = false;
207
+ while ((next = stream.next()) != null) {
208
+ if (next == quote && !escaped) {end = true; break;}
209
+ escaped = !escaped && next == "\\";
210
+ }
211
+ if (end || !(escaped || multiLineStrings))
212
+ state.tokenize = tokenBase;
213
+ return "string";
214
+ };
215
+ }
216
+
217
+ function tokenComment(stream, state) {
218
+ var maybeEnd = false, ch;
219
+ while (ch = stream.next()) {
220
+ if (ch == "/" && maybeEnd) {
221
+ state.tokenize = tokenBase;
222
+ break;
223
+ }
224
+ maybeEnd = (ch == "*");
225
+ }
226
+ return "comment";
227
+ }
228
+
229
+ function Context(indented, column, type, align, prev) {
230
+ this.indented = indented;
231
+ this.column = column;
232
+ this.type = type;
233
+ this.align = align;
234
+ this.prev = prev;
235
+ }
236
+ function pushContext(state, col, type) {
237
+ var indent = state.indented;
238
+ var c = new Context(indent, col, type, null, state.context);
239
+ return state.context = c;
240
+ }
241
+ function popContext(state) {
242
+ var t = state.context.type;
243
+ if (t == ")" || t == "]" || t == "}") {
244
+ state.indented = state.context.indented;
245
+ }
246
+ return state.context = state.context.prev;
247
+ }
248
+
249
+ function isClosing(text, contextClosing) {
250
+ if (text == contextClosing) {
251
+ return true;
252
+ } else {
253
+ // contextClosing may be mulitple keywords separated by ;
254
+ var closingKeywords = contextClosing.split(";");
255
+ for (var i in closingKeywords) {
256
+ if (text == closingKeywords[i]) {
257
+ return true;
258
+ }
259
+ }
260
+ return false;
261
+ }
262
+ }
263
+
264
+ function buildElectricInputRegEx() {
265
+ // Reindentation should occur on any bracket char: {}()[]
266
+ // or on a match of any of the block closing keywords, at
267
+ // the end of a line
268
+ var allClosings = [];
269
+ for (var i in openClose) {
270
+ if (openClose[i]) {
271
+ var closings = openClose[i].split(";");
272
+ for (var j in closings) {
273
+ allClosings.push(closings[j]);
274
+ }
275
+ }
276
+ }
277
+ var re = new RegExp("[{}()\\[\\]]|(" + allClosings.join("|") + ")$");
278
+ return re;
279
+ }
280
+
281
+ // Interface
282
+ return {
283
+
284
+ // Regex to force current line to reindent
285
+ electricInput: buildElectricInputRegEx(),
286
+
287
+ startState: function(basecolumn) {
288
+ var state = {
289
+ tokenize: null,
290
+ context: new Context((basecolumn || 0) - indentUnit, 0, "top", false),
291
+ indented: 0,
292
+ startOfLine: true
293
+ };
294
+ if (hooks.startState) hooks.startState(state);
295
+ return state;
296
+ },
297
+
298
+ token: function(stream, state) {
299
+ var ctx = state.context;
300
+ if (stream.sol()) {
301
+ if (ctx.align == null) ctx.align = false;
302
+ state.indented = stream.indentation();
303
+ state.startOfLine = true;
304
+ }
305
+ if (hooks.token) hooks.token(stream, state);
306
+ if (stream.eatSpace()) return null;
307
+ curPunc = null;
308
+ curKeyword = null;
309
+ var style = (state.tokenize || tokenBase)(stream, state);
310
+ if (style == "comment" || style == "meta" || style == "variable") return style;
311
+ if (ctx.align == null) ctx.align = true;
312
+
313
+ if (curPunc == ctx.type) {
314
+ popContext(state);
315
+ } else if ((curPunc == ";" && ctx.type == "statement") ||
316
+ (ctx.type && isClosing(curKeyword, ctx.type))) {
317
+ ctx = popContext(state);
318
+ while (ctx && ctx.type == "statement") ctx = popContext(state);
319
+ } else if (curPunc == "{") {
320
+ pushContext(state, stream.column(), "}");
321
+ } else if (curPunc == "[") {
322
+ pushContext(state, stream.column(), "]");
323
+ } else if (curPunc == "(") {
324
+ pushContext(state, stream.column(), ")");
325
+ } else if (ctx && ctx.type == "endcase" && curPunc == ":") {
326
+ pushContext(state, stream.column(), "statement");
327
+ } else if (curPunc == "newstatement") {
328
+ pushContext(state, stream.column(), "statement");
329
+ } else if (curPunc == "newblock") {
330
+ if (curKeyword == "function" && ctx && (ctx.type == "statement" || ctx.type == "endgroup")) {
331
+ // The 'function' keyword can appear in some other contexts where it actually does not
332
+ // indicate a function (import/export DPI and covergroup definitions).
333
+ // Do nothing in this case
334
+ } else if (curKeyword == "task" && ctx && ctx.type == "statement") {
335
+ // Same thing for task
336
+ } else {
337
+ var close = openClose[curKeyword];
338
+ pushContext(state, stream.column(), close);
339
+ }
340
+ }
341
+
342
+ state.startOfLine = false;
343
+ return style;
344
+ },
345
+
346
+ indent: function(state, textAfter) {
347
+ if (state.tokenize != tokenBase && state.tokenize != null) return CodeMirror.Pass;
348
+ if (hooks.indent) {
349
+ var fromHook = hooks.indent(state);
350
+ if (fromHook >= 0) return fromHook;
351
+ }
352
+ var ctx = state.context, firstChar = textAfter && textAfter.charAt(0);
353
+ if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev;
354
+ var closing = false;
355
+ var possibleClosing = textAfter.match(closingBracketOrWord);
356
+ if (possibleClosing)
357
+ closing = isClosing(possibleClosing[0], ctx.type);
358
+ if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : statementIndentUnit);
359
+ else if (closingBracket.test(ctx.type) && ctx.align && !dontAlignCalls) return ctx.column + (closing ? 0 : 1);
360
+ else if (ctx.type == ")" && !closing) return ctx.indented + statementIndentUnit;
361
+ else return ctx.indented + (closing ? 0 : indentUnit);
362
+ },
363
+
364
+ blockCommentStart: "/*",
365
+ blockCommentEnd: "*/",
366
+ lineComment: "//"
367
+ };
368
+ });
369
+
370
+ CodeMirror.defineMIME("text/x-verilog", {
371
+ name: "verilog"
372
+ });
373
+
374
+ CodeMirror.defineMIME("text/x-systemverilog", {
375
+ name: "verilog"
376
+ });
377
+
378
+ // TLVVerilog mode
379
+
380
+ var tlvchScopePrefixes = {
381
+ ">": "property", "->": "property", "-": "hr", "|": "link", "?$": "qualifier", "?*": "qualifier",
382
+ "@-": "variable-3", "@": "variable-3", "?": "qualifier"
383
+ };
384
+
385
+ function tlvGenIndent(stream, state) {
386
+ var tlvindentUnit = 2;
387
+ var rtnIndent = -1, indentUnitRq = 0, curIndent = stream.indentation();
388
+ switch (state.tlvCurCtlFlowChar) {
389
+ case "\\":
390
+ curIndent = 0;
391
+ break;
392
+ case "|":
393
+ if (state.tlvPrevPrevCtlFlowChar == "@") {
394
+ indentUnitRq = -2; //-2 new pipe rq after cur pipe
395
+ break;
396
+ }
397
+ if (tlvchScopePrefixes[state.tlvPrevCtlFlowChar])
398
+ indentUnitRq = 1; // +1 new scope
399
+ break;
400
+ case "M": // m4
401
+ if (state.tlvPrevPrevCtlFlowChar == "@") {
402
+ indentUnitRq = -2; //-2 new inst rq after pipe
403
+ break;
404
+ }
405
+ if (tlvchScopePrefixes[state.tlvPrevCtlFlowChar])
406
+ indentUnitRq = 1; // +1 new scope
407
+ break;
408
+ case "@":
409
+ if (state.tlvPrevCtlFlowChar == "S")
410
+ indentUnitRq = -1; // new pipe stage after stmts
411
+ if (state.tlvPrevCtlFlowChar == "|")
412
+ indentUnitRq = 1; // 1st pipe stage
413
+ break;
414
+ case "S":
415
+ if (state.tlvPrevCtlFlowChar == "@")
416
+ indentUnitRq = 1; // flow in pipe stage
417
+ if (tlvchScopePrefixes[state.tlvPrevCtlFlowChar])
418
+ indentUnitRq = 1; // +1 new scope
419
+ break;
420
+ }
421
+ var statementIndentUnit = tlvindentUnit;
422
+ rtnIndent = curIndent + (indentUnitRq*statementIndentUnit);
423
+ return rtnIndent >= 0 ? rtnIndent : curIndent;
424
+ }
425
+
426
+ CodeMirror.defineMIME("text/x-tlv", {
427
+ name: "verilog",
428
+ hooks: {
429
+ "\\": function(stream, state) {
430
+ var vxIndent = 0, style = false;
431
+ var curPunc = stream.string;
432
+ if ((stream.sol()) && ((/\\SV/.test(stream.string)) || (/\\TLV/.test(stream.string)))) {
433
+ curPunc = (/\\TLV_version/.test(stream.string))
434
+ ? "\\TLV_version" : stream.string;
435
+ stream.skipToEnd();
436
+ if (curPunc == "\\SV" && state.vxCodeActive) {state.vxCodeActive = false;};
437
+ if ((/\\TLV/.test(curPunc) && !state.vxCodeActive)
438
+ || (curPunc=="\\TLV_version" && state.vxCodeActive)) {state.vxCodeActive = true;};
439
+ style = "keyword";
440
+ state.tlvCurCtlFlowChar = state.tlvPrevPrevCtlFlowChar
441
+ = state.tlvPrevCtlFlowChar = "";
442
+ if (state.vxCodeActive == true) {
443
+ state.tlvCurCtlFlowChar = "\\";
444
+ vxIndent = tlvGenIndent(stream, state);
445
+ }
446
+ state.vxIndentRq = vxIndent;
447
+ }
448
+ return style;
449
+ },
450
+ tokenBase: function(stream, state) {
451
+ var vxIndent = 0, style = false;
452
+ var tlvisOperatorChar = /[\[\]=:]/;
453
+ var tlvkpScopePrefixs = {
454
+ "**":"variable-2", "*":"variable-2", "$$":"variable", "$":"variable",
455
+ "^^":"attribute", "^":"attribute"};
456
+ var ch = stream.peek();
457
+ var vxCurCtlFlowCharValueAtStart = state.tlvCurCtlFlowChar;
458
+ if (state.vxCodeActive == true) {
459
+ if (/[\[\]{}\(\);\:]/.test(ch)) {
460
+ // bypass nesting and 1 char punc
461
+ style = "meta";
462
+ stream.next();
463
+ } else if (ch == "/") {
464
+ stream.next();
465
+ if (stream.eat("/")) {
466
+ stream.skipToEnd();
467
+ style = "comment";
468
+ state.tlvCurCtlFlowChar = "S";
469
+ } else {
470
+ stream.backUp(1);
471
+ }
472
+ } else if (ch == "@") {
473
+ // pipeline stage
474
+ style = tlvchScopePrefixes[ch];
475
+ state.tlvCurCtlFlowChar = "@";
476
+ stream.next();
477
+ stream.eatWhile(/[\w\$_]/);
478
+ } else if (stream.match(/\b[mM]4+/, true)) { // match: function(pattern, consume, caseInsensitive)
479
+ // m4 pre proc
480
+ stream.skipTo("(");
481
+ style = "def";
482
+ state.tlvCurCtlFlowChar = "M";
483
+ } else if (ch == "!" && stream.sol()) {
484
+ // v stmt in tlv region
485
+ // state.tlvCurCtlFlowChar = "S";
486
+ style = "comment";
487
+ stream.next();
488
+ } else if (tlvisOperatorChar.test(ch)) {
489
+ // operators
490
+ stream.eatWhile(tlvisOperatorChar);
491
+ style = "operator";
492
+ } else if (ch == "#") {
493
+ // phy hier
494
+ state.tlvCurCtlFlowChar = (state.tlvCurCtlFlowChar == "")
495
+ ? ch : state.tlvCurCtlFlowChar;
496
+ stream.next();
497
+ stream.eatWhile(/[+-]\d/);
498
+ style = "tag";
499
+ } else if (tlvkpScopePrefixs.propertyIsEnumerable(ch)) {
500
+ // special TLV operators
501
+ style = tlvkpScopePrefixs[ch];
502
+ state.tlvCurCtlFlowChar = state.tlvCurCtlFlowChar == "" ? "S" : state.tlvCurCtlFlowChar; // stmt
503
+ stream.next();
504
+ stream.match(/[a-zA-Z_0-9]+/);
505
+ } else if (style = tlvchScopePrefixes[ch] || false) {
506
+ // special TLV operators
507
+ state.tlvCurCtlFlowChar = state.tlvCurCtlFlowChar == "" ? ch : state.tlvCurCtlFlowChar;
508
+ stream.next();
509
+ stream.match(/[a-zA-Z_0-9]+/);
510
+ }
511
+ if (state.tlvCurCtlFlowChar != vxCurCtlFlowCharValueAtStart) { // flow change
512
+ vxIndent = tlvGenIndent(stream, state);
513
+ state.vxIndentRq = vxIndent;
514
+ }
515
+ }
516
+ return style;
517
+ },
518
+ token: function(stream, state) {
519
+ if (state.vxCodeActive == true && stream.sol() && state.tlvCurCtlFlowChar != "") {
520
+ state.tlvPrevPrevCtlFlowChar = state.tlvPrevCtlFlowChar;
521
+ state.tlvPrevCtlFlowChar = state.tlvCurCtlFlowChar;
522
+ state.tlvCurCtlFlowChar = "";
523
+ }
524
+ },
525
+ indent: function(state) {
526
+ return (state.vxCodeActive == true) ? state.vxIndentRq : -1;
527
+ },
528
+ startState: function(state) {
529
+ state.tlvCurCtlFlowChar = "";
530
+ state.tlvPrevCtlFlowChar = "";
531
+ state.tlvPrevPrevCtlFlowChar = "";
532
+ state.vxCodeActive = true;
533
+ state.vxIndentRq = 0;
534
+ }
535
+ }
536
+ });
537
+ });