maruku 0.5.0 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- data/docs/changelog.html +65 -6
- data/docs/changelog.md +31 -1
- data/docs/entity_test.html +17 -17
- data/docs/exd.html +46 -8
- data/docs/index.html +58 -31
- data/docs/markdown_syntax.html +170 -6
- data/docs/maruku.html +58 -31
- data/docs/maruku.md +9 -16
- data/docs/math.md +76 -25
- data/docs/proposal.html +65 -9
- data/lib/maruku/ext/diagrams/layout.rb +405 -2
- data/lib/maruku/ext/diagrams/to_latex.rb +0 -205
- data/lib/maruku/ext/math/to_html.rb +0 -8
- data/lib/maruku/input/charsource.rb +5 -4
- data/lib/maruku/input/parse_doc.rb +1 -0
- data/lib/maruku/input/parse_span_better.rb +7 -2
- data/lib/maruku/output/to_html.rb +50 -7
- data/lib/maruku/output/to_latex.rb +6 -2
- data/lib/maruku/output/to_latex_entities.rb +3 -3
- data/lib/maruku/version.rb +1 -1
- data/tests/unittest/attributes/attributes.md +8 -49
- data/tests/unittest/blanks_in_code.md +6 -0
- data/tests/unittest/code.md +2 -0
- data/tests/unittest/code2.md +3 -1
- data/tests/unittest/code3.md +8 -0
- data/tests/unittest/email.md +2 -2
- data/tests/unittest/entities.md +2 -0
- data/tests/unittest/ie.md +112 -0
- data/tests/unittest/images.md +2 -2
- data/tests/unittest/images2.md +55 -0
- data/tests/unittest/inline_html.md +4 -0
- data/tests/unittest/links.md +1 -1
- data/tests/unittest/list3.md +3 -1
- data/tests/unittest/misc_sw.md +3 -1
- data/tests/unittest/smartypants.md +8 -0
- data/tests/unittest/syntax_hl.md +7 -1
- data/tests/unittest/test.md +2 -0
- metadata +4 -3
- data/docs/a.md +0 -4
data/docs/maruku.html
CHANGED
@@ -13,10 +13,12 @@
|
|
13
13
|
<p><a href='http://maruku.rubyforge.org/'>Maruku</a> is a Markdown interpreter written in <a href='http://www.ruby-lang.org'>Ruby</a>.</p>
|
14
14
|
|
15
15
|
<blockquote id='news'>
|
16
|
-
<p><a href='#release_notes'>Last release</a> is version 0.5.
|
16
|
+
<p><a href='#release_notes'>Last release</a> is version 0.5.1 – 2007-01-24.</p>
|
17
17
|
|
18
18
|
<p>Use this command to update:</p>
|
19
|
-
|
19
|
+
|
20
|
+
<pre><code>$ gem update maruku</code></pre>
|
21
|
+
</blockquote>
|
20
22
|
<hr />
|
21
23
|
<p>Maruku allows you to write in an easy-to-read-and-write syntax, like this:</p>
|
22
24
|
|
@@ -73,13 +75,15 @@
|
|
73
75
|
<p>The development site is <a href='http://rubyforge.org/projects/maruku/'>http://rubyforge.org/projects/maruku/</a>.</p>
|
74
76
|
|
75
77
|
<p>Install with:</p>
|
76
|
-
|
77
|
-
</code></pre>
|
78
|
+
|
79
|
+
<pre style='background-color: #efefff;'><code class='sh' lang='sh'>$ gem install maruku</code></pre>
|
80
|
+
|
78
81
|
<p>Released files can also be seen at <a href='http://rubyforge.org/frs/?group_id=2795'>http://rubyforge.org/frs/?group_id=2795</a>.</p>
|
79
82
|
|
80
83
|
<p>Anonymous access to the repository is possible with:</p>
|
81
|
-
|
82
|
-
</code></pre>
|
84
|
+
|
85
|
+
<pre style='background-color: #efefff;'><code class='sh' lang='sh'>$ svn checkout svn://rubyforge.org/var/svn/maruku/trunk</code></pre>
|
86
|
+
|
83
87
|
<p>If you want commit access to the repository, just create an account on Rubyforge and <a href='http://www.dis.uniroma1.it/~acensi/contact.html'>drop me a mail</a>.</p>
|
84
88
|
|
85
89
|
<h3 id='bugs_report'><span class='maruku_section_number'>2.1. </span>Bugs report</h3>
|
@@ -91,26 +95,33 @@
|
|
91
95
|
<h3 id='embedded_maruku'><span class='maruku_section_number'>3.1. </span>Embedded Maruku</h3>
|
92
96
|
|
93
97
|
<p>This is the basic usage:</p>
|
94
|
-
<pre><code>require 'rubygems'
|
95
|
-
require 'maruku'
|
96
98
|
|
97
|
-
|
98
|
-
|
99
|
-
|
99
|
+
<pre style='background-color: #efffef;'><code class='ruby' lang='ruby'><span class='ident'>require</span> <span class='punct'>'</span><span class='string'>rubygems</span><span class='punct'>'</span>
|
100
|
+
<span class='ident'>require</span> <span class='punct'>'</span><span class='string'>maruku</span><span class='punct'>'</span>
|
101
|
+
|
102
|
+
<span class='ident'>doc</span> <span class='punct'>=</span> <span class='constant'>Maruku</span><span class='punct'>.</span><span class='ident'>new</span><span class='punct'>(</span><span class='ident'>markdown_string</span><span class='punct'>)</span>
|
103
|
+
<span class='ident'>puts</span> <span class='ident'>doc</span><span class='punct'>.</span><span class='ident'>to_html</span></code></pre>
|
104
|
+
|
100
105
|
<p>The method <code>to_html</code> outputs only an HTML fragment, while the method <code>to_html_document</code> outputs a complete XHTML 1.0 document:</p>
|
101
|
-
|
102
|
-
</code></pre>
|
106
|
+
|
107
|
+
<pre style='background-color: #efffef;'><code class='ruby' lang='ruby'><span class='ident'>puts</span> <span class='ident'>doc</span><span class='punct'>.</span><span class='ident'>to_html_document</span></code></pre>
|
108
|
+
|
103
109
|
<p>You can have the REXML document tree with:</p>
|
104
|
-
|
105
|
-
</code></pre>
|
110
|
+
|
111
|
+
<pre style='background-color: #efffef;'><code class='ruby' lang='ruby'><span class='ident'>tree</span> <span class='punct'>=</span> <span class='ident'>doc</span><span class='punct'>.</span><span class='ident'>to_html_document_tree</span></code></pre>
|
112
|
+
|
106
113
|
<h3 id='from_the_command_line'><span class='maruku_section_number'>3.2. </span>From the command line</h3>
|
107
114
|
|
108
115
|
<p>There is one command-line program installed: <code>maruku</code>.</p>
|
109
116
|
|
110
117
|
<p>Without arguments, it converts Markdown to HTML:</p>
|
111
|
-
|
118
|
+
|
119
|
+
<pre style='background-color: #efefff;'><code class='sh' lang='sh'>$ maruku file.md # creates file.html</code></pre>
|
120
|
+
|
112
121
|
<p>With the <code>--pdf</code> arguments, it converts Markdown to LaTeX, then calls <code>pdflatex</code> to transform to PDF:</p>
|
113
|
-
|
122
|
+
|
123
|
+
<pre style='background-color: #efefff;'><code class='sh' lang='sh'>$ maruku --pdf file.md # creates file.tex and file.pdf</code></pre>
|
124
|
+
|
114
125
|
<h2 id='maruku-and-bluecloth'><span class='maruku_section_number'>4. </span>Maruku and Bluecloth</h2>
|
115
126
|
|
116
127
|
<p>The other Ruby implementation of Markdown is <a href='http://www.deveiate.org/projects/BlueCloth'>Bluecloth</a>.</p>
|
@@ -120,10 +131,12 @@ puts doc.to_html
|
|
120
131
|
<p>Maruku is usually faster than Bluecloth. Bluecloth is faster for very small documents. Bluecloth sometimes chokes on very big documents (it is reported that the blame should be on Ruby’s regexp implementation).</p>
|
121
132
|
|
122
133
|
<p>This is the canonical benchmark (the Markdown specification), executed with Ruby 1.8.5 on a Powerbook 1.5GhZ:</p>
|
134
|
+
|
123
135
|
<pre><code>BlueCloth (to_html): parsing 0.01 sec + rendering 1.87 sec = 1.88 sec (1.00x)
|
124
136
|
Maruku (to_html): parsing 0.66 sec + rendering 0.43 sec = 1.09 sec (1.73x)
|
125
137
|
Maruku (to_latex): parsing 0.67 sec + rendering 0.23 sec = 0.90 sec (2.10x)
|
126
138
|
</code></pre>
|
139
|
+
|
127
140
|
<p>Please note that Maruku has a lot more features and therefore is looking for much more patterns in the file.</p>
|
128
141
|
|
129
142
|
<h2 id='maruku_summary_of_features'><span class='maruku_section_number'>5. </span>Maruku summary of features</h2>
|
@@ -201,14 +214,16 @@ puts doc.to_html
|
|
201
214
|
<p>See the <a href='exd.html'>documentation for supported attributes</a>.</p>
|
202
215
|
|
203
216
|
<p>Meta-data for the document itself is specified through the use of email headers:</p>
|
204
|
-
|
217
|
+
|
218
|
+
<pre style='background-color: #ffefef;'><code>Title: A simple document containing meta-headers
|
205
219
|
CSS: style.css
|
206
220
|
|
207
|
-
Content of the document
|
208
|
-
|
221
|
+
Content of the document</code></pre>
|
222
|
+
|
209
223
|
<p>When creating the document through</p>
|
210
|
-
|
211
|
-
</code></pre>
|
224
|
+
|
225
|
+
<pre style='background-color: #efffef;'><code class='ruby' lang='ruby'><span class='constant'>Maruku</span><span class='punct'>.</span><span class='ident'>new</span><span class='punct'>(</span><span class='ident'>s</span><span class='punct'>).</span><span class='ident'>to_html_document</span></code></pre>
|
226
|
+
|
212
227
|
<p>the title and stylesheet are added as expected.</p>
|
213
228
|
|
214
229
|
<p>Meta-data keys are assumed to be case-insensitive.</p>
|
@@ -216,9 +231,11 @@ Content of the document
|
|
216
231
|
<h3 id='toc-generation'><span class='maruku_section_number'>5.2. </span>Automatic generation of the table of contents</h3>
|
217
232
|
|
218
233
|
<p>If you create a list, and then set the <code>toc</code> attribute, when rendering Maruku will create an auto-generated table of contents.</p>
|
234
|
+
|
219
235
|
<pre><code>* This will become a table of contents (this text will be scraped).
|
220
236
|
{:toc}
|
221
237
|
</code></pre>
|
238
|
+
|
222
239
|
<p>You can see an example of this at the beginning of this document.</p>
|
223
240
|
|
224
241
|
<h3 id='entities'><span class='maruku_section_number'>5.3. </span>Use HTML entities</h3>
|
@@ -242,37 +259,47 @@ Content of the document
|
|
242
259
|
<ul>
|
243
260
|
<li>
|
244
261
|
<p>tables</p>
|
245
|
-
|
262
|
+
|
263
|
+
<pre style='background-color: #ffefef;'><code>Col1 | Very very long head | Very very long head|
|
246
264
|
-----|:-------------------:|-------------------:|
|
247
|
-
cell | center-align | right-align |</code></pre
|
265
|
+
cell | center-align | right-align |</code></pre>
|
266
|
+
<table><thead><tr><th>Col1</th><th>Very very long head</th><th>Very very long head</th></tr></thead><tbody><tr><td style='text-align: left;'>cell</td><td style='text-align: center;'>center-align</td><td style='text-align: right;'>right-align</td>
|
248
267
|
</tr></tbody></table></li>
|
249
268
|
|
250
269
|
<li>
|
251
270
|
<p>footnotes <sup id='fnref:1'><a href='#fn:1' rel='footnote'>1</a></sup></p>
|
252
|
-
<pre><code>* footnotes [^foot]
|
253
271
|
|
254
|
-
[^foot]
|
272
|
+
<pre style='background-color: #ffefef;'><code>* footnotes [^foot]
|
273
|
+
|
274
|
+
[^foot]: I really was missing those.</code></pre>
|
275
|
+
</li>
|
255
276
|
</ul>
|
256
277
|
|
257
278
|
<ul>
|
258
279
|
<li>
|
259
280
|
<p>Markdown inside HTML elements</p>
|
260
|
-
|
281
|
+
|
282
|
+
<pre><code class='xml' lang='xml'><span class='punct'><</span><span class='tag'>div</span> <span class='attribute'>markdown</span><span class='punct'>="</span><span class='string'>1</span><span class='punct'>"</span> <span class='attribute'>style</span><span class='punct'>="</span><span class='string'>border: solid 1px black</span><span class='punct'>"></span>
|
261
283
|
This is a div with Markdown **strong text**
|
262
|
-
|
284
|
+
<span class='punct'></</span><span class='tag'>div</span><span class='punct'>></span></code></pre>
|
285
|
+
<div style='border: solid 1px black'>
|
263
286
|
<p>This is a div with Markdown <strong>strong text</strong></p>
|
264
287
|
</div></li>
|
265
288
|
|
266
289
|
<li>
|
267
290
|
<p>header ids</p>
|
268
|
-
|
291
|
+
|
292
|
+
<pre style='background-color: #ffefef;'><code>## Download ## {#download}</code></pre>
|
293
|
+
|
269
294
|
<p>For example, <a href='#download'>a link to the download</a> header.</p>
|
270
295
|
</li>
|
271
296
|
|
272
297
|
<li>
|
273
298
|
<p>definition lists</p>
|
274
|
-
|
299
|
+
|
300
|
+
<pre style='background-color: #ffefef;'><code>Definition list
|
275
301
|
: something very hard to parse</code></pre>
|
302
|
+
|
276
303
|
<dl>
|
277
304
|
<dt>Definition list</dt>
|
278
305
|
|
@@ -296,4 +323,4 @@ I would love to have an equivalent in Ruby.
|
|
296
323
|
|
297
324
|
--><div class='footnotes'><hr /><ol><li id='fn:1'>
|
298
325
|
<p>I really was missing those.</p>
|
299
|
-
<a href='#fnref:1' rev='footnote'>↩</a></li></ol></div><div class='maruku_signature'><hr /><span style='font-size: small; font-style: italic'>Created by <a href='http://maruku.rubyforge.org' title='Maruku: a Markdown-superset interpreter for Ruby'>Maruku</a> at
|
326
|
+
<a href='#fnref:1' rev='footnote'>↩</a></li></ol></div><div class='maruku_signature'><hr /><span style='font-size: small; font-style: italic'>Created by <a href='http://maruku.rubyforge.org' title='Maruku: a Markdown-superset interpreter for Ruby'>Maruku</a> at 13:51 on Wednesday, January 24th, 2007.</span></div></body></html>
|
data/docs/maruku.md
CHANGED
@@ -11,7 +11,7 @@ Mar**u**k**u**: a Markdown-superset interpreter
|
|
11
11
|
|
12
12
|
[Maruku] is a Markdown interpreter written in [Ruby].
|
13
13
|
|
14
|
-
> [Last release](#release_notes) is version 0.5.
|
14
|
+
> [Last release](#release_notes) is version 0.5.1 -- 2007-01-24.
|
15
15
|
>
|
16
16
|
> Use this command to update:
|
17
17
|
>
|
@@ -94,7 +94,7 @@ Table of contents: (**auto-generated by Maruku!**)
|
|
94
94
|
{:ruby: lang=ruby code_background_color='#efffef'}
|
95
95
|
{:shell: lang=sh code_background_color='#efefff'}
|
96
96
|
{:markdown: code_background_color='#ffefef'}
|
97
|
-
{:html: lang=
|
97
|
+
{:html: lang=xml}
|
98
98
|
|
99
99
|
|
100
100
|
Release notes {#release_notes}
|
@@ -121,16 +121,14 @@ The development site is <http://rubyforge.org/projects/maruku/>.
|
|
121
121
|
Install with:
|
122
122
|
|
123
123
|
$ gem install maruku
|
124
|
-
|
125
|
-
{:shell}
|
124
|
+
{:shell}
|
126
125
|
|
127
126
|
Released files can also be seen at <http://rubyforge.org/frs/?group_id=2795>.
|
128
127
|
|
129
128
|
Anonymous access to the repository is possible with:
|
130
129
|
|
131
130
|
$ svn checkout svn://rubyforge.org/var/svn/maruku/trunk
|
132
|
-
|
133
|
-
{:shell}
|
131
|
+
{:shell}
|
134
132
|
|
135
133
|
If you want commit access to the repository, just create an account on Rubyforge and [drop me a mail][contact].
|
136
134
|
|
@@ -151,20 +149,17 @@ This is the basic usage:
|
|
151
149
|
|
152
150
|
doc = Maruku.new(markdown_string)
|
153
151
|
puts doc.to_html
|
154
|
-
|
155
|
-
{:ruby}
|
152
|
+
{:ruby}
|
156
153
|
|
157
154
|
The method `to_html` outputs only an HTML fragment, while the method `to_html_document` outputs a complete XHTML 1.0 document:
|
158
155
|
|
159
156
|
puts doc.to_html_document
|
160
|
-
|
161
|
-
{:ruby}
|
157
|
+
{:ruby}
|
162
158
|
|
163
159
|
You can have the REXML document tree with:
|
164
160
|
|
165
161
|
tree = doc.to_html_document_tree
|
166
|
-
|
167
|
-
{:ruby}
|
162
|
+
{:ruby}
|
168
163
|
|
169
164
|
### From the command line ###
|
170
165
|
|
@@ -267,14 +262,12 @@ of email headers:
|
|
267
262
|
CSS: style.css
|
268
263
|
|
269
264
|
Content of the document
|
270
|
-
|
271
|
-
{:markdown}
|
265
|
+
{:markdown}
|
272
266
|
|
273
267
|
When creating the document through
|
274
268
|
|
275
269
|
Maruku.new(s).to_html_document
|
276
|
-
|
277
|
-
{:ruby}
|
270
|
+
{:ruby}
|
278
271
|
|
279
272
|
the title and stylesheet are added as expected.
|
280
273
|
|
data/docs/math.md
CHANGED
@@ -1,12 +1,22 @@
|
|
1
|
+
Title: Math support in Maruku
|
1
2
|
LaTeX preamble: math_preamble.tex
|
2
3
|
LaTeX use listings: true
|
3
4
|
CSS: math.css style.css
|
5
|
+
use numbered headers: true
|
4
6
|
|
5
7
|
Math support in Maruku
|
6
8
|
======================
|
7
9
|
|
10
|
+
This document describes Maruku's support of inline LaTeX-style math.
|
8
11
|
|
9
|
-
|
12
|
+
At the moment, **these features are experimental**, are probably
|
13
|
+
buggy and the syntax and implementation are bound to change in
|
14
|
+
the near future.
|
15
|
+
|
16
|
+
Also, there are many subtleties of which one must care for
|
17
|
+
correctly serving the XHTML+MathML document to browsers.
|
18
|
+
In fact, *this documentation is __not__ enough to get you started*,
|
19
|
+
unless you feel very adventurous.
|
10
20
|
|
11
21
|
* toc
|
12
22
|
{:toc}
|
@@ -16,9 +26,9 @@ Syntax
|
|
16
26
|
|
17
27
|
### Inline math
|
18
28
|
|
19
|
-
Inline math
|
29
|
+
Inline math is contained inside couples of `$`.
|
20
30
|
|
21
|
-
Everything inside
|
31
|
+
Everything inside will be passed as-is to LaTeX: no Markdown
|
22
32
|
interpretation will take place.
|
23
33
|
|
24
34
|
Example: $x^{n}+y^{n} \neq z^{n}$ for $n \geq 3$
|
@@ -53,7 +63,7 @@ $$ \beth \Subset \bigtriangleup \bumpeq \ggg \pitchfork $$
|
|
53
63
|
|
54
64
|
Create a label for an equation in two ways:
|
55
65
|
|
56
|
-
* LaTeX style
|
66
|
+
* LaTeX style:
|
57
67
|
|
58
68
|
Consider \eqref{a}:
|
59
69
|
|
@@ -94,50 +104,91 @@ Enabling the extension
|
|
94
104
|
|
95
105
|
Use the `-m` option to choose the kind of output. Possible choices are:
|
96
106
|
|
97
|
-
|
107
|
+
`--math-engine itex2mml` : Outputs MathML using [itex2mml](#using_itex2mml).
|
108
|
+
`--math-engine ritex` : Outputs MathML using [ritex](#using_ritex).
|
109
|
+
`--math-engine blahtex` : Outputs MathML using [blahtex](#using_blahtex).
|
110
|
+
`--math-images blahtex` : Outputs PNGs using [blahtex](#using_blahtex).
|
98
111
|
|
99
|
-
|
112
|
+
### With embedded Maruku
|
100
113
|
|
101
|
-
|
102
|
-
* `-m blahtex`
|
114
|
+
You have to enable the math extension like this:
|
103
115
|
|
104
|
-
|
116
|
+
require 'maruku' # loads maruku
|
117
|
+
require 'maruku/ext/math' # loads the math extension
|
105
118
|
|
119
|
+
Use the following to choose the engine:
|
106
120
|
|
107
|
-
[
|
121
|
+
MaRuKu::Globals[:html_math_engine] = 'ritex'
|
122
|
+
MaRuKu::Globals[:html_png_engine] = 'blahtex'
|
123
|
+
|
124
|
+
Available MathML engines are 'none', 'itex2mml', 'blahtex'.
|
125
|
+
'blahtex' is the only PNG engine available.
|
126
|
+
|
127
|
+
External libraries needed
|
128
|
+
-------------------------
|
108
129
|
|
109
|
-
|
130
|
+
To output MathML or PNGs, it is needed to install one of the following libraries
|
110
131
|
|
111
|
-
|
132
|
+
### Using `ritex` ### {#using_ritex}
|
112
133
|
|
113
|
-
|
114
|
-
require 'maruku/ext/math' # loads the math extension
|
115
|
-
|
134
|
+
Install with
|
116
135
|
|
117
|
-
|
136
|
+
$ gem install ritex
|
118
137
|
|
119
|
-
|
138
|
+
ritex's abilities are very limited, but it is the easiest to install.
|
120
139
|
|
121
|
-
###
|
140
|
+
### Using `itex2mml` ### {#using_itex2mml}
|
122
141
|
|
123
|
-
|
142
|
+
itex2mml supports much more LaTeX commands/environments than ritex.
|
124
143
|
|
125
|
-
|
126
|
-
* `Globals[:math_png_dir_url]`
|
144
|
+
Install itex2mml using the instructions at:
|
127
145
|
|
146
|
+
> <http://golem.ph.utexas.edu/~distler/blog/itex2MML.html>
|
128
147
|
|
129
|
-
|
130
|
-
---------------
|
148
|
+
This is a summary of the available LaTeX commands:
|
131
149
|
|
132
|
-
|
150
|
+
> <http://golem.ph.utexas.edu/~distler/blog/itex2MMLcommands.html>
|
151
|
+
|
152
|
+
Moreover, [Jacques Distler] is integrating Maruku+itex2mml+[Instiki].
|
153
|
+
You can find more information here:
|
154
|
+
|
155
|
+
> <http://golem.ph.utexas.edu/~distler/blog/archives/001111.html>
|
156
|
+
|
157
|
+
[Jacques Distler]: http://golem.ph.utexas.edu/~distler
|
158
|
+
[instiki]: http://www.instiki.org
|
159
|
+
|
160
|
+
### Using `blahtex` ### {#using_blahtex}
|
161
|
+
|
162
|
+
Download from <http://www.blahtex.org>. Make sure you have
|
163
|
+
the command-line `blahtex` in your path.
|
164
|
+
|
165
|
+
|
166
|
+
Subtleties
|
167
|
+
----------
|
168
|
+
|
169
|
+
### Serving the right content/type ###
|
170
|
+
|
171
|
+
|
172
|
+
* Mozilla wants files to have the `.xhtml` extension.
|
133
173
|
|
134
174
|
...
|
135
175
|
|
136
|
-
###
|
176
|
+
### Where PNGS are put ###
|
177
|
+
|
178
|
+
* `Globals[:math_png_dir]`
|
179
|
+
|
180
|
+
* `Globals[:math_png_dir_url]`
|
181
|
+
|
182
|
+
|
183
|
+
### Styling equations ####
|
137
184
|
|
138
185
|
...
|
139
186
|
|
187
|
+
### Aligning PNGs ####
|
140
188
|
|
141
189
|
|
190
|
+
* using `ex`
|
142
191
|
|
192
|
+
* **IE7 bug**
|
143
193
|
|
194
|
+
...
|
data/docs/proposal.html
CHANGED
@@ -19,31 +19,41 @@
|
|
19
19
|
<p>Changed the syntax for compatibility with a future extension mechanism.</p>
|
20
20
|
|
21
21
|
<p>The first character in the curly braces must be a colon, optionally followed by a space:</p>
|
22
|
+
|
22
23
|
<pre><code>{: ref .class #id}
|
23
24
|
</code></pre>
|
25
|
+
|
24
26
|
<p>The old syntax was <code>{ref .class #id}</code>.</p>
|
25
27
|
|
26
28
|
<p>For ALDs, the new syntax is:</p>
|
29
|
+
|
27
30
|
<pre><code>{:ref_id: key=val .class #id }
|
28
31
|
</code></pre>
|
32
|
+
|
29
33
|
<p>instead of:</p>
|
34
|
+
|
30
35
|
<pre><code>{ref_id}: key=val .class #id
|
31
36
|
</code></pre>
|
37
|
+
|
32
38
|
<p>Converters that don’t use this syntax may just ignore everything which is in curly braces and starts with ”:”.</p>
|
33
39
|
</li>
|
34
40
|
|
35
41
|
<li>
|
36
42
|
<p>IAL can be put both <em>before</em> and <em>after</em> the element. There is no ambiguity as a blank line is needed between elements:</p>
|
43
|
+
|
37
44
|
<pre><code>Paragraph 1
|
38
45
|
|
39
46
|
{:par2}
|
40
47
|
Paragraph 2
|
41
48
|
</code></pre>
|
49
|
+
|
42
50
|
<p>is equivalent to:</p>
|
51
|
+
|
43
52
|
<pre><code>Paragraph 1
|
44
53
|
|
45
54
|
Paragraph 2
|
46
|
-
{:par2}</code></pre
|
55
|
+
{:par2}</code></pre>
|
56
|
+
</li>
|
47
57
|
|
48
58
|
<li>
|
49
59
|
<p>Simplified rules for escaping.</p>
|
@@ -61,23 +71,30 @@ Paragraph 2
|
|
61
71
|
<ol>
|
62
72
|
<li>
|
63
73
|
<p>inline attribute lists (IAL)</p>
|
64
|
-
|
74
|
+
|
75
|
+
<pre><code>## Header ## {: key=val .class #id ref_id}</code></pre>
|
76
|
+
</li>
|
65
77
|
|
66
78
|
<li>
|
67
79
|
<p>attribute lists definitions (ALD)</p>
|
68
|
-
|
80
|
+
|
81
|
+
<pre><code>{:ref_id: key=val .class #id}</code></pre>
|
82
|
+
</li>
|
69
83
|
</ol>
|
70
84
|
|
71
85
|
<p>Every span-level or block-level element can be followed by an IAL:</p>
|
86
|
+
|
72
87
|
<pre><code>### Header ### {: #header1 class=c1}
|
73
88
|
|
74
89
|
Paragraph *with emphasis*{: class=c1}
|
75
90
|
second line of paragraph
|
76
91
|
{: class=c1}
|
77
92
|
</code></pre>
|
93
|
+
|
78
94
|
<p>In this example, the three IALs refer to the header, the emphasis span, and the entire paragraph, respectively.</p>
|
79
95
|
|
80
96
|
<p>IALs can reference ALDs. The result of the following example is the same as the previous one:</p>
|
97
|
+
|
81
98
|
<pre><code>### Header ### {: #header1 c1}
|
82
99
|
|
83
100
|
Paragraph *with emphasis*{:c1}
|
@@ -86,11 +103,14 @@ second line of paragraph
|
|
86
103
|
|
87
104
|
{:c1: class=c1}
|
88
105
|
</code></pre>
|
106
|
+
|
89
107
|
<h2 id='attribute_lists'><span class='maruku_section_number'>2. </span>Attribute lists</h2>
|
90
108
|
|
91
109
|
<p>This is an example attribute list, which shows everything you can put inside:</p>
|
110
|
+
|
92
111
|
<pre><code>{: key1=val key2="long val" #myid .class1 .class2 ref1 ref2}
|
93
112
|
</code></pre>
|
113
|
+
|
94
114
|
<p>More in particular, an attribute list is a whitespace-separated list of elements of 4 different kinds:</p>
|
95
115
|
|
96
116
|
<ol>
|
@@ -116,21 +136,26 @@ second line of paragraph
|
|
116
136
|
<p><code>.myclass</code> means “add <code>myclass</code> to the current <code>class</code> attribute”.</p>
|
117
137
|
|
118
138
|
<p>So these are equivalent:</p>
|
139
|
+
|
119
140
|
<pre><code>{: .class1 .class2}
|
120
|
-
{: class="class1 class2"}</code></pre
|
141
|
+
{: class="class1 class2"}</code></pre>
|
142
|
+
</li>
|
121
143
|
</ul>
|
122
144
|
|
123
145
|
<p>The following attribute lists are equivalent:</p>
|
146
|
+
|
124
147
|
<pre><code>{: #myid .class1 .class2}
|
125
148
|
{: id=myid class=class1 .class2}
|
126
149
|
{: id=myid class="class1 class2"}
|
127
150
|
{: id=myid class="will be overridden" class=class1 .class2}
|
128
151
|
</code></pre>
|
152
|
+
|
129
153
|
<h2 id='where_to_put_inline_attribute_lists'><span class='maruku_section_number'>3. </span>Where to put inline attribute lists</h2>
|
130
154
|
|
131
155
|
<h3 id='for_blocklevel_elements'><span class='maruku_section_number'>3.1. </span>For block-level elements</h3>
|
132
156
|
|
133
157
|
<p>For paragraphs and other block-level elements, IAL go <strong>after</strong> the element:</p>
|
158
|
+
|
134
159
|
<pre><code>This is a paragraph.
|
135
160
|
Line 2 of the paragraph.
|
136
161
|
{: #myid .myclass}
|
@@ -139,13 +164,17 @@ A quote with a citation url:
|
|
139
164
|
> Who said that?
|
140
165
|
{: cite=google.com}
|
141
166
|
</code></pre>
|
167
|
+
|
142
168
|
<p>Note: empty lines between the block and the IAL are not tolerated. So this is not legal:</p>
|
169
|
+
|
143
170
|
<pre><code>This is a paragraph.
|
144
171
|
Line 2 of the paragraph.
|
145
172
|
|
146
173
|
{: #myid .myclass}
|
147
174
|
</code></pre>
|
175
|
+
|
148
176
|
<p>Attribute lists may be indented up to 3 spaces:</p>
|
177
|
+
|
149
178
|
<pre><code>Paragraph1
|
150
179
|
¬{:ok}
|
151
180
|
|
@@ -154,15 +183,19 @@ Paragraph2
|
|
154
183
|
|
155
184
|
Paragraph2
|
156
185
|
¬¬¬{:ok}</code></pre>
|
186
|
+
|
157
187
|
<h3 id='for_headers'><span class='maruku_section_number'>3.2. </span>For headers</h3>
|
158
188
|
|
159
189
|
<p>For headers, you can put attribute lists on the same line:</p>
|
190
|
+
|
160
191
|
<pre><code>### Header ### {: #myid}
|
161
192
|
|
162
193
|
Header {: #myid .myclass}
|
163
194
|
------
|
164
195
|
</code></pre>
|
196
|
+
|
165
197
|
<p>or, as like other block-level elements, on the line below:</p>
|
198
|
+
|
166
199
|
<pre><code>### Header ###
|
167
200
|
{: #myid}
|
168
201
|
|
@@ -170,24 +203,33 @@ Header
|
|
170
203
|
------
|
171
204
|
{: #myid .myclass}
|
172
205
|
</code></pre>
|
206
|
+
|
173
207
|
<h3 id='for_spanlevel_elements'><span class='maruku_section_number'>3.3. </span>For span-level elements</h3>
|
174
208
|
|
175
209
|
<p>For span-level elements, meta-data goes immediately <strong>after</strong> in the flow.</p>
|
176
210
|
|
177
211
|
<p>For example, in this:</p>
|
212
|
+
|
178
213
|
<pre><code>This is a *chunky paragraph*{: #id1}
|
179
214
|
{: #id2}</code></pre>
|
215
|
+
|
180
216
|
<p>the ID of the <code>em</code> element is set to <code>id1</code> and the ID of the paragraph is set to <code>id2</code>.</p>
|
181
217
|
|
182
218
|
<p>This works also for links, like this:</p>
|
219
|
+
|
183
220
|
<pre><code>This is [a link][ref]{:#myid rel=abc rev=abc}
|
184
221
|
</code></pre>
|
222
|
+
|
185
223
|
<p>For images, this:</p>
|
224
|
+
|
186
225
|
<pre><code>This is ![Alt text](url "fresh carrots")
|
187
226
|
</code></pre>
|
227
|
+
|
188
228
|
<p>is equivalent to:</p>
|
229
|
+
|
189
230
|
<pre><code>This is ![Alt text](url){:title="fresh carrots"}
|
190
231
|
</code></pre>
|
232
|
+
|
191
233
|
<h2 id='using_tags'><span class='maruku_section_number'>4. </span>Using attributes lists definition</h2>
|
192
234
|
|
193
235
|
<p>In an attribute list, you can have:</p>
|
@@ -201,13 +243,16 @@ Header
|
|
201
243
|
</ol>
|
202
244
|
|
203
245
|
<p>Everything else is interpreted as a reference to an ALD.</p>
|
246
|
+
|
204
247
|
<pre><code># Header # {:ref}
|
205
248
|
|
206
249
|
Blah blah blah.
|
207
250
|
|
208
251
|
{:ref: #myhead .myclass lang=fr}
|
209
252
|
</code></pre>
|
253
|
+
|
210
254
|
<p>Of course, more than one IAL can reference the same ALD:</p>
|
255
|
+
|
211
256
|
<pre><code># Header 1 # {:1}
|
212
257
|
...
|
213
258
|
# Header 2 # {:1}
|
@@ -215,6 +260,7 @@ Blah blah blah.
|
|
215
260
|
{:1: .myclass lang=fr}
|
216
261
|
|
217
262
|
</code></pre>
|
263
|
+
|
218
264
|
<h2 id='the_rules'><span class='maruku_section_number'>5. </span>The rules</h2>
|
219
265
|
|
220
266
|
<h3 id='the_issue_of_escaping'><span class='maruku_section_number'>5.1. </span>The issue of escaping</h3>
|
@@ -239,7 +285,7 @@ Blah blah blah.
|
|
239
285
|
</li>
|
240
286
|
|
241
287
|
<li>
|
242
|
-
<p>Inside <code
|
288
|
+
<p>Inside <code>'quoted values'</code>, you <strong>must</strong> escape <code>'</code>.</p>
|
243
289
|
</li>
|
244
290
|
|
245
291
|
<li>
|
@@ -247,15 +293,17 @@ Blah blah blah.
|
|
247
293
|
</li>
|
248
294
|
</ul>
|
249
295
|
|
250
|
-
<p><code>"bah
|
296
|
+
<p><code>"bah 'bah' bah"</code> = <code>"bah \'bah\' bah"</code> = <code>'bah \'bah\' bah'</code></p>
|
251
297
|
|
252
|
-
<p><code
|
298
|
+
<p><code>'bah "bah" bah'</code> = <code>'bah \"bah\" bah'</code> = <code>"bah \"bah\" bah"</code></p>
|
253
299
|
</li>
|
254
300
|
|
255
301
|
<li>
|
256
302
|
<p>There is an exception for backward compatibility, in links/images titles:</p>
|
303
|
+
|
257
304
|
<pre><code>[text](url "title"with"quotes")
|
258
305
|
</code></pre>
|
306
|
+
|
259
307
|
<p>The exception is not valid for attribute lists and in other contexts, where you have to use the canonical syntax.</p>
|
260
308
|
</li>
|
261
309
|
</ol>
|
@@ -263,28 +311,36 @@ Blah blah blah.
|
|
263
311
|
<h3 id='syntax_for_attribute_lists'><span class='maruku_section_number'>5.2. </span>Syntax for attribute lists</h3>
|
264
312
|
|
265
313
|
<p>Consider the following attribute list:</p>
|
314
|
+
|
266
315
|
<pre><code>{: key=value ref key2="quoted value" }</code></pre>
|
267
|
-
|
316
|
+
|
317
|
+
<p>In this string, <code>key</code>, <code>value</code>, and <code>ref</code> can be substituted by any string that does not contain whitespace, or the unescaped characters <code>}</code>,<code>=</code>,<code>'</code>,<code>"</code>.</p>
|
268
318
|
|
269
319
|
<p>Inside a quoted value you <strong>must</strong> escape the other kind of quote.</p>
|
270
320
|
|
271
321
|
<p>Also, you <strong>must</strong> escape a closing curly brace <code>}</code> inside quoted values. This rule is for making life easier for interpreter that just want to skip the meta-data.</p>
|
272
322
|
|
273
323
|
<p>If you don’t implement this syntax, you can get rid of the IAL by using this regular expression (this is written in Ruby):</p>
|
324
|
+
|
274
325
|
<pre><code>r = /\{:(\\\}|[^\}])*\}/
|
275
326
|
|
276
327
|
s.gsub(r, '') # ignore metadata</code></pre>
|
328
|
+
|
277
329
|
<p>Basically: match everything contained in a couple of <code>{:</code> and <code>}</code>, taking care of escaping of <code>}</code>. This <code>\\\}|[^\}]</code> means: eat either any character which is not a <code>}</code> or an escape sequence <code>\}</code>.</p>
|
278
330
|
|
279
331
|
<p>For this example,</p>
|
332
|
+
|
280
333
|
<pre><code>this is
|
281
334
|
{: skipped="\}" val=\} bar}
|
282
335
|
|
283
336
|
for me
|
284
337
|
{: also this}
|
285
338
|
</code></pre>
|
339
|
+
|
286
340
|
<p>the result is:</p>
|
341
|
+
|
287
342
|
<pre><code>this is
|
288
343
|
|
289
344
|
|
290
|
-
for me </code></pre
|
345
|
+
for me </code></pre>
|
346
|
+
<div class='maruku_signature'><hr /><span style='font-size: small; font-style: italic'>Created by <a href='http://maruku.rubyforge.org' title='Maruku: a Markdown-superset interpreter for Ruby'>Maruku</a> at 13:49 on Wednesday, January 24th, 2007.</span></div></body></html>
|