maruku 0.4.0 → 0.4.1

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.
Files changed (87) hide show
  1. data/bin/maruku +74 -22
  2. data/bin/marutest +15 -3
  3. data/docs/{changelog-0.3.md → changelog.md} +47 -18
  4. data/docs/entity_test.html +253 -0
  5. data/docs/entity_test.md +21 -0
  6. data/docs/index.html +124 -31
  7. data/docs/markdown_syntax.html +46 -46
  8. data/docs/maruku.html +124 -31
  9. data/docs/maruku.md +47 -9
  10. data/docs/proposal.html +4 -4
  11. data/lib/maruku.rb +1 -0
  12. data/lib/maruku/defaults.rb +1 -1
  13. data/lib/maruku/helpers.rb +4 -4
  14. data/lib/maruku/input/parse_block.rb +39 -33
  15. data/lib/maruku/input/parse_doc.rb +57 -3
  16. data/lib/maruku/input/parse_span_better.rb +28 -8
  17. data/lib/maruku/input/rubypants.rb +225 -0
  18. data/lib/maruku/input/type_detection.rb +1 -0
  19. data/lib/maruku/output/to_html.rb +46 -47
  20. data/lib/maruku/output/to_latex.rb +166 -45
  21. data/lib/maruku/output/to_latex_entities.rb +75 -43
  22. data/lib/maruku/string_utils.rb +21 -19
  23. data/lib/maruku/structures.rb +21 -12
  24. data/lib/maruku/structures_inspect.rb +12 -3
  25. data/lib/maruku/tests/new_parser.rb +2 -1
  26. data/lib/maruku/version.rb +1 -1
  27. data/tests/unittest/abbreviations.md +8 -8
  28. data/tests/unittest/attributes/attributes.md +10 -10
  29. data/tests/unittest/attributes/circular.md +4 -4
  30. data/tests/unittest/attributes/default.md +3 -3
  31. data/tests/unittest/blank.md +2 -2
  32. data/tests/unittest/blanks_in_code.md +12 -12
  33. data/tests/unittest/code.md +4 -4
  34. data/tests/unittest/code2.md +7 -6
  35. data/tests/unittest/code3.md +16 -16
  36. data/tests/unittest/easy.md +4 -4
  37. data/tests/unittest/email.md +4 -4
  38. data/tests/unittest/encoding/iso-8859-1.md +2 -2
  39. data/tests/unittest/encoding/utf-8.md +2 -2
  40. data/tests/unittest/entities.md +20 -20
  41. data/tests/unittest/escaping.md +16 -16
  42. data/tests/unittest/extra_dl.md +17 -7
  43. data/tests/unittest/extra_header_id.md +11 -11
  44. data/tests/unittest/extra_table1.md +4 -4
  45. data/tests/unittest/footnotes.md +38 -28
  46. data/tests/unittest/headers.md +6 -6
  47. data/tests/unittest/hrule.md +6 -6
  48. data/tests/unittest/images.md +18 -16
  49. data/tests/unittest/inline_html.md +7 -29
  50. data/tests/unittest/inline_html2.md +3 -3
  51. data/tests/unittest/links.md +7 -27
  52. data/tests/unittest/list1.md +9 -8
  53. data/tests/unittest/list2.md +15 -12
  54. data/tests/unittest/list3.md +16 -14
  55. data/tests/unittest/list4.md +4 -4
  56. data/tests/unittest/lists.md +33 -29
  57. data/tests/unittest/lists_after_paragraph.md +36 -36
  58. data/tests/unittest/lists_ol.md +43 -38
  59. data/tests/unittest/misc_sw.md +172 -156
  60. data/tests/unittest/notyet/escape.md +8 -8
  61. data/tests/unittest/notyet/header_after_par.md +6 -6
  62. data/tests/unittest/notyet/ticks.md +4 -4
  63. data/tests/unittest/notyet/triggering.md +21 -21
  64. data/tests/unittest/olist.md +5 -5
  65. data/tests/unittest/one.md +1 -1
  66. data/tests/unittest/paragraph.md +1 -1
  67. data/tests/unittest/paragraph_rules/dont_merge_ref.md +1 -1
  68. data/tests/unittest/paragraph_rules/tab_is_blank.md +2 -2
  69. data/tests/unittest/paragraphs.md +5 -5
  70. data/tests/unittest/recover/recover_links.md +2 -2
  71. data/tests/unittest/references/long_example.md +27 -19
  72. data/tests/unittest/smartypants.md +148 -0
  73. data/tests/unittest/syntax_hl.md +14 -14
  74. data/tests/unittest/test.md +2 -2
  75. data/tests/unittest/wrapping.md +8 -8
  76. data/tests/unittest/xml_instruction.md +82 -0
  77. metadata +149 -160
  78. data/docs/TOFIX.html +0 -22
  79. data/docs/TOFIX.md +0 -3
  80. data/docs/changelog-0.2.13.html +0 -30
  81. data/docs/changelog-0.2.13.md +0 -6
  82. data/docs/changelog-0.3.html +0 -113
  83. data/docs/faq.html +0 -57
  84. data/docs/faq.md +0 -32
  85. data/docs/hidden_o_n_squared.md +0 -10
  86. data/docs/todo.html +0 -40
  87. data/docs/todo.md +0 -9
@@ -32,10 +32,21 @@ module MaRuKu; module Strings
32
32
  s.split("\n")
33
33
  end
34
34
 
35
- # This parses email headers. Returns an hash. hash['data'] is the message.
35
+ # This parses email headers. Returns an hash.
36
+ #
37
+ # +hash['data']+ is the message.
38
+ #
39
+ # Keys are downcased, space becomes underscore, converted to symbols.
40
+ #
41
+ # My key: true
42
+ #
43
+ # becomes:
44
+ #
45
+ # {:my_key => true}
46
+ #
36
47
  def parse_email_headers(s)
37
48
  keys={}
38
- match = (s =~ /((\w+: .*\n)+)\n/)
49
+ match = (s =~ /((\w[\w\s]+: .*\n)+)\n/)
39
50
  if match != 0
40
51
  keys[:data] = s
41
52
  else
@@ -51,27 +62,18 @@ module MaRuKu; module Strings
51
62
  end
52
63
  keys
53
64
  end
54
-
55
- # `.xyz` => class: xyz
56
- # `#xyz` => id: xyz
65
+
66
+ # Keys are downcased, space becomes underscore, converted to symbols.
57
67
  def normalize_key_and_value(k,v)
58
68
  v = v ? v.strip : true # no value defaults to true
59
69
  k = k.strip
60
70
 
61
- # `.xyz` => class: xyz
62
- if k =~ /^\.([\w\d]+)/
63
- return :class, $1
64
- # `#xyz` => id: xyz
65
- elsif k =~ /^\#([\w\d]+)/
66
- return :id, $1
67
- else
68
- # check synonyms
69
- v = true if ['yes','true'].include?(v.to_s.downcase)
70
- v = false if ['no','false'].include?(v.to_s.downcase)
71
-
72
- k = k.downcase.gsub(' ','_')
73
- return k, v
74
- end
71
+ # check synonyms
72
+ v = true if ['yes','true'].include?(v.to_s.downcase)
73
+ v = false if ['no','false'].include?(v.to_s.downcase)
74
+
75
+ k = k.downcase.gsub(' ','_')
76
+ return k, v
75
77
  end
76
78
 
77
79
  # Returns the number of leading spaces, considering that
@@ -21,14 +21,15 @@
21
21
 
22
22
 
23
23
  class Module
24
- def safe_attr_accessor2(symbol, klass)
24
+ def safe_attr_accessor1(symbol, klass)
25
25
  attr_reader symbol
26
26
  code = <<-EOF
27
27
  def #{symbol}=(val)
28
28
  if not val.kind_of? #{klass}
29
- s = "Could not assign an object of type \#{val.class} to #{symbol}.\n"
30
- s += "Tried to assign\n\#{val.inspect}\nto #{symbol} of object\n"
31
- s += "\#{self.inspect}"
29
+ s = "\nCould not assign an object of type \#{val.class} to #{symbol}.\n\n"
30
+ s += "Tried to assign object of class \#{val.class}:\n"+
31
+ "\#{val.inspect}\n"+
32
+ "to \#{self.class}::#{symbol} constrained to be of class #{klass}.\n"
32
33
  raise s
33
34
  end
34
35
  @#{symbol} = val
@@ -38,12 +39,19 @@ EOF
38
39
  module_eval code
39
40
  end
40
41
 
41
- def safe_attr_accessor(symbol, klass)
42
+ def safe_attr_accessor2(symbol, klass)
42
43
  attr_accessor symbol
43
44
  end
45
+
46
+ alias safe_attr_accessor safe_attr_accessor1
44
47
  end
45
48
 
46
49
  module MaRuKu
50
+
51
+ Globals = {
52
+ :unsafe_features => false,
53
+ }
54
+
47
55
  # I did not want to have a class for each possible element.
48
56
  # Instead I opted to have only the class "MDElement"
49
57
  # that represents eveything in the document (paragraphs, headers, etc).
@@ -56,8 +64,8 @@ module MaRuKu
56
64
  # The @doc variable points to the document to which the MDElement
57
65
  # belongs (which is an instance of Maruku, subclass of MDElement).
58
66
  #
59
- # Meta data is specified the hash `meta`. Keys are symbols (downcased, with
60
- # spaces substituted by underscores)
67
+ # Attributes are contained in the hash `attributes`.
68
+ # Keys are symbols (downcased, with spaces substituted by underscores)
61
69
  #
62
70
  # For example, if you write in the source document.
63
71
  #
@@ -68,19 +76,16 @@ module MaRuKu
68
76
  #
69
77
  # You can access `value` by writing:
70
78
  #
71
- # @doc.meta[:my_property] # => 'value'
79
+ # @doc.attributes[:my_property] # => 'value'
72
80
  #
73
81
  # from whichever MDElement in the hierarchy.
74
-
82
+ #
75
83
  class MDElement
76
84
  # See helpers.rb for the list of allowed #node_type values
77
85
  safe_attr_accessor :node_type, Symbol
78
86
 
79
87
  # Children are either Strings or MDElement
80
88
  safe_attr_accessor :children, Array
81
-
82
-
83
- # safe_attr_accessor :meta, Hash
84
89
 
85
90
  # An attribute list, may not be nil
86
91
  safe_attr_accessor :al, Array #Maruku::AttributeList
@@ -129,6 +134,7 @@ end
129
134
  # This represents the whole document and holds global data.
130
135
 
131
136
  class MDDocument
137
+
132
138
  safe_attr_accessor :refs, Hash
133
139
  safe_attr_accessor :footnotes, Hash
134
140
 
@@ -141,6 +147,8 @@ class MDDocument
141
147
  # The order in which footnotes are used. Contains the id.
142
148
  safe_attr_accessor :footnotes_order, Array
143
149
 
150
+ safe_attr_accessor :latex_required_packages, Array
151
+
144
152
  def initialize(s=nil)
145
153
  super(:document)
146
154
  @doc = self
@@ -150,6 +158,7 @@ class MDDocument
150
158
  self.footnotes_order = []
151
159
  self.abbreviations = {}
152
160
  self.ald = {}
161
+ self.latex_required_packages = []
153
162
 
154
163
  parse_doc(s) if s
155
164
  end
@@ -21,7 +21,15 @@
21
21
 
22
22
 
23
23
  class String
24
- alias inspect_more inspect
24
+ def inspect_more(a=nil,b=nil)
25
+ inspect
26
+ end
27
+ end
28
+
29
+ class Object
30
+ def inspect_more(a=nil,b=nil)
31
+ inspect
32
+ end
25
33
  end
26
34
 
27
35
  class Array
@@ -37,8 +45,9 @@ class Array
37
45
  end
38
46
 
39
47
  class Hash
40
- def inspect_ordered
41
- "{"+map{|k,v| k.inspect + "=>"+v.inspect}.join(',')+"}"
48
+ def inspect_ordered(a=nil,b=nil)
49
+ "{"+keys.map{|x|x.to_s}.sort.map{|x|x.to_sym}.
50
+ map{|k| k.inspect + "=>"+self[k].inspect}.join(',')+"}"
42
51
  end
43
52
  end
44
53
 
@@ -224,7 +224,8 @@ module MaRuKu; module Tests
224
224
  ["a<!--", :throw, 'Bad HTML Comment'],
225
225
  ["a<!-- ", :throw, 'Bad HTML Comment'],
226
226
 
227
- ["<? <?!--!`3 ?>", [md_server('<?!--!`3')], 'Server directive'],
227
+ ["<?xml <?!--!`3 ?>", [md_xml_instr('xml','<?!--!`3')], 'XML processing instruction'],
228
+ ["<? <?!--!`3 ?>", [md_xml_instr('','<?!--!`3')] ],
228
229
 
229
230
  ["<? ", :throw, 'Bad Server directive'],
230
231
 
@@ -19,7 +19,7 @@
19
19
  #++
20
20
 
21
21
  module MaRuKu
22
- Version = '0.4.0'
22
+ Version = '0.4.1'
23
23
 
24
24
  MarukuURL = 'http://maruku.rubyforge.org/'
25
25
 
@@ -22,14 +22,14 @@ md_el(:document,[
22
22
  md_el(:abbr,["W3C"],{:title=>"World Wide Web Consortium"},[]),
23
23
  "."
24
24
  ]),
25
- md_el(:abbr_def,[],{:text=>"Hyper Text Markup Language",:abbr=>"HTML"},[]),
26
- md_el(:abbr_def,[],{:text=>"World Wide Web Consortium",:abbr=>"W3C"},[]),
25
+ md_el(:abbr_def,[],{:abbr=>"HTML",:text=>"Hyper Text Markup Language"},[]),
26
+ md_el(:abbr_def,[],{:abbr=>"W3C",:text=>"World Wide Web Consortium"},[]),
27
27
  md_par([
28
28
  "Operation ",
29
29
  md_el(:abbr,["Tigra Genesis"],{:title=>nil},[]),
30
30
  " is going well."
31
31
  ]),
32
- md_el(:abbr_def,[],{:text=>nil,:abbr=>"Tigra Genesis"},[])
32
+ md_el(:abbr_def,[],{:abbr=>"Tigra Genesis",:text=>nil},[])
33
33
  ],{},[])
34
34
  *** Output of to_html ***
35
35
 
@@ -75,8 +75,8 @@ The HTML specification is maintained by the W3C.Operation Tigra Genesis is going
75
75
 
76
76
  *** Output of Markdown.pl (parsed) ***
77
77
  <p>The HTML specification is maintained by the W3C.</p
78
- ><p>*[HTML]: Hyper Text Markup Language
79
- *[W3C]: World Wide Web Consortium</p
80
- ><p>Operation Tigra Genesis is going well.</p
81
- ><p>*[Tigra Genesis]:</p
82
- >
78
+ ><p>*[HTML]: Hyper Text Markup Language
79
+ *[W3C]: World Wide Web Consortium</p
80
+ ><p>Operation Tigra Genesis is going well.</p
81
+ ><p>*[Tigra Genesis]:</p
82
+ >
@@ -27,7 +27,7 @@ md_el(:document,[
27
27
  md_em(["emphasis"], [[:ref, "hello"], [:ref, "notfound"]]),
28
28
  md_ial([[:ref, "hello"], [:ref, "notfound"]])
29
29
  ], [[:id, "par2"]]),
30
- md_el(:ald,[],{:ald_id=>"hello",:ald=>[[:class, "chello"]]},[])
30
+ md_el(:ald,[],{:ald=>[[:class, "chello"]],:ald_id=>"hello"},[])
31
31
  ],{},[])
32
32
  *** Output of to_html ***
33
33
 
@@ -77,13 +77,13 @@ Header with attributesHeader with attributesHeader no attributesParagraph with e
77
77
  <p>{hello}: .chello</p>
78
78
 
79
79
  *** Output of Markdown.pl (parsed) ***
80
- <h2>Header with attributes {#header1} </h2
81
- ><h3>Header with attributes ### {#header2}</h3
82
- ><h3>Header no attributes</h3
83
- ><p>{warn2}Paragraph with a.
80
+ <h2>Header with attributes {#header1} </h2
81
+ ><h3>Header with attributes ### {#header2}</h3
82
+ ><h3>Header no attributes</h3
83
+ ><p>{warn2}Paragraph with a.
84
84
  {#par1}</p
85
- ><p>Paragraph with <em>emphasis</em
86
- >{hello notfound}
87
- {#par2}</p
88
- ><p>{hello}: .chello</p
89
- >
85
+ ><p>Paragraph with <em>emphasis</em
86
+ >{hello notfound}
87
+ {#par2}</p
88
+ ><p>{hello}: .chello</p
89
+ >
@@ -13,8 +13,8 @@ Paragraph
13
13
  *** Output of inspect ***
14
14
  md_el(:document,[
15
15
  md_par(["Paragraph"], [[:ref, "a"]]),
16
- md_el(:ald,[],{:ald_id=>"a",:ald=>[[:ref, "b"]]},[]),
17
- md_el(:ald,[],{:ald_id=>"b",:ald=>[[:ref, "a"]]},[])
16
+ md_el(:ald,[],{:ald=>[[:ref, "b"]],:ald_id=>"a"},[]),
17
+ md_el(:ald,[],{:ald=>[[:ref, "a"]],:ald_id=>"b"},[])
18
18
  ],{},[])
19
19
  *** Output of to_html ***
20
20
 
@@ -46,6 +46,6 @@ Paragraph
46
46
  *** Output of Markdown.pl (parsed) ***
47
47
  <p>Paragraph
48
48
  {a}</p
49
- ><p>{a}: b
49
+ ><p>{a}: b
50
50
  {b}: a</p
51
- >
51
+ >
@@ -10,7 +10,7 @@ Paragraph2
10
10
  *** Output of inspect ***
11
11
  md_el(:document,[
12
12
  md_par(["Paragraph2"], [[:id, "2"]]),
13
- md_el(:ald,[],{:ald_id=>"paragraph",:ald=>[[:class, "maruku-par"]]},[])
13
+ md_el(:ald,[],{:ald=>[[:class, "maruku-par"]],:ald_id=>"paragraph"},[])
14
14
  ],{},[])
15
15
  *** Output of to_html ***
16
16
 
@@ -43,5 +43,5 @@ Paragraph2
43
43
  *** Output of Markdown.pl (parsed) ***
44
44
  <p>Paragraph2
45
45
  {#2}</p
46
- ><p>{paragraph}: .maruku-par</p
47
- >
46
+ ><p>{paragraph}: .maruku-par</p
47
+ >
@@ -43,5 +43,5 @@ Linea 1Linea 2
43
43
 
44
44
  *** Output of Markdown.pl (parsed) ***
45
45
  <p>Linea 1</p
46
- ><p>Linea 2</p
47
- >
46
+ ><p>Linea 2</p
47
+ >
@@ -109,23 +109,23 @@ four
109
109
 
110
110
  *** Output of Markdown.pl (parsed) ***
111
111
  <p>This block is composed of three lines:</p
112
- ><pre
113
- ><code>one
112
+ ><pre
113
+ ><code>one
114
114
 
115
115
  three
116
116
  </code
117
- ></pre
118
- ><p>This block is composed of 5</p
119
- ><pre
120
- ><code>one
117
+ ></pre
118
+ ><p>This block is composed of 5</p
119
+ ><pre
120
+ ><code>one
121
121
 
122
122
 
123
123
  four
124
124
  </code
125
- ></pre
126
- ><p>This block is composed of 2</p
127
- ><pre
128
- ><code>two
125
+ ></pre
126
+ ><p>This block is composed of 2</p
127
+ ><pre
128
+ ><code>two
129
129
  </code
130
- ></pre
131
- >
130
+ ></pre
131
+ >
@@ -54,11 +54,11 @@ end tell
54
54
 
55
55
  *** Output of Markdown.pl (parsed) ***
56
56
  <p>Here is an example of AppleScript:</p
57
- ><pre
58
- ><code>tell application "Foo"
57
+ ><pre
58
+ ><code>tell application "Foo"
59
59
  beep
60
60
  end tell
61
61
  tab
62
62
  </code
63
- ></pre
64
- >
63
+ ></pre
64
+ >
@@ -47,12 +47,13 @@ Code
47
47
 
48
48
  *** Output of Markdown.pl (parsed) ***
49
49
  <blockquote>
50
- <p>Code</p
51
- >
50
+ <p>Code</p
51
+ >
52
+
52
53
  <pre
53
- ><code>Ciao
54
+ ><code>Ciao
54
55
  </code
55
- ></pre
56
- >
56
+ ></pre
57
+ >
57
58
  </blockquote
58
- >
59
+ >
@@ -99,23 +99,23 @@ This is code (4 spaces):This is not codeThis is code (1 tab):This is not code
99
99
 
100
100
  *** Output of Markdown.pl (parsed) ***
101
101
  <p>This is code (4 spaces):</p
102
- ><pre
103
- ><code>Code
102
+ ><pre
103
+ ><code>Code
104
104
  </code
105
- ></pre
106
- ><p>This is not code</p
107
- ><pre
108
- ><code>Code
105
+ ></pre
106
+ ><p>This is not code</p
107
+ ><pre
108
+ ><code>Code
109
109
  </code
110
- ></pre
111
- ><p>This is code (1 tab):</p
112
- ><pre
113
- ><code>Code
110
+ ></pre
111
+ ><p>This is code (1 tab):</p
112
+ ><pre
113
+ ><code>Code
114
114
  </code
115
- ></pre
116
- ><p>This is not code</p
117
- ><pre
118
- ><code>Code
115
+ ></pre
116
+ ><p>This is not code</p
117
+ ><pre
118
+ ><code>Code
119
119
  </code
120
- ></pre
121
- >
120
+ ></pre
121
+ >
@@ -32,7 +32,7 @@ Hello! how are you?
32
32
 
33
33
  *** Output of Markdown.pl (parsed) ***
34
34
  <p
35
- ><em>Hello!</em
36
- > how are <strong>you</strong
37
- >?</p
38
- >
35
+ ><em>Hello!</em
36
+ > how are <strong>you</strong
37
+ >?</p
38
+ >