bai-maruku 0.5.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (190) hide show
  1. data/Rakefile +102 -0
  2. data/bin/marudown +29 -0
  3. data/bin/maruku +181 -0
  4. data/bin/marutest +345 -0
  5. data/bin/marutex +31 -0
  6. data/docs/changelog.md +334 -0
  7. data/docs/div_syntax.md +36 -0
  8. data/docs/entity_test.md +23 -0
  9. data/docs/markdown_syntax.md +899 -0
  10. data/docs/maruku.md +346 -0
  11. data/docs/math.md +194 -0
  12. data/docs/other_stuff.md +51 -0
  13. data/docs/proposal.md +309 -0
  14. data/lib/maruku.rb +141 -0
  15. data/lib/maruku/attributes.rb +227 -0
  16. data/lib/maruku/defaults.rb +71 -0
  17. data/lib/maruku/errors_management.rb +92 -0
  18. data/lib/maruku/ext/div.rb +133 -0
  19. data/lib/maruku/ext/math.rb +41 -0
  20. data/lib/maruku/ext/math/elements.rb +27 -0
  21. data/lib/maruku/ext/math/latex_fix.rb +12 -0
  22. data/lib/maruku/ext/math/mathml_engines/blahtex.rb +107 -0
  23. data/lib/maruku/ext/math/mathml_engines/itex2mml.rb +29 -0
  24. data/lib/maruku/ext/math/mathml_engines/none.rb +20 -0
  25. data/lib/maruku/ext/math/mathml_engines/ritex.rb +24 -0
  26. data/lib/maruku/ext/math/parsing.rb +119 -0
  27. data/lib/maruku/ext/math/to_html.rb +187 -0
  28. data/lib/maruku/ext/math/to_latex.rb +26 -0
  29. data/lib/maruku/helpers.rb +260 -0
  30. data/lib/maruku/input/charsource.rb +326 -0
  31. data/lib/maruku/input/extensions.rb +69 -0
  32. data/lib/maruku/input/html_helper.rb +189 -0
  33. data/lib/maruku/input/linesource.rb +111 -0
  34. data/lib/maruku/input/parse_block.rb +614 -0
  35. data/lib/maruku/input/parse_doc.rb +227 -0
  36. data/lib/maruku/input/parse_span_better.rb +746 -0
  37. data/lib/maruku/input/rubypants.rb +225 -0
  38. data/lib/maruku/input/type_detection.rb +147 -0
  39. data/lib/maruku/input_textile2/t2_parser.rb +163 -0
  40. data/lib/maruku/maruku.rb +33 -0
  41. data/lib/maruku/output/s5/fancy.rb +756 -0
  42. data/lib/maruku/output/s5/to_s5.rb +138 -0
  43. data/lib/maruku/output/to_html.rb +991 -0
  44. data/lib/maruku/output/to_latex.rb +590 -0
  45. data/lib/maruku/output/to_latex_entities.rb +367 -0
  46. data/lib/maruku/output/to_latex_strings.rb +64 -0
  47. data/lib/maruku/output/to_markdown.rb +164 -0
  48. data/lib/maruku/output/to_s.rb +56 -0
  49. data/lib/maruku/string_utils.rb +191 -0
  50. data/lib/maruku/structures.rb +167 -0
  51. data/lib/maruku/structures_inspect.rb +87 -0
  52. data/lib/maruku/structures_iterators.rb +61 -0
  53. data/lib/maruku/tests/benchmark.rb +82 -0
  54. data/lib/maruku/tests/new_parser.rb +373 -0
  55. data/lib/maruku/tests/tests.rb +136 -0
  56. data/lib/maruku/textile2.rb +1 -0
  57. data/lib/maruku/toc.rb +199 -0
  58. data/lib/maruku/usage/example1.rb +33 -0
  59. data/lib/maruku/version.rb +40 -0
  60. data/maruku.gemspec +32 -0
  61. data/tests/bugs/code_in_links.md +101 -0
  62. data/tests/bugs/complex_escaping.md +38 -0
  63. data/tests/math/syntax.md +46 -0
  64. data/tests/math_usage/document.md +13 -0
  65. data/tests/others/abbreviations.md +11 -0
  66. data/tests/others/blank.md +4 -0
  67. data/tests/others/code.md +5 -0
  68. data/tests/others/code2.md +8 -0
  69. data/tests/others/code3.md +16 -0
  70. data/tests/others/email.md +4 -0
  71. data/tests/others/entities.md +19 -0
  72. data/tests/others/escaping.md +16 -0
  73. data/tests/others/extra_dl.md +101 -0
  74. data/tests/others/extra_header_id.md +13 -0
  75. data/tests/others/extra_table1.md +40 -0
  76. data/tests/others/footnotes.md +17 -0
  77. data/tests/others/headers.md +10 -0
  78. data/tests/others/hrule.md +10 -0
  79. data/tests/others/images.md +20 -0
  80. data/tests/others/inline_html.md +42 -0
  81. data/tests/others/links.md +38 -0
  82. data/tests/others/list1.md +4 -0
  83. data/tests/others/list2.md +5 -0
  84. data/tests/others/list3.md +8 -0
  85. data/tests/others/lists.md +32 -0
  86. data/tests/others/lists_after_paragraph.md +44 -0
  87. data/tests/others/lists_ol.md +39 -0
  88. data/tests/others/misc_sw.md +105 -0
  89. data/tests/others/one.md +1 -0
  90. data/tests/others/paragraphs.md +13 -0
  91. data/tests/others/sss06.md +352 -0
  92. data/tests/others/test.md +4 -0
  93. data/tests/s5/s5profiling.md +48 -0
  94. data/tests/unittest/abbreviations.md +64 -0
  95. data/tests/unittest/alt.md +29 -0
  96. data/tests/unittest/attributes/att2.md +32 -0
  97. data/tests/unittest/attributes/att3.md +40 -0
  98. data/tests/unittest/attributes/attributes.md +69 -0
  99. data/tests/unittest/attributes/circular.md +38 -0
  100. data/tests/unittest/attributes/default.md +34 -0
  101. data/tests/unittest/blank.md +36 -0
  102. data/tests/unittest/blanks_in_code.md +87 -0
  103. data/tests/unittest/bug_def.md +28 -0
  104. data/tests/unittest/bug_table.md +58 -0
  105. data/tests/unittest/code.md +46 -0
  106. data/tests/unittest/code2.md +40 -0
  107. data/tests/unittest/code3.md +83 -0
  108. data/tests/unittest/data_loss.md +37 -0
  109. data/tests/unittest/divs/div1.md +179 -0
  110. data/tests/unittest/divs/div2.md +33 -0
  111. data/tests/unittest/divs/div3_nest.md +57 -0
  112. data/tests/unittest/easy.md +27 -0
  113. data/tests/unittest/email.md +32 -0
  114. data/tests/unittest/encoding/iso-8859-1.md +35 -0
  115. data/tests/unittest/encoding/utf-8.md +30 -0
  116. data/tests/unittest/entities.md +106 -0
  117. data/tests/unittest/escaping.md +79 -0
  118. data/tests/unittest/extra_dl.md +64 -0
  119. data/tests/unittest/extra_header_id.md +75 -0
  120. data/tests/unittest/extra_table1.md +49 -0
  121. data/tests/unittest/footnotes.md +109 -0
  122. data/tests/unittest/headers.md +49 -0
  123. data/tests/unittest/hex_entities.md +49 -0
  124. data/tests/unittest/hrule.md +51 -0
  125. data/tests/unittest/html2.md +34 -0
  126. data/tests/unittest/html3.md +43 -0
  127. data/tests/unittest/html4.md +37 -0
  128. data/tests/unittest/html5.md +35 -0
  129. data/tests/unittest/ie.md +61 -0
  130. data/tests/unittest/images.md +102 -0
  131. data/tests/unittest/images2.md +43 -0
  132. data/tests/unittest/inline_html.md +187 -0
  133. data/tests/unittest/inline_html2.md +33 -0
  134. data/tests/unittest/links.md +164 -0
  135. data/tests/unittest/links2.md +34 -0
  136. data/tests/unittest/list1.md +58 -0
  137. data/tests/unittest/list12.md +40 -0
  138. data/tests/unittest/list2.md +68 -0
  139. data/tests/unittest/list3.md +76 -0
  140. data/tests/unittest/list4.md +101 -0
  141. data/tests/unittest/lists.md +204 -0
  142. data/tests/unittest/lists10.md +46 -0
  143. data/tests/unittest/lists11.md +28 -0
  144. data/tests/unittest/lists6.md +53 -0
  145. data/tests/unittest/lists9.md +76 -0
  146. data/tests/unittest/lists_after_paragraph.md +220 -0
  147. data/tests/unittest/lists_ol.md +274 -0
  148. data/tests/unittest/loss.md +28 -0
  149. data/tests/unittest/math/equations.md +86 -0
  150. data/tests/unittest/math/inline.md +58 -0
  151. data/tests/unittest/math/math2.md +88 -0
  152. data/tests/unittest/math/notmath.md +37 -0
  153. data/tests/unittest/math/table.md +52 -0
  154. data/tests/unittest/math/table2.md +54 -0
  155. data/tests/unittest/misc_sw.md +537 -0
  156. data/tests/unittest/notyet/escape.md +33 -0
  157. data/tests/unittest/notyet/header_after_par.md +70 -0
  158. data/tests/unittest/notyet/ticks.md +30 -0
  159. data/tests/unittest/notyet/triggering.md +169 -0
  160. data/tests/unittest/olist.md +57 -0
  161. data/tests/unittest/one.md +27 -0
  162. data/tests/unittest/paragraph.md +28 -0
  163. data/tests/unittest/paragraph_rules/dont_merge_ref.md +54 -0
  164. data/tests/unittest/paragraph_rules/tab_is_blank.md +36 -0
  165. data/tests/unittest/paragraphs.md +58 -0
  166. data/tests/unittest/pending/amps.md +27 -0
  167. data/tests/unittest/pending/empty_cells.md +49 -0
  168. data/tests/unittest/pending/link.md +84 -0
  169. data/tests/unittest/pending/ref.md +33 -0
  170. data/tests/unittest/recover/recover_links.md +27 -0
  171. data/tests/unittest/red_tests/abbrev.md +1388 -0
  172. data/tests/unittest/red_tests/lists7.md +68 -0
  173. data/tests/unittest/red_tests/lists7b.md +128 -0
  174. data/tests/unittest/red_tests/lists8.md +76 -0
  175. data/tests/unittest/references/long_example.md +83 -0
  176. data/tests/unittest/references/spaces_and_numbers.md +27 -0
  177. data/tests/unittest/smartypants.md +126 -0
  178. data/tests/unittest/syntax_hl.md +64 -0
  179. data/tests/unittest/table_attributes.md +46 -0
  180. data/tests/unittest/test.md +31 -0
  181. data/tests/unittest/underscore_in_words.md +27 -0
  182. data/tests/unittest/wrapping.md +79 -0
  183. data/tests/unittest/xml.md +45 -0
  184. data/tests/unittest/xml2.md +31 -0
  185. data/tests/unittest/xml3.md +38 -0
  186. data/tests/unittest/xml_instruction.md +64 -0
  187. data/tests/utf8-files/simple.md +1 -0
  188. data/unit_test_block.sh +5 -0
  189. data/unit_test_span.sh +3 -0
  190. metadata +251 -0
@@ -0,0 +1,101 @@
1
+ Write a comment here
2
+ *** Parameters: ***
3
+ {} # params
4
+ *** Markdown input: ***
5
+ **This bug is now solved**
6
+
7
+ Previously, a bug would not let you use `code` inside links text.
8
+
9
+ So this:
10
+ Use the [`syntax`][syntax]
11
+ produces:
12
+ > Use the [`syntax`][syntax]
13
+
14
+ And this:
15
+ Use the `[syntax][syntax]`
16
+ produces:
17
+ > Use the `[syntax][syntax]`
18
+
19
+ [syntax]: http://gogole.com
20
+
21
+
22
+ *** Output of inspect ***
23
+ md_el(:document,[
24
+ md_par([md_strong(["This bug is now solved"])]),
25
+ md_par([
26
+ "Previously, a bug would not let you use ",
27
+ md_code("code"),
28
+ " inside links text."
29
+ ]),
30
+ md_par([
31
+ "So this: Use the ",
32
+ md_link([md_code("syntax")],"syntax"),
33
+ " produces:"
34
+ ]),
35
+ md_el(:quote,[md_par(["Use the ", md_link([md_code("syntax")],"syntax")])],{},[]),
36
+ md_par(["And this: Use the ", md_code("[syntax][syntax]"), " produces:"]),
37
+ md_el(:quote,[md_par(["Use the ", md_code("[syntax][syntax]")])],{},[]),
38
+ md_ref_def("syntax", "http://gogole.com", {:title=>nil})
39
+ ],{},[])
40
+ *** Output of to_html ***
41
+ <p><strong>This bug is now solved</strong></p>
42
+
43
+ <p>Previously, a bug would not let you use <code>code</code> inside links text.</p>
44
+
45
+ <p>So this: Use the <a href='http://gogole.com'><code>syntax</code></a> produces:</p>
46
+
47
+ <blockquote>
48
+ <p>Use the <a href='http://gogole.com'><code>syntax</code></a></p>
49
+ </blockquote>
50
+
51
+ <p>And this: Use the <code>[syntax][syntax]</code> produces:</p>
52
+
53
+ <blockquote>
54
+ <p>Use the <code>[syntax][syntax]</code></p>
55
+ </blockquote>
56
+ *** Output of to_latex ***
57
+ \textbf{This bug is now solved}
58
+
59
+ Previously, a bug would not let you use {\colorbox[rgb]{1.00,0.93,1.00}{\tt code}} inside links text.
60
+
61
+ So this: Use the \href{http://gogole.com}{{\colorbox[rgb]{1.00,0.93,1.00}{\tt syntax}}} produces:
62
+
63
+ \begin{quote}%
64
+ Use the \href{http://gogole.com}{{\colorbox[rgb]{1.00,0.93,1.00}{\tt syntax}}}
65
+
66
+
67
+ \end{quote}
68
+ And this: Use the {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char91syntax\char93\char91syntax\char93}} produces:
69
+
70
+ \begin{quote}%
71
+ Use the {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char91syntax\char93\char91syntax\char93}}
72
+
73
+
74
+ \end{quote}
75
+ *** Output of to_md ***
76
+ This bug is now solved
77
+
78
+ Previously, a bug would not let you use
79
+ inside links text.
80
+
81
+ So this: Use the produces:
82
+
83
+ Use the
84
+
85
+ And this: Use the produces:
86
+
87
+ Use the
88
+ *** Output of to_s ***
89
+ This bug is now solvedPreviously, a bug would not let you use inside links text.So this: Use the produces:Use the And this: Use the produces:Use the
90
+ *** EOF ***
91
+
92
+
93
+
94
+ OK!
95
+
96
+
97
+
98
+ *** Output of Markdown.pl ***
99
+ (not used anymore)
100
+ *** Output of Markdown.pl (parsed) ***
101
+ (not used anymore)
@@ -0,0 +1,38 @@
1
+ Write a comment here
2
+ *** Parameters: ***
3
+ {} # params
4
+ *** Markdown input: ***
5
+
6
+
7
+ What do you see here? `\\` it should be two backslashes.
8
+
9
+
10
+ *** Output of inspect ***
11
+ md_el(:document,[
12
+ md_par([
13
+ "What do you see here? ",
14
+ md_code("\\\\"),
15
+ " it should be two backslashes."
16
+ ])
17
+ ],{},[])
18
+ *** Output of to_html ***
19
+ <p>What do you see here? <code>\\</code> it should be two backslashes.</p>
20
+ *** Output of to_latex ***
21
+ What do you see here? {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char92\char92}} it should be two backslashes.
22
+ *** Output of to_md ***
23
+ What do you see here? it should be two
24
+ backslashes.
25
+ *** Output of to_s ***
26
+ What do you see here? it should be two backslashes.
27
+ *** EOF ***
28
+
29
+
30
+
31
+ OK!
32
+
33
+
34
+
35
+ *** Output of Markdown.pl ***
36
+ (not used anymore)
37
+ *** Output of Markdown.pl (parsed) ***
38
+ (not used anymore)
@@ -0,0 +1,46 @@
1
+ LaTeX preamble: preamble.tex
2
+ CSS: math.css
3
+
4
+ Here are some formulas:
5
+
6
+ * $\alpha$
7
+ * $x^{n}+y^{n} \neq z^{n}$
8
+
9
+ Some inline maths: $\sum_{n=1}^\infty \frac{(-1)^n}{n} = \ln 2$.
10
+
11
+ Some display maths:
12
+
13
+ \[ \sum_{n=1}^\infty \frac{1}{n} \]
14
+ \[ \sum_{n=1}^\infty \frac{1}{n} \text{ is divergent, but } \lim_{n \to \infty} \sum_{i=1}^n \frac{1}{i} - \ln n \text{ exists.} \] (a)
15
+
16
+ Some random AMSTeX symbols - thanks to Robin Snader for adding these:
17
+
18
+ $$ \beth \Subset \bigtriangleup \smallsmile \bumpeq \ggg \pitchfork $$
19
+
20
+ Note that $\hat g$ , $J$, and $\gamma_1\gamma_2$ all restrict to
21
+
22
+ $x_1 \overline{x_2} \oplus x_2 \overline{x_1}$ and that this module
23
+ is linear in $x_1$ and $x_2$.
24
+
25
+ See label \eqref{a}.
26
+
27
+ $$ \href{#hello}{\alpha+\beta} $$
28
+
29
+ ## Cross references ##
30
+
31
+ The following are 4 equations, labeled A,B,C,D:
32
+
33
+ $$ \alpha $$ (A)
34
+
35
+ \[
36
+ \beta
37
+ \] (B)
38
+
39
+ $$ \gamma \label{C} $$
40
+
41
+ \[
42
+ \delta \label{D}
43
+ \]
44
+
45
+ You can now refer to (eq:A), (eq:B), \eqref{C}, \eqref{D}.
46
+
@@ -0,0 +1,13 @@
1
+ css: math.css
2
+
3
+ This is an example document. Inline: $a$, $b$, $q$ and stop.
4
+
5
+ $$ \int_a^b f(x) dx $$ (1)
6
+
7
+ See for example (eq:1).
8
+
9
+ Equation inline: $ \int_a^b f(x) dx $ and that's it.
10
+
11
+
12
+ Spacing: Maruku outputs sizes and alignment for images in `ex`. An `ex` is one `x`:
13
+ x, $\textrm{x}$, $x$ should have the same height.
@@ -0,0 +1,11 @@
1
+
2
+ The HTML specification is maintained by the W3C.
3
+
4
+ *[HTML]: Hyper Text Markup Language
5
+ *[W3C]: World Wide Web Consortium
6
+
7
+
8
+
9
+ Operation Tigra Genesis is going well.
10
+
11
+ *[Tigra Genesis]:
@@ -0,0 +1,4 @@
1
+
2
+ Linea 1
3
+
4
+ Linea 2
@@ -0,0 +1,5 @@
1
+ Here is an example of AppleScript:
2
+
3
+ tell application "Foo"
4
+ beep
5
+ end tell
@@ -0,0 +1,8 @@
1
+ > ## This is a header.
2
+ >
3
+ > 1. This is the first list item.
4
+ > 2. This is the second list item.
5
+ >
6
+ > Here's some example code:
7
+ >
8
+ > return shell_exec("echo $input | $markdown_script");
@@ -0,0 +1,16 @@
1
+
2
+ This is code (4 spaces):
3
+
4
+ Code
5
+ This is not code
6
+
7
+ Code
8
+
9
+ This is code (1 tab):
10
+
11
+ Code
12
+ This is not code
13
+
14
+ Code
15
+
16
+
@@ -0,0 +1,4 @@
1
+
2
+
3
+ This is an email address: <andrea@invalid.it>
4
+
@@ -0,0 +1,19 @@
1
+ Maruku translates HTML entities to the equivalent in LaTeX:
2
+
3
+ Entity | Result
4
+ ------------|----------
5
+ `&copy;` | &copy;
6
+ `&pound;` | &pound;
7
+ `a&nbsp;b` | a&nbsp;b
8
+ `&lambda;` | &lambda;
9
+ `&mdash;` | &mdash;
10
+
11
+
12
+ Entity-substitution does not happen in code blocks or inline code.
13
+
14
+ The following should not be translated:
15
+
16
+ &copy;
17
+
18
+ It should read just like this: `&copy;`.
19
+
@@ -0,0 +1,16 @@
1
+ Hello: ! \! \` \{ \} \[ \] \( \) \# \. \! * \*
2
+
3
+
4
+ Ora, *emphasis*, **bold**, * <- due asterischi-> * , un underscore-> _ , _emphasis_,
5
+ incre*dible*e!
6
+
7
+
8
+ This is ``Code with an escape: -> ` <- `` (after)
9
+
10
+ This is ```Code with a special: -> ` <- ```(after)
11
+
12
+ `Start ` of paragraph
13
+
14
+ End of `paragraph `
15
+
16
+ Exactly one space: ` ` and also here: `` ``
@@ -0,0 +1,101 @@
1
+ CSS: style.css
2
+
3
+
4
+ Apple
5
+ : Pomaceous fruit of plants of the genus Malus in
6
+ the family Rosaceae.
7
+
8
+ Orange
9
+ : The fruit of an evergreen tree of the genus Citrus.
10
+
11
+ ***
12
+
13
+ Apple
14
+ : Pomaceous fruit of plants of the genus Malus in
15
+ the family Rosaceae.
16
+
17
+ Orange
18
+ : The fruit of an evergreen tree of the genus Citrus.
19
+
20
+
21
+ ***
22
+
23
+ Apple
24
+ : Pomaceous fruit of plants of the genus Malus in
25
+ the family Rosaceae.
26
+ : An american computer company.
27
+
28
+ Orange
29
+ : The fruit of an evergreen tree of the genus Citrus.
30
+
31
+ ***
32
+
33
+ Term 1
34
+ Term 2
35
+ : Definition a
36
+
37
+ Term 3
38
+ : Definition b
39
+
40
+ ***
41
+
42
+
43
+ Term 1
44
+ Term 2
45
+ Term 2a
46
+ Term 2b
47
+ : Definition a
48
+
49
+ Term 3
50
+ : Definition b
51
+
52
+ ***
53
+
54
+ Apple
55
+
56
+ : Pomaceous fruit of plants of the genus Malus in
57
+ the family Rosaceae.
58
+
59
+ Orange
60
+
61
+ : The fruit of an evergreen tree of the genus Citrus.
62
+
63
+ ***
64
+
65
+ Term 1
66
+
67
+ : This is a definition with two paragraphs. Lorem ipsum
68
+ dolor sit amet, consectetuer adipiscing elit. Aliquam
69
+ hendrerit mi posuere lectus.
70
+
71
+ Vestibulum enim wisi, viverra nec, fringilla in, laoreet
72
+ vitae, risus.
73
+
74
+ : Second definition for term 1, also wrapped in a paragraph
75
+ because of the blank line preceding it.
76
+
77
+ Term 2
78
+
79
+ : This definition has a code block, a blockquote and a list.
80
+
81
+ code block.
82
+
83
+ > block quote
84
+ > on two lines.
85
+
86
+ 1. first list item
87
+ 2. second list item
88
+
89
+ ***
90
+
91
+ Term 1
92
+ Term 2
93
+ Term 2a
94
+ Term 2b
95
+ : Definition a
96
+
97
+ This is a paragraph
98
+
99
+ This is a term
100
+
101
+ : definition
@@ -0,0 +1,13 @@
1
+ Header 1 {#header1}
2
+ ========
3
+
4
+ Header 2 {#header2}
5
+ --------
6
+
7
+ ### Header 3 ### {#header3}
8
+
9
+ Then you can create links to different parts of the same document like this:
10
+
11
+ [Link back to header 1](#header1),
12
+ [Link back to header 2](#header2),
13
+ [Link back to header 3](#header3)
@@ -0,0 +1,40 @@
1
+ CSS: style.css
2
+
3
+ First Header | Second Header
4
+ ------------- | -------------
5
+ Content Cell | Content Cell
6
+ Content Cell | Content Cell
7
+
8
+ ***
9
+
10
+ | Item | Value |
11
+ | --------- | -----:|
12
+ | Computer | $1600 |
13
+ | Phone | $12 |
14
+ | Pipe | $1 |
15
+
16
+ ***
17
+
18
+ | Function name | Description |
19
+ | ------------- | ------------------------------ |
20
+ | `help()` | Display the help window. |
21
+ | `destroy()` | **Destroy your computer!** |
22
+
23
+
24
+ ***
25
+
26
+ | Very long long head |
27
+ | :------------ |
28
+ | left |
29
+
30
+ ***
31
+
32
+ | Very long long head |
33
+ | -------------------: |
34
+ | right |
35
+
36
+ ***
37
+
38
+ | Very long long head |
39
+ | :------------------: |
40
+ | center |