rdoc 4.2.1 → 6.3.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rdoc might be problematic. Click here for more details.

Files changed (277) hide show
  1. checksums.yaml +5 -5
  2. data/CONTRIBUTING.rdoc +8 -7
  3. data/Gemfile +12 -0
  4. data/History.rdoc +48 -4
  5. data/LEGAL.rdoc +2 -2
  6. data/README.rdoc +5 -5
  7. data/Rakefile +73 -155
  8. data/bin/console +7 -0
  9. data/bin/setup +6 -0
  10. data/{bin → exe}/rdoc +0 -0
  11. data/{bin → exe}/ri +0 -0
  12. data/lib/rdoc/alias.rb +1 -0
  13. data/lib/rdoc/anon_class.rb +1 -0
  14. data/lib/rdoc/any_method.rb +59 -14
  15. data/lib/rdoc/attr.rb +1 -0
  16. data/lib/rdoc/class_module.rb +5 -2
  17. data/lib/rdoc/code_object.rb +3 -11
  18. data/lib/rdoc/code_objects.rb +1 -0
  19. data/lib/rdoc/comment.rb +32 -11
  20. data/lib/rdoc/constant.rb +3 -2
  21. data/lib/rdoc/context/section.rb +7 -13
  22. data/lib/rdoc/context.rb +78 -23
  23. data/lib/rdoc/cross_reference.rb +33 -14
  24. data/lib/rdoc/encoding.rb +92 -55
  25. data/lib/rdoc/erb_partial.rb +2 -1
  26. data/lib/rdoc/erbio.rb +8 -3
  27. data/lib/rdoc/extend.rb +1 -0
  28. data/lib/rdoc/generator/darkfish.rb +62 -32
  29. data/lib/rdoc/generator/json_index.rb +8 -5
  30. data/lib/rdoc/generator/markup.rb +3 -12
  31. data/lib/rdoc/generator/pot/message_extractor.rb +68 -0
  32. data/lib/rdoc/generator/pot/po.rb +84 -0
  33. data/lib/rdoc/generator/pot/po_entry.rb +141 -0
  34. data/lib/rdoc/generator/pot.rb +4 -3
  35. data/lib/rdoc/generator/ri.rb +1 -0
  36. data/lib/rdoc/generator/template/darkfish/_footer.rhtml +2 -2
  37. data/lib/rdoc/generator/template/darkfish/_head.rhtml +11 -8
  38. data/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml +2 -2
  39. data/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +2 -2
  40. data/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +7 -7
  41. data/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml +2 -2
  42. data/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +7 -7
  43. data/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +6 -6
  44. data/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml +5 -5
  45. data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +5 -5
  46. data/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml +5 -5
  47. data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +4 -4
  48. data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +4 -4
  49. data/lib/rdoc/generator/template/darkfish/class.rhtml +45 -47
  50. data/lib/rdoc/generator/template/darkfish/css/fonts.css +6 -6
  51. data/lib/rdoc/generator/template/darkfish/css/rdoc.css +55 -6
  52. data/lib/rdoc/generator/template/darkfish/index.rhtml +3 -4
  53. data/lib/rdoc/generator/template/darkfish/js/darkfish.js +23 -100
  54. data/lib/rdoc/generator/template/darkfish/js/search.js +32 -31
  55. data/lib/rdoc/generator/template/darkfish/servlet_root.rhtml +15 -16
  56. data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +16 -16
  57. data/lib/rdoc/generator/template/json_index/js/navigation.js +4 -41
  58. data/lib/rdoc/generator/template/json_index/js/searcher.js +7 -6
  59. data/lib/rdoc/generator.rb +1 -1
  60. data/lib/rdoc/ghost_method.rb +1 -0
  61. data/lib/rdoc/i18n/locale.rb +2 -1
  62. data/lib/rdoc/i18n/text.rb +5 -4
  63. data/lib/rdoc/i18n.rb +3 -2
  64. data/lib/rdoc/include.rb +1 -0
  65. data/lib/rdoc/known_classes.rb +1 -0
  66. data/lib/rdoc/markdown/entities.rb +1 -0
  67. data/lib/rdoc/markdown/{literals_1_9.kpeg → literals.kpeg} +1 -0
  68. data/lib/rdoc/markdown/{literals_1_9.rb → literals.rb} +1 -4
  69. data/lib/rdoc/markdown.kpeg +94 -51
  70. data/lib/rdoc/markdown.rb +1171 -619
  71. data/lib/rdoc/markup/attr_changer.rb +1 -0
  72. data/lib/rdoc/markup/attr_span.rb +9 -2
  73. data/lib/rdoc/markup/attribute_manager.rb +115 -49
  74. data/lib/rdoc/markup/attributes.rb +7 -6
  75. data/lib/rdoc/markup/blank_line.rb +1 -0
  76. data/lib/rdoc/markup/block_quote.rb +1 -0
  77. data/lib/rdoc/markup/document.rb +1 -0
  78. data/lib/rdoc/markup/formatter.rb +25 -23
  79. data/lib/rdoc/markup/hard_break.rb +1 -0
  80. data/lib/rdoc/markup/heading.rb +4 -3
  81. data/lib/rdoc/markup/include.rb +1 -0
  82. data/lib/rdoc/markup/indented_paragraph.rb +1 -0
  83. data/lib/rdoc/markup/list.rb +1 -0
  84. data/lib/rdoc/markup/list_item.rb +1 -0
  85. data/lib/rdoc/markup/paragraph.rb +1 -0
  86. data/lib/rdoc/markup/parser.rb +78 -61
  87. data/lib/rdoc/markup/pre_process.rb +12 -9
  88. data/lib/rdoc/markup/raw.rb +1 -0
  89. data/lib/rdoc/markup/regexp_handling.rb +41 -0
  90. data/lib/rdoc/markup/rule.rb +1 -0
  91. data/lib/rdoc/markup/to_ansi.rb +1 -0
  92. data/lib/rdoc/markup/to_bs.rb +4 -5
  93. data/lib/rdoc/markup/to_html.rb +71 -25
  94. data/lib/rdoc/markup/to_html_crossref.rb +41 -25
  95. data/lib/rdoc/markup/to_html_snippet.rb +10 -9
  96. data/lib/rdoc/markup/to_joined_paragraph.rb +7 -31
  97. data/lib/rdoc/markup/to_label.rb +10 -9
  98. data/lib/rdoc/markup/to_markdown.rb +9 -8
  99. data/lib/rdoc/markup/to_rdoc.rb +35 -6
  100. data/lib/rdoc/markup/to_table_of_contents.rb +2 -0
  101. data/lib/rdoc/markup/to_test.rb +1 -0
  102. data/lib/rdoc/markup/to_tt_only.rb +3 -2
  103. data/lib/rdoc/markup/verbatim.rb +1 -0
  104. data/lib/rdoc/markup.rb +14 -16
  105. data/lib/rdoc/meta_method.rb +1 -0
  106. data/lib/rdoc/method_attr.rb +2 -1
  107. data/lib/rdoc/mixin.rb +1 -0
  108. data/lib/rdoc/normal_class.rb +3 -2
  109. data/lib/rdoc/normal_module.rb +1 -0
  110. data/lib/rdoc/options.rb +92 -58
  111. data/lib/rdoc/parser/c.rb +219 -223
  112. data/lib/rdoc/parser/changelog.rb +155 -18
  113. data/lib/rdoc/parser/markdown.rb +1 -0
  114. data/lib/rdoc/parser/rd.rb +1 -0
  115. data/lib/rdoc/parser/ripper_state_lex.rb +590 -0
  116. data/lib/rdoc/parser/ruby.rb +635 -468
  117. data/lib/rdoc/parser/ruby_tools.rb +33 -33
  118. data/lib/rdoc/parser/simple.rb +3 -3
  119. data/lib/rdoc/parser/text.rb +1 -0
  120. data/lib/rdoc/parser.rb +17 -50
  121. data/lib/rdoc/rd/block_parser.rb +66 -65
  122. data/lib/rdoc/rd/block_parser.ry +3 -3
  123. data/lib/rdoc/rd/inline.rb +5 -4
  124. data/lib/rdoc/rd/inline_parser.rb +52 -51
  125. data/lib/rdoc/rd/inline_parser.ry +1 -1
  126. data/lib/rdoc/rd.rb +1 -0
  127. data/lib/rdoc/rdoc.rb +68 -63
  128. data/lib/rdoc/require.rb +1 -0
  129. data/lib/rdoc/ri/driver.rb +133 -58
  130. data/lib/rdoc/ri/formatter.rb +1 -0
  131. data/lib/rdoc/ri/paths.rb +4 -20
  132. data/lib/rdoc/ri/store.rb +1 -0
  133. data/lib/rdoc/ri/task.rb +71 -0
  134. data/lib/rdoc/ri.rb +1 -0
  135. data/lib/rdoc/rubygems_hook.rb +5 -12
  136. data/lib/rdoc/servlet.rb +24 -14
  137. data/lib/rdoc/single_class.rb +1 -0
  138. data/lib/rdoc/stats/normal.rb +20 -21
  139. data/lib/rdoc/stats/quiet.rb +1 -0
  140. data/lib/rdoc/stats/verbose.rb +1 -0
  141. data/lib/rdoc/stats.rb +1 -0
  142. data/lib/rdoc/store.rb +41 -41
  143. data/lib/rdoc/task.rb +2 -3
  144. data/lib/rdoc/text.rb +19 -38
  145. data/lib/rdoc/token_stream.rb +56 -32
  146. data/lib/rdoc/tom_doc.rb +17 -11
  147. data/lib/rdoc/top_level.rb +9 -2
  148. data/lib/rdoc/version.rb +8 -0
  149. data/lib/rdoc.rb +24 -10
  150. data/man/ri.1 +247 -0
  151. data/rdoc.gemspec +248 -0
  152. metadata +43 -236
  153. data/.autotest +0 -24
  154. data/.document +0 -5
  155. data/Manifest.txt +0 -306
  156. data/lib/gauntlet_rdoc.rb +0 -84
  157. data/lib/rdoc/generator/template/darkfish/js/jquery.js +0 -4
  158. data/lib/rdoc/markdown/literals_1_8.kpeg +0 -18
  159. data/lib/rdoc/markdown/literals_1_8.rb +0 -416
  160. data/lib/rdoc/markup/formatter_test_case.rb +0 -767
  161. data/lib/rdoc/markup/inline.rb +0 -1
  162. data/lib/rdoc/markup/special.rb +0 -40
  163. data/lib/rdoc/markup/text_formatter_test_case.rb +0 -114
  164. data/lib/rdoc/ruby_lex.rb +0 -1377
  165. data/lib/rdoc/ruby_token.rb +0 -460
  166. data/lib/rdoc/test_case.rb +0 -217
  167. data/test/MarkdownTest_1.0.3/Amps and angle encoding.text +0 -21
  168. data/test/MarkdownTest_1.0.3/Auto links.text +0 -13
  169. data/test/MarkdownTest_1.0.3/Backslash escapes.text +0 -120
  170. data/test/MarkdownTest_1.0.3/Blockquotes with code blocks.text +0 -11
  171. data/test/MarkdownTest_1.0.3/Code Blocks.text +0 -14
  172. data/test/MarkdownTest_1.0.3/Code Spans.text +0 -6
  173. data/test/MarkdownTest_1.0.3/Hard-wrapped paragraphs with list-like lines.text +0 -8
  174. data/test/MarkdownTest_1.0.3/Horizontal rules.text +0 -67
  175. data/test/MarkdownTest_1.0.3/Inline HTML (Advanced).text +0 -15
  176. data/test/MarkdownTest_1.0.3/Inline HTML (Simple).text +0 -69
  177. data/test/MarkdownTest_1.0.3/Inline HTML comments.text +0 -13
  178. data/test/MarkdownTest_1.0.3/Links, inline style.text +0 -12
  179. data/test/MarkdownTest_1.0.3/Links, reference style.text +0 -71
  180. data/test/MarkdownTest_1.0.3/Links, shortcut references.text +0 -20
  181. data/test/MarkdownTest_1.0.3/Literal quotes in titles.text +0 -7
  182. data/test/MarkdownTest_1.0.3/Markdown Documentation - Basics.text +0 -306
  183. data/test/MarkdownTest_1.0.3/Markdown Documentation - Syntax.text +0 -888
  184. data/test/MarkdownTest_1.0.3/Nested blockquotes.text +0 -5
  185. data/test/MarkdownTest_1.0.3/Ordered and unordered lists.text +0 -131
  186. data/test/MarkdownTest_1.0.3/Strong and em together.text +0 -7
  187. data/test/MarkdownTest_1.0.3/Tabs.text +0 -21
  188. data/test/MarkdownTest_1.0.3/Tidyness.text +0 -5
  189. data/test/README +0 -1
  190. data/test/binary.dat +0 -0
  191. data/test/hidden.zip.txt +0 -1
  192. data/test/test.ja.largedoc +0 -3
  193. data/test/test.ja.rdoc +0 -10
  194. data/test/test.ja.txt +0 -8
  195. data/test/test.txt +0 -1
  196. data/test/test_rdoc_alias.rb +0 -13
  197. data/test/test_rdoc_any_method.rb +0 -460
  198. data/test/test_rdoc_attr.rb +0 -190
  199. data/test/test_rdoc_class_module.rb +0 -1492
  200. data/test/test_rdoc_code_object.rb +0 -450
  201. data/test/test_rdoc_comment.rb +0 -504
  202. data/test/test_rdoc_constant.rb +0 -181
  203. data/test/test_rdoc_context.rb +0 -901
  204. data/test/test_rdoc_context_section.rb +0 -130
  205. data/test/test_rdoc_cross_reference.rb +0 -192
  206. data/test/test_rdoc_encoding.rb +0 -227
  207. data/test/test_rdoc_extend.rb +0 -94
  208. data/test/test_rdoc_generator_darkfish.rb +0 -229
  209. data/test/test_rdoc_generator_json_index.rb +0 -324
  210. data/test/test_rdoc_generator_markup.rb +0 -59
  211. data/test/test_rdoc_generator_pot.rb +0 -91
  212. data/test/test_rdoc_generator_pot_po.rb +0 -51
  213. data/test/test_rdoc_generator_pot_po_entry.rb +0 -139
  214. data/test/test_rdoc_generator_ri.rb +0 -78
  215. data/test/test_rdoc_i18n_locale.rb +0 -73
  216. data/test/test_rdoc_i18n_text.rb +0 -123
  217. data/test/test_rdoc_include.rb +0 -108
  218. data/test/test_rdoc_markdown.rb +0 -980
  219. data/test/test_rdoc_markdown_test.rb +0 -1884
  220. data/test/test_rdoc_markup.rb +0 -95
  221. data/test/test_rdoc_markup_attribute_manager.rb +0 -364
  222. data/test/test_rdoc_markup_attributes.rb +0 -39
  223. data/test/test_rdoc_markup_document.rb +0 -207
  224. data/test/test_rdoc_markup_formatter.rb +0 -175
  225. data/test/test_rdoc_markup_hard_break.rb +0 -31
  226. data/test/test_rdoc_markup_heading.rb +0 -29
  227. data/test/test_rdoc_markup_include.rb +0 -19
  228. data/test/test_rdoc_markup_indented_paragraph.rb +0 -53
  229. data/test/test_rdoc_markup_paragraph.rb +0 -32
  230. data/test/test_rdoc_markup_parser.rb +0 -1680
  231. data/test/test_rdoc_markup_pre_process.rb +0 -473
  232. data/test/test_rdoc_markup_raw.rb +0 -22
  233. data/test/test_rdoc_markup_to_ansi.rb +0 -369
  234. data/test/test_rdoc_markup_to_bs.rb +0 -366
  235. data/test/test_rdoc_markup_to_html.rb +0 -662
  236. data/test/test_rdoc_markup_to_html_crossref.rb +0 -225
  237. data/test/test_rdoc_markup_to_html_snippet.rb +0 -711
  238. data/test/test_rdoc_markup_to_joined_paragraph.rb +0 -32
  239. data/test/test_rdoc_markup_to_label.rb +0 -112
  240. data/test/test_rdoc_markup_to_markdown.rb +0 -389
  241. data/test/test_rdoc_markup_to_rdoc.rb +0 -377
  242. data/test/test_rdoc_markup_to_table_of_contents.rb +0 -126
  243. data/test/test_rdoc_markup_to_tt_only.rb +0 -246
  244. data/test/test_rdoc_markup_verbatim.rb +0 -29
  245. data/test/test_rdoc_method_attr.rb +0 -193
  246. data/test/test_rdoc_normal_class.rb +0 -47
  247. data/test/test_rdoc_normal_module.rb +0 -42
  248. data/test/test_rdoc_options.rb +0 -766
  249. data/test/test_rdoc_parser.rb +0 -327
  250. data/test/test_rdoc_parser_c.rb +0 -1896
  251. data/test/test_rdoc_parser_changelog.rb +0 -315
  252. data/test/test_rdoc_parser_markdown.rb +0 -61
  253. data/test/test_rdoc_parser_rd.rb +0 -55
  254. data/test/test_rdoc_parser_ruby.rb +0 -3322
  255. data/test/test_rdoc_parser_simple.rb +0 -115
  256. data/test/test_rdoc_rd.rb +0 -30
  257. data/test/test_rdoc_rd_block_parser.rb +0 -535
  258. data/test/test_rdoc_rd_inline.rb +0 -63
  259. data/test/test_rdoc_rd_inline_parser.rb +0 -177
  260. data/test/test_rdoc_rdoc.rb +0 -455
  261. data/test/test_rdoc_require.rb +0 -25
  262. data/test/test_rdoc_ri_driver.rb +0 -1436
  263. data/test/test_rdoc_ri_paths.rb +0 -155
  264. data/test/test_rdoc_ruby_lex.rb +0 -421
  265. data/test/test_rdoc_ruby_token.rb +0 -19
  266. data/test/test_rdoc_rubygems_hook.rb +0 -251
  267. data/test/test_rdoc_servlet.rb +0 -534
  268. data/test/test_rdoc_single_class.rb +0 -20
  269. data/test/test_rdoc_stats.rb +0 -722
  270. data/test/test_rdoc_store.rb +0 -993
  271. data/test/test_rdoc_task.rb +0 -173
  272. data/test/test_rdoc_text.rb +0 -557
  273. data/test/test_rdoc_token_stream.rb +0 -42
  274. data/test/test_rdoc_tom_doc.rb +0 -520
  275. data/test/test_rdoc_top_level.rb +0 -287
  276. data/test/xref_data.rb +0 -76
  277. data/test/xref_test_case.rb +0 -67
@@ -1,18 +0,0 @@
1
- %% name = RDoc::Markdown::Literals
2
-
3
- %% header {
4
- # :markup: markdown
5
-
6
- ##
7
- # Provides Literals appropriate for your ruby version.
8
- #--
9
- # This set of literals is for Ruby 1.8 regular expressions.
10
- }
11
-
12
- Alphanumeric = /[0-9A-Za-z\200-\377]/
13
- AlphanumericAscii = /[A-Za-z0-9]/
14
- BOM = "\357\273\277"
15
- Newline = /\n|\r\n?/
16
- NonAlphanumeric = /[\000-\057\072-\100\133-\140\173-\177]/
17
- Spacechar = / |\t/
18
-
@@ -1,416 +0,0 @@
1
- # :markup: markdown
2
-
3
- ##
4
- # Provides Literals appropriate for your ruby version.
5
- #--
6
- # This set of literals is for Ruby 1.8 regular expressions.
7
- class RDoc::Markdown::Literals
8
- # :stopdoc:
9
-
10
- # This is distinct from setup_parser so that a standalone parser
11
- # can redefine #initialize and still have access to the proper
12
- # parser setup code.
13
- def initialize(str, debug=false)
14
- setup_parser(str, debug)
15
- end
16
-
17
-
18
-
19
- # Prepares for parsing +str+. If you define a custom initialize you must
20
- # call this method before #parse
21
- def setup_parser(str, debug=false)
22
- set_string str, 0
23
- @memoizations = Hash.new { |h,k| h[k] = {} }
24
- @result = nil
25
- @failed_rule = nil
26
- @failing_rule_offset = -1
27
-
28
- setup_foreign_grammar
29
- end
30
-
31
- attr_reader :string
32
- attr_reader :failing_rule_offset
33
- attr_accessor :result, :pos
34
-
35
- def current_column(target=pos)
36
- if c = string.rindex("\n", target-1)
37
- return target - c - 1
38
- end
39
-
40
- target + 1
41
- end
42
-
43
- def current_line(target=pos)
44
- cur_offset = 0
45
- cur_line = 0
46
-
47
- string.each_line do |line|
48
- cur_line += 1
49
- cur_offset += line.size
50
- return cur_line if cur_offset >= target
51
- end
52
-
53
- -1
54
- end
55
-
56
- def lines
57
- lines = []
58
- string.each_line { |l| lines << l }
59
- lines
60
- end
61
-
62
-
63
-
64
- def get_text(start)
65
- @string[start..@pos-1]
66
- end
67
-
68
- # Sets the string and current parsing position for the parser.
69
- def set_string string, pos
70
- @string = string
71
- @string_size = string ? string.size : 0
72
- @pos = pos
73
- end
74
-
75
- def show_pos
76
- width = 10
77
- if @pos < width
78
- "#{@pos} (\"#{@string[0,@pos]}\" @ \"#{@string[@pos,width]}\")"
79
- else
80
- "#{@pos} (\"... #{@string[@pos - width, width]}\" @ \"#{@string[@pos,width]}\")"
81
- end
82
- end
83
-
84
- def failure_info
85
- l = current_line @failing_rule_offset
86
- c = current_column @failing_rule_offset
87
-
88
- if @failed_rule.kind_of? Symbol
89
- info = self.class::Rules[@failed_rule]
90
- "line #{l}, column #{c}: failed rule '#{info.name}' = '#{info.rendered}'"
91
- else
92
- "line #{l}, column #{c}: failed rule '#{@failed_rule}'"
93
- end
94
- end
95
-
96
- def failure_caret
97
- l = current_line @failing_rule_offset
98
- c = current_column @failing_rule_offset
99
-
100
- line = lines[l-1]
101
- "#{line}\n#{' ' * (c - 1)}^"
102
- end
103
-
104
- def failure_character
105
- l = current_line @failing_rule_offset
106
- c = current_column @failing_rule_offset
107
- lines[l-1][c-1, 1]
108
- end
109
-
110
- def failure_oneline
111
- l = current_line @failing_rule_offset
112
- c = current_column @failing_rule_offset
113
-
114
- char = lines[l-1][c-1, 1]
115
-
116
- if @failed_rule.kind_of? Symbol
117
- info = self.class::Rules[@failed_rule]
118
- "@#{l}:#{c} failed rule '#{info.name}', got '#{char}'"
119
- else
120
- "@#{l}:#{c} failed rule '#{@failed_rule}', got '#{char}'"
121
- end
122
- end
123
-
124
- class ParseError < RuntimeError
125
- end
126
-
127
- def raise_error
128
- raise ParseError, failure_oneline
129
- end
130
-
131
- def show_error(io=STDOUT)
132
- error_pos = @failing_rule_offset
133
- line_no = current_line(error_pos)
134
- col_no = current_column(error_pos)
135
-
136
- io.puts "On line #{line_no}, column #{col_no}:"
137
-
138
- if @failed_rule.kind_of? Symbol
139
- info = self.class::Rules[@failed_rule]
140
- io.puts "Failed to match '#{info.rendered}' (rule '#{info.name}')"
141
- else
142
- io.puts "Failed to match rule '#{@failed_rule}'"
143
- end
144
-
145
- io.puts "Got: #{string[error_pos,1].inspect}"
146
- line = lines[line_no-1]
147
- io.puts "=> #{line}"
148
- io.print(" " * (col_no + 3))
149
- io.puts "^"
150
- end
151
-
152
- def set_failed_rule(name)
153
- if @pos > @failing_rule_offset
154
- @failed_rule = name
155
- @failing_rule_offset = @pos
156
- end
157
- end
158
-
159
- attr_reader :failed_rule
160
-
161
- def match_string(str)
162
- len = str.size
163
- if @string[pos,len] == str
164
- @pos += len
165
- return str
166
- end
167
-
168
- return nil
169
- end
170
-
171
- def scan(reg)
172
- if m = reg.match(@string[@pos..-1])
173
- width = m.end(0)
174
- @pos += width
175
- return true
176
- end
177
-
178
- return nil
179
- end
180
-
181
- if "".respond_to? :ord
182
- def get_byte
183
- if @pos >= @string_size
184
- return nil
185
- end
186
-
187
- s = @string[@pos].ord
188
- @pos += 1
189
- s
190
- end
191
- else
192
- def get_byte
193
- if @pos >= @string_size
194
- return nil
195
- end
196
-
197
- s = @string[@pos]
198
- @pos += 1
199
- s
200
- end
201
- end
202
-
203
- def parse(rule=nil)
204
- # We invoke the rules indirectly via apply
205
- # instead of by just calling them as methods because
206
- # if the rules use left recursion, apply needs to
207
- # manage that.
208
-
209
- if !rule
210
- apply(:_root)
211
- else
212
- method = rule.gsub("-","_hyphen_")
213
- apply :"_#{method}"
214
- end
215
- end
216
-
217
- class MemoEntry
218
- def initialize(ans, pos)
219
- @ans = ans
220
- @pos = pos
221
- @result = nil
222
- @set = false
223
- @left_rec = false
224
- end
225
-
226
- attr_reader :ans, :pos, :result, :set
227
- attr_accessor :left_rec
228
-
229
- def move!(ans, pos, result)
230
- @ans = ans
231
- @pos = pos
232
- @result = result
233
- @set = true
234
- @left_rec = false
235
- end
236
- end
237
-
238
- def external_invoke(other, rule, *args)
239
- old_pos = @pos
240
- old_string = @string
241
-
242
- set_string other.string, other.pos
243
-
244
- begin
245
- if val = __send__(rule, *args)
246
- other.pos = @pos
247
- other.result = @result
248
- else
249
- other.set_failed_rule "#{self.class}##{rule}"
250
- end
251
- val
252
- ensure
253
- set_string old_string, old_pos
254
- end
255
- end
256
-
257
- def apply_with_args(rule, *args)
258
- memo_key = [rule, args]
259
- if m = @memoizations[memo_key][@pos]
260
- @pos = m.pos
261
- if !m.set
262
- m.left_rec = true
263
- return nil
264
- end
265
-
266
- @result = m.result
267
-
268
- return m.ans
269
- else
270
- m = MemoEntry.new(nil, @pos)
271
- @memoizations[memo_key][@pos] = m
272
- start_pos = @pos
273
-
274
- ans = __send__ rule, *args
275
-
276
- lr = m.left_rec
277
-
278
- m.move! ans, @pos, @result
279
-
280
- # Don't bother trying to grow the left recursion
281
- # if it's failing straight away (thus there is no seed)
282
- if ans and lr
283
- return grow_lr(rule, args, start_pos, m)
284
- else
285
- return ans
286
- end
287
-
288
- return ans
289
- end
290
- end
291
-
292
- def apply(rule)
293
- if m = @memoizations[rule][@pos]
294
- @pos = m.pos
295
- if !m.set
296
- m.left_rec = true
297
- return nil
298
- end
299
-
300
- @result = m.result
301
-
302
- return m.ans
303
- else
304
- m = MemoEntry.new(nil, @pos)
305
- @memoizations[rule][@pos] = m
306
- start_pos = @pos
307
-
308
- ans = __send__ rule
309
-
310
- lr = m.left_rec
311
-
312
- m.move! ans, @pos, @result
313
-
314
- # Don't bother trying to grow the left recursion
315
- # if it's failing straight away (thus there is no seed)
316
- if ans and lr
317
- return grow_lr(rule, nil, start_pos, m)
318
- else
319
- return ans
320
- end
321
-
322
- return ans
323
- end
324
- end
325
-
326
- def grow_lr(rule, args, start_pos, m)
327
- while true
328
- @pos = start_pos
329
- @result = m.result
330
-
331
- if args
332
- ans = __send__ rule, *args
333
- else
334
- ans = __send__ rule
335
- end
336
- return nil unless ans
337
-
338
- break if @pos <= m.pos
339
-
340
- m.move! ans, @pos, @result
341
- end
342
-
343
- @result = m.result
344
- @pos = m.pos
345
- return m.ans
346
- end
347
-
348
- class RuleInfo
349
- def initialize(name, rendered)
350
- @name = name
351
- @rendered = rendered
352
- end
353
-
354
- attr_reader :name, :rendered
355
- end
356
-
357
- def self.rule_info(name, rendered)
358
- RuleInfo.new(name, rendered)
359
- end
360
-
361
-
362
- # :startdoc:
363
- # :stopdoc:
364
- def setup_foreign_grammar; end
365
-
366
- # Alphanumeric = /[0-9A-Za-z\200-\377]/
367
- def _Alphanumeric
368
- _tmp = scan(/\A(?-mix:[0-9A-Za-z\200-\377])/)
369
- set_failed_rule :_Alphanumeric unless _tmp
370
- return _tmp
371
- end
372
-
373
- # AlphanumericAscii = /[A-Za-z0-9]/
374
- def _AlphanumericAscii
375
- _tmp = scan(/\A(?-mix:[A-Za-z0-9])/)
376
- set_failed_rule :_AlphanumericAscii unless _tmp
377
- return _tmp
378
- end
379
-
380
- # BOM = ""
381
- def _BOM
382
- _tmp = match_string("\303\257\302\273\302\277")
383
- set_failed_rule :_BOM unless _tmp
384
- return _tmp
385
- end
386
-
387
- # Newline = /\n|\r\n?/
388
- def _Newline
389
- _tmp = scan(/\A(?-mix:\n|\r\n?)/)
390
- set_failed_rule :_Newline unless _tmp
391
- return _tmp
392
- end
393
-
394
- # NonAlphanumeric = /[\000-\057\072-\100\133-\140\173-\177]/
395
- def _NonAlphanumeric
396
- _tmp = scan(/\A(?-mix:[\000-\057\072-\100\133-\140\173-\177])/)
397
- set_failed_rule :_NonAlphanumeric unless _tmp
398
- return _tmp
399
- end
400
-
401
- # Spacechar = / |\t/
402
- def _Spacechar
403
- _tmp = scan(/\A(?-mix: |\t)/)
404
- set_failed_rule :_Spacechar unless _tmp
405
- return _tmp
406
- end
407
-
408
- Rules = {}
409
- Rules[:_Alphanumeric] = rule_info("Alphanumeric", "/[0-9A-Za-z\\200-\\377]/")
410
- Rules[:_AlphanumericAscii] = rule_info("AlphanumericAscii", "/[A-Za-z0-9]/")
411
- Rules[:_BOM] = rule_info("BOM", "\"\"")
412
- Rules[:_Newline] = rule_info("Newline", "/\\n|\\r\\n?/")
413
- Rules[:_NonAlphanumeric] = rule_info("NonAlphanumeric", "/[\\000-\\057\\072-\\100\\133-\\140\\173-\\177]/")
414
- Rules[:_Spacechar] = rule_info("Spacechar", "/ |\\t/")
415
- # :startdoc:
416
- end