"
+
+ when :inline_spoiler
+ output << ""
+
+ when :block_spoiler
+ output << ""
+
+ when :block_quote
+ output << ""
+
+ else
+ raise SyntaxError.new("Invalid element #{obj}")
+ end
+ end
+ end
+
+ def self.parse(s)
+ stack = []
+ dstack = []
+ output = StringIO.new
+ data = s + "\0"
+ eof = data.size
+ flags = {}
+
+
+# line 560 "d_text_ragel.rb"
+begin
+ p ||= 0
+ pe ||= data.length
+ cs = dtext_start
+ top = 0
+ ts = nil
+ te = nil
+ act = 0
+end
+
+# line 417 "d_text_ragel.rl"
+
+# line 573 "d_text_ragel.rb"
+begin
+ _klen, _trans, _keys, _acts, _nacts = nil
+ _goto_level = 0
+ _resume = 10
+ _eof_trans = 15
+ _again = 20
+ _test_eof = 30
+ _out = 40
+ while true
+ _trigger_goto = false
+ if _goto_level <= 0
+ if p == pe
+ _goto_level = _test_eof
+ next
+ end
+ end
+ if _goto_level <= _resume
+ _acts = _dtext_from_state_actions[cs]
+ _nacts = _dtext_actions[_acts]
+ _acts += 1
+ while _nacts > 0
+ _nacts -= 1
+ _acts += 1
+ case _dtext_actions[_acts - 1]
+ when 5 then
+# line 1 "NONE"
+ begin
+ts = p
+ end
+# line 603 "d_text_ragel.rb"
+ end # from state action switch
+ end
+ if _trigger_goto
+ next
+ end
+ _keys = _dtext_key_offsets[cs]
+ _trans = _dtext_index_offsets[cs]
+ _klen = _dtext_single_lengths[cs]
+ _break_match = false
+
+ begin
+ if _klen > 0
+ _lower = _keys
+ _upper = _keys + _klen - 1
+
+ loop do
+ break if _upper < _lower
+ _mid = _lower + ( (_upper - _lower) >> 1 )
+
+ if data[p].ord < _dtext_trans_keys[_mid]
+ _upper = _mid - 1
+ elsif data[p].ord > _dtext_trans_keys[_mid]
+ _lower = _mid + 1
+ else
+ _trans += (_mid - _keys)
+ _break_match = true
+ break
+ end
+ end # loop
+ break if _break_match
+ _keys += _klen
+ _trans += _klen
+ end
+ _klen = _dtext_range_lengths[cs]
+ if _klen > 0
+ _lower = _keys
+ _upper = _keys + (_klen << 1) - 2
+ loop do
+ break if _upper < _lower
+ _mid = _lower + (((_upper-_lower) >> 1) & ~1)
+ if data[p].ord < _dtext_trans_keys[_mid]
+ _upper = _mid - 2
+ elsif data[p].ord > _dtext_trans_keys[_mid+1]
+ _lower = _mid + 2
+ else
+ _trans += ((_mid - _keys) >> 1)
+ _break_match = true
+ break
+ end
+ end # loop
+ break if _break_match
+ _trans += _klen
+ end
+ end while false
+ end
+ if _goto_level <= _eof_trans
+ cs = _dtext_trans_targs[_trans]
+ if _dtext_trans_actions[_trans] != 0
+ _acts = _dtext_trans_actions[_trans]
+ _nacts = _dtext_actions[_acts]
+ _acts += 1
+ while _nacts > 0
+ _nacts -= 1
+ _acts += 1
+ case _dtext_actions[_acts - 1]
+when 0 then
+# line 14 "d_text_ragel.rl"
+ begin
+
+ a1 = p
+ end
+when 1 then
+# line 18 "d_text_ragel.rl"
+ begin
+
+ a2 = p
+ end
+when 2 then
+# line 22 "d_text_ragel.rl"
+ begin
+
+ b1 = p
+ end
+when 3 then
+# line 26 "d_text_ragel.rl"
+ begin
+
+ b2 = p
+ end
+when 6 then
+# line 1 "NONE"
+ begin
+te = p+1
+ end
+when 7 then
+# line 149 "d_text_ragel.rl"
+ begin
+act = 18; end
+when 8 then
+# line 154 "d_text_ragel.rl"
+ begin
+act = 19; end
+when 9 then
+# line 261 "d_text_ragel.rl"
+ begin
+act = 37; end
+when 10 then
+# line 266 "d_text_ragel.rl"
+ begin
+act = 38; end
+when 11 then
+# line 115 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ tags = data[a1..a2]
+ output << '' + h(tags) + ''
+ end
+ end
+when 12 then
+# line 120 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ name = data[a1..a2]
+ title = name.tr(" ", "_").downcase
+ output << '' + h(name) + ''
+ end
+ end
+when 13 then
+# line 126 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ name = data[b1..b2]
+ title = data[a1..a2].tr(" ", "_").downcase
+ output << '' + h(name) + ''
+ end
+ end
+when 14 then
+# line 138 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ text = data[a1..a2]
+ url = data[b1..b2]
+ output << '' + text + ''
+ end
+ end
+when 15 then
+# line 159 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ dstack << :b
+ output << ''
+ end
+ end
+when 16 then
+# line 164 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ raise SyntaxError.new("invalid [/b] tag") unless dstack[-1] == :b
+ dstack.pop
+ output << ""
+ end
+ end
+when 17 then
+# line 170 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ dstack << :i
+ output << ''
+ end
+ end
+when 18 then
+# line 175 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ raise ParseError.new("invalid [/i] tag") unless dstack[-1] == :i
+ dstack.pop
+ output << ""
+ end
+ end
+when 19 then
+# line 181 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ dstack << :s
+ output << ""
+ end
+ end
+when 20 then
+# line 186 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ raise ParseError.new("invalid [/s] tag") unless dstack[-1] == :s
+ dstack.pop
+ output << ""
+ end
+ end
+when 21 then
+# line 192 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ dstack << :u
+ output << ""
+ end
+ end
+when 22 then
+# line 197 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ raise ParseError.new("invalid [/u] tag") unless dstack[-1] == :u
+ dstack.pop
+ output << ""
+ end
+ end
+when 23 then
+# line 203 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ dstack << :tn
+ output << '
'
+ end
+ end
+when 24 then
+# line 208 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ raise ParseError.new("invalid [/tn] tag") unless dstack[-1] == :tn
+ dstack.pop
+ output << "
"
+ end
+ end
+when 25 then
+# line 214 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ raise ParseError.new("invalid [/quote] tag") unless dstack[-1] == :quote
+ dstack.pop
+ output << ""
+ begin
+ top -= 1
+ cs = stack[top]
+ _trigger_goto = true
+ _goto_level = _again
+ break
+ end
+
+ end
+ end
+when 26 then
+# line 221 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ dstack << :inline_spoiler
+ output << ''
+ end
+ end
+when 27 then
+# line 226 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ if dstack[-1] == :inline_spoiler
+ output << ""
+ dstack.pop
+ elsif dstack[-1] == :block_spoiler
+ output << ""
+ dstack.pop
+ begin
+ top -= 1
+ cs = stack[top]
+ _trigger_goto = true
+ _goto_level = _again
+ break
+ end
+
+ else
+ raise SyntaxError.new("invalid [/spoiler] tag")
+ end
+ end
+ end
+when 28 then
+# line 239 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ if dstack[-1] == :expand
+ output << ''
+ dstack.pop
+ begin
+ top -= 1
+ cs = stack[top]
+ _trigger_goto = true
+ _goto_level = _again
+ break
+ end
+
+ else
+ raise SyntaxError.new("invalid [/expand] tag")
+ end
+ end
+ end
+when 29 then
+# line 249 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ output << "&"
+ end
+ end
+when 30 then
+# line 253 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ output << "<"
+ end
+ end
+when 31 then
+# line 257 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ output << ">"
+ end
+ end
+when 32 then
+# line 270 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ p = p - 1;
+ begin
+ top -= 1
+ cs = stack[top]
+ _trigger_goto = true
+ _goto_level = _again
+ break
+ end
+
+ end
+ end
+when 33 then
+# line 275 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ output << data[p]
+ end
+ end
+when 34 then
+# line 58 "d_text_ragel.rl"
+ begin
+te = p
+p = p - 1; begin
+ id = data[a1..a2]
+ output << 'post #' + id + ''
+ end
+ end
+when 35 then
+# line 63 "d_text_ragel.rl"
+ begin
+te = p
+p = p - 1; begin
+ id = data[a1..a2]
+ output << 'forum #' + id + ''
+ end
+ end
+when 36 then
+# line 68 "d_text_ragel.rl"
+ begin
+te = p
+p = p - 1; begin
+ id = data[a1..a2]
+ output << 'topic #' + id + ''
+ end
+ end
+when 37 then
+# line 73 "d_text_ragel.rl"
+ begin
+te = p
+p = p - 1; begin
+ id = data[a1..a2]
+ page = data[b1..b2]
+ output << 'topic #' + id + '/p' + page + ''
+ end
+ end
+when 38 then
+# line 79 "d_text_ragel.rl"
+ begin
+te = p
+p = p - 1; begin
+ id = data[a1..a2]
+ output << 'comment #' + id + ''
+ end
+ end
+when 39 then
+# line 84 "d_text_ragel.rl"
+ begin
+te = p
+p = p - 1; begin
+ id = data[a1..a2]
+ output << 'pool #' + id + ''
+ end
+ end
+when 40 then
+# line 89 "d_text_ragel.rl"
+ begin
+te = p
+p = p - 1; begin
+ id = data[a1..a2]
+ output << 'user #' + id + ''
+ end
+ end
+when 41 then
+# line 94 "d_text_ragel.rl"
+ begin
+te = p
+p = p - 1; begin
+ id = data[a1..a2]
+ output << 'artist #' + id + ''
+ end
+ end
+when 42 then
+# line 99 "d_text_ragel.rl"
+ begin
+te = p
+p = p - 1; begin
+ id = data[a1..a2]
+ output << 'issue #' + id + ''
+ end
+ end
+when 43 then
+# line 104 "d_text_ragel.rl"
+ begin
+te = p
+p = p - 1; begin
+ id = data[a1..a2]
+ output << 'pixiv #' + id + ''
+ end
+ end
+when 44 then
+# line 109 "d_text_ragel.rl"
+ begin
+te = p
+p = p - 1; begin
+ id = data[a1..a2]
+ page = data[b1..b2]
+ output << 'pixiv #' + id + '/p' + page + ''
+ end
+ end
+when 45 then
+# line 132 "d_text_ragel.rl"
+ begin
+te = p
+p = p - 1; begin
+ text = data[a1..a2]
+ url = data[b1..b2]
+ output << '' + text + ''
+ end
+ end
+when 46 then
+# line 144 "d_text_ragel.rl"
+ begin
+te = p
+p = p - 1; begin
+ url = data[ts...te]
+ output << '' + url + ''
+ end
+ end
+when 47 then
+# line 266 "d_text_ragel.rl"
+ begin
+te = p
+p = p - 1; begin
+ output << " "
+ end
+ end
+when 48 then
+# line 275 "d_text_ragel.rl"
+ begin
+te = p
+p = p - 1; begin
+ output << data[p]
+ end
+ end
+when 49 then
+# line 68 "d_text_ragel.rl"
+ begin
+ begin p = ((te))-1; end
+ begin
+ id = data[a1..a2]
+ output << 'topic #' + id + ''
+ end
+ end
+when 50 then
+# line 104 "d_text_ragel.rl"
+ begin
+ begin p = ((te))-1; end
+ begin
+ id = data[a1..a2]
+ output << 'pixiv #' + id + ''
+ end
+ end
+when 51 then
+# line 275 "d_text_ragel.rl"
+ begin
+ begin p = ((te))-1; end
+ begin
+ output << data[p]
+ end
+ end
+when 52 then
+# line 1 "NONE"
+ begin
+ case act
+ when 18 then
+ begin begin p = ((te))-1; end
+
+ name = data[ts+1...te-1]
+ output << '@' + h(name) + '' + data[p]
+ end
+ when 19 then
+ begin begin p = ((te))-1; end
+
+ name = data[ts+1...te]
+ output << '@' + h(name) + ''
+ end
+ when 37 then
+ begin begin p = ((te))-1; end
+
+ output << close_stack(output, dstack)
+ begin
+ top -= 1
+ cs = stack[top]
+ _trigger_goto = true
+ _goto_level = _again
+ break
+ end
+
+ end
+ when 38 then
+ begin begin p = ((te))-1; end
+
+ output << " "
+ end
+end
+ end
+when 53 then
+# line 291 "d_text_ragel.rl"
+ begin
+act = 42; end
+when 54 then
+# line 300 "d_text_ragel.rl"
+ begin
+act = 44; end
+when 55 then
+# line 281 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ if dstack[-1] == :block_code
+ dstack.pop
+ output << ""
+ else
+ raise SyntaxError.new("invalid [/code] tag")
+ end
+ begin
+ top -= 1
+ cs = stack[top]
+ _trigger_goto = true
+ _goto_level = _again
+ break
+ end
+
+ end
+ end
+when 56 then
+# line 296 "d_text_ragel.rl"
+ begin
+te = p
+p = p - 1; begin
+ output << "["
+ end
+ end
+when 57 then
+# line 296 "d_text_ragel.rl"
+ begin
+ begin p = ((te))-1; end
+ begin
+ output << "["
+ end
+ end
+when 58 then
+# line 1 "NONE"
+ begin
+ case act
+ when 42 then
+ begin begin p = ((te))-1; end
+
+ p = p - 1;
+ begin
+ top -= 1
+ cs = stack[top]
+ _trigger_goto = true
+ _goto_level = _again
+ break
+ end
+
+ end
+ when 44 then
+ begin begin p = ((te))-1; end
+
+ output << data[ts...te]
+ end
+end
+ end
+when 59 then
+# line 310 "d_text_ragel.rl"
+ begin
+act = 45; end
+when 60 then
+# line 363 "d_text_ragel.rl"
+ begin
+act = 53; end
+when 61 then
+# line 321 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ output << "
"
+ dstack << :quote
+ begin
+ stack[top] = cs
+ top+= 1
+ cs = 167
+ _trigger_goto = true
+ _goto_level = _again
+ break
+ end
+
+ end
+ end
+when 62 then
+# line 327 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ output << '
'
+ dstack << :block_spoiler
+ begin
+ stack[top] = cs
+ top+= 1
+ cs = 167
+ _trigger_goto = true
+ _goto_level = _again
+ break
+ end
+
+ end
+ end
+when 63 then
+# line 333 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ output << '
'
+ dstack << :block_code
+ begin
+ stack[top] = cs
+ top+= 1
+ cs = 196
+ _trigger_goto = true
+ _goto_level = _again
+ break
+ end
+
+ end
+ end
+when 64 then
+# line 339 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ output << '
'
+ output << '
'
+ output << '
'
+ dstack << :expand
+ begin
+ stack[top] = cs
+ top+= 1
+ cs = 167
+ _trigger_goto = true
+ _goto_level = _again
+ break
+ end
+
+ end
+ end
+when 65 then
+# line 347 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ msg = data[a1..a2]
+ output <<'
'
+ output << '' + h(msg) + ''
+ output << '
'
+ output << '
'
+ dstack << :expand
+ begin
+ stack[top] = cs
+ top+= 1
+ cs = 167
+ _trigger_goto = true
+ _goto_level = _again
+ break
+ end
+
+ end
+ end
+when 66 then
+# line 357 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ close_stack(output, dstack)
+ end
+ end
+when 67 then
+# line 361 "d_text_ragel.rl"
+ begin
+te = p+1
+ end
+when 68 then
+# line 363 "d_text_ragel.rl"
+ begin
+te = p+1
+ begin
+ p = p - 1;
+
+ if dstack.empty?
+ output << "
"
+ dstack << :p
+ end
+
+ begin
+ stack[top] = cs
+ top+= 1
+ cs = 167
+ _trigger_goto = true
+ _goto_level = _again
+ break
+ end
+
+ end
+ end
+when 69 then
+# line 310 "d_text_ragel.rl"
+ begin
+te = p
+p = p - 1; begin
+ if flags[:inline]
+ header = "6"
+ else
+ header = data[a1..a2]
+ end
+
+ text = data[b1..b2]
+ output << '' + h(text) + ''
+ end
+ end
+when 70 then
+# line 361 "d_text_ragel.rl"
+ begin
+te = p
+p = p - 1; end
+when 71 then
+# line 363 "d_text_ragel.rl"
+ begin
+te = p
+p = p - 1; begin
+ p = p - 1;
+
+ if dstack.empty?
+ output << "
"
+ dstack << :p
+ end
+
+ begin
+ stack[top] = cs
+ top+= 1
+ cs = 167
+ _trigger_goto = true
+ _goto_level = _again
+ break
+ end
+
+ end
+ end
+when 72 then
+# line 363 "d_text_ragel.rl"
+ begin
+ begin p = ((te))-1; end
+ begin
+ p = p - 1;
+
+ if dstack.empty?
+ output << "
"
+ dstack << :p
+ end
+
+ begin
+ stack[top] = cs
+ top+= 1
+ cs = 167
+ _trigger_goto = true
+ _goto_level = _again
+ break
+ end
+
+ end
+ end
+when 73 then
+# line 1 "NONE"
+ begin
+ case act
+ when 45 then
+ begin begin p = ((te))-1; end
+
+ if flags[:inline]
+ header = "6"
+ else
+ header = data[a1..a2]
+ end
+
+ text = data[b1..b2]
+ output << '' + h(text) + ''
+ end
+ when 53 then
+ begin begin p = ((te))-1; end
+
+ p = p - 1;
+
+ if dstack.empty?
+ output << "