rdoc 8.0.0 → 8.1.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.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +1 -3
- data/RI.md +75 -75
- data/exe/rdoc +2 -2
- data/lib/rdoc/code_object/alias.rb +71 -69
- data/lib/rdoc/code_object/any_method.rb +305 -303
- data/lib/rdoc/code_object/attr.rb +150 -148
- data/lib/rdoc/code_object/class_module.rb +798 -792
- data/lib/rdoc/code_object/constant.rb +175 -173
- data/lib/rdoc/code_object/context/section.rb +142 -138
- data/lib/rdoc/code_object/context.rb +926 -958
- data/lib/rdoc/code_object/extend.rb +7 -5
- data/lib/rdoc/code_object/include.rb +7 -5
- data/lib/rdoc/code_object/method_attr.rb +326 -319
- data/lib/rdoc/code_object/mixin.rb +97 -95
- data/lib/rdoc/code_object/normal_class.rb +77 -78
- data/lib/rdoc/code_object/normal_module.rb +61 -59
- data/lib/rdoc/code_object/require.rb +23 -39
- data/lib/rdoc/code_object/single_class.rb +21 -19
- data/lib/rdoc/code_object/top_level.rb +212 -219
- data/lib/rdoc/code_object.rb +305 -303
- data/lib/rdoc/comment.rb +275 -273
- data/lib/rdoc/cross_reference.rb +192 -190
- data/lib/rdoc/encoding.rb +105 -103
- data/lib/rdoc/erb_partial.rb +13 -11
- data/lib/rdoc/erbio.rb +29 -27
- data/lib/rdoc/generator/aliki.rb +161 -153
- data/lib/rdoc/generator/darkfish.rb +645 -635
- data/lib/rdoc/generator/json_index.rb +233 -229
- data/lib/rdoc/generator/markup.rb +164 -146
- data/lib/rdoc/generator/pot/message_extractor.rb +57 -51
- data/lib/rdoc/generator/pot/po.rb +52 -51
- data/lib/rdoc/generator/pot/po_entry.rb +138 -132
- data/lib/rdoc/generator/pot.rb +85 -81
- data/lib/rdoc/generator/ri.rb +23 -19
- data/lib/rdoc/generator/template/aliki/DESIGN.md +6 -4
- data/lib/rdoc/generator/template/aliki/_footer.rhtml +1 -1
- data/lib/rdoc/generator/template/aliki/_head.rhtml +10 -10
- data/lib/rdoc/generator/template/aliki/_header.rhtml +29 -44
- data/lib/rdoc/generator/template/aliki/_sidebar_search.rhtml +4 -4
- data/lib/rdoc/generator/template/aliki/css/rdoc.css +207 -178
- data/lib/rdoc/generator/template/aliki/js/aliki.js +60 -84
- data/lib/rdoc/generator/template/darkfish/_footer.rhtml +1 -1
- data/lib/rdoc/generator.rb +48 -46
- data/lib/rdoc/i18n/locale.rb +99 -95
- data/lib/rdoc/i18n/text.rb +109 -105
- data/lib/rdoc/i18n.rb +7 -5
- data/lib/rdoc/markdown/byte_runtime.rb +80 -0
- data/lib/rdoc/markdown.kpeg +15 -11
- data/lib/rdoc/markdown.rb +40 -47
- data/lib/rdoc/markup/block_quote.rb +12 -8
- data/lib/rdoc/markup/document.rb +127 -123
- data/lib/rdoc/markup/formatter.rb +219 -215
- data/lib/rdoc/markup/include.rb +33 -29
- data/lib/rdoc/markup/indented_paragraph.rb +37 -33
- data/lib/rdoc/markup/inline_parser.rb +281 -277
- data/lib/rdoc/markup/list.rb +80 -88
- data/lib/rdoc/markup/list_item.rb +73 -85
- data/lib/rdoc/markup/paragraph.rb +23 -19
- data/lib/rdoc/markup/parser.rb +501 -497
- data/lib/rdoc/markup/pre_process.rb +283 -279
- data/lib/rdoc/markup/raw.rb +2 -2
- data/lib/rdoc/markup/rule.rb +16 -12
- data/lib/rdoc/markup/to_ansi.rb +143 -139
- data/lib/rdoc/markup/to_bs.rb +72 -68
- data/lib/rdoc/markup/to_html.rb +594 -565
- data/lib/rdoc/markup/to_html_crossref.rb +234 -230
- data/lib/rdoc/markup/to_html_snippet.rb +232 -227
- data/lib/rdoc/markup/to_joined_paragraph.rb +36 -32
- data/lib/rdoc/markup/to_label.rb +63 -59
- data/lib/rdoc/markup/to_markdown.rb +212 -208
- data/lib/rdoc/markup/to_rdoc.rb +336 -332
- data/lib/rdoc/markup/to_table_of_contents.rb +66 -62
- data/lib/rdoc/markup/to_test.rb +60 -56
- data/lib/rdoc/markup/to_tt_only.rb +84 -80
- data/lib/rdoc/markup/verbatim.rb +62 -58
- data/lib/rdoc/markup.rb +198 -196
- data/lib/rdoc/options.rb +1063 -1061
- data/lib/rdoc/parser/c.rb +1039 -1037
- data/lib/rdoc/parser/changelog.rb +319 -315
- data/lib/rdoc/parser/markdown.rb +17 -13
- data/lib/rdoc/parser/rbs.rb +239 -235
- data/lib/rdoc/parser/rd.rb +17 -13
- data/lib/rdoc/parser/ruby.rb +1245 -1124
- data/lib/rdoc/parser/ruby_colorizer.rb +263 -213
- data/lib/rdoc/parser/simple.rb +31 -27
- data/lib/rdoc/parser/text.rb +12 -8
- data/lib/rdoc/parser.rb +228 -220
- data/lib/rdoc/rbs_helper.rb +1 -1
- data/lib/rdoc/rd/inline.rb +57 -53
- data/lib/rdoc/rd.rb +90 -88
- data/lib/rdoc/rdoc.rb +500 -491
- data/lib/rdoc/ri/driver.rb +1140 -1135
- data/lib/rdoc/ri/formatter.rb +7 -3
- data/lib/rdoc/ri/paths.rb +140 -136
- data/lib/rdoc/ri/servlet.rb +354 -350
- data/lib/rdoc/ri/store.rb +4 -2
- data/lib/rdoc/ri/task.rb +55 -51
- data/lib/rdoc/ri.rb +14 -12
- data/lib/rdoc/rubygems_hook.rb +183 -181
- data/lib/rdoc/server.rb +349 -347
- data/lib/rdoc/stats/normal.rb +46 -42
- data/lib/rdoc/stats/quiet.rb +39 -35
- data/lib/rdoc/stats/verbose.rb +35 -31
- data/lib/rdoc/stats.rb +365 -363
- data/lib/rdoc/store.rb +888 -902
- data/lib/rdoc/task.rb +260 -256
- data/lib/rdoc/text.rb +135 -133
- data/lib/rdoc/token_stream.rb +101 -93
- data/lib/rdoc/tom_doc.rb +203 -201
- data/lib/rdoc/version.rb +1 -1
- metadata +4 -5
- data/lib/rdoc/markdown/literals.kpeg +0 -21
- data/lib/rdoc/markdown/literals.rb +0 -454
data/lib/rdoc/i18n/text.rb
CHANGED
|
@@ -1,126 +1,130 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
#
|
|
6
|
-
#
|
|
7
|
-
#
|
|
8
|
-
#
|
|
9
|
-
#
|
|
10
|
-
#
|
|
2
|
+
module RDoc
|
|
3
|
+
module I18n
|
|
4
|
+
##
|
|
5
|
+
# An i18n supported text.
|
|
6
|
+
#
|
|
7
|
+
# This object provides the following two features:
|
|
8
|
+
#
|
|
9
|
+
# * Extracts translation messages from wrapped raw text.
|
|
10
|
+
# * Translates wrapped raw text in specified locale.
|
|
11
|
+
#
|
|
12
|
+
# Wrapped raw text is one of String, RDoc::Comment or Array of them.
|
|
11
13
|
|
|
12
|
-
class
|
|
14
|
+
class Text
|
|
13
15
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
+
##
|
|
17
|
+
# Creates a new i18n supported text for +raw+ text.
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
def initialize(raw)
|
|
20
|
+
@raw = raw
|
|
21
|
+
end
|
|
20
22
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
23
|
+
##
|
|
24
|
+
# Extracts translation target messages and yields each message.
|
|
25
|
+
#
|
|
26
|
+
# Each yielded message is a Hash. It consists of the followings:
|
|
27
|
+
#
|
|
28
|
+
# :type :: :paragraph
|
|
29
|
+
# :paragraph :: String (The translation target message itself.)
|
|
30
|
+
# :line_no :: Integer (The line number of the :paragraph is started.)
|
|
31
|
+
#
|
|
32
|
+
# The above content may be added in the future.
|
|
31
33
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
34
|
+
def extract_messages
|
|
35
|
+
parse do |part|
|
|
36
|
+
case part[:type]
|
|
37
|
+
when :empty_line
|
|
38
|
+
# ignore
|
|
39
|
+
when :paragraph
|
|
40
|
+
yield(part)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
39
43
|
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
44
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
45
|
+
# Translates raw text into +locale+.
|
|
46
|
+
def translate(locale)
|
|
47
|
+
translated_text = ''
|
|
48
|
+
parse do |part|
|
|
49
|
+
case part[:type]
|
|
50
|
+
when :paragraph
|
|
51
|
+
translated_text += locale.translate(part[:paragraph])
|
|
52
|
+
when :empty_line
|
|
53
|
+
translated_text += part[:line]
|
|
54
|
+
else
|
|
55
|
+
raise "should not reach here: unexpected type: #{type}"
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
translated_text
|
|
54
59
|
end
|
|
55
|
-
end
|
|
56
|
-
translated_text
|
|
57
|
-
end
|
|
58
60
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
61
|
+
private
|
|
62
|
+
def parse(&block)
|
|
63
|
+
paragraph = ''
|
|
64
|
+
paragraph_start_line = 0
|
|
65
|
+
line_no = 0
|
|
64
66
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
67
|
+
each_line(@raw) do |line|
|
|
68
|
+
line_no += 1
|
|
69
|
+
case line
|
|
70
|
+
when /\A\s*\z/
|
|
71
|
+
if paragraph.empty?
|
|
72
|
+
emit_empty_line_event(line, line_no, &block)
|
|
73
|
+
else
|
|
74
|
+
paragraph += line
|
|
75
|
+
emit_paragraph_event(paragraph, paragraph_start_line, line_no,
|
|
76
|
+
&block)
|
|
77
|
+
paragraph = ''
|
|
78
|
+
end
|
|
79
|
+
else
|
|
80
|
+
paragraph_start_line = line_no if paragraph.empty?
|
|
81
|
+
paragraph += line
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
unless paragraph.empty?
|
|
86
|
+
emit_paragraph_event(paragraph, paragraph_start_line, line_no, &block)
|
|
76
87
|
end
|
|
77
|
-
else
|
|
78
|
-
paragraph_start_line = line_no if paragraph.empty?
|
|
79
|
-
paragraph += line
|
|
80
88
|
end
|
|
81
|
-
end
|
|
82
89
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
90
|
+
def each_line(raw, &block)
|
|
91
|
+
case raw
|
|
92
|
+
when Comment
|
|
93
|
+
raw.text.each_line(&block)
|
|
94
|
+
when Hash
|
|
95
|
+
raw.each_value do |comments|
|
|
96
|
+
comments.each { |comment| each_line(comment, &block) }
|
|
97
|
+
end
|
|
98
|
+
else
|
|
99
|
+
raw.each_line(&block)
|
|
100
|
+
end
|
|
101
|
+
end
|
|
87
102
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
103
|
+
def emit_empty_line_event(line, line_no)
|
|
104
|
+
part = {
|
|
105
|
+
:type => :empty_line,
|
|
106
|
+
:line => line,
|
|
107
|
+
:line_no => line_no,
|
|
108
|
+
}
|
|
109
|
+
yield(part)
|
|
95
110
|
end
|
|
96
|
-
else
|
|
97
|
-
raw.each_line(&block)
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
111
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
112
|
+
def emit_paragraph_event(paragraph, paragraph_start_line, line_no, &block)
|
|
113
|
+
paragraph_part = {
|
|
114
|
+
:type => :paragraph,
|
|
115
|
+
:line_no => paragraph_start_line,
|
|
116
|
+
}
|
|
117
|
+
match_data = /(\s*)\z/.match(paragraph)
|
|
118
|
+
if match_data
|
|
119
|
+
paragraph_part[:paragraph] = match_data.pre_match
|
|
120
|
+
yield(paragraph_part)
|
|
121
|
+
emit_empty_line_event(match_data[1], line_no, &block)
|
|
122
|
+
else
|
|
123
|
+
paragraph_part[:paragraph] = paragraph
|
|
124
|
+
yield(paragraph_part)
|
|
125
|
+
end
|
|
126
|
+
end
|
|
109
127
|
|
|
110
|
-
def emit_paragraph_event(paragraph, paragraph_start_line, line_no, &block)
|
|
111
|
-
paragraph_part = {
|
|
112
|
-
:type => :paragraph,
|
|
113
|
-
:line_no => paragraph_start_line,
|
|
114
|
-
}
|
|
115
|
-
match_data = /(\s*)\z/.match(paragraph)
|
|
116
|
-
if match_data
|
|
117
|
-
paragraph_part[:paragraph] = match_data.pre_match
|
|
118
|
-
yield(paragraph_part)
|
|
119
|
-
emit_empty_line_event(match_data[1], line_no, &block)
|
|
120
|
-
else
|
|
121
|
-
paragraph_part[:paragraph] = paragraph
|
|
122
|
-
yield(paragraph_part)
|
|
123
128
|
end
|
|
124
129
|
end
|
|
125
|
-
|
|
126
130
|
end
|
data/lib/rdoc/i18n.rb
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
module RDoc
|
|
3
|
+
##
|
|
4
|
+
# This module provides i18n related features.
|
|
4
5
|
|
|
5
|
-
module
|
|
6
|
+
module I18n
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
autoload :Locale, "#{__dir__}/i18n/locale"
|
|
9
|
+
require_relative 'i18n/text'
|
|
9
10
|
|
|
11
|
+
end
|
|
10
12
|
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'strscan'
|
|
4
|
+
|
|
5
|
+
module RDoc
|
|
6
|
+
class Markdown
|
|
7
|
+
|
|
8
|
+
##
|
|
9
|
+
# Byte-offset replacements for the position helpers of the kpeg-generated
|
|
10
|
+
# parser runtime.
|
|
11
|
+
#
|
|
12
|
+
# The generated runtime addresses +@string+ by character index, which makes
|
|
13
|
+
# every position lookup scan the string from its beginning when the input
|
|
14
|
+
# contains non-ASCII characters, so parse time becomes quadratic in the
|
|
15
|
+
# input size. Generated rule bodies only save and restore +pos+ without
|
|
16
|
+
# inspecting it, so replacing these helpers is enough to switch the whole
|
|
17
|
+
# parser to byte offsets.
|
|
18
|
+
#
|
|
19
|
+
# get_byte (the grammar's `.`) consumes one character and returns its
|
|
20
|
+
# codepoint, exactly like the character-index runtime, so positions always
|
|
21
|
+
# stay on character boundaries and the only observable difference is the
|
|
22
|
+
# position values themselves. The input must be validly encoded in an
|
|
23
|
+
# ASCII-compatible encoding.
|
|
24
|
+
#
|
|
25
|
+
# The error-reporting helpers of the generated runtime (+current_line+,
|
|
26
|
+
# +current_column+, ...) are left as-is and would misreport locations when
|
|
27
|
+
# given byte offsets. They are unreachable: markdown is deliberately
|
|
28
|
+
# designed to parse any input somehow rather than fail (the root rule
|
|
29
|
+
# `Doc = Block*` cannot fail), so a parse failure means a bug in the
|
|
30
|
+
# grammar itself, and nothing in RDoc invokes +raise_error+ or
|
|
31
|
+
# +show_error+. Make these helpers byte-aware before using them for
|
|
32
|
+
# anything.
|
|
33
|
+
|
|
34
|
+
module ByteRuntime
|
|
35
|
+
def set_string(string, pos)
|
|
36
|
+
@string = string
|
|
37
|
+
@string_size = string ? string.bytesize : 0
|
|
38
|
+
@pos = pos
|
|
39
|
+
@position_line_offsets = nil
|
|
40
|
+
@scanner = string ? StringScanner.new(string) : nil
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def scan(reg)
|
|
44
|
+
@scanner.pos = @pos
|
|
45
|
+
if @scanner.skip(reg)
|
|
46
|
+
@pos = @scanner.pos
|
|
47
|
+
true
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def match_string(str)
|
|
52
|
+
len = str.bytesize
|
|
53
|
+
if @string.byteslice(@pos, len) == str
|
|
54
|
+
@pos += len
|
|
55
|
+
str
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def get_byte
|
|
60
|
+
byte = @string.getbyte(@pos)
|
|
61
|
+
return nil unless byte
|
|
62
|
+
|
|
63
|
+
if byte < 0x80
|
|
64
|
+
@pos += 1
|
|
65
|
+
byte
|
|
66
|
+
else
|
|
67
|
+
@scanner.pos = @pos
|
|
68
|
+
# /./ interprets the character in the string's own encoding
|
|
69
|
+
char = @scanner.scan(/./m)
|
|
70
|
+
@pos = @scanner.pos
|
|
71
|
+
char.ord
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def get_text(start)
|
|
76
|
+
@string.byteslice(start, @pos - start)
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
data/lib/rdoc/markdown.kpeg
CHANGED
|
@@ -191,7 +191,9 @@
|
|
|
191
191
|
require_relative 'markup/to_joined_paragraph'
|
|
192
192
|
require_relative 'markdown/entities'
|
|
193
193
|
|
|
194
|
-
require_relative 'markdown/
|
|
194
|
+
require_relative 'markdown/byte_runtime'
|
|
195
|
+
|
|
196
|
+
prepend ByteRuntime
|
|
195
197
|
|
|
196
198
|
##
|
|
197
199
|
# Supported extensions
|
|
@@ -448,8 +450,12 @@
|
|
|
448
450
|
if notes? then
|
|
449
451
|
@footnotes = {}
|
|
450
452
|
|
|
451
|
-
|
|
452
|
-
|
|
453
|
+
# A note definition must contain "[^", so documents without one
|
|
454
|
+
# have nothing for the collecting pass to find
|
|
455
|
+
if markdown.include? '[^' then
|
|
456
|
+
setup_parser markdown, @debug
|
|
457
|
+
peg_parse 'Notes'
|
|
458
|
+
end
|
|
453
459
|
|
|
454
460
|
# using note_order on the first pass would be a bug
|
|
455
461
|
@note_order = []
|
|
@@ -563,7 +569,7 @@
|
|
|
563
569
|
|
|
564
570
|
root = Doc
|
|
565
571
|
|
|
566
|
-
Doc =
|
|
572
|
+
Doc = Block*:a { RDoc::Markup::Document.new(*a.compact) }
|
|
567
573
|
|
|
568
574
|
Block = @BlankLine*
|
|
569
575
|
( BlockQuote
|
|
@@ -867,7 +873,7 @@ HtmlBlockInTags = HtmlAnchor
|
|
|
867
873
|
| HtmlBlockScript
|
|
868
874
|
| HtmlBlockHead
|
|
869
875
|
|
|
870
|
-
HtmlBlock = < ( HtmlBlockInTags | HtmlComment | HtmlBlockSelfClosing | HtmlUnclosed) >
|
|
876
|
+
HtmlBlock = &"<" < ( HtmlBlockInTags | HtmlComment | HtmlBlockSelfClosing | HtmlUnclosed) >
|
|
871
877
|
@BlankLine+
|
|
872
878
|
{ if html? then
|
|
873
879
|
RDoc::Markup::Raw.new text
|
|
@@ -1172,12 +1178,10 @@ SpecialChar = /[~*_`&\[\]()<!#\\'"]/ | @ExtendedSpecialChar
|
|
|
1172
1178
|
NormalChar = !( @SpecialChar | @Spacechar | @Newline ) .
|
|
1173
1179
|
Digit = [0-9]
|
|
1174
1180
|
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
Newline = %literals.Newline
|
|
1180
|
-
Spacechar = %literals.Spacechar
|
|
1181
|
+
Alphanumeric = /\p{Word}/
|
|
1182
|
+
AlphanumericAscii = /[A-Za-z0-9]/
|
|
1183
|
+
Newline = /\n|\r\n?|\p{Zl}|\p{Zp}/
|
|
1184
|
+
Spacechar = /\t|\p{Zs}/
|
|
1181
1185
|
|
|
1182
1186
|
HexEntity = /&#x/i < /[0-9a-fA-F]+/ > ";"
|
|
1183
1187
|
{ rdoc_escape([text.to_i(16)].pack('U')) }
|
data/lib/rdoc/markdown.rb
CHANGED
|
@@ -576,7 +576,9 @@ class RDoc::Markdown
|
|
|
576
576
|
require_relative 'markup/to_joined_paragraph'
|
|
577
577
|
require_relative 'markdown/entities'
|
|
578
578
|
|
|
579
|
-
require_relative 'markdown/
|
|
579
|
+
require_relative 'markdown/byte_runtime'
|
|
580
|
+
|
|
581
|
+
prepend ByteRuntime
|
|
580
582
|
|
|
581
583
|
##
|
|
582
584
|
# Supported extensions
|
|
@@ -833,8 +835,12 @@ class RDoc::Markdown
|
|
|
833
835
|
if notes? then
|
|
834
836
|
@footnotes = {}
|
|
835
837
|
|
|
836
|
-
|
|
837
|
-
|
|
838
|
+
# A note definition must contain "[^", so documents without one
|
|
839
|
+
# have nothing for the collecting pass to find
|
|
840
|
+
if markdown.include? '[^' then
|
|
841
|
+
setup_parser markdown, @debug
|
|
842
|
+
peg_parse 'Notes'
|
|
843
|
+
end
|
|
838
844
|
|
|
839
845
|
# using note_order on the first pass would be a bug
|
|
840
846
|
@note_order = []
|
|
@@ -947,9 +953,7 @@ class RDoc::Markdown
|
|
|
947
953
|
|
|
948
954
|
|
|
949
955
|
# :stopdoc:
|
|
950
|
-
def setup_foreign_grammar
|
|
951
|
-
@_grammar_literals = RDoc::Markdown::Literals.new(nil)
|
|
952
|
-
end
|
|
956
|
+
def setup_foreign_grammar; end
|
|
953
957
|
|
|
954
958
|
# root = Doc
|
|
955
959
|
def _root
|
|
@@ -958,21 +962,11 @@ class RDoc::Markdown
|
|
|
958
962
|
return _tmp
|
|
959
963
|
end
|
|
960
964
|
|
|
961
|
-
# Doc =
|
|
965
|
+
# Doc = Block*:a { RDoc::Markup::Document.new(*a.compact) }
|
|
962
966
|
def _Doc
|
|
963
967
|
|
|
964
968
|
_save = self.pos
|
|
965
969
|
while true # sequence
|
|
966
|
-
_save1 = self.pos
|
|
967
|
-
_tmp = apply(:_BOM)
|
|
968
|
-
unless _tmp
|
|
969
|
-
_tmp = true
|
|
970
|
-
self.pos = _save1
|
|
971
|
-
end
|
|
972
|
-
unless _tmp
|
|
973
|
-
self.pos = _save
|
|
974
|
-
break
|
|
975
|
-
end
|
|
976
970
|
_ary = []
|
|
977
971
|
while true
|
|
978
972
|
_tmp = apply(:_Block)
|
|
@@ -8971,27 +8965,34 @@ class RDoc::Markdown
|
|
|
8971
8965
|
return _tmp
|
|
8972
8966
|
end
|
|
8973
8967
|
|
|
8974
|
-
# HtmlBlock = < (HtmlBlockInTags | HtmlComment | HtmlBlockSelfClosing | HtmlUnclosed) > @BlankLine+ { if html? then RDoc::Markup::Raw.new text end }
|
|
8968
|
+
# HtmlBlock = &"<" < (HtmlBlockInTags | HtmlComment | HtmlBlockSelfClosing | HtmlUnclosed) > @BlankLine+ { if html? then RDoc::Markup::Raw.new text end }
|
|
8975
8969
|
def _HtmlBlock
|
|
8976
8970
|
|
|
8977
8971
|
_save = self.pos
|
|
8978
8972
|
while true # sequence
|
|
8973
|
+
_save1 = self.pos
|
|
8974
|
+
_tmp = match_string("<")
|
|
8975
|
+
self.pos = _save1
|
|
8976
|
+
unless _tmp
|
|
8977
|
+
self.pos = _save
|
|
8978
|
+
break
|
|
8979
|
+
end
|
|
8979
8980
|
_text_start = self.pos
|
|
8980
8981
|
|
|
8981
|
-
|
|
8982
|
+
_save2 = self.pos
|
|
8982
8983
|
while true # choice
|
|
8983
8984
|
_tmp = apply(:_HtmlBlockInTags)
|
|
8984
8985
|
break if _tmp
|
|
8985
|
-
self.pos =
|
|
8986
|
+
self.pos = _save2
|
|
8986
8987
|
_tmp = apply(:_HtmlComment)
|
|
8987
8988
|
break if _tmp
|
|
8988
|
-
self.pos =
|
|
8989
|
+
self.pos = _save2
|
|
8989
8990
|
_tmp = apply(:_HtmlBlockSelfClosing)
|
|
8990
8991
|
break if _tmp
|
|
8991
|
-
self.pos =
|
|
8992
|
+
self.pos = _save2
|
|
8992
8993
|
_tmp = apply(:_HtmlUnclosed)
|
|
8993
8994
|
break if _tmp
|
|
8994
|
-
self.pos =
|
|
8995
|
+
self.pos = _save2
|
|
8995
8996
|
break
|
|
8996
8997
|
end # end choice
|
|
8997
8998
|
|
|
@@ -9002,7 +9003,7 @@ class RDoc::Markdown
|
|
|
9002
9003
|
self.pos = _save
|
|
9003
9004
|
break
|
|
9004
9005
|
end
|
|
9005
|
-
|
|
9006
|
+
_save3 = self.pos
|
|
9006
9007
|
_tmp = _BlankLine()
|
|
9007
9008
|
if _tmp
|
|
9008
9009
|
while true
|
|
@@ -9011,7 +9012,7 @@ class RDoc::Markdown
|
|
|
9011
9012
|
end
|
|
9012
9013
|
_tmp = true
|
|
9013
9014
|
else
|
|
9014
|
-
self.pos =
|
|
9015
|
+
self.pos = _save3
|
|
9015
9016
|
end
|
|
9016
9017
|
unless _tmp
|
|
9017
9018
|
self.pos = _save
|
|
@@ -14752,37 +14753,30 @@ class RDoc::Markdown
|
|
|
14752
14753
|
return _tmp
|
|
14753
14754
|
end
|
|
14754
14755
|
|
|
14755
|
-
# Alphanumeric =
|
|
14756
|
+
# Alphanumeric = /\p{Word}/
|
|
14756
14757
|
def _Alphanumeric
|
|
14757
|
-
_tmp =
|
|
14758
|
+
_tmp = scan(/\G(?-mix:\p{Word})/)
|
|
14758
14759
|
set_failed_rule :_Alphanumeric unless _tmp
|
|
14759
14760
|
return _tmp
|
|
14760
14761
|
end
|
|
14761
14762
|
|
|
14762
|
-
# AlphanumericAscii =
|
|
14763
|
+
# AlphanumericAscii = /[A-Za-z0-9]/
|
|
14763
14764
|
def _AlphanumericAscii
|
|
14764
|
-
_tmp =
|
|
14765
|
+
_tmp = scan(/\G(?-mix:[A-Za-z0-9])/)
|
|
14765
14766
|
set_failed_rule :_AlphanumericAscii unless _tmp
|
|
14766
14767
|
return _tmp
|
|
14767
14768
|
end
|
|
14768
14769
|
|
|
14769
|
-
#
|
|
14770
|
-
def _BOM
|
|
14771
|
-
_tmp = @_grammar_literals.external_invoke(self, :_BOM)
|
|
14772
|
-
set_failed_rule :_BOM unless _tmp
|
|
14773
|
-
return _tmp
|
|
14774
|
-
end
|
|
14775
|
-
|
|
14776
|
-
# Newline = %literals.Newline
|
|
14770
|
+
# Newline = /\n|\r\n?|\p{Zl}|\p{Zp}/
|
|
14777
14771
|
def _Newline
|
|
14778
|
-
_tmp =
|
|
14772
|
+
_tmp = scan(/\G(?-mix:\n|\r\n?|\p{Zl}|\p{Zp})/)
|
|
14779
14773
|
set_failed_rule :_Newline unless _tmp
|
|
14780
14774
|
return _tmp
|
|
14781
14775
|
end
|
|
14782
14776
|
|
|
14783
|
-
# Spacechar =
|
|
14777
|
+
# Spacechar = /\t|\p{Zs}/
|
|
14784
14778
|
def _Spacechar
|
|
14785
|
-
_tmp =
|
|
14779
|
+
_tmp = scan(/\G(?-mix:\t|\p{Zs})/)
|
|
14786
14780
|
set_failed_rule :_Spacechar unless _tmp
|
|
14787
14781
|
return _tmp
|
|
14788
14782
|
end
|
|
@@ -16613,7 +16607,7 @@ class RDoc::Markdown
|
|
|
16613
16607
|
|
|
16614
16608
|
Rules = {}
|
|
16615
16609
|
Rules[:_root] = rule_info("root", "Doc")
|
|
16616
|
-
Rules[:_Doc] = rule_info("Doc", "
|
|
16610
|
+
Rules[:_Doc] = rule_info("Doc", "Block*:a { RDoc::Markup::Document.new(*a.compact) }")
|
|
16617
16611
|
Rules[:_Block] = rule_info("Block", "@BlankLine* (BlockQuote | Verbatim | CodeFence | Table | Note | Reference | HorizontalRule | Heading | OrderedList | BulletList | DefinitionList | HtmlBlock | StyleBlock | Para | Plain)")
|
|
16618
16612
|
Rules[:_Para] = rule_info("Para", "@NonindentSpace Inlines:a @BlankLine+ { paragraph a }")
|
|
16619
16613
|
Rules[:_Plain] = rule_info("Plain", "Inlines:a { paragraph a }")
|
|
@@ -16749,7 +16743,7 @@ class RDoc::Markdown
|
|
|
16749
16743
|
Rules[:_HtmlBlockCloseHead] = rule_info("HtmlBlockCloseHead", "\"<\" Spnl \"/\" (\"head\" | \"HEAD\") Spnl \">\"")
|
|
16750
16744
|
Rules[:_HtmlBlockHead] = rule_info("HtmlBlockHead", "HtmlBlockOpenHead (!HtmlBlockCloseHead .)* HtmlBlockCloseHead")
|
|
16751
16745
|
Rules[:_HtmlBlockInTags] = rule_info("HtmlBlockInTags", "(HtmlAnchor | HtmlBlockAddress | HtmlBlockBlockquote | HtmlBlockCenter | HtmlBlockDir | HtmlBlockDiv | HtmlBlockDl | HtmlBlockFieldset | HtmlBlockForm | HtmlBlockH1 | HtmlBlockH2 | HtmlBlockH3 | HtmlBlockH4 | HtmlBlockH5 | HtmlBlockH6 | HtmlBlockMenu | HtmlBlockNoframes | HtmlBlockNoscript | HtmlBlockOl | HtmlBlockP | HtmlBlockPre | HtmlBlockTable | HtmlBlockUl | HtmlBlockDd | HtmlBlockDt | HtmlBlockFrameset | HtmlBlockLi | HtmlBlockTbody | HtmlBlockTd | HtmlBlockTfoot | HtmlBlockTh | HtmlBlockThead | HtmlBlockTr | HtmlBlockScript | HtmlBlockHead)")
|
|
16752
|
-
Rules[:_HtmlBlock] = rule_info("HtmlBlock", "< (HtmlBlockInTags | HtmlComment | HtmlBlockSelfClosing | HtmlUnclosed) > @BlankLine+ { if html? then RDoc::Markup::Raw.new text end }")
|
|
16746
|
+
Rules[:_HtmlBlock] = rule_info("HtmlBlock", "&\"<\" < (HtmlBlockInTags | HtmlComment | HtmlBlockSelfClosing | HtmlUnclosed) > @BlankLine+ { if html? then RDoc::Markup::Raw.new text end }")
|
|
16753
16747
|
Rules[:_HtmlUnclosed] = rule_info("HtmlUnclosed", "\"<\" Spnl HtmlUnclosedType Spnl HtmlAttribute* Spnl \">\"")
|
|
16754
16748
|
Rules[:_HtmlUnclosedType] = rule_info("HtmlUnclosedType", "(\"HR\" | \"hr\")")
|
|
16755
16749
|
Rules[:_HtmlBlockSelfClosing] = rule_info("HtmlBlockSelfClosing", "\"<\" Spnl HtmlBlockType Spnl HtmlAttribute* \"/\" Spnl \">\"")
|
|
@@ -16825,11 +16819,10 @@ class RDoc::Markdown
|
|
|
16825
16819
|
Rules[:_SpecialChar] = rule_info("SpecialChar", "(/[~*_`&\\[\\]()<!\#\\\\'\"]/ | @ExtendedSpecialChar)")
|
|
16826
16820
|
Rules[:_NormalChar] = rule_info("NormalChar", "!(@SpecialChar | @Spacechar | @Newline) .")
|
|
16827
16821
|
Rules[:_Digit] = rule_info("Digit", "[0-9]")
|
|
16828
|
-
Rules[:_Alphanumeric] = rule_info("Alphanumeric", "
|
|
16829
|
-
Rules[:_AlphanumericAscii] = rule_info("AlphanumericAscii", "
|
|
16830
|
-
Rules[:
|
|
16831
|
-
Rules[:
|
|
16832
|
-
Rules[:_Spacechar] = rule_info("Spacechar", "%literals.Spacechar")
|
|
16822
|
+
Rules[:_Alphanumeric] = rule_info("Alphanumeric", "/\\p{Word}/")
|
|
16823
|
+
Rules[:_AlphanumericAscii] = rule_info("AlphanumericAscii", "/[A-Za-z0-9]/")
|
|
16824
|
+
Rules[:_Newline] = rule_info("Newline", "/\\n|\\r\\n?|\\p{Zl}|\\p{Zp}/")
|
|
16825
|
+
Rules[:_Spacechar] = rule_info("Spacechar", "/\\t|\\p{Zs}/")
|
|
16833
16826
|
Rules[:_HexEntity] = rule_info("HexEntity", "/&\#x/i < /[0-9a-fA-F]+/ > \";\" { rdoc_escape([text.to_i(16)].pack('U')) }")
|
|
16834
16827
|
Rules[:_DecEntity] = rule_info("DecEntity", "\"&\#\" < /[0-9]+/ > \";\" { rdoc_escape([text.to_i].pack('U')) }")
|
|
16835
16828
|
Rules[:_CharEntity] = rule_info("CharEntity", "\"&\" < /[A-Za-z0-9]+/ > \";\" { if entity = HTML_ENTITIES[text] then rdoc_escape(entity.pack('U*')) else \"&\#{text};\" end }")
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
module RDoc
|
|
3
|
+
class Markup
|
|
4
|
+
##
|
|
5
|
+
# A quoted section which contains markup items.
|
|
4
6
|
|
|
5
|
-
class
|
|
7
|
+
class BlockQuote < Markup::Raw
|
|
6
8
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
+
##
|
|
10
|
+
# Calls #accept_block_quote on +visitor+
|
|
9
11
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
def accept(visitor)
|
|
13
|
+
visitor.accept_block_quote self
|
|
14
|
+
end
|
|
13
15
|
|
|
16
|
+
end
|
|
17
|
+
end
|
|
14
18
|
end
|