literate_md 1.0.6 → 1.0.7

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/bin/literate_md CHANGED
@@ -29,12 +29,13 @@ $ext_for_lang = {
29
29
 
30
30
  class Weave < Redcarpet::Render::XHTML
31
31
  attr_accessor :default_lang, :original_text, :standalone
32
+ def initialize; super; @tokens = Hash.new end
32
33
  def block_code(code, lang)
33
34
  l_ang, r_ang, equiv = "__lang__", "__rang__", "__equiv__"
34
35
  line_num = @original_text[0,@original_text.index(code)].count("\n")+1
35
36
  code = code.
36
- gsub(/@(#{$allowed})@\s*\+=/,"#{l_ang}\\1#{r_ang}+#{equiv}").
37
- gsub(/@(#{$allowed})@/,"#{l_ang}\\1#{r_ang}")
37
+ gsub(/@(#{$allowed})@\s*\+=/) {|match| "#{l_ang}" + to_token(match) + "#{r_ang}+#{equiv}"}.
38
+ gsub(/@(#{$allowed})@/) {|match| "#{l_ang}" + to_token(match) + "#{r_ang}"}
38
39
  code = CodeRay.
39
40
  scan(code, lang.nil? ? @default_lang : lang.to_sym).
40
41
  html(
@@ -42,13 +43,26 @@ class Weave < Redcarpet::Render::XHTML
42
43
  :css => :style,
43
44
  :line_numbers => :table,
44
45
  :line_number_start => line_num)
45
- code.
46
- gsub(/#{l_ang}(#{$allowed})#{r_ang}(\s*)\+#{equiv}/,'&lang;\\1&rang;+&equiv;').
47
- gsub(/#{l_ang}(#{$allowed})#{r_ang}/,'&lang;\\1&rang;')
46
+ code.gsub!(/#{l_ang}/,'&lang;')
47
+ code.gsub!(/#{r_ang}/,'&rang;')
48
+ code.gsub!(/#{equiv}/,'&equiv;')
49
+ @tokens.each_pair {|k,v| code.gsub! v, k }
50
+ code
48
51
  end
49
52
  def codespan(code); block_code(code,nil) end
50
- def doc_header; "<html><body>" if @standalone end
53
+ def doc_header
54
+ @original_text.gsub!(/\t/,' ') # redcarpet converts tabs somewhere
55
+ @standalone ? "<html><body>" : nil
56
+ end
51
57
  def doc_footer; "</body></html>" if @standalone end
58
+ def to_token code
59
+ code = code[1, code.rindex('@')-1]
60
+ if @tokens.has_key? code
61
+ @tokens[code]
62
+ else
63
+ @tokens[code] = "__token#{@tokens.size}__"
64
+ end
65
+ end
52
66
  end
53
67
 
54
68
  def write_to path, data
@@ -0,0 +1,49 @@
1
+ <html><body>
2
+ <h3>my file</h3>
3
+
4
+ <p>add some <em>text</em>:</p>
5
+ <table class="CodeRay"><tr>
6
+ <td class="line-numbers" title="double click to toggle" ondblclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"><pre><a href="#n5" name="n5">5</a>
7
+ <a href="#n6" name="n6">6</a>
8
+ <a href="#n7" name="n7">7</a>
9
+ <a href="#n8" name="n8">8</a>
10
+ <a href="#n9" name="n9">9</a>
11
+ <strong><a href="#n10" name="n10">10</a></strong>
12
+ </pre></td>
13
+ <td class="code"><pre>&lang;*&rang;+&equiv;
14
+ int main() {
15
+ &lang;Do Stuff&rang;
16
+ &lang;Do More Stuff&rang;
17
+ <span style="color:#080;font-weight:bold">return</span> <span style="color:#00D">0</span>;
18
+ }
19
+ </pre></td>
20
+ </tr></table>
21
+
22
+ <p>and some more text. we should probably say what dostuff is; it&#39;s:</p>
23
+ <table class="CodeRay"><tr>
24
+ <td class="line-numbers" title="double click to toggle" ondblclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"><pre><a href="#n16" name="n16">16</a>
25
+ <a href="#n17" name="n17">17</a>
26
+ <a href="#n18" name="n18">18</a>
27
+ <a href="#n19" name="n19">19</a>
28
+ <strong><a href="#n20" name="n20">20</a></strong>
29
+ <a href="#n21" name="n21">21</a>
30
+ <a href="#n22" name="n22">22</a>
31
+ </pre></td>
32
+ <td class="code"><pre>&lang;Do Stuff&rang;+&equiv;
33
+ int* me = &amp;<span style="color:#00D">1</span>;
34
+ *me++;
35
+ &lang;Do More Stuff&rang;+&equiv;
36
+ <span style="background-color:hsla(300,100%,50%,0.06)"><span style="color:#404">/</span><span style="color:#808">* MORE! MORE! *</span><span style="color:#404">/</span></span>
37
+ &lang;Do Stuff&rang;+&equiv;
38
+ <span style="background-color:hsla(300,100%,50%,0.06)"><span style="color:#404">/</span><span style="color:#404">/</span></span> again!
39
+ </pre></td>
40
+ </tr></table>
41
+
42
+ <p>was that clearer? More stuff is the same as the first:</p>
43
+ <table class="CodeRay"><tr>
44
+ <td class="line-numbers" title="double click to toggle" ondblclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"><pre><a href="#n28" name="n28">28</a>
45
+ </pre></td>
46
+ <td class="code"><pre>&lang;Do More Stuff&rang;+&equiv; &lang;Do Stuff&rang;
47
+ </pre></td>
48
+ </tr></table>
49
+ </body></html>
@@ -1,16 +1,16 @@
1
1
 
2
2
  int main() {
3
3
 
4
- int* me = &1;
5
- *me++;
4
+ int* me = &1;
5
+ *me++;
6
6
 
7
7
  // again!
8
8
 
9
9
 
10
10
  /* MORE! MORE! */
11
11
 
12
- int* me = &1;
13
- *me++;
12
+ int* me = &1;
13
+ *me++;
14
14
 
15
15
  // again!
16
16
 
data/test/test.md CHANGED
@@ -14,8 +14,8 @@ and some more text. we should probably say what dostuff is; it's:
14
14
 
15
15
  ~~~~~
16
16
  @Do Stuff@ +=
17
- int* me = &1;
18
- *me++;
17
+ int* me = &1;
18
+ *me++;
19
19
  @Do More Stuff@ +=
20
20
  /* MORE! MORE! */
21
21
  @Do Stuff@ +=
@@ -2,23 +2,33 @@ require 'test/unit'
2
2
  require 'ostruct'
3
3
 
4
4
  class TestLiterateMD < Test::Unit::TestCase
5
+ def run_and_verify opts, actual_file, expected_file
6
+ tidy_up actual_file
7
+ $opts = opts
8
+ run_it
9
+ expected = File.open(expected_file, 'r'){|f|f.read}
10
+ actual = File.open(actual_file, 'r'){|f|f.read}
11
+ assert_equal expected, actual
12
+ tidy_up actual_file
13
+ end
14
+
5
15
  def test_tangle
6
- tidy_up(actual_file = 'test/test.rb')
7
- $opts = OpenStruct.new(
16
+ run_and_verify OpenStruct.new(
8
17
  :tangle => true,
9
18
  :weave => false,
10
19
  :outputdir => '.',
11
20
  :files => 'test/test.md',
12
- :lang => 'ruby')
13
- run_it
14
- expected = File.open('test/expected_test.rb', 'r'){|f|f.read}
15
- actual = File.open(actual_file, 'r'){|f|f.read}
16
- assert_equal expected, actual
17
- tidy_up actual_file
21
+ :lang => 'ruby'), 'test/test.rb', 'test/expected_test.rb'
18
22
  end
19
23
 
20
24
  def test_weave
21
- # TODO!
25
+ run_and_verify OpenStruct.new(
26
+ :tangle => false,
27
+ :weave => true,
28
+ :standalone => true,
29
+ :outputdir => '.',
30
+ :files => 'test/test.md',
31
+ :lang => 'ruby'), 'test.md.html', 'test/expected_test.html'
22
32
  end
23
33
 
24
34
  def tidy_up file
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: literate_md
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.0.6
5
+ version: 1.0.7
6
6
  platform: ruby
7
7
  authors:
8
8
  - remis
@@ -67,6 +67,7 @@ extra_rdoc_files: []
67
67
  files:
68
68
  - licenses/LICENSE-2.0.txt
69
69
  - bin/literate_md
70
+ - test/expected_test.html
70
71
  - test/expected_test.rb
71
72
  - test/test.md
72
73
  - test/test_literate_md.rb