30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
# File 'lib/textile/parser.rb', line 30
def operand(ary, text)
sym, md = find_syms(text)
if sym.nil? || md.nil?
return ary << TextNode.new(text.slice!(0 .. text.length))
end
if md.pre_match.size > 0
ary << TextNode.new(text.slice!(0 ... md.pre_match.size))
end
case sym
when :raw_bracket
balanced = balance_markup(text, md.to_s, '[==', '==]').match(SYM_TO_REGEX[:raw_bracket])[1]
ary << RawTextNode.new(balanced)
when :bq_author
balanced = balance_markup(text, md.to_s, BQ_LEFT, '[/bq]').match(SYM_TO_REGEX[:bq_author])[2]
ary << HTMLNode.new(:blockquote, parse(balanced), title: $1)
when :bq
balanced = balance_markup(text, md.to_s, BQ_LEFT, '[/bq]').match(SYM_TO_REGEX[:bq])[1]
ary << HTMLNode.new(:blockquote, parse(balanced))
when :spoiler
balanced = balance_markup(text, md.to_s, '[spoiler]', '[/spoiler]').match(SYM_TO_REGEX[:spoiler])[1]
ary << HTMLNode.new(:span, parse(balanced), class: 'spoiler')
else
text.slice!(0 .. md.to_s.size)
end
case sym
when :raw
ary << RawTextNode.new(md[1])
when :link_title_bracket, :link_title
ary << HTMLNode.new(:a, parse(md[1]), title: md[2], href: md[3])
when :link_bracket, :link
ary << HTMLNode.new(:a, parse(md[1]), href: md[2])
when :image_link_title_bracket, :image_link_title
ary << HTMLNode.new(:a, ImageNode.new(md[1]), title: md[2], href: md[3])
when :image_link_bracket, :image_link
ary << HTMLNode.new(:a, ImageNode.new(md[1]), href: md[2])
when :image_title_bracket, :image_title
ary << HTMLNode.new(:span, ImageNode.new(md[1]), title: md[2])
when :image_bracket, :image
ary << ImageNode.new(md[1])
when :dblbold_bracket, :dblbold
ary << HTMLNode.new(:b, parse(md[1]))
when :bold_bracket, :bold
ary << HTMLNode.new(:strong, parse(md[1]))
when :dblitalic_bracket, :dblitalic
ary << HTMLNode.new(:i, parse(md[1]))
when :italic_bracket, :italic
ary << HTMLNode.new(:em, parse(md[1]))
when :code_bracket, :code
ary << HTMLNode.new(:code, parse(md[1]))
when :ins_bracket, :ins
ary << HTMLNode.new(:ins, parse(md[1]))
when :sup_bracket, :sup
ary << HTMLNode.new(:sup, parse(md[1]))
when :del_bracket, :del
ary << HTMLNode.new(:del, parse(md[1]))
when :sub_bracket, :sub
ary << HTMLNode.new(:sub, parse(md[1]))
when :cite_bracket, :cite
ary << HTMLNode.new(:cite, parse(md[1]))
end
end
|