lib/trac-wiki/parser.rb in trac-wiki-0.2.20 vs lib/trac-wiki/parser.rb in trac-wiki-0.2.21
- old
+ new
@@ -63,13 +63,12 @@
def no_link?; @no_link; end
attr_writer :math
def math?; @math; end
- # allow {{{! ... html ... }}}
+ # allow some <b> <form> <html>
# html will be sanitized
- # {{{!\n html here \n}}}\n
attr_writer :raw_html
def raw_html?; @raw_html; end
attr_writer :edit_heading
def edit_heading?; @edit_heading; end
@@ -118,11 +117,11 @@
'!ifeq' => proc { |env| env.expand_arg(0) == env.expand_arg(1) ? env.expand_arg(2) : env.expand_arg(3) },
'!ifdef' => proc { |env| env.at(env.expand_arg(0), nil, false).nil? ? env.expand_arg(2) : env.expand_arg(1) },
'!set' => proc { |env| env[env.expand_arg(0)] = env.expand_arg(1); '' },
'!yset' => proc { |env| env[env.expand_arg(0)] = YAML.load(env.arg(1)); '' },
- '!html' => proc { |env| "\n{{{!\n#{env.arg(0)}\n}}}\n" },
+# '!html' => proc { |env| "\n{{{!\n#{env.arg(0)}\n}}}\n" },
'!sub' => proc { |env| pat = env.expand_arg(1)
pat = Regexp.new(pat[1..-2]) if pat =~ /\A\/.*\/\Z/
env.expand_arg(0).gsub(pat, env.expand_arg(2))
},
'!for' => proc { |env| i_name = env.arg(0)
@@ -459,12 +458,13 @@
@tree.tag_end(:a)
end
def parse_inline_tag(str)
case
- when raw_html? && str =~ /\A\{\{\{!(.*?\}*)\}\}\}/ # inline {{{! raw html }}}
- do_raw_html($1, true)
+ when raw_html? && str =~ /\A<(\/)?(\w+)(?:([^>]*?))?(\/\s*)?>/ # single inline <html> tag
+ eot, tag, args, closed = $1, $2, $3, $4
+ do_raw_tag(eot, tag, args, closed, $'.size)
when str =~ /\A\{\{\{(.*?\}*)\}\}\}/ # inline {{{ }}} pre (tt)
@tree.tag(:tt, $1)
when str =~ MACRO_BEG_REX # macro {{
str, lines = parse_macro($1, $')
#print "MACRO.inline(#{$1}), next:#{str}"
@@ -656,15 +656,38 @@
end_paragraph
nowikiblock = make_nowikiblock(text)
@tree.tag(:pre, nowikiblock)
end
- def do_raw_html(text, inline=false)
- end_paragraph if !inline
- @tree.add_raw(text)
+ def do_raw_tag(eot, tag, attrs, closed, tail_size)
+ if !eot
+ end_paragraph if tag == 'p' || tag == 'div'
+ #print "open tag #{tag},'#{attrs}'\n"
+ attrs_h = _parse_attrs_to_hash(attrs)
+ @tree.tag_beg(tag, attrs_h)
+ @tree.tag_end(tag) if closed
+ else
+ #print "close tag #{tag}\n"
+ @tree.tag_end(tag)
+ if tag == 'p' || tag == 'div'
+ end_paragraph
+ start_paragraph if tail_size > 0
+ end
+ end
end
+ def _parse_attrs_to_hash(str)
+ ret = {}
+ while str =~ /\A\s*(\w+)\s*=\s*'([^>']*)'/ ||
+ str =~ /\A\s*(\w+)\s*=\s*"([^>"]*)"/ ||
+ str =~ /\A\s*(\w+)\s*=\s*(\S*)/
+ ret[$1] = $2
+ str = $'
+ end
+ ret
+ end
+
def do_hr
end_paragraph
@tree.tag(:hr)
end
@@ -732,12 +755,9 @@
when math? && str =~ /\A\$\$(.*?)\$\$/m
do_math($1)
# merge
when merge? && str =~ /\A(<{7}|={7}|>{7}|\|{7}) *(\S*).*$(\r?\n)?/
do_merge($1, $2)
- # raw_html {{{! ... }}}
- when raw_html? && str =~ /\A\{\{\{!\r?\n(.*?)\r?\n\}\}\}/m
- do_raw_html($1)
# pre {{{ ... }}}
when str =~ /\A\{\{\{\r?\n(.*?)\r?\n\}\}\}/m
do_pre($1)
# horizontal rule
when str =~ /\A\s*-{4,}\s*$/