<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>docs/changelog-0.3.md</filename>
    </added>
    <added>
      <filename>docs/faq.md</filename>
    </added>
    <added>
      <filename>docs/markdown_extra2.md</filename>
    </added>
    <added>
      <filename>lib/maruku/attributes.rb</filename>
    </added>
    <added>
      <filename>miscs/bug.rb</filename>
    </added>
    <added>
      <filename>miscs/test.rb</filename>
    </added>
    <added>
      <filename>tests/unittest/attributes/attributes.md</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -35,6 +35,7 @@ require 'maruku/parse_block'
 
 # Code for parsing Markdown span-level elements
 require 'maruku/parse_span_better'
+require 'maruku/attributes'
 
 require 'maruku/structures_iterators'
 </diff>
      <filename>lib/maruku.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,15 +1,33 @@
+#   Copyright (C) 2006  Andrea Censi  &lt;andrea (at) rubyforge.org&gt;
+#
+# This file is part of Maruku.
+# 
+#   Maruku is free software; you can redistribute it and/or modify
+#   it under the terms of the GNU General Public License as published by
+#   the Free Software Foundation; either version 2 of the License, or
+#   (at your option) any later version.
+# 
+#   Maruku is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+# 
+#   You should have received a copy of the GNU General Public License
+#   along with Maruku; if not, write to the Free Software
+#   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
 
-# Any method that detects formatting error calls the
-# error() method. 
-# if @meta[:on_error] == 
-#
-# - :warning   write on the standard err (or @error_stream if defined), 
-#              then do your best.
-# - :ignore    be shy and try to continue
-# - :raise     raises a MarukuException
-#
-# default is :raise
+
+#m  Any method that detects formatting error calls the
+#m  maruku_error() method. 
+#m  if @meta[:on_error] == 
+#m
+#m  - :warning   write on the standard err (or @error_stream if defined), 
+#m              then do your best.
+#m  - :ignore    be shy and try to continue
+#m  - :raise     raises a MarukuException
+#m
+#m  default is :raise
 
 class MarukuException &lt; RuntimeError
 	
@@ -55,12 +73,8 @@ module MarukuErrors
 
 	def describe_error(s,src,con)
 		t = s
-		if src
-			t += &quot;\n#{src.describe}\n&quot;
-		end
-		if con
-			t += &quot;\n#{con.describe}\n&quot;
-		end
+		src &amp;&amp; (t += &quot;\n#{src.describe}\n&quot;)
+		con &amp;&amp; (t += &quot;\n#{con.describe}\n&quot;)
 		t
 	end
 	</diff>
      <filename>lib/maruku/errors_management.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,21 @@
+#   Copyright (C) 2006  Andrea Censi  &lt;andrea (at) rubyforge.org&gt;
+#
+# This file is part of Maruku.
+# 
+#   Maruku is free software; you can redistribute it and/or modify
+#   it under the terms of the GNU General Public License as published by
+#   the Free Software Foundation; either version 2 of the License, or
+#   (at your option) any later version.
+# 
+#   Maruku is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+# 
+#   You should have received a copy of the GNU General Public License
+#   along with Maruku; if not, write to the Free Software
+#   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
 
 
 # A series of helper functions for creating elements
@@ -96,6 +114,12 @@ module Helpers
 		meta[:title] = title if title
 		md_el(:ref_definition, [], meta)
 	end
+	
+	# inline attribute list
+	def md_ial(al)
+		al = Maruku::AttributeList.new(al) if al.kind_of? Array
+		md_el(:ial, [], {:al=&gt;al})
+	end
 end
 
 class MDElement	
@@ -147,6 +171,8 @@ class MDElement
 					@meta[:url].inspect,
 					@meta[:title] ? &quot;,&quot;+@meta[:title].inspect : &quot;&quot;
 				]
+		when :ial
+			&quot;md_ial(%s)&quot; % @meta[:al].inspect
 		else
 			nil
 		end</diff>
      <filename>lib/maruku/helpers.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,21 @@
+#   Copyright (C) 2006  Andrea Censi  &lt;andrea (at) rubyforge.org&gt;
+#
+# This file is part of Maruku.
+# 
+#   Maruku is free software; you can redistribute it and/or modify
+#   it under the terms of the GNU General Public License as published by
+#   the Free Software Foundation; either version 2 of the License, or
+#   (at your option) any later version.
+# 
+#   Maruku is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+# 
+#   You should have received a copy of the GNU General Public License
+#   along with Maruku; if not, write to the Free Software
+#   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
 
 class Maruku
 </diff>
      <filename>lib/maruku/html_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -42,8 +42,6 @@ class Maruku
 						output &lt;&lt; read_table
 					elsif [:header1,:header2].include? next_line_node_type
 						output &lt;&lt; read_header12
-					
-					
 					elsif eventually_comes_a_def_list
 					 	definition = read_definition
 						if output.last &amp;&amp; output.last.node_type == :definition_list
@@ -51,7 +49,6 @@ class Maruku
 						else
 							output &lt;&lt; create_md_element(:definition_list, [definition])
 						end
-					
 					else # Start of a paragraph
 						output &lt;&lt; read_paragraph
 					end
@@ -99,6 +96,7 @@ class Maruku
 		@stack.pop
 		
 		# See for each list if we can omit the paragraphs and use li_span
+		# TODO: do this after
 		output.each do |c| 
 			# Remove paragraphs that we can get rid of
 			if [:ul,:ol].include? c.node_type 
@@ -142,10 +140,11 @@ class Maruku
 	def read_header12
 		e = create_md_element(:header)
 		line = shift_line.strip
-		if line =~ HeaderWithId 
+		if (not new_meda_data?) and markdown_extra? and line =~ HeaderWithId 
 			line = $1.strip
 			e.meta[:id] = $2
 		end
+		
 		e.children = parse_lines_as_span [ line ]
 
 		e.meta[:level] = cur_line_node_type == :header2 ? 2 : 1</diff>
      <filename>lib/maruku/parse_block.rb</filename>
    </modified>
    <modified>
      <diff>@@ -17,6 +17,17 @@
 #   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
 
+
+
+#  NOTE: this is the old span-level regexp-based parser.
+#
+#  The new parser is a real parser and is defined with functions in parse_span_better.rb
+#  The new parser is faster, handles syntax errors, but it's absolutely not readable.
+#
+#  Also, regexp parsers simply CANNOT handle inline HTML properly.
+
+
+
 # There are two black-magic methods `match_couple_of` and `map_match`,
 # defined at the end of the file, that make the function 
 # `parse_lines_as_span` so elegant.</diff>
      <filename>lib/maruku/parse_span.rb</filename>
    </modified>
    <modified>
      <diff>@@ -36,8 +36,9 @@ class Maruku
 		while true
 			c = src.cur_char
 
+			# This is only an optimization which cuts 50% of the time used.
+			# (but you can't use a-zA-z in exit_on_chars)
 			if c &amp;&amp; ((c&gt;=?a &amp;&amp; c&lt;=?z) || ((c&gt;=?A &amp;&amp; c&lt;=?Z)))
-#				src.read_text_chars con.cur_string
 				con.cur_string &lt;&lt; src.shift_char
 				next
 			end
@@ -85,10 +86,10 @@ class Maruku
 						elsif src.next_matches(/&lt;\w+:/)
 							read_url_el(src, con)
 						elsif src.next_matches(/&lt;\w/)
-#							puts &quot;This is HTML: #{src.cur_chars(20)}&quot;
+							#puts &quot;This is HTML: #{src.cur_chars(20)}&quot;
 							read_inline_html(src, con)
 						else 
-#							puts &quot;This is NOT HTML: #{src.cur_chars(20)}&quot;
+							#puts &quot;This is NOT HTML: #{src.cur_chars(20)}&quot;
 							con.push_char src.shift_char
 						end
 				end
@@ -152,6 +153,14 @@ class Maruku
 						con.push_char src.shift_char
 					end
 				end
+			when ?{ # inline attribute list
+				if new_meta_data?
+					src.ignore_char # opening {
+				 	con.push_element md_ial(read_attribute_list(src, con, [?}]))
+					src.ignore_char # closing }
+				else # normal text
+					con.push_char src.shift_char
+				end
 			when nil
 				error (&quot;Unclosed span (waiting for %s&quot;+
 				 &quot;#{exit_on_strings.inspect})&quot;) % [
@@ -191,6 +200,9 @@ class Maruku
 		end
 		
 		url = read_simple(src, [], break_on)
+		if not url # empty url
+			url = &quot;&quot;
+		end
 		
 		if url[0] == ?&lt; &amp;&amp; url[-1] == ?&gt;
 			url = url[1, url.size-2]
@@ -203,9 +215,19 @@ class Maruku
 		url
 	end
 	
+	
+	def read_quoted_or_unquoted(src, con, escaped, exit_on_chars)
+		case src.cur_char
+		when ?', ?&quot;
+			read_quoted(src, con)
+		else
+			read_simple(src, escaped, exit_on_chars)
+		end
+	end
+	
 	# Tries to read a quoted value. If stream does not
 	# start with ' or &quot;, returns nil.
-	def read_quoted(src,con)
+	def read_quoted(src, con)
 		case src.cur_char
 			when ?', ?&quot;
 				quote_char = src.shift_char # opening quote
@@ -219,7 +241,9 @@ class Maruku
 	end
 	
 	# Reads a simple string (no formatting) until one of break_on_chars, 
-	# while escaping the escaped
+	# while escaping the escaped.
+	# If the string is empty, it returns nil.
+	# Raises on error.
 	def read_simple(src, escaped, exit_on_chars) 
 		text = &quot;&quot;
 		while true
@@ -249,7 +273,7 @@ class Maruku
 			end
 		end
 #		puts &quot;Read simple #{text.inspect}&quot;
-		text
+		text.empty? ? nil : text
 	end
 	
 	def read_em(src, delim)</diff>
      <filename>lib/maruku/parse_span_better.rb</filename>
    </modified>
    <modified>
      <diff>@@ -211,7 +211,10 @@ class Maruku
 		return :hrule    if l =~ /^(\s*_\s*){3,1000}$/ # or underscores	
 		return :quote    if l =~ /^&gt;/
 		return :metadata if l =~ /^@/
-		return :m2ref    if l =~ /^\s{0,3}\{[\w\d\s]+\}:/
+		if new_meta_data?
+			return :ald   if l =~ /^\s{0,3}\{[\w\d\s]+\}:/
+			return :ial   if l =~ /^\s{0,3}\{.*\}/
+		end
 		return :text
 	end
 	</diff>
      <filename>lib/maruku/string_utils.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,318 +1,315 @@
 require 'maruku'
-require 'maruku/helpers'
 
-require 'maruku/parse_span_better'
+module MarukuTests
+	# 5 accented letters in italian, encoded as UTF-8
+	AccIta8 = &quot;\303\240\303\250\303\254\303\262\303\271&quot;
 
-class Maruku
-
-
-	class TestNewParser
-		include Helpers
-		include MarukuErrors
-			
-		# 5 accented letters in italian, encoded as UTF-8
-		AccIta8 = &quot;\303\240\303\250\303\254\303\262\303\271&quot;
-
-		# Same letters, written in ISO-8859-1 (one byte per letter)
-		AccIta1 = &quot;\340\350\354\362\371&quot;
+	# Same letters, written in ISO-8859-1 (one byte per letter)
+	AccIta1 = &quot;\340\350\354\362\371&quot;
+	
+	# The word MA-RU-KU, written in katakana using UTF-8
+	Maruku8 = &quot;\343\203\236\343\203\253\343\202\257&quot;
+	
+	def test_span_parser(verbose, break_on_first_error, quiet)
+	good_cases = [
 		
-		# The word MA-RU-KU, written in katakana using UTF-8
-		Maruku8 = &quot;\343\203\236\343\203\253\343\202\257&quot;
+		[&quot;&quot;,       [],         'Empty string gives empty list'],
+		[&quot;a&quot;,      [&quot;a&quot;],      'Easy char'],
+		[&quot; a&quot;,     [&quot;a&quot;],      'First space in the paragraph is ignored'],
+		[&quot;a\n \n&quot;, [&quot;a&quot;],      'Last spaces in the paragraphs are ignored'],
+		[' ',      [' '],      'One char =&gt; one string'],
+		['  ',     [' '],      'Two chars =&gt; one char'],
+		['a  b',   ['a b'],    'Spaces are compressed'],
+		['a  b',   ['a b'],    'Newlines are spaces'],
+		[&quot;a\nb&quot;,   ['a b'],    'Newlines are spaces'],
+		[&quot;a\n b&quot;,  ['a b'],    'Compress newlines 1'],
+		[&quot;a \nb&quot;,  ['a b'],    'Compress newlines 2'],
+		[&quot; \nb&quot;,   ['b'],      'Compress newlines 3'],
+		[&quot;\nb&quot;,    ['b'],      'Compress newlines 4'],
+		[&quot;b\n&quot;,    ['b '],     'Compress newlines 5'],
+		[&quot;\n&quot;,     [' '],      'Compress newlines 6'],
+		[&quot;\n\n\n&quot;, [' '],      'Compress newlines 7'],
 		
-		def do_it(verbose, break_on_first_error)
-		good_cases = [
-			[&quot;&quot;,       [],         'Empty string gives empty list'],
-			[&quot;a&quot;,      [&quot;a&quot;],      'Easy char'],
-			[' ',      [' '],      'One char =&gt; one string'],
-			['  ',     [' '],      'Two chars =&gt; one char'],
-			['a  b',   ['a b'],    'Spaces are compressed'],
-			['a  b',   ['a b'],    'Newlines are spaces'],
-			[&quot;a\nb&quot;,   ['a b'],    'Newlines are spaces'],
-			[&quot;a\n b&quot;,  ['a b'],    'Compress newlines 1'],
-			[&quot;a \nb&quot;,  ['a b'],    'Compress newlines 2'],
-			[&quot; \nb&quot;,   [' b'],     'Compress newlines 3'],
-			[&quot;\nb&quot;,    [' b'],     'Compress newlines 4'],
-			[&quot;b\n&quot;,    ['b '],     'Compress newlines 5'],
-			[&quot;\n&quot;,     [' '],      'Compress newlines 6'],
-			[&quot;\n\n\n&quot;, [' '],      'Compress newlines 7'],
-			
-			[nil, :throw, &quot;Should throw on nil input&quot;],
-			
-			# Code blocks
-			[&quot;`&quot; ,   :throw,  'Unclosed single ticks'],
-			[&quot;``&quot; ,  :throw,  'Unclosed double ticks'],
-			[&quot;`a`&quot; ,     [md_code('a')],    'Simple inline code'],
-			[&quot;`` ` ``&quot; ,    [md_code('`')],   ],
-			[&quot;`` \\` ``&quot; ,    [md_code('\\`')],   ],
-			[&quot;``a``&quot; ,   [md_code('a')],    ],
-			[&quot;`` a ``&quot; ,   [md_code('a')],    ],
-			
-			# Newlines 
-			[&quot;a  \n&quot;, ['a',md_el(:linebreak)], 'Two spaces give br.'],
-			[&quot;a \n&quot;,  ['a '], 'Newlines 2'],
-			[&quot;  \n&quot;,  [md_el(:linebreak)], 'Newlines 3'],
-			[&quot;  \n  \n&quot;,  [md_el(:linebreak),md_el(:linebreak)],'Newlines 3'],
-			[&quot;  \na  \n&quot;,  [md_el(:linebreak),'a',md_el(:linebreak)],'Newlines 3'],
-			
-			# Inline HTML
-			[&quot;a &lt; b&quot;, ['a &lt; b'], '&lt; can be on itself'],
-			[&quot;&lt;hr&gt;&quot;,  [md_html('&lt;hr /&gt;')], 'HR will be sanitized'],
-			[&quot;&lt;hr/&gt;&quot;, [md_html('&lt;hr /&gt;')], 'Closed tag is ok'],
-			[&quot;&lt;hr  /&gt;&quot;, [md_html('&lt;hr /&gt;')], 'Closed tag is ok 2'],
-			[&quot;&lt;hr/&gt;a&quot;, [md_html('&lt;hr /&gt;'),'a'], 'Closed tag is ok 2'],
-			[&quot;&lt;em&gt;&lt;/em&gt;a&quot;, [md_html('&lt;em&gt;&lt;/em&gt;'),'a'], 'Inline HTML 1'],
-			[&quot;&lt;em&gt;e&lt;/em&gt;a&quot;, [md_html('&lt;em&gt;e&lt;/em&gt;'),'a'], 'Inline HTML 2'],
-			[&quot;a&lt;em&gt;e&lt;/em&gt;b&quot;, ['a',md_html('&lt;em&gt;e&lt;/em&gt;'),'b'], 'Inline HTML 3'],
-			[&quot;&lt;em&gt;e&lt;/em&gt;a&lt;em&gt;f&lt;/em&gt;&quot;, 
-				[md_html('&lt;em&gt;e&lt;/em&gt;'),'a',md_html('&lt;em&gt;f&lt;/em&gt;')], 
-				'Inline HTML 4'],
-			[&quot;&lt;em&gt;e&lt;/em&gt;&lt;em&gt;f&lt;/em&gt;a&quot;, 
-				[md_html('&lt;em&gt;e&lt;/em&gt;'),md_html('&lt;em&gt;f&lt;/em&gt;'),'a'], 
-				'Inline HTML 5'],
-				
-				[&quot;&lt;img src='a' /&gt;&quot;, [md_html(&quot;&lt;img src='a' /&gt;&quot;)], 'Attributes'],
-				[&quot;&lt;img src='a'/&gt;&quot;],
-			
-			# emphasis
-			[&quot;**&quot;, :throw, 'Unclosed double **'],
-			[&quot;\\*&quot;, ['*'], 'Escaping of *'],
-			[&quot;a *b* &quot;, ['a ', md_em('b'),' '], 'Emphasis 1'],
-			[&quot;a *b*&quot;, ['a ', md_em('b')], 'Emphasis 2'],
-			[&quot;a * b&quot;, ['a * b'], 'Emphasis 3'],
-			[&quot;a * b*&quot;, :throw, 'Unclosed emphasis'],
-			# same with underscore
-			[&quot;__&quot;, :throw, 'Unclosed double __'],
-			[&quot;\\_&quot;, ['_'], 'Escaping of _'],
-			[&quot;a _b_ &quot;, ['a ', md_em('b'),' '], 'Emphasis 4'],
-			[&quot;a _b_&quot;, ['a ', md_em('b')], 'Emphasis 5'],
-			[&quot;a _ b&quot;, ['a _ b'], 'Emphasis 6'],
-			[&quot;a _ b_&quot;, :throw, 'Unclosed emphasis'],
-			[&quot;_b_&quot;, [md_em('b')], 'Emphasis 7'],
-			[&quot;_b_ _c_&quot;, [md_em('b'),' ',md_em('c')], 'Emphasis 8'],
-			[&quot;_b__c_&quot;, [md_em('b'),md_em('c')], 'Emphasis 9'],
-			# strong
-			[&quot;**a*&quot;, :throw, 'Unclosed double ** 2'],
-			[&quot;\\**a*&quot;, ['*', md_em('a')], 'Escaping of *'],
-			[&quot;a **b** &quot;, ['a ', md_strong('b'),' '], 'Emphasis 1'],
-			[&quot;a **b**&quot;, ['a ', md_strong('b')], 'Emphasis 2'],
-			[&quot;a ** b&quot;, ['a ** b'], 'Emphasis 3'],
-			[&quot;a ** b**&quot;, :throw, 'Unclosed emphasis'],
-			[&quot;**b****c**&quot;, [md_strong('b'),md_strong('c')], 'Emphasis 9'],
-			# strong (with underscore)
-			[&quot;__a_&quot;, :throw, 'Unclosed double __ 2'],
-			[&quot;\\__a_&quot;, ['_', md_em('a')], 'Escaping of _'],
-			[&quot;a __b__ &quot;, ['a ', md_strong('b'),' '], 'Emphasis 1'],
-			[&quot;a __b__&quot;, ['a ', md_strong('b')], 'Emphasis 2'],
-			[&quot;a __ b&quot;, ['a __ b'], 'Emphasis 3'],
-			[&quot;a __ b__&quot;, :throw, 'Unclosed emphasis'],
-			[&quot;__b____c__&quot;, [md_strong('b'),md_strong('c')], 'Emphasis 9'],
-			# extra strong
-			[&quot;***a**&quot;, :throw, 'Unclosed triple *** '],
-			[&quot;\\***a**&quot;, ['*', md_strong('a')], 'Escaping of *'],
-			[&quot;a ***b*** &quot;, ['a ', md_emstrong('b'),' '], 'Strong elements'],
-			[&quot;a ***b***&quot;, ['a ', md_emstrong('b')]],
-			[&quot;a *** b&quot;, ['a *** b']],
-			[&quot;a ** * b&quot;, ['a ** * b']],
-			[&quot;***b******c***&quot;, [md_emstrong('b'),md_emstrong('c')]],
-			[&quot;a *** b***&quot;, :throw, 'Unclosed emphasis'],
-			# same with underscores
-			[&quot;___a__&quot;, :throw, 'Unclosed triple *** '],
-			[&quot;\\___a__&quot;, ['_', md_strong('a')], 'Escaping of *'],
-			[&quot;a ___b___ &quot;, ['a ', md_emstrong('b'),' '], 'Strong elements'],
-			[&quot;a ___b___&quot;, ['a ', md_emstrong('b')]],
-			[&quot;a ___ b&quot;, ['a ___ b']],
-			[&quot;a __ _ b&quot;, ['a __ _ b']],
-			[&quot;___b______c___&quot;, [md_emstrong('b'),md_emstrong('c')]],
-			[&quot;a ___ b___&quot;, :throw, 'Unclosed emphasis'],
-			# mixing is bad
-			[&quot;*a_&quot;, :throw, 'Mixing is bad'],
-			[&quot;_a*&quot;, :throw],
-			[&quot;**a__&quot;, :throw],
-			[&quot;__a**&quot;, :throw],
-			[&quot;___a***&quot;, :throw],
-			[&quot;***a___&quot;, :throw],
-			# links of the form [text][ref]
-			[&quot;\\[a]&quot;,  [&quot;[a]&quot;], 'Escaping 1'],
-			[&quot;\\[a\\]&quot;, [&quot;[a]&quot;], 'Escaping 2'],
-			[&quot;[a]&quot;,   [&quot;a&quot;],   'Not a link'],
-			[&quot;[a][]&quot;,   [ md_link([&quot;a&quot;],'')], 'Empty link'],
-			[&quot;[a][]b&quot;,   [ md_link([&quot;a&quot;],''),'b'], 'Empty link'],
-			[&quot;[a\\]][]&quot;, [ md_link([&quot;a]&quot;],'')], 'Escape inside link'],
-			
-			[&quot;[a&quot;,  :throw,   'Link not closed'],
-			[&quot;[a][&quot;,  :throw,   'Ref not closed'],
-			
-			# links of the form [text](url)
-			[&quot;\\[a](b)&quot;,  [&quot;[a](b)&quot;], 'Links'],
-			[&quot;[a](url)c&quot;,  [md_im_link(['a'],'url'),'c'], 'url'],
-			[&quot;[a]( url )c&quot; ],
-			[&quot;[a] (	url )c&quot; ],
-			[&quot;[a] (	url)c&quot; ],
+		[nil, :throw, &quot;Should throw on nil input&quot;],
+		
+		# Code blocks
+		[&quot;`&quot; ,   :throw,  'Unclosed single ticks'],
+		[&quot;``&quot; ,  :throw,  'Unclosed double ticks'],
+		[&quot;`a`&quot; ,     [md_code('a')],    'Simple inline code'],
+		[&quot;`` ` ``&quot; ,    [md_code('`')],   ],
+		[&quot;`` \\` ``&quot; ,    [md_code('\\`')],   ],
+		[&quot;``a``&quot; ,   [md_code('a')],    ],
+		[&quot;`` a ``&quot; ,   [md_code('a')],    ],
+		
+		# Newlines 
+		[&quot;a  \n&quot;, ['a',md_el(:linebreak)], 'Two spaces give br.'],
+		[&quot;a \n&quot;,  ['a '], 'Newlines 2'],
+		[&quot;  \n&quot;,  [md_el(:linebreak)], 'Newlines 3'],
+		[&quot;  \n  \n&quot;,  [md_el(:linebreak),md_el(:linebreak)],'Newlines 3'],
+		[&quot;  \na  \n&quot;,  [md_el(:linebreak),'a',md_el(:linebreak)],'Newlines 3'],
+		
+		# Inline HTML
+		[&quot;a &lt; b&quot;, ['a &lt; b'], '&lt; can be on itself'],
+		[&quot;&lt;hr&gt;&quot;,  [md_html('&lt;hr /&gt;')], 'HR will be sanitized'],
+		[&quot;&lt;hr/&gt;&quot;, [md_html('&lt;hr /&gt;')], 'Closed tag is ok'],
+		[&quot;&lt;hr  /&gt;&quot;, [md_html('&lt;hr /&gt;')], 'Closed tag is ok 2'],
+		[&quot;&lt;hr/&gt;a&quot;, [md_html('&lt;hr /&gt;'),'a'], 'Closed tag is ok 2'],
+		[&quot;&lt;em&gt;&lt;/em&gt;a&quot;, [md_html('&lt;em&gt;&lt;/em&gt;'),'a'], 'Inline HTML 1'],
+		[&quot;&lt;em&gt;e&lt;/em&gt;a&quot;, [md_html('&lt;em&gt;e&lt;/em&gt;'),'a'], 'Inline HTML 2'],
+		[&quot;a&lt;em&gt;e&lt;/em&gt;b&quot;, ['a',md_html('&lt;em&gt;e&lt;/em&gt;'),'b'], 'Inline HTML 3'],
+		[&quot;&lt;em&gt;e&lt;/em&gt;a&lt;em&gt;f&lt;/em&gt;&quot;, 
+			[md_html('&lt;em&gt;e&lt;/em&gt;'),'a',md_html('&lt;em&gt;f&lt;/em&gt;')], 
+			'Inline HTML 4'],
+		[&quot;&lt;em&gt;e&lt;/em&gt;&lt;em&gt;f&lt;/em&gt;a&quot;, 
+			[md_html('&lt;em&gt;e&lt;/em&gt;'),md_html('&lt;em&gt;f&lt;/em&gt;'),'a'], 
+			'Inline HTML 5'],
 			
-			[&quot;[a](ur:/l/ 'Title')&quot;,  [md_im_link(['a'],'ur:/l/','Title')],
-			 	'url and title'],
-			[&quot;[a] (	ur:/l/ \&quot;Title\&quot;)&quot; ],
-			[&quot;[a] (	ur:/l/ \&quot;Title\&quot;)&quot; ],
-			[&quot;[a]( ur:/l/ Title)&quot;, :throw, &quot;Must quote title&quot; ],
-
-			[&quot;[a](url 'Tit\\\&quot;l\\\\e')&quot;, [md_im_link(['a'],'url','Tit&quot;l\\e')],
-			 	'url and title escaped'],
-			[&quot;[a] (	url \&quot;Tit\\\&quot;l\\\\e\&quot;)&quot; ],
-			[&quot;[a] (	url	\&quot;Tit\\\&quot;l\\\\e\&quot;  )&quot; ],
-			['[a] (	url	&quot;Tit\\&quot;l\\\\e&quot;  )' ],
-			[&quot;[a]()&quot;, [md_im_link(['a'],'')], 'No URL is OK'],
+			[&quot;&lt;img src='a' /&gt;&quot;, [md_html(&quot;&lt;img src='a' /&gt;&quot;)], 'Attributes'],
+			[&quot;&lt;img src='a'/&gt;&quot;],
+		
+		# emphasis
+		[&quot;**&quot;, :throw, 'Unclosed double **'],
+		[&quot;\\*&quot;, ['*'], 'Escaping of *'],
+		[&quot;a *b* &quot;, ['a ', md_em('b'),' '], 'Emphasis 1'],
+		[&quot;a *b*&quot;, ['a ', md_em('b')], 'Emphasis 2'],
+		[&quot;a * b&quot;, ['a * b'], 'Emphasis 3'],
+		[&quot;a * b*&quot;, :throw, 'Unclosed emphasis'],
+		# same with underscore
+		[&quot;__&quot;, :throw, 'Unclosed double __'],
+		[&quot;\\_&quot;, ['_'], 'Escaping of _'],
+		[&quot;a _b_ &quot;, ['a ', md_em('b'),' '], 'Emphasis 4'],
+		[&quot;a _b_&quot;, ['a ', md_em('b')], 'Emphasis 5'],
+		[&quot;a _ b&quot;, ['a _ b'], 'Emphasis 6'],
+		[&quot;a _ b_&quot;, :throw, 'Unclosed emphasis'],
+		[&quot;_b_&quot;, [md_em('b')], 'Emphasis 7'],
+		[&quot;_b_ _c_&quot;, [md_em('b'),' ',md_em('c')], 'Emphasis 8'],
+		[&quot;_b__c_&quot;, [md_em('b'),md_em('c')], 'Emphasis 9'],
+		# strong
+		[&quot;**a*&quot;, :throw, 'Unclosed double ** 2'],
+		[&quot;\\**a*&quot;, ['*', md_em('a')], 'Escaping of *'],
+		[&quot;a **b** &quot;, ['a ', md_strong('b'),' '], 'Emphasis 1'],
+		[&quot;a **b**&quot;, ['a ', md_strong('b')], 'Emphasis 2'],
+		[&quot;a ** b&quot;, ['a ** b'], 'Emphasis 3'],
+		[&quot;a ** b**&quot;, :throw, 'Unclosed emphasis'],
+		[&quot;**b****c**&quot;, [md_strong('b'),md_strong('c')], 'Emphasis 9'],
+		# strong (with underscore)
+		[&quot;__a_&quot;, :throw, 'Unclosed double __ 2'],
+		[&quot;\\__a_&quot;, ['_', md_em('a')], 'Escaping of _'],
+		[&quot;a __b__ &quot;, ['a ', md_strong('b'),' '], 'Emphasis 1'],
+		[&quot;a __b__&quot;, ['a ', md_strong('b')], 'Emphasis 2'],
+		[&quot;a __ b&quot;, ['a __ b'], 'Emphasis 3'],
+		[&quot;a __ b__&quot;, :throw, 'Unclosed emphasis'],
+		[&quot;__b____c__&quot;, [md_strong('b'),md_strong('c')], 'Emphasis 9'],
+		# extra strong
+		[&quot;***a**&quot;, :throw, 'Unclosed triple *** '],
+		[&quot;\\***a**&quot;, ['*', md_strong('a')], 'Escaping of *'],
+		[&quot;a ***b*** &quot;, ['a ', md_emstrong('b'),' '], 'Strong elements'],
+		[&quot;a ***b***&quot;, ['a ', md_emstrong('b')]],
+		[&quot;a *** b&quot;, ['a *** b']],
+		[&quot;a ** * b&quot;, ['a ** * b']],
+		[&quot;***b******c***&quot;, [md_emstrong('b'),md_emstrong('c')]],
+		[&quot;a *** b***&quot;, :throw, 'Unclosed emphasis'],
+		# same with underscores
+		[&quot;___a__&quot;, :throw, 'Unclosed triple *** '],
+		[&quot;\\___a__&quot;, ['_', md_strong('a')], 'Escaping of *'],
+		[&quot;a ___b___ &quot;, ['a ', md_emstrong('b'),' '], 'Strong elements'],
+		[&quot;a ___b___&quot;, ['a ', md_emstrong('b')]],
+		[&quot;a ___ b&quot;, ['a ___ b']],
+		[&quot;a __ _ b&quot;, ['a __ _ b']],
+		[&quot;___b______c___&quot;, [md_emstrong('b'),md_emstrong('c')]],
+		[&quot;a ___ b___&quot;, :throw, 'Unclosed emphasis'],
+		# mixing is bad
+		[&quot;*a_&quot;, :throw, 'Mixing is bad'],
+		[&quot;_a*&quot;, :throw],
+		[&quot;**a__&quot;, :throw],
+		[&quot;__a**&quot;, :throw],
+		[&quot;___a***&quot;, :throw],
+		[&quot;***a___&quot;, :throw],
+		# links of the form [text][ref]
+		[&quot;\\[a]&quot;,  [&quot;[a]&quot;], 'Escaping 1'],
+		[&quot;\\[a\\]&quot;, [&quot;[a]&quot;], 'Escaping 2'],
+		[&quot;[a]&quot;,   [&quot;a&quot;],   'Not a link'],
+		[&quot;[a][]&quot;,   [ md_link([&quot;a&quot;],'')], 'Empty link'],
+		[&quot;[a][]b&quot;,   [ md_link([&quot;a&quot;],''),'b'], 'Empty link'],
+		[&quot;[a\\]][]&quot;, [ md_link([&quot;a]&quot;],'')], 'Escape inside link'],
+		
+		[&quot;[a&quot;,  :throw,   'Link not closed'],
+		[&quot;[a][&quot;,  :throw,   'Ref not closed'],
+		
+		# links of the form [text](url)
+		[&quot;\\[a](b)&quot;,  [&quot;[a](b)&quot;], 'Links'],
+		[&quot;[a](url)c&quot;,  [md_im_link(['a'],'url'),'c'], 'url'],
+		[&quot;[a]( url )c&quot; ],
+		[&quot;[a] (	url )c&quot; ],
+		[&quot;[a] (	url)c&quot; ],
 		
-			[&quot;[a](\&quot;Title\&quot;)&quot;, :throw, &quot;No url specified&quot; ],
-			[&quot;[a](url \&quot;Title)&quot;, :throw, &quot;Unclosed quotes&quot; ],
-			[&quot;[a](url \&quot;Title\\\&quot;)&quot;, :throw],
-			[&quot;[a](url \&quot;Title\&quot; &quot;, :throw],
+		[&quot;[a](ur:/l/ 'Title')&quot;,  [md_im_link(['a'],'ur:/l/','Title')],
+		 	'url and title'],
+		[&quot;[a] (	ur:/l/ \&quot;Title\&quot;)&quot; ],
+		[&quot;[a] (	ur:/l/ \&quot;Title\&quot;)&quot; ],
+		[&quot;[a]( ur:/l/ Title)&quot;, :throw, &quot;Must quote title&quot; ],
 
-			[&quot;[a](url \'Title\&quot;)&quot;, :throw, &quot;Mixing is bad&quot; ],
-			[&quot;[a](url \&quot;Title\')&quot;],
-			
-			[&quot;[a](/url)&quot;, [md_im_link(['a'],'/url')], 'Funny chars in url'],
-			[&quot;[a](#url)&quot;, [md_im_link(['a'],'#url')]],
-			[&quot;[a](&lt;/script?foo=1&amp;bar=2&gt;)&quot;, [md_im_link(['a'],'/script?foo=1&amp;bar=2')]],
-			
-			
-			# Images
-			[&quot;\\![a](url)&quot;,  ['!', md_im_link(['a'],'url') ], 'Escaping images'],
-			
-			[&quot;![a](url)&quot;,  [md_im_image(['a'],'url')], 'Image no title'],
-			[&quot;![a]( url )&quot; ],
-			[&quot;![a] (	url )&quot; ],
-			[&quot;![a] (	url)&quot; ],
+		[&quot;[a](url 'Tit\\\&quot;l\\\\e')&quot;, [md_im_link(['a'],'url','Tit&quot;l\\e')],
+		 	'url and title escaped'],
+		[&quot;[a] (	url \&quot;Tit\\\&quot;l\\\\e\&quot;)&quot; ],
+		[&quot;[a] (	url	\&quot;Tit\\\&quot;l\\\\e\&quot;  )&quot; ],
+		['[a] (	url	&quot;Tit\\&quot;l\\\\e&quot;  )' ],
+		[&quot;[a]()&quot;, [md_im_link(['a'],'')], 'No URL is OK'],
+	
+		[&quot;[a](\&quot;Title\&quot;)&quot;, :throw, &quot;No url specified&quot; ],
+		[&quot;[a](url \&quot;Title)&quot;, :throw, &quot;Unclosed quotes&quot; ],
+		[&quot;[a](url \&quot;Title\\\&quot;)&quot;, :throw],
+		[&quot;[a](url \&quot;Title\&quot; &quot;, :throw],
 
-			[&quot;![a](url 'ti\&quot;tle')&quot;,  [md_im_image(['a'],'url','ti&quot;tle')], 'Image with title'],
-			['![a]( url &quot;ti\\&quot;tle&quot;)' ],
+		[&quot;[a](url \'Title\&quot;)&quot;, :throw, &quot;Mixing is bad&quot; ],
+		[&quot;[a](url \&quot;Title\')&quot;],
+		
+		[&quot;[a](/url)&quot;, [md_im_link(['a'],'/url')], 'Funny chars in url'],
+		[&quot;[a](#url)&quot;, [md_im_link(['a'],'#url')]],
+		[&quot;[a](&lt;/script?foo=1&amp;bar=2&gt;)&quot;, [md_im_link(['a'],'/script?foo=1&amp;bar=2')]],
+		
+		
+		# Images
+		[&quot;\\![a](url)&quot;,  ['!', md_im_link(['a'],'url') ], 'Escaping images'],
+		
+		[&quot;![a](url)&quot;,  [md_im_image(['a'],'url')], 'Image no title'],
+		[&quot;![a]( url )&quot; ],
+		[&quot;![a] (	url )&quot; ],
+		[&quot;![a] (	url)&quot; ],
 
-			[&quot;![a](url&quot;, :throw, 'Invalid images'],
-			[&quot;![a( url )&quot; ],
-			[&quot;![a] ('url )&quot; ],
+		[&quot;![a](url 'ti\&quot;tle')&quot;,  [md_im_image(['a'],'url','ti&quot;tle')], 'Image with title'],
+		['![a]( url &quot;ti\\&quot;tle&quot;)' ],
 
-			[&quot;![a][imref]&quot;,  [md_image(['a'],'imref')], 'Image with ref'],
-			[&quot;![a][ imref]&quot;],
-			[&quot;![a][ imref ]&quot;],
-			[&quot;![a][\timref\t]&quot;],
-			
-			['&lt;http://example.com/?foo=1&amp;bar=2&gt;', 
-				[md_url('http://example.com/?foo=1&amp;bar=2')], 'Immediate link'],
-				['a&lt;http://example.com/?foo=1&amp;bar=2&gt;b', 
-					['a',md_url('http://example.com/?foo=1&amp;bar=2'),'b']  ],
-			['&lt;andrea@censi.org&gt;', 
-				[md_email('andrea@censi.org')], 'Email address'],
-			['&lt;mailto:andrea@censi.org&gt;'],
-					
-			[&quot;a&lt;!-- --&gt;b&quot;, ['a',md_html('&lt;!-- --&gt;'),'b'], 
-				'HTML Comment'],
+		[&quot;![a](url&quot;, :throw, 'Invalid images'],
+		[&quot;![a( url )&quot; ],
+		[&quot;![a] ('url )&quot; ],
 
-			[&quot;a&lt;!--&quot;, :throw, 'Bad HTML Comment'],
-			[&quot;a&lt;!-- &quot;, :throw, 'Bad HTML Comment'],
+		[&quot;![a][imref]&quot;,  [md_image(['a'],'imref')], 'Image with ref'],
+		[&quot;![a][ imref]&quot;],
+		[&quot;![a][ imref ]&quot;],
+		[&quot;![a][\timref\t]&quot;],
+		
+		['&lt;http://example.com/?foo=1&amp;bar=2&gt;', 
+			[md_url('http://example.com/?foo=1&amp;bar=2')], 'Immediate link'],
+			['a&lt;http://example.com/?foo=1&amp;bar=2&gt;b', 
+				['a',md_url('http://example.com/?foo=1&amp;bar=2'),'b']  ],
+		['&lt;andrea@censi.org&gt;', 
+			[md_email('andrea@censi.org')], 'Email address'],
+		['&lt;mailto:andrea@censi.org&gt;'],
+				
+		[&quot;a&lt;!-- --&gt;b&quot;, ['a',md_html('&lt;!-- --&gt;'),'b'], 
+			'HTML Comment'],
 
-			[&quot;a &lt;b&quot;, :throw, 'Bad HTML 1'],
-			[&quot;&lt;b&quot;,   :throw, 'Bad HTML 2'],
-			[&quot;&lt;b!&quot;,  :throw, 'Bad HTML 3'],
-			['`&lt;div&gt;`, `&lt;table&gt;`, `&lt;pre&gt;`, `&lt;p&gt;`',
-				[md_code('&lt;div&gt;'),', ',md_code('&lt;table&gt;'),', ',
-					md_code('&lt;pre&gt;'),', ',md_code('&lt;p&gt;')],
-					'Multiple HTLM tags'],
-					
-			[&quot;&amp;andrea&quot;, [&quot;&amp;andrea&quot;], 'Parsing of entities'],
+		[&quot;a&lt;!--&quot;, :throw, 'Bad HTML Comment'],
+		[&quot;a&lt;!-- &quot;, :throw, 'Bad HTML Comment'],
+
+		[&quot;a &lt;b&quot;, :throw, 'Bad HTML 1'],
+		[&quot;&lt;b&quot;,   :throw, 'Bad HTML 2'],
+		[&quot;&lt;b!&quot;,  :throw, 'Bad HTML 3'],
+		['`&lt;div&gt;`, `&lt;table&gt;`, `&lt;pre&gt;`, `&lt;p&gt;`',
+			[md_code('&lt;div&gt;'),', ',md_code('&lt;table&gt;'),', ',
+				md_code('&lt;pre&gt;'),', ',md_code('&lt;p&gt;')],
+				'Multiple HTLM tags'],
+				
+		[&quot;&amp;andrea&quot;, [&quot;&amp;andrea&quot;], 'Parsing of entities'],
 # no escaping is allowed
 #			[&quot;\\&amp;andrea;&quot;, [&quot;&amp;andrea;&quot;]],
-			[&quot;&amp;&amp;andrea;&quot;, [&quot;&amp;&quot;, md_entity('andrea')] ],
-			[&quot;&amp;123;;&amp;amp;&quot;,[md_entity('123'),';',md_entity('amp')]],
-			
-			[&quot;a\nThe [syntax page] [s] provides&quot;, 
-				['a The ', md_link(['syntax page'],'s'), ' provides'], 'Regression'],
-			
-			[&quot;#{Maruku8}&quot;, [Maruku8], &quot;Reading UTF-8&quot;],
-			[&quot;#{AccIta1}&quot;, [AccIta8], &quot;Converting ISO-8859-1 to UTF-8&quot;, 
-				{:encoding =&gt; 'iso-8859-1'}],
-		]
+		[&quot;&amp;&amp;andrea;&quot;, [&quot;&amp;&quot;, md_entity('andrea')] ],
+		[&quot;&amp;123;;&amp;amp;&quot;,[md_entity('123'),';',md_entity('amp')]],
+		
+		[&quot;a\nThe [syntax page] [s] provides&quot;, 
+			['a The ', md_link(['syntax page'],'s'), ' provides'], 'Regression'],
+		
+		[&quot;#{Maruku8}&quot;, [Maruku8], &quot;Reading UTF-8&quot;],
+		[&quot;#{AccIta1}&quot;, [AccIta8], &quot;Converting ISO-8859-1 to UTF-8&quot;, 
+			{:encoding =&gt; 'iso-8859-1'}],
+	]
 
-			count = 1; last_comment=&quot;&quot;; last_expected=:throw
-			good_cases.each do |t|
-				if not t[1]
-					t[1] = last_expected
-				else
-					last_expected = t[1]
-				end				
-				if not t[2]
-					t[2] = last_comment + &quot; #{count+=1}&quot;
-				else
-					last_comment = t[2]; count=1
-				end
+		good_cases = unit_tests_for_attribute_lists + good_cases
+		
+		count = 1; last_comment=&quot;&quot;; last_expected=:throw
+		good_cases.each do |t|
+			if not t[1]
+				t[1] = last_expected
+			else
+				last_expected = t[1]
+			end				
+			if not t[2]
+				t[2] = last_comment + &quot; #{count+=1}&quot;
+			else
+				last_comment = t[2]; count=1
 			end
+		end
+		
 			
-				
-			@verbose = verbose
-			m = Maruku.new
-			m.meta[:on_error] = :raise
-			
-			good_cases.each do |input, expected, comment|
-					output = nil
-					begin
-						output = m.parse_span_better(input)
-						#lines = Maruku.split_lines input
-						#output = m.parse_lines_as_span(lines)
-					rescue Exception =&gt; e
-						if not expected == :throw
-							ex = e.inspect+ &quot;\n&quot;+ e.backtrace.join(&quot;\n&quot;)
-							s = comment+describe_difference(input, expected, output)
-								
-							print_status(comment,'CRASHED :-(', ex+s)
-							raise e if @break_on_first_error 
-						else
-							print_status(comment,'OK')
-						end
-					end
-					
+		@verbose = verbose
+		m = Maruku.new
+		m.meta[:on_error] = :raise
+		
+		good_cases.each do |input, expected, comment|
+				output = nil
+				begin
+					output = m.parse_span_better(input)
+					#lines = Maruku.split_lines input
+					#output = m.parse_lines_as_span(lines)
+				rescue Exception =&gt; e
 					if not expected == :throw
-						if not (expected == output)
-							s = comment+describe_difference(input, expected, output)
-							print_status(comment, 'FAILED', s)
-							break if break_on_first_error
-						else
-							print_status(comment, 'OK')
-						end
-					else # I expected a raise
-						if output
-							s = comment+describe_difference(input, expected, output)
+						ex = e.inspect+ &quot;\n&quot;+ e.backtrace.join(&quot;\n&quot;)
+						s = comment+describe_difference(input, expected, output)
 							
-							print_status(comment, 'FAILED (no throw)', s)
-							break if break_on_first_error
-						end
+						print_status(comment,'CRASHED :-(', ex+s)
+						raise e if @break_on_first_error 
+					else
+						quiet || print_status(comment,'OK')
 					end
-					
-			end
+				end
+				
+				if not expected == :throw
+					if not (expected == output)
+						s = comment+describe_difference(input, expected, output)
+						print_status(comment, 'FAILED', s)
+						break if break_on_first_error
+					else
+						quiet || print_status(comment, 'OK')
+					end
+				else # I expected a raise
+					if output
+						s = comment+describe_difference(input, expected, output)
+						
+						print_status(comment, 'FAILED (no throw)', s)
+						break if break_on_first_error
+					end
+				end
+				
 		end
-		
-		PAD=40
-		def print_status(comment, status, verbose_text=nil)
-			if comment.size &lt; PAD
-				comment = comment + (&quot; &quot;*(PAD-comment.size))
-			end
-			puts &quot;- #{comment} #{status}&quot;
-			if @verbose and verbose_text
-				puts verbose_text
-			end
+	end
+	
+	PAD=40
+	def print_status(comment, status, verbose_text=nil)
+		if comment.size &lt; PAD
+			comment = comment + (&quot; &quot;*(PAD-comment.size))
 		end
-		
-		
-		def describe_difference(input, expected, output)
-			&quot;\nInput:\n  #{input.inspect}&quot; +
-			    &quot;\nExpected:\n  #{expected.inspect}&quot; +
-				&quot;\nOutput:\n  #{output.inspect}\n&quot;+
-				&quot;\nExpected(more):\n  #{expected.inspect}&quot; +
-				&quot;\nOutput(more):\n    #{output.inspect}&quot;
+		puts &quot;- #{comment} #{status}&quot;
+		if @verbose and verbose_text
+			puts verbose_text
 		end
-		
-	end # class Test
+	end
+	
+	
+	def describe_difference(input, expected, output)
+		&quot;\nInput:\n  #{input.inspect}&quot; +
+		    &quot;\nExpected:\n  #{expected.inspect}&quot; +
+			&quot;\nOutput:\n  #{output.inspect}\n&quot;
+	end
+end
+
+class Maruku
+	include MarukuTests
 end
 
 verbose = ARGV.include? 'v'
 break_on_first = ARGV.include? 'b'
-Maruku::TestNewParser.new.do_it(verbose, break_on_first)
+quiet = ARGV.include? 'q'
+Maruku.new.test_span_parser(verbose, break_on_first, quiet)
 
 </diff>
      <filename>lib/maruku/tests/new_parser.rb</filename>
    </modified>
    <modified>
      <diff>@@ -29,4 +29,8 @@ class Maruku
 		true
 	end
 	
+	def new_meta_data?
+		true
+	end
+	
 end
\ No newline at end of file</diff>
      <filename>lib/maruku/version.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>7bbdbd630a3078d8b3705700f1ab99eb0a3f097d</id>
    </parent>
  </parents>
  <author>
    <name>andrea</name>
    <email>andrea@7e2f57f0-5a75-4fd6-9797-5817c466b243</email>
  </author>
  <url>http://github.com/manveru/maruku/commit/1c80abd70212ce93e7cc9fee27060cbe207aa42a</url>
  <id>1c80abd70212ce93e7cc9fee27060cbe207aa42a</id>
  <committed-date>2007-01-03T15:32:57-08:00</committed-date>
  <authored-date>2007-01-03T15:32:57-08:00</authored-date>
  <message>Doing attributes

git-svn-id: svn://rubyforge.org/var/svn/maruku/trunk@48 7e2f57f0-5a75-4fd6-9797-5817c466b243</message>
  <tree>7381934eb4d1319f83245ef066022fc67dc54cea</tree>
  <committer>
    <name>andrea</name>
    <email>andrea@7e2f57f0-5a75-4fd6-9797-5817c466b243</email>
  </committer>
</commit>
