kramdown-gist 0.0.2 → 0.1.0
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.
- data/.travis.yml +1 -0
- data/Gemfile +6 -1
- data/README.md +5 -1
- data/lib/kramdown-gist.rb +5 -75
- data/lib/kramdown-gist/converter.rb +62 -0
- data/lib/kramdown-gist/parser.rb +22 -0
- data/lib/kramdown-gist/parser/html.rb +57 -0
- data/lib/kramdown-gist/parser/kramdown.rb +56 -0
- data/lib/kramdown-gist/version.rb +1 -1
- data/spec/fixtures/gist.html +48 -0
- data/spec/fixtures/gist.md +30 -0
- data/spec/fixtures/gist.tex +39 -0
- data/spec/fixtures/standard.html +46 -0
- data/spec/fixtures/standard.md +28 -0
- data/spec/fixtures/standard.tex +37 -0
- data/spec/kramdown-gist_spec.rb +70 -16
- metadata +18 -3
- data/.rvmrc +0 -27
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
-
|
1
|
+
kramdown-gist
|
2
|
+
=============
|
3
|
+
|
4
|
+
[](https://travis-ci.org/rfc1459/kramdown-gist)
|
5
|
+
[](https://codeclimate.com/github/rfc1459/kramdown-gist)
|
2
6
|
|
3
7
|
This gem extends the default [kramdown][] parser with a new block-level
|
4
8
|
element which adds support for embedding [GitHub Gists][gists] via
|
data/lib/kramdown-gist.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
#
|
3
|
-
# kramdown-gist.rb -
|
3
|
+
# kramdown-gist.rb - Kramdown extension for gist tags
|
4
4
|
# Copyright (C) 2012 Matteo Panella <morpheus@level28.org>
|
5
5
|
#
|
6
6
|
# This program is free software: you can redistribute it and/or modify
|
@@ -19,87 +19,17 @@
|
|
19
19
|
require 'kramdown-gist/version'
|
20
20
|
|
21
21
|
require 'kramdown'
|
22
|
-
require 'kramdown/parser/kramdown'
|
23
22
|
|
24
23
|
module Kramdown
|
25
24
|
|
25
|
+
# Monkey-patch Element class to include :gist as a block-level element
|
26
26
|
# @private
|
27
27
|
class Element
|
28
28
|
# Register :gist as a block-level element
|
29
29
|
CATEGORY[:gist] = :block
|
30
30
|
end
|
31
31
|
|
32
|
-
module Parser
|
33
|
-
|
34
|
-
# Standard Kramdown parser with support for embedding GitHub Gists
|
35
|
-
# in the output.
|
36
|
-
#
|
37
|
-
# This class extends the default Kramdown syntax with a new block-level
|
38
|
-
# element for embedding gists: `*{gist:<id>}`. The element is rendered
|
39
|
-
# as a `<script>` tag pointing to `http://gist.github.com/<id>.js`.
|
40
|
-
#
|
41
|
-
# @author Matteo Panella
|
42
|
-
class KramdownGist < ::Kramdown::Parser::Kramdown
|
43
|
-
|
44
|
-
# Create a new gist-enabled Kramdown parser with the given `options`.
|
45
|
-
def initialize(source, options)
|
46
|
-
super
|
47
|
-
@block_parsers.unshift(:gist)
|
48
|
-
end
|
49
|
-
|
50
|
-
# Regex for matching a gist tag
|
51
|
-
# @private
|
52
|
-
GIST_START = /^#{OPT_SPACE}\*\{gist:(\h+?)\}\n/
|
53
|
-
|
54
|
-
# Do not use this method directly, it's used internally by Kramdown.
|
55
|
-
# @api private
|
56
|
-
def parse_gist
|
57
|
-
@src.pos += @src.matched_size
|
58
|
-
gist_id = @src[1]
|
59
|
-
@tree.children << Element.new(:gist, gist_id)
|
60
|
-
end
|
61
|
-
define_parser(:gist, GIST_START)
|
62
|
-
|
63
|
-
end
|
64
|
-
|
65
|
-
end
|
66
|
-
|
67
|
-
module Converter
|
68
|
-
class Html
|
69
|
-
|
70
|
-
# Convert a gist element into a `<script>` tag suitable for embedding.
|
71
|
-
#
|
72
|
-
# @return [String] an HTML fragment representing this element
|
73
|
-
# @api private
|
74
|
-
def convert_gist(el, indent)
|
75
|
-
"#{' '*indent}<script src=\"http://gist.github.com/#{el.value}.js\"></script>\n"
|
76
|
-
end
|
77
|
-
|
78
|
-
end
|
79
|
-
|
80
|
-
class Kramdown
|
81
|
-
|
82
|
-
# Convert a gist element into the equivalent Kramdown "tag"
|
83
|
-
#
|
84
|
-
# @return [String] an Kramdown fragment representing this element
|
85
|
-
# @api private
|
86
|
-
def convert_gist(el, opts)
|
87
|
-
"*{gist:#{el.value}}\n"
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
class Latex
|
92
|
-
|
93
|
-
# Convert a gist element into a LaTeX paragraph stating the Gist ID and
|
94
|
-
# including the target hyperlink as metadata suitable for some output
|
95
|
-
# formats (PDF).
|
96
|
-
#
|
97
|
-
# @return [String] a LaTeX fragment representing this element
|
98
|
-
# @api private
|
99
|
-
def convert_gist(el, opts)
|
100
|
-
gist_id = el.value
|
101
|
-
"See \\href{https://gist.github.com/#{gist_id}}{Gist #{gist_id}}.\n\n"
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
32
|
end
|
33
|
+
|
34
|
+
require 'kramdown-gist/parser'
|
35
|
+
require 'kramdown-gist/converter'
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# converter.rb - monkey-patches for Kramdown converters
|
4
|
+
# Copyright (C) 2012 Matteo Panella <morpheus@level28.org>
|
5
|
+
#
|
6
|
+
# This program is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# This program is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
|
19
|
+
module Kramdown
|
20
|
+
module Converter
|
21
|
+
|
22
|
+
class Html
|
23
|
+
|
24
|
+
# Convert a gist element into a `<script>` tag suitable for embedding.
|
25
|
+
#
|
26
|
+
# @return [String] an HTML fragment representing this element
|
27
|
+
# @api private
|
28
|
+
def convert_gist(el, indent)
|
29
|
+
"#{' '*indent}<script src=\"https://gist.github.com/#{el.value}.js\"></script>\n"
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
class Kramdown
|
35
|
+
|
36
|
+
# Convert a gist element into the equivalent Kramdown "tag"
|
37
|
+
#
|
38
|
+
# @return [String] an Kramdown fragment representing this element
|
39
|
+
# @api private
|
40
|
+
def convert_gist(el, opts)
|
41
|
+
"*{gist:#{el.value}}\n"
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
class Latex
|
47
|
+
|
48
|
+
# Convert a gist element into a LaTeX paragraph stating the Gist ID and
|
49
|
+
# including the target hyperlink as metadata suitable for some output
|
50
|
+
# formats (PDF).
|
51
|
+
#
|
52
|
+
# @return [String] a LaTeX fragment representing this element
|
53
|
+
# @api private
|
54
|
+
def convert_gist(el, opts)
|
55
|
+
gist_id = el.value
|
56
|
+
"See \\href{https://gist.github.com/#{gist_id}}{Gist #{gist_id}}.\n\n"
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# parser.rb - gist-enabled parsers for Kramdown
|
4
|
+
# Copyright (C) 2012 Matteo Panella <morpheus@level28.org>
|
5
|
+
#
|
6
|
+
# This program is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# This program is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
|
19
|
+
# Kramdown parser
|
20
|
+
require 'kramdown-gist/parser/kramdown'
|
21
|
+
# HTML parser
|
22
|
+
require 'kramdown-gist/parser/html'
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# html.rb - gist-enabled HTML parser
|
4
|
+
# Copyright (C) 2012 Matteo Panella <morpheus@level28.org>
|
5
|
+
#
|
6
|
+
# This program is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# This program is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
|
19
|
+
require 'kramdown/parser/html'
|
20
|
+
|
21
|
+
module Kramdown
|
22
|
+
module Parser
|
23
|
+
|
24
|
+
class Html
|
25
|
+
|
26
|
+
# Monkey-patch the standard Kramdown HTML post-processor so that all
|
27
|
+
# references to embedded gists are replaced with a specialized `:gist` Element.
|
28
|
+
class ElementConverter
|
29
|
+
|
30
|
+
# This is the ugliest hack I *ever* wrote, believe me...
|
31
|
+
# @private
|
32
|
+
original_convert_script = instance_method(:convert_script)
|
33
|
+
|
34
|
+
# @!method convert_script(el)
|
35
|
+
# Hook into the `<script>` tag conversion process so that we have a
|
36
|
+
# chance to generate `:gist` elements based on the `src` attribute
|
37
|
+
# of the tag.
|
38
|
+
# @api private
|
39
|
+
define_method(:convert_script) do |el|
|
40
|
+
if %r{^https?://gist.github.com/([0-9a-fA-F]+)\.js$} =~ el.attr['src']
|
41
|
+
# We're in business, convert el to a gist element
|
42
|
+
set_basics(el, :gist)
|
43
|
+
el.value = $1
|
44
|
+
el.children.clear
|
45
|
+
el.attr.delete('src')
|
46
|
+
else
|
47
|
+
# Fall back to the original method
|
48
|
+
original_convert_script.bind(self).call(el)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# kramdown.rb - gist-enabled kramdown parser
|
4
|
+
# Copyright (C) 2012 Matteo Panella <morpheus@level28.org>
|
5
|
+
#
|
6
|
+
# This program is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# This program is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
|
19
|
+
require 'kramdown/parser/kramdown'
|
20
|
+
|
21
|
+
module Kramdown
|
22
|
+
module Parser
|
23
|
+
|
24
|
+
# Standard Kramdown parser with support for embedding GitHub Gists
|
25
|
+
# in the output.
|
26
|
+
#
|
27
|
+
# This class extends the default Kramdown syntax with a new block-level
|
28
|
+
# element for embedding gists: `*{gist:<id>}`. The element is rendered
|
29
|
+
# as a `<script>` tag pointing to `http://gist.github.com/<id>.js`.
|
30
|
+
#
|
31
|
+
# @author Matteo Panella
|
32
|
+
class KramdownGist < ::Kramdown::Parser::Kramdown
|
33
|
+
|
34
|
+
# Create a new gist-enabled Kramdown parser with the given `options`.
|
35
|
+
def initialize(source, options)
|
36
|
+
super
|
37
|
+
@block_parsers.unshift(:gist)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Regex for matching a gist tag
|
41
|
+
# @private
|
42
|
+
GIST_START = /^#{OPT_SPACE}\*\{gist:([0-9a-fA-F]+?)\}\n/
|
43
|
+
|
44
|
+
# Do not use this method directly, it's used internally by Kramdown.
|
45
|
+
# @api private
|
46
|
+
def parse_gist
|
47
|
+
@src.pos += @src.matched_size
|
48
|
+
gist_id = @src[1]
|
49
|
+
@tree.children << Element.new(:gist, gist_id)
|
50
|
+
end
|
51
|
+
define_parser(:gist, GIST_START)
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
<p>Das ist gewöhnlich <em>ein</em> <a href="http://example.org">Über-Problem</a> mit manchen<br />
|
2
|
+
Sälen <a href="http://example.org">http://example.org</a> und <span id="test">anderen Dinge</span>. Siehe
|
3
|
+
<img src="http://example.org" alt="Über mich" />!</p>
|
4
|
+
|
5
|
+
<blockquote class="test">
|
6
|
+
<p>Vielleicht <em class="red">höre</em> ich nicht richtig?</p>
|
7
|
+
</blockquote>
|
8
|
+
|
9
|
+
<ul>
|
10
|
+
<li>Sollten wir uns das überl<em>egen</em>? <em>Verhöhne</em> mich nicht!</li>
|
11
|
+
<li>Ho ho höher! Sind *wir* da?</li>
|
12
|
+
</ul>
|
13
|
+
|
14
|
+
<h1 id="titel-sind-urschn">Titel sind urschön</h1>
|
15
|
+
|
16
|
+
<h2 id="hot">Manche mögens <em>ärmer</em></h2>
|
17
|
+
|
18
|
+
<pre><code>öha
|
19
|
+
was nun?
|
20
|
+
</code></pre>
|
21
|
+
|
22
|
+
<dl>
|
23
|
+
<dt>Töne</dt>
|
24
|
+
<dd>Laute Geräusche</dd>
|
25
|
+
<dd>vielleicht noch was ä<em>hnliches</em></dd>
|
26
|
+
</dl>
|
27
|
+
|
28
|
+
<table>
|
29
|
+
<thead>
|
30
|
+
<tr>
|
31
|
+
<th>hoch</th>
|
32
|
+
<th>höher</th>
|
33
|
+
<th>am höchsten</th>
|
34
|
+
</tr>
|
35
|
+
</thead>
|
36
|
+
<tbody>
|
37
|
+
<tr>
|
38
|
+
<td>über</td>
|
39
|
+
<td>drüber</td>
|
40
|
+
<td>müde</td>
|
41
|
+
</tr>
|
42
|
+
</tbody>
|
43
|
+
</table>
|
44
|
+
|
45
|
+
<script src="https://gist.github.com/1234.js"></script>
|
46
|
+
|
47
|
+
<p>Das ist schön
|
48
|
+
gemacht</p>
|
@@ -0,0 +1,30 @@
|
|
1
|
+
Das ist gewöhnlich *ein* [Über-Problem](http://example.org) mit manchen
|
2
|
+
Sälen <http://example.org> und <span id='test'>anderen Dinge</span>. Siehe
|
3
|
+
!
|
4
|
+
|
5
|
+
> Vielleicht *höre*{:.red} ich nicht richtig?
|
6
|
+
{:.test}
|
7
|
+
|
8
|
+
* Sollten wir uns das überl*egen*? *Verhöhne* mich nicht!
|
9
|
+
* Ho ho höher! Sind \*wir\* da?
|
10
|
+
|
11
|
+
Titel sind urschön
|
12
|
+
==================
|
13
|
+
|
14
|
+
## Manche mögens *ärmer* {#hot}
|
15
|
+
|
16
|
+
öha
|
17
|
+
was nun?
|
18
|
+
|
19
|
+
Töne
|
20
|
+
: Laute Geräusche
|
21
|
+
: vielleicht noch was ä*hnliches*
|
22
|
+
|
23
|
+
| hoch | höher | am höchsten |
|
24
|
+
|----------------------------|
|
25
|
+
| über | drüber | müde |
|
26
|
+
|
27
|
+
*{gist:1234}
|
28
|
+
|
29
|
+
<p markdown='1'>Das ist schön
|
30
|
+
gemacht</p>
|
@@ -0,0 +1,39 @@
|
|
1
|
+
Das ist gewöhnlich \emph{ein} \href{http://example.org}{Über-Problem} mit manchen\newline
|
2
|
+
Sälen \href{http://example.org}{http://example.org} und . Siehe
|
3
|
+
!
|
4
|
+
|
5
|
+
\begin{quote} % class="test"
|
6
|
+
Vielleicht \emph{höre} ich nicht richtig?
|
7
|
+
\end{quote} % class="test"
|
8
|
+
|
9
|
+
\begin{itemize}
|
10
|
+
\item Sollten wir uns das überl\emph{egen}? \emph{Verhöhne} mich nicht!
|
11
|
+
\item Ho ho höher! Sind *wir* da?
|
12
|
+
\end{itemize}
|
13
|
+
|
14
|
+
\section{Titel sind urschön}\hypertarget{titel-sind-urschn}{}\label{titel-sind-urschn}
|
15
|
+
|
16
|
+
\subsection{Manche mögens \emph{ärmer}}\hypertarget{hot}{}\label{hot}
|
17
|
+
|
18
|
+
\begin{verbatim}öha
|
19
|
+
was nun?
|
20
|
+
\end{verbatim}
|
21
|
+
|
22
|
+
\begin{description}
|
23
|
+
\item[Töne] Laute Geräusche
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
vielleicht noch was ä\emph{hnliches}
|
28
|
+
\end{description}
|
29
|
+
|
30
|
+
\begin{longtable}{|l|l|l|}
|
31
|
+
\hline
|
32
|
+
hoch & höher & am höchsten\\
|
33
|
+
\hline
|
34
|
+
über & drüber & müde\\
|
35
|
+
\hline
|
36
|
+
\end{longtable}
|
37
|
+
|
38
|
+
See \href{https://gist.github.com/1234}{Gist 1234}.
|
39
|
+
|
@@ -0,0 +1,46 @@
|
|
1
|
+
<p>Das ist gewöhnlich <em>ein</em> <a href="http://example.org">Über-Problem</a> mit manchen<br />
|
2
|
+
Sälen <a href="http://example.org">http://example.org</a> und <span id="test">anderen Dinge</span>. Siehe
|
3
|
+
<img src="http://example.org" alt="Über mich" />!</p>
|
4
|
+
|
5
|
+
<blockquote class="test">
|
6
|
+
<p>Vielleicht <em class="red">höre</em> ich nicht richtig?</p>
|
7
|
+
</blockquote>
|
8
|
+
|
9
|
+
<ul>
|
10
|
+
<li>Sollten wir uns das überl<em>egen</em>? <em>Verhöhne</em> mich nicht!</li>
|
11
|
+
<li>Ho ho höher! Sind *wir* da?</li>
|
12
|
+
</ul>
|
13
|
+
|
14
|
+
<h1 id="titel-sind-urschn">Titel sind urschön</h1>
|
15
|
+
|
16
|
+
<h2 id="hot">Manche mögens <em>ärmer</em></h2>
|
17
|
+
|
18
|
+
<pre><code>öha
|
19
|
+
was nun?
|
20
|
+
</code></pre>
|
21
|
+
|
22
|
+
<dl>
|
23
|
+
<dt>Töne</dt>
|
24
|
+
<dd>Laute Geräusche</dd>
|
25
|
+
<dd>vielleicht noch was ä<em>hnliches</em></dd>
|
26
|
+
</dl>
|
27
|
+
|
28
|
+
<table>
|
29
|
+
<thead>
|
30
|
+
<tr>
|
31
|
+
<th>hoch</th>
|
32
|
+
<th>höher</th>
|
33
|
+
<th>am höchsten</th>
|
34
|
+
</tr>
|
35
|
+
</thead>
|
36
|
+
<tbody>
|
37
|
+
<tr>
|
38
|
+
<td>über</td>
|
39
|
+
<td>drüber</td>
|
40
|
+
<td>müde</td>
|
41
|
+
</tr>
|
42
|
+
</tbody>
|
43
|
+
</table>
|
44
|
+
|
45
|
+
<p>Das ist schön
|
46
|
+
gemacht</p>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
Das ist gewöhnlich *ein* [Über-Problem](http://example.org) mit manchen
|
2
|
+
Sälen <http://example.org> und <span id='test'>anderen Dinge</span>. Siehe
|
3
|
+
!
|
4
|
+
|
5
|
+
> Vielleicht *höre*{:.red} ich nicht richtig?
|
6
|
+
{:.test}
|
7
|
+
|
8
|
+
* Sollten wir uns das überl*egen*? *Verhöhne* mich nicht!
|
9
|
+
* Ho ho höher! Sind \*wir\* da?
|
10
|
+
|
11
|
+
Titel sind urschön
|
12
|
+
==================
|
13
|
+
|
14
|
+
## Manche mögens *ärmer* {#hot}
|
15
|
+
|
16
|
+
öha
|
17
|
+
was nun?
|
18
|
+
|
19
|
+
Töne
|
20
|
+
: Laute Geräusche
|
21
|
+
: vielleicht noch was ä*hnliches*
|
22
|
+
|
23
|
+
| hoch | höher | am höchsten |
|
24
|
+
|----------------------------|
|
25
|
+
| über | drüber | müde |
|
26
|
+
|
27
|
+
<p markdown='1'>Das ist schön
|
28
|
+
gemacht</p>
|
@@ -0,0 +1,37 @@
|
|
1
|
+
Das ist gewöhnlich \emph{ein} \href{http://example.org}{Über-Problem} mit manchen\newline
|
2
|
+
Sälen \href{http://example.org}{http://example.org} und . Siehe
|
3
|
+
!
|
4
|
+
|
5
|
+
\begin{quote} % class="test"
|
6
|
+
Vielleicht \emph{höre} ich nicht richtig?
|
7
|
+
\end{quote} % class="test"
|
8
|
+
|
9
|
+
\begin{itemize}
|
10
|
+
\item Sollten wir uns das überl\emph{egen}? \emph{Verhöhne} mich nicht!
|
11
|
+
\item Ho ho höher! Sind *wir* da?
|
12
|
+
\end{itemize}
|
13
|
+
|
14
|
+
\section{Titel sind urschön}\hypertarget{titel-sind-urschn}{}\label{titel-sind-urschn}
|
15
|
+
|
16
|
+
\subsection{Manche mögens \emph{ärmer}}\hypertarget{hot}{}\label{hot}
|
17
|
+
|
18
|
+
\begin{verbatim}öha
|
19
|
+
was nun?
|
20
|
+
\end{verbatim}
|
21
|
+
|
22
|
+
\begin{description}
|
23
|
+
\item[Töne] Laute Geräusche
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
vielleicht noch was ä\emph{hnliches}
|
28
|
+
\end{description}
|
29
|
+
|
30
|
+
\begin{longtable}{|l|l|l|}
|
31
|
+
\hline
|
32
|
+
hoch & höher & am höchsten\\
|
33
|
+
\hline
|
34
|
+
über & drüber & müde\\
|
35
|
+
\hline
|
36
|
+
\end{longtable}
|
37
|
+
|
data/spec/kramdown-gist_spec.rb
CHANGED
@@ -19,28 +19,82 @@
|
|
19
19
|
require 'kramdown-gist'
|
20
20
|
|
21
21
|
describe Kramdown::Parser::KramdownGist do
|
22
|
-
|
23
|
-
|
24
|
-
|
22
|
+
context "when parsing a simple block" do
|
23
|
+
it "converts a valid public gist tag to a script tag" do
|
24
|
+
::Kramdown::Document.new("*{gist:1234}\n", :input => 'KramdownGist').to_html.should eql("<script src=\"https://gist.github.com/1234.js\"></script>\n")
|
25
|
+
end
|
25
26
|
|
26
|
-
|
27
|
-
|
28
|
-
|
27
|
+
it "converts a valid private gist tag to a script tag" do
|
28
|
+
::Kramdown::Document.new("*{gist:deadbeef}", :input => 'KramdownGist').to_html.should eql("<script src=\"https://gist.github.com/deadbeef.js\"></script>\n")
|
29
|
+
end
|
29
30
|
|
30
|
-
|
31
|
-
|
32
|
-
|
31
|
+
it "falls back to default behaviour when the tag is malformed" do
|
32
|
+
::Kramdown::Document.new("*{gist:antani}", :input => 'KramdownGist').to_html.should eql("<p>*{gist:antani}</p>\n")
|
33
|
+
end
|
34
|
+
|
35
|
+
it "does not treat the gist tag as a span-level element" do
|
36
|
+
::Kramdown::Document.new("testing 123 *{gist:1234}", :input => 'KramdownGist').to_html.should eql("<p>testing 123 *{gist:1234}</p>\n")
|
37
|
+
::Kramdown::Document.new("testing 123\n*{gist:1234}", :input => 'KramdownGist').to_html.should eql("<p>testing 123\n*{gist:1234}</p>\n")
|
38
|
+
end
|
33
39
|
|
34
|
-
|
35
|
-
|
36
|
-
|
40
|
+
it "is idempotent when generating kramdown" do
|
41
|
+
::Kramdown::Document.new("*{gist:1234}", :input => 'KramdownGist').to_kramdown.should eql("*{gist:1234}\n\n")
|
42
|
+
end
|
43
|
+
|
44
|
+
it "renders to a suitable placeholder when generating LaTeX" do
|
45
|
+
::Kramdown::Document.new("*{gist:1234}", :input => 'KramdownGist').to_latex.should eql("See \\href{https://gist.github.com/1234}{Gist 1234}.\n\n")
|
46
|
+
end
|
37
47
|
end
|
38
48
|
|
39
|
-
|
40
|
-
|
49
|
+
context "when parsing a complex document" do
|
50
|
+
# Standard kramdown source and rendered files
|
51
|
+
let(:standard_src) { IO.read(File.expand_path("../fixtures/standard.md", __FILE__)) }
|
52
|
+
let(:standard_html) { IO.read(File.expand_path("../fixtures/standard.html", __FILE__)) }
|
53
|
+
let(:standard_latex) { IO.read(File.expand_path("../fixtures/standard.tex", __FILE__)) }
|
54
|
+
|
55
|
+
# KramdownGist source and rendered files
|
56
|
+
let(:gist_src) { IO.read(File.expand_path("../fixtures/gist.md", __FILE__)) }
|
57
|
+
let(:gist_html) { IO.read(File.expand_path("../fixtures/gist.html", __FILE__)) }
|
58
|
+
let(:gist_latex) { IO.read(File.expand_path("../fixtures/gist.tex", __FILE__)) }
|
59
|
+
|
60
|
+
context "without gist tags" do
|
61
|
+
it "produces valid HTML output" do
|
62
|
+
::Kramdown::Document.new(standard_src, :input => 'KramdownGist').to_html.should eql(standard_html)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "produces valid LaTeX output" do
|
66
|
+
::Kramdown::Document.new(standard_src, :input => 'KramdownGist').to_latex.should eql(standard_latex)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context "with gist tags" do
|
71
|
+
it "produces valid HTML output" do
|
72
|
+
::Kramdown::Document.new(gist_src, :input => 'KramdownGist').to_html.should eql(gist_html)
|
73
|
+
end
|
74
|
+
|
75
|
+
it "produces valid LaTeX output" do
|
76
|
+
::Kramdown::Document.new(gist_src, :input => 'KramdownGist').to_latex.should eql(gist_latex)
|
77
|
+
end
|
78
|
+
end
|
41
79
|
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe Kramdown::Parser::Html do
|
83
|
+
context "when parsing a simple script tag" do
|
84
|
+
let(:jquery) { '<script src="http://code.jquery.com/jquery.min.js"></script>' }
|
85
|
+
let(:mathjax_src) { '<script type="math/tex; mode=display">1</script>' }
|
86
|
+
let(:mathjax_out) { "$$1$$\n\n" }
|
87
|
+
|
88
|
+
it "should convert embedded gists to gist tags" do
|
89
|
+
::Kramdown::Document.new('<script src="https://gist.github.com/42.js"></script>', :input => 'html').to_kramdown.should eql("*{gist:42}\n\n")
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should leave non-gist script tags as they are" do
|
93
|
+
::Kramdown::Document.new(jquery, :input => 'html').to_kramdown.should eql("#{jquery}\n\n")
|
94
|
+
end
|
42
95
|
|
43
|
-
|
44
|
-
|
96
|
+
it "should convert MathJax script tags to LaTeX math blocks" do
|
97
|
+
::Kramdown::Document.new(mathjax_src, :input => 'html').to_kramdown.should eql(mathjax_out)
|
98
|
+
end
|
45
99
|
end
|
46
100
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kramdown-gist
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-11-
|
12
|
+
date: 2012-11-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: kramdown
|
@@ -115,7 +115,6 @@ extensions: []
|
|
115
115
|
extra_rdoc_files: []
|
116
116
|
files:
|
117
117
|
- .gitignore
|
118
|
-
- .rvmrc
|
119
118
|
- .travis.yml
|
120
119
|
- .yardopts
|
121
120
|
- AUTHORS
|
@@ -125,7 +124,17 @@ files:
|
|
125
124
|
- Rakefile
|
126
125
|
- kramdown-gist.gemspec
|
127
126
|
- lib/kramdown-gist.rb
|
127
|
+
- lib/kramdown-gist/converter.rb
|
128
|
+
- lib/kramdown-gist/parser.rb
|
129
|
+
- lib/kramdown-gist/parser/html.rb
|
130
|
+
- lib/kramdown-gist/parser/kramdown.rb
|
128
131
|
- lib/kramdown-gist/version.rb
|
132
|
+
- spec/fixtures/gist.html
|
133
|
+
- spec/fixtures/gist.md
|
134
|
+
- spec/fixtures/gist.tex
|
135
|
+
- spec/fixtures/standard.html
|
136
|
+
- spec/fixtures/standard.md
|
137
|
+
- spec/fixtures/standard.tex
|
129
138
|
- spec/kramdown-gist_spec.rb
|
130
139
|
homepage: https://github.com/rfc1459/kramdown-gist
|
131
140
|
licenses: []
|
@@ -152,5 +161,11 @@ signing_key:
|
|
152
161
|
specification_version: 3
|
153
162
|
summary: Extend Kramdown syntax to generate script tags for embedded gists
|
154
163
|
test_files:
|
164
|
+
- spec/fixtures/gist.html
|
165
|
+
- spec/fixtures/gist.md
|
166
|
+
- spec/fixtures/gist.tex
|
167
|
+
- spec/fixtures/standard.html
|
168
|
+
- spec/fixtures/standard.md
|
169
|
+
- spec/fixtures/standard.tex
|
155
170
|
- spec/kramdown-gist_spec.rb
|
156
171
|
has_rdoc:
|
data/.rvmrc
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
#!/usr/bin/env bash
|
2
|
-
|
3
|
-
# This is an RVM Project .rvmrc file, used to automatically load the ruby
|
4
|
-
# development environment upon cd'ing into the directory
|
5
|
-
|
6
|
-
# First we specify our desired <ruby>[@<gemset>], the @gemset name is optional,
|
7
|
-
# Only full ruby name is supported here, for short names use:
|
8
|
-
# echo "rvm use 1.9.3" > .rvmrc
|
9
|
-
environment_id="ruby-1.9.3-p286@kramdown-gist"
|
10
|
-
|
11
|
-
# First we attempt to load the desired environment directly from the environment
|
12
|
-
# file. This is very fast and efficient compared to running through the entire
|
13
|
-
# CLI and selector. If you want feedback on which environment was used then
|
14
|
-
# insert the word 'use' after --create as this triggers verbose mode.
|
15
|
-
if [[ -d "${rvm_path:-$HOME/.rvm}/environments"
|
16
|
-
&& -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
|
17
|
-
then
|
18
|
-
\. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
|
19
|
-
[[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]] &&
|
20
|
-
\. "${rvm_path:-$HOME/.rvm}/hooks/after_use" || true
|
21
|
-
else
|
22
|
-
# If the environment file has not yet been created, use the RVM CLI to select.
|
23
|
-
rvm --create "$environment_id" || {
|
24
|
-
echo "Failed to create RVM environment '${environment_id}'."
|
25
|
-
return 1
|
26
|
-
}
|
27
|
-
fi
|