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,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  class RDoc::Markup
2
3
 
3
4
  AttrChanger = Struct.new :turn_on, :turn_off # :nodoc:
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  ##
2
3
  # An array of attributes which parallels the characters in a string.
3
4
 
@@ -6,16 +7,22 @@ class RDoc::Markup::AttrSpan
6
7
  ##
7
8
  # Creates a new AttrSpan for +length+ characters
8
9
 
9
- def initialize(length)
10
+ def initialize(length, exclusive)
10
11
  @attrs = Array.new(length, 0)
12
+ @exclusive = exclusive
11
13
  end
12
14
 
13
15
  ##
14
16
  # Toggles +bits+ from +start+ to +length+
15
17
  def set_attrs(start, length, bits)
18
+ updated = false
16
19
  for i in start ... (start+length)
17
- @attrs[i] |= bits
20
+ if (@exclusive & @attrs[i]) == 0 || (@exclusive & bits) != 0
21
+ @attrs[i] |= bits
22
+ updated = true
23
+ end
18
24
  end
25
+ updated
19
26
  end
20
27
 
21
28
  ##
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  ##
2
3
  # Manages changes of attributes in a block of text
3
4
 
@@ -52,10 +53,14 @@ class RDoc::Markup::AttributeManager
52
53
  attr_reader :protectable
53
54
 
54
55
  ##
55
- # And this maps _special_ sequences to a name. A special sequence is
56
- # something like a WikiWord
56
+ # And this maps _regexp handling_ sequences to a name. A regexp handling
57
+ # sequence is something like a WikiWord
57
58
 
58
- attr_reader :special
59
+ attr_reader :regexp_handlings
60
+
61
+ ##
62
+ # A bits of exclusive maps
63
+ attr_reader :exclusive_bitmap
59
64
 
60
65
  ##
61
66
  # Creates a new attribute manager that understands bold, emphasized and
@@ -65,19 +70,20 @@ class RDoc::Markup::AttributeManager
65
70
  @html_tags = {}
66
71
  @matching_word_pairs = {}
67
72
  @protectable = %w[<]
68
- @special = []
73
+ @regexp_handlings = []
69
74
  @word_pair_map = {}
75
+ @exclusive_bitmap = 0
70
76
  @attributes = RDoc::Markup::Attributes.new
71
77
 
72
- add_word_pair "*", "*", :BOLD
73
- add_word_pair "_", "_", :EM
74
- add_word_pair "+", "+", :TT
78
+ add_word_pair "*", "*", :BOLD, true
79
+ add_word_pair "_", "_", :EM, true
80
+ add_word_pair "+", "+", :TT, true
75
81
 
76
- add_html "em", :EM
77
- add_html "i", :EM
78
- add_html "b", :BOLD
79
- add_html "tt", :TT
80
- add_html "code", :TT
82
+ add_html "em", :EM, true
83
+ add_html "i", :EM, true
84
+ add_html "b", :BOLD, true
85
+ add_html "tt", :TT, true
86
+ add_html "code", :TT, true
81
87
  end
82
88
 
83
89
  ##
@@ -121,29 +127,67 @@ class RDoc::Markup::AttributeManager
121
127
  res
122
128
  end
123
129
 
130
+ def exclusive?(attr)
131
+ (attr & @exclusive_bitmap) != 0
132
+ end
133
+
134
+ NON_PRINTING_START = "\1" # :nodoc:
135
+ NON_PRINTING_END = "\2" # :nodoc:
136
+
124
137
  ##
125
138
  # Map attributes like <b>text</b>to the sequence
126
139
  # \001\002<char>\001\003<char>, where <char> is a per-attribute specific
127
140
  # character
128
141
 
129
- def convert_attrs(str, attrs)
142
+ def convert_attrs(str, attrs, exclusive = false)
143
+ convert_attrs_matching_word_pairs(str, attrs, exclusive)
144
+ convert_attrs_word_pair_map(str, attrs, exclusive)
145
+ end
146
+
147
+ def convert_attrs_matching_word_pairs(str, attrs, exclusive)
130
148
  # first do matching ones
131
- tags = @matching_word_pairs.keys.join("")
149
+ tags = @matching_word_pairs.select { |start, bitmap|
150
+ if exclusive && exclusive?(bitmap)
151
+ true
152
+ elsif !exclusive && !exclusive?(bitmap)
153
+ true
154
+ else
155
+ false
156
+ end
157
+ }.keys
158
+ return if tags.empty?
159
+ all_tags = @matching_word_pairs.keys
132
160
 
133
- re = /(^|\W)([#{tags}])([#\\]?[\w:.\/-]+?\S?)\2(\W|$)/
161
+ re = /(^|\W|[#{all_tags.join("")}])([#{tags.join("")}])(\2*[#\\]?[\w:.\/\[\]-]+?\S?)\2(?!\2)([#{all_tags.join("")}]|\W|$)/
134
162
 
135
- 1 while str.gsub!(re) do
163
+ 1 while str.gsub!(re) { |orig|
136
164
  attr = @matching_word_pairs[$2]
137
- attrs.set_attrs($`.length + $1.length + $2.length, $3.length, attr)
138
- $1 + NULL * $2.length + $3 + NULL * $2.length + $4
139
- end
165
+ attr_updated = attrs.set_attrs($`.length + $1.length + $2.length, $3.length, attr)
166
+ if attr_updated
167
+ $1 + NULL * $2.length + $3 + NULL * $2.length + $4
168
+ else
169
+ $1 + NON_PRINTING_START + $2 + NON_PRINTING_END + $3 + NON_PRINTING_START + $2 + NON_PRINTING_END + $4
170
+ end
171
+ }
172
+ str.delete!(NON_PRINTING_START + NON_PRINTING_END)
173
+ end
140
174
 
175
+ def convert_attrs_word_pair_map(str, attrs, exclusive)
141
176
  # then non-matching
142
177
  unless @word_pair_map.empty? then
143
178
  @word_pair_map.each do |regexp, attr|
144
- str.gsub!(regexp) {
145
- attrs.set_attrs($`.length + $1.length, $2.length, attr)
146
- NULL * $1.length + $2 + NULL * $3.length
179
+ if !exclusive
180
+ next if exclusive?(attr)
181
+ else
182
+ next if !exclusive?(attr)
183
+ end
184
+ 1 while str.gsub!(regexp) { |orig|
185
+ updated = attrs.set_attrs($`.length + $1.length, $2.length, attr)
186
+ if updated
187
+ NULL * $1.length + $2 + NULL * $3.length
188
+ else
189
+ orig
190
+ end
147
191
  }
148
192
  end
149
193
  end
@@ -152,10 +196,18 @@ class RDoc::Markup::AttributeManager
152
196
  ##
153
197
  # Converts HTML tags to RDoc attributes
154
198
 
155
- def convert_html(str, attrs)
156
- tags = @html_tags.keys.join '|'
199
+ def convert_html(str, attrs, exclusive = false)
200
+ tags = @html_tags.select { |start, bitmap|
201
+ if exclusive && exclusive?(bitmap)
202
+ true
203
+ elsif !exclusive && !exclusive?(bitmap)
204
+ true
205
+ else
206
+ false
207
+ end
208
+ }.keys.join '|'
157
209
 
158
- 1 while str.gsub!(/<(#{tags})>(.*?)<\/\1>/i) {
210
+ 1 while str.gsub!(/<(#{tags})>(.*?)<\/\1>/i) { |orig|
159
211
  attr = @html_tags[$1.downcase]
160
212
  html_length = $1.length + 2
161
213
  seq = NULL * html_length
@@ -165,22 +217,27 @@ class RDoc::Markup::AttributeManager
165
217
  end
166
218
 
167
219
  ##
168
- # Converts special sequences to RDoc attributes
169
-
170
- def convert_specials str, attrs
171
- @special.each do |regexp, attribute|
220
+ # Converts regexp handling sequences to RDoc attributes
221
+
222
+ def convert_regexp_handlings str, attrs, exclusive = false
223
+ @regexp_handlings.each do |regexp, attribute|
224
+ if exclusive
225
+ next if !exclusive?(attribute)
226
+ else
227
+ next if exclusive?(attribute)
228
+ end
172
229
  str.scan(regexp) do
173
230
  capture = $~.size == 1 ? 0 : 1
174
231
 
175
232
  s, e = $~.offset capture
176
233
 
177
- attrs.set_attrs s, e - s, attribute | @attributes.special
234
+ attrs.set_attrs s, e - s, attribute | @attributes.regexp_handling
178
235
  end
179
236
  end
180
237
  end
181
238
 
182
239
  ##
183
- # Escapes special sequences of text to prevent conversion to RDoc
240
+ # Escapes regexp handling sequences of text to prevent conversion to RDoc
184
241
 
185
242
  def mask_protected_sequences
186
243
  # protect __send__, __FILE__, etc.
@@ -192,7 +249,7 @@ class RDoc::Markup::AttributeManager
192
249
  end
193
250
 
194
251
  ##
195
- # Unescapes special sequences of text
252
+ # Unescapes regexp handling sequences of text
196
253
 
197
254
  def unmask_protected_sequences
198
255
  @str.gsub!(/(.)#{PROTECT_ATTR}/, "\\1\000")
@@ -204,7 +261,7 @@ class RDoc::Markup::AttributeManager
204
261
  #
205
262
  # am.add_word_pair '*', '*', :BOLD
206
263
 
207
- def add_word_pair(start, stop, name)
264
+ def add_word_pair(start, stop, name, exclusive = false)
208
265
  raise ArgumentError, "Word flags may not start with '<'" if
209
266
  start[0,1] == '<'
210
267
 
@@ -219,6 +276,8 @@ class RDoc::Markup::AttributeManager
219
276
 
220
277
  @protectable << start[0,1]
221
278
  @protectable.uniq!
279
+
280
+ @exclusive_bitmap |= bitmap if exclusive
222
281
  end
223
282
 
224
283
  ##
@@ -227,33 +286,40 @@ class RDoc::Markup::AttributeManager
227
286
  #
228
287
  # am.add_html 'em', :EM
229
288
 
230
- def add_html(tag, name)
231
- @html_tags[tag.downcase] = @attributes.bitmap_for name
289
+ def add_html(tag, name, exclusive = false)
290
+ bitmap = @attributes.bitmap_for name
291
+ @html_tags[tag.downcase] = bitmap
292
+ @exclusive_bitmap |= bitmap if exclusive
232
293
  end
233
294
 
234
295
  ##
235
- # Adds a special handler for +pattern+ with +name+. A simple URL handler
296
+ # Adds a regexp handling for +pattern+ with +name+. A simple URL handler
236
297
  # would be:
237
298
  #
238
- # @am.add_special(/((https?:)\S+\w)/, :HYPERLINK)
299
+ # @am.add_regexp_handling(/((https?:)\S+\w)/, :HYPERLINK)
239
300
 
240
- def add_special pattern, name
241
- @special << [pattern, @attributes.bitmap_for(name)]
301
+ def add_regexp_handling pattern, name, exclusive = false
302
+ bitmap = @attributes.bitmap_for(name)
303
+ @regexp_handlings << [pattern, bitmap]
304
+ @exclusive_bitmap |= bitmap if exclusive
242
305
  end
243
306
 
244
307
  ##
245
- # Processes +str+ converting attributes, HTML and specials
308
+ # Processes +str+ converting attributes, HTML and regexp handlings
246
309
 
247
310
  def flow str
248
- @str = str
311
+ @str = str.dup
249
312
 
250
313
  mask_protected_sequences
251
314
 
252
- @attrs = RDoc::Markup::AttrSpan.new @str.length
315
+ @attrs = RDoc::Markup::AttrSpan.new @str.length, @exclusive_bitmap
253
316
 
254
- convert_attrs @str, @attrs
255
- convert_html @str, @attrs
256
- convert_specials @str, @attrs
317
+ convert_attrs @str, @attrs, true
318
+ convert_html @str, @attrs, true
319
+ convert_regexp_handlings @str, @attrs, true
320
+ convert_attrs @str, @attrs
321
+ convert_html @str, @attrs
322
+ convert_regexp_handlings @str, @attrs
257
323
 
258
324
  unmask_protected_sequences
259
325
 
@@ -311,12 +377,12 @@ class RDoc::Markup::AttributeManager
311
377
  res << change_attribute(current_attr, new_attr)
312
378
  current_attr = new_attr
313
379
 
314
- if (current_attr & @attributes.special) != 0 then
380
+ if (current_attr & @attributes.regexp_handling) != 0 then
315
381
  i += 1 while
316
- i < str_len and (@attrs[i] & @attributes.special) != 0
382
+ i < str_len and (@attrs[i] & @attributes.regexp_handling) != 0
317
383
 
318
- res << RDoc::Markup::Special.new(current_attr,
319
- copy_string(start_pos, i))
384
+ res << RDoc::Markup::RegexpHandling.new(current_attr,
385
+ copy_string(start_pos, i))
320
386
  start_pos = i
321
387
  next
322
388
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  ##
2
3
  # We manage a set of attributes. Each attribute has a symbol name and a bit
3
4
  # value.
@@ -5,21 +6,21 @@
5
6
  class RDoc::Markup::Attributes
6
7
 
7
8
  ##
8
- # The special attribute type. See RDoc::Markup#add_special
9
+ # The regexp handling attribute type. See RDoc::Markup#add_regexp_handling
9
10
 
10
- attr_reader :special
11
+ attr_reader :regexp_handling
11
12
 
12
13
  ##
13
14
  # Creates a new attributes set.
14
15
 
15
16
  def initialize
16
- @special = 1
17
+ @regexp_handling = 1
17
18
 
18
19
  @name_to_bitmap = [
19
- [:_SPECIAL_, @special],
20
+ [:_REGEXP_HANDLING_, @regexp_handling],
20
21
  ]
21
22
 
22
- @next_bitmap = @special << 1
23
+ @next_bitmap = @regexp_handling << 1
23
24
  end
24
25
 
25
26
  ##
@@ -60,7 +61,7 @@ class RDoc::Markup::Attributes
60
61
  return enum_for __method__, bitmap unless block_given?
61
62
 
62
63
  @name_to_bitmap.each do |name, bit|
63
- next if bit == @special
64
+ next if bit == @regexp_handling
64
65
 
65
66
  yield name.to_s if (bitmap & bit) != 0
66
67
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  ##
2
3
  # An empty line. This class is a singleton.
3
4
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  ##
2
3
  # A quoted section which contains markup items.
3
4
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  ##
2
3
  # A Document containing lists, headings, paragraphs, etc.
3
4
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  ##
2
3
  # Base class for RDoc markup formatters
3
4
  #
@@ -49,7 +50,7 @@ class RDoc::Markup::Formatter
49
50
 
50
51
  @markup = markup || RDoc::Markup.new
51
52
  @am = @markup.attribute_manager
52
- @am.add_special(/<br>/, :HARD_BREAK)
53
+ @am.add_regexp_handling(/<br>/, :HARD_BREAK)
53
54
 
54
55
  @attributes = @am.attributes
55
56
 
@@ -77,23 +78,24 @@ class RDoc::Markup::Formatter
77
78
  end
78
79
 
79
80
  ##
80
- # Adds a special for links of the form rdoc-...:
81
+ # Adds a regexp handling for links of the form rdoc-...:
81
82
 
82
- def add_special_RDOCLINK
83
- @markup.add_special(/rdoc-[a-z]+:[^\s\]]+/, :RDOCLINK)
83
+ def add_regexp_handling_RDOCLINK
84
+ @markup.add_regexp_handling(/rdoc-[a-z]+:[^\s\]]+/, :RDOCLINK)
84
85
  end
85
86
 
86
87
  ##
87
- # Adds a special for links of the form {<text>}[<url>] and <word>[<url>]
88
+ # Adds a regexp handling for links of the form {<text>}[<url>] and
89
+ # <word>[<url>]
88
90
 
89
- def add_special_TIDYLINK
90
- @markup.add_special(/(?:
91
- \{.*?\} | # multi-word label
92
- \b[^\s{}]+? # single-word label
93
- )
91
+ def add_regexp_handling_TIDYLINK
92
+ @markup.add_regexp_handling(/(?:
93
+ \{.*?\} | # multi-word label
94
+ \b[^\s{}]+? # single-word label
95
+ )
94
96
 
95
- \[\S+?\] # link target
96
- /x, :TIDYLINK)
97
+ \[\S+?\] # link target
98
+ /x, :TIDYLINK)
97
99
  end
98
100
 
99
101
  ##
@@ -132,8 +134,8 @@ class RDoc::Markup::Formatter
132
134
  when RDoc::Markup::AttrChanger then
133
135
  off_tags res, item
134
136
  on_tags res, item
135
- when RDoc::Markup::Special then
136
- res << convert_special(item)
137
+ when RDoc::Markup::RegexpHandling then
138
+ res << convert_regexp_handling(item)
137
139
  else
138
140
  raise "Unknown flow element: #{item.inspect}"
139
141
  end
@@ -143,29 +145,29 @@ class RDoc::Markup::Formatter
143
145
  end
144
146
 
145
147
  ##
146
- # Converts added specials. See RDoc::Markup#add_special
148
+ # Converts added regexp handlings. See RDoc::Markup#add_regexp_handling
147
149
 
148
- def convert_special special
149
- return special.text if in_tt?
150
+ def convert_regexp_handling target
151
+ return target.text if in_tt?
150
152
 
151
153
  handled = false
152
154
 
153
- @attributes.each_name_of special.type do |name|
154
- method_name = "handle_special_#{name}"
155
+ @attributes.each_name_of target.type do |name|
156
+ method_name = "handle_regexp_#{name}"
155
157
 
156
158
  if respond_to? method_name then
157
- special.text = send method_name, special
159
+ target.text = public_send method_name, target
158
160
  handled = true
159
161
  end
160
162
  end
161
163
 
162
164
  unless handled then
163
- special_name = @attributes.as_string special.type
165
+ target_name = @attributes.as_string target.type
164
166
 
165
- raise RDoc::Error, "Unhandled special #{special_name}: #{special}"
167
+ raise RDoc::Error, "Unhandled regexp handling #{target_name}: #{target}"
166
168
  end
167
169
 
168
- special.text
170
+ target.text
169
171
  end
170
172
 
171
173
  ##
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  ##
2
3
  # A hard-break in the middle of a paragraph.
3
4
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  ##
2
3
  # A heading with a level (1-6) and text
3
4
 
@@ -22,12 +23,12 @@ RDoc::Markup::Heading =
22
23
  return @to_html if @to_html
23
24
 
24
25
  markup = RDoc::Markup.new
25
- markup.add_special RDoc::CrossReference::CROSSREF_REGEXP, :CROSSREF
26
+ markup.add_regexp_handling RDoc::CrossReference::CROSSREF_REGEXP, :CROSSREF
26
27
 
27
28
  @to_html = RDoc::Markup::ToHtml.new nil
28
29
 
29
- def @to_html.handle_special_CROSSREF special
30
- special.text.sub(/^\\/, '')
30
+ def @to_html.handle_regexp_CROSSREF target
31
+ target.text.sub(/^\\/, '')
31
32
  end
32
33
 
33
34
  @to_html
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  ##
2
3
  # A file included at generation time. Objects of this class are created by
3
4
  # RDoc::RD for an extension-less include.
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  ##
2
3
  # An Indented Paragraph of text
3
4
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  ##
2
3
  # A List is a homogeneous set of ListItems.
3
4
  #
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  ##
2
3
  # An item within a List that contains paragraphs, headings, etc.
3
4
  #
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  ##
2
3
  # A Paragraph of text
3
4