org-ruby 0.2.0 → 0.3.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/History.txt +32 -24
- data/README.txt +66 -66
- data/Rakefile +26 -22
- data/bin/org-ruby +40 -40
- data/lib/org-ruby.rb +50 -48
- data/lib/org-ruby/headline.rb +75 -75
- data/lib/org-ruby/html_output_buffer.rb +81 -80
- data/lib/org-ruby/line.rb +173 -172
- data/lib/org-ruby/output_buffer.rb +154 -154
- data/lib/org-ruby/parser.rb +76 -72
- data/lib/org-ruby/regexp_helper.rb +156 -156
- data/lib/org-ruby/textile_output_buffer.rb +67 -67
- data/spec/data/freeform.org +111 -111
- data/spec/data/hyp-planning.org +335 -335
- data/spec/data/remember.org +53 -53
- data/spec/headline_spec.rb +55 -55
- data/spec/html_examples/block_code.html +30 -29
- data/spec/html_examples/block_code.org +35 -35
- data/spec/html_examples/blockquote.html +7 -7
- data/spec/html_examples/blockquote.org +13 -13
- data/spec/html_examples/escape-pre.html +7 -0
- data/spec/html_examples/escape-pre.org +6 -0
- data/spec/html_examples/inline-formatting.html +10 -10
- data/spec/html_examples/inline-formatting.org +17 -17
- data/spec/html_examples/lists.html +19 -19
- data/spec/html_examples/lists.org +36 -36
- data/spec/html_examples/only-list.html +5 -0
- data/spec/html_examples/only-list.org +3 -0
- data/spec/html_examples/only-table.html +6 -0
- data/spec/html_examples/only-table.org +5 -0
- data/spec/html_examples/tables.html +20 -20
- data/spec/html_examples/tables.org +26 -26
- data/spec/html_examples/text.html +2 -2
- data/spec/html_examples/text.org +16 -16
- data/spec/line_spec.rb +89 -89
- data/spec/parser_spec.rb +86 -86
- data/spec/regexp_helper_spec.rb +57 -57
- data/spec/spec_helper.rb +20 -20
- data/spec/textile_examples/block_code.org +35 -35
- data/spec/textile_examples/block_code.textile +29 -29
- data/spec/textile_examples/blockquote.org +13 -13
- data/spec/textile_examples/blockquote.textile +11 -11
- data/spec/textile_examples/keywords.org +13 -13
- data/spec/textile_examples/keywords.textile +11 -11
- data/spec/textile_examples/links.org +11 -11
- data/spec/textile_examples/links.textile +10 -10
- data/spec/textile_examples/lists.org +36 -36
- data/spec/textile_examples/lists.textile +20 -20
- data/spec/textile_examples/single-space-plain-list.org +13 -13
- data/spec/textile_examples/single-space-plain-list.textile +10 -10
- data/spec/textile_examples/tables.org +26 -26
- data/spec/textile_examples/tables.textile +23 -23
- data/spec/textile_output_buffer_spec.rb +21 -21
- data/tasks/test_case.rake +49 -0
- metadata +21 -5
- data/.bnsignore +0 -18
data/spec/parser_spec.rb
CHANGED
@@ -1,86 +1,86 @@
|
|
1
|
-
|
2
|
-
require File.join(File.dirname(__FILE__), %w[spec_helper])
|
3
|
-
|
4
|
-
describe Orgmode::Parser do
|
5
|
-
it "should open ORG files" do
|
6
|
-
parser = Orgmode::Parser.load(RememberFile)
|
7
|
-
end
|
8
|
-
|
9
|
-
it "should fail on non-existant files" do
|
10
|
-
lambda { parser = Orgmode::Parser.load("does-not-exist.org") }.should raise_error
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should load all of the lines" do
|
14
|
-
parser = Orgmode::Parser.load(RememberFile)
|
15
|
-
parser.lines.length.should eql(53)
|
16
|
-
end
|
17
|
-
|
18
|
-
it "should find all headlines" do
|
19
|
-
parser = Orgmode::Parser.load(RememberFile)
|
20
|
-
parser.should have(12).headlines
|
21
|
-
end
|
22
|
-
|
23
|
-
it "can find a headline by index" do
|
24
|
-
parser = Orgmode::Parser.load(RememberFile)
|
25
|
-
parser.headlines[1].line.should eql("** YAML header in Webby\n")
|
26
|
-
end
|
27
|
-
|
28
|
-
it "should determine headline levels" do
|
29
|
-
parser = Orgmode::Parser.load(RememberFile)
|
30
|
-
parser.headlines[0].level.should eql(1)
|
31
|
-
parser.headlines[1].level.should eql(2)
|
32
|
-
end
|
33
|
-
|
34
|
-
it "should put body lines in headlines" do
|
35
|
-
parser = Orgmode::Parser.load(RememberFile)
|
36
|
-
parser.headlines[0].should have(0).body_lines
|
37
|
-
parser.headlines[1].should have(6).body_lines
|
38
|
-
end
|
39
|
-
|
40
|
-
it "should understand lines before the first headline" do
|
41
|
-
parser = Orgmode::Parser.load(FreeformFile)
|
42
|
-
parser.should have(19).header_lines
|
43
|
-
end
|
44
|
-
|
45
|
-
it "should return a textile string" do
|
46
|
-
parser = Orgmode::Parser.load(FreeformFile)
|
47
|
-
parser.to_textile.should be_kind_of(String)
|
48
|
-
end
|
49
|
-
|
50
|
-
it "can translate textile files" do
|
51
|
-
data_directory = File.join(File.dirname(__FILE__), "textile_examples")
|
52
|
-
org_files = File.expand_path(File.join(data_directory, "*.org" ))
|
53
|
-
files = Dir.glob(org_files)
|
54
|
-
files.each do |file|
|
55
|
-
basename = File.basename(file, ".org")
|
56
|
-
textile_name = File.join(data_directory, basename + ".textile")
|
57
|
-
textile_name = File.expand_path(textile_name)
|
58
|
-
|
59
|
-
expected = IO.read(textile_name)
|
60
|
-
expected.should be_kind_of(String)
|
61
|
-
parser = Orgmode::Parser.new(IO.read(file))
|
62
|
-
actual = parser.to_textile
|
63
|
-
actual.should be_kind_of(String)
|
64
|
-
actual.should == expected
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
it "can translate to html" do
|
69
|
-
data_directory = File.join(File.dirname(__FILE__), "html_examples")
|
70
|
-
org_files = File.expand_path(File.join(data_directory, "*.org" ))
|
71
|
-
files = Dir.glob(org_files)
|
72
|
-
files.each do |file|
|
73
|
-
basename = File.basename(file, ".org")
|
74
|
-
textile_name = File.join(data_directory, basename + ".html")
|
75
|
-
textile_name = File.expand_path(textile_name)
|
76
|
-
|
77
|
-
expected = IO.read(textile_name)
|
78
|
-
expected.should be_kind_of(String)
|
79
|
-
parser = Orgmode::Parser.new(IO.read(file))
|
80
|
-
actual = parser.to_html
|
81
|
-
actual.should be_kind_of(String)
|
82
|
-
actual.should == expected
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
1
|
+
|
2
|
+
require File.join(File.dirname(__FILE__), %w[spec_helper])
|
3
|
+
|
4
|
+
describe Orgmode::Parser do
|
5
|
+
it "should open ORG files" do
|
6
|
+
parser = Orgmode::Parser.load(RememberFile)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should fail on non-existant files" do
|
10
|
+
lambda { parser = Orgmode::Parser.load("does-not-exist.org") }.should raise_error
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should load all of the lines" do
|
14
|
+
parser = Orgmode::Parser.load(RememberFile)
|
15
|
+
parser.lines.length.should eql(53)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should find all headlines" do
|
19
|
+
parser = Orgmode::Parser.load(RememberFile)
|
20
|
+
parser.should have(12).headlines
|
21
|
+
end
|
22
|
+
|
23
|
+
it "can find a headline by index" do
|
24
|
+
parser = Orgmode::Parser.load(RememberFile)
|
25
|
+
parser.headlines[1].line.should eql("** YAML header in Webby\n")
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should determine headline levels" do
|
29
|
+
parser = Orgmode::Parser.load(RememberFile)
|
30
|
+
parser.headlines[0].level.should eql(1)
|
31
|
+
parser.headlines[1].level.should eql(2)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should put body lines in headlines" do
|
35
|
+
parser = Orgmode::Parser.load(RememberFile)
|
36
|
+
parser.headlines[0].should have(0).body_lines
|
37
|
+
parser.headlines[1].should have(6).body_lines
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should understand lines before the first headline" do
|
41
|
+
parser = Orgmode::Parser.load(FreeformFile)
|
42
|
+
parser.should have(19).header_lines
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should return a textile string" do
|
46
|
+
parser = Orgmode::Parser.load(FreeformFile)
|
47
|
+
parser.to_textile.should be_kind_of(String)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "can translate textile files" do
|
51
|
+
data_directory = File.join(File.dirname(__FILE__), "textile_examples")
|
52
|
+
org_files = File.expand_path(File.join(data_directory, "*.org" ))
|
53
|
+
files = Dir.glob(org_files)
|
54
|
+
files.each do |file|
|
55
|
+
basename = File.basename(file, ".org")
|
56
|
+
textile_name = File.join(data_directory, basename + ".textile")
|
57
|
+
textile_name = File.expand_path(textile_name)
|
58
|
+
|
59
|
+
expected = IO.read(textile_name)
|
60
|
+
expected.should be_kind_of(String)
|
61
|
+
parser = Orgmode::Parser.new(IO.read(file))
|
62
|
+
actual = parser.to_textile
|
63
|
+
actual.should be_kind_of(String)
|
64
|
+
actual.should == expected
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
it "can translate to html" do
|
69
|
+
data_directory = File.join(File.dirname(__FILE__), "html_examples")
|
70
|
+
org_files = File.expand_path(File.join(data_directory, "*.org" ))
|
71
|
+
files = Dir.glob(org_files)
|
72
|
+
files.each do |file|
|
73
|
+
basename = File.basename(file, ".org")
|
74
|
+
textile_name = File.join(data_directory, basename + ".html")
|
75
|
+
textile_name = File.expand_path(textile_name)
|
76
|
+
|
77
|
+
expected = IO.read(textile_name)
|
78
|
+
expected.should be_kind_of(String)
|
79
|
+
parser = Orgmode::Parser.new(IO.read(file))
|
80
|
+
actual = parser.to_html
|
81
|
+
actual.should be_kind_of(String)
|
82
|
+
actual.should == expected
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
data/spec/regexp_helper_spec.rb
CHANGED
@@ -1,57 +1,57 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), %w[spec_helper])
|
2
|
-
|
3
|
-
describe Orgmode::RegexpHelper do
|
4
|
-
it "should recognize simple markup" do
|
5
|
-
e = Orgmode::RegexpHelper.new
|
6
|
-
total = 0
|
7
|
-
e.match_all("/italic/") do |border, string|
|
8
|
-
border.should eql("/")
|
9
|
-
string.should eql("italic")
|
10
|
-
total += 1
|
11
|
-
end
|
12
|
-
total.should eql(1)
|
13
|
-
|
14
|
-
total = 0
|
15
|
-
borders = %w[* / ~]
|
16
|
-
strings = %w[bold italic verbatim]
|
17
|
-
e.match_all("This string contains *bold*, /italic/, and ~verbatim~ text.")\
|
18
|
-
do |border, str|
|
19
|
-
border.should eql(borders[total])
|
20
|
-
str.should eql(strings[total])
|
21
|
-
total += 1
|
22
|
-
end
|
23
|
-
total.should eql(3)
|
24
|
-
end
|
25
|
-
|
26
|
-
it "should not get confused by links" do
|
27
|
-
e = Orgmode::RegexpHelper.new
|
28
|
-
total = 0
|
29
|
-
# Make sure the slashes in these links aren't treated as italics
|
30
|
-
e.match_all("[[http://www.bing.com/twitter]]") do |border, str|
|
31
|
-
total += 1
|
32
|
-
end
|
33
|
-
total.should eql(0)
|
34
|
-
end
|
35
|
-
|
36
|
-
it "should correctly perform substitutions" do
|
37
|
-
e = Orgmode::RegexpHelper.new
|
38
|
-
map = {
|
39
|
-
"*" => "strong",
|
40
|
-
"/" => "i",
|
41
|
-
"~" => "pre"
|
42
|
-
}
|
43
|
-
n = e.rewrite_emphasis("This string contains *bold*, /italic/, and ~verbatim~ text.") do |border, str|
|
44
|
-
"<#{map[border]}>#{str}</#{map[border]}>"
|
45
|
-
end
|
46
|
-
n.should eql("This string contains <strong>bold</strong>, <i>italic</i>, and <pre>verbatim</pre> text.")
|
47
|
-
end
|
48
|
-
|
49
|
-
it "should allow link rewriting" do
|
50
|
-
e = Orgmode::RegexpHelper.new
|
51
|
-
str = e.rewrite_links("[[http://www.bing.com]]") do |link,text|
|
52
|
-
text ||= link
|
53
|
-
"\"#{text}\":#{link}"
|
54
|
-
end
|
55
|
-
str.should eql("\"http://www.bing.com\":http://www.bing.com")
|
56
|
-
end
|
57
|
-
end # describe Orgmode::RegexpHelper
|
1
|
+
require File.join(File.dirname(__FILE__), %w[spec_helper])
|
2
|
+
|
3
|
+
describe Orgmode::RegexpHelper do
|
4
|
+
it "should recognize simple markup" do
|
5
|
+
e = Orgmode::RegexpHelper.new
|
6
|
+
total = 0
|
7
|
+
e.match_all("/italic/") do |border, string|
|
8
|
+
border.should eql("/")
|
9
|
+
string.should eql("italic")
|
10
|
+
total += 1
|
11
|
+
end
|
12
|
+
total.should eql(1)
|
13
|
+
|
14
|
+
total = 0
|
15
|
+
borders = %w[* / ~]
|
16
|
+
strings = %w[bold italic verbatim]
|
17
|
+
e.match_all("This string contains *bold*, /italic/, and ~verbatim~ text.")\
|
18
|
+
do |border, str|
|
19
|
+
border.should eql(borders[total])
|
20
|
+
str.should eql(strings[total])
|
21
|
+
total += 1
|
22
|
+
end
|
23
|
+
total.should eql(3)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should not get confused by links" do
|
27
|
+
e = Orgmode::RegexpHelper.new
|
28
|
+
total = 0
|
29
|
+
# Make sure the slashes in these links aren't treated as italics
|
30
|
+
e.match_all("[[http://www.bing.com/twitter]]") do |border, str|
|
31
|
+
total += 1
|
32
|
+
end
|
33
|
+
total.should eql(0)
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should correctly perform substitutions" do
|
37
|
+
e = Orgmode::RegexpHelper.new
|
38
|
+
map = {
|
39
|
+
"*" => "strong",
|
40
|
+
"/" => "i",
|
41
|
+
"~" => "pre"
|
42
|
+
}
|
43
|
+
n = e.rewrite_emphasis("This string contains *bold*, /italic/, and ~verbatim~ text.") do |border, str|
|
44
|
+
"<#{map[border]}>#{str}</#{map[border]}>"
|
45
|
+
end
|
46
|
+
n.should eql("This string contains <strong>bold</strong>, <i>italic</i>, and <pre>verbatim</pre> text.")
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should allow link rewriting" do
|
50
|
+
e = Orgmode::RegexpHelper.new
|
51
|
+
str = e.rewrite_links("[[http://www.bing.com]]") do |link,text|
|
52
|
+
text ||= link
|
53
|
+
"\"#{text}\":#{link}"
|
54
|
+
end
|
55
|
+
str.should eql("\"http://www.bing.com\":http://www.bing.com")
|
56
|
+
end
|
57
|
+
end # describe Orgmode::RegexpHelper
|
data/spec/spec_helper.rb
CHANGED
@@ -1,20 +1,20 @@
|
|
1
|
-
|
2
|
-
require File.expand_path(
|
3
|
-
File.join(File.dirname(__FILE__), %w[.. lib org-ruby]))
|
4
|
-
|
5
|
-
|
6
|
-
RememberFile = File.join(File.dirname(__FILE__), %w[data remember.org])
|
7
|
-
FreeformFile = File.join(File.dirname(__FILE__), %w[data freeform.org])
|
8
|
-
|
9
|
-
|
10
|
-
Spec::Runner.configure do |config|
|
11
|
-
# == Mock Framework
|
12
|
-
#
|
13
|
-
# RSpec uses it's own mocking framework by default. If you prefer to
|
14
|
-
# use mocha, flexmock or RR, uncomment the appropriate line:
|
15
|
-
#
|
16
|
-
# config.mock_with :mocha
|
17
|
-
# config.mock_with :flexmock
|
18
|
-
# config.mock_with :rr
|
19
|
-
end
|
20
|
-
|
1
|
+
|
2
|
+
require File.expand_path(
|
3
|
+
File.join(File.dirname(__FILE__), %w[.. lib org-ruby]))
|
4
|
+
|
5
|
+
|
6
|
+
RememberFile = File.join(File.dirname(__FILE__), %w[data remember.org])
|
7
|
+
FreeformFile = File.join(File.dirname(__FILE__), %w[data freeform.org])
|
8
|
+
|
9
|
+
|
10
|
+
Spec::Runner.configure do |config|
|
11
|
+
# == Mock Framework
|
12
|
+
#
|
13
|
+
# RSpec uses it's own mocking framework by default. If you prefer to
|
14
|
+
# use mocha, flexmock or RR, uncomment the appropriate line:
|
15
|
+
#
|
16
|
+
# config.mock_with :mocha
|
17
|
+
# config.mock_with :flexmock
|
18
|
+
# config.mock_with :rr
|
19
|
+
end
|
20
|
+
|
@@ -1,35 +1,35 @@
|
|
1
|
-
* Block Code
|
2
|
-
|
3
|
-
I need to get block code examples working. In =orgmode=, they look
|
4
|
-
like this:
|
5
|
-
|
6
|
-
#+BEGIN_EXAMPLE
|
7
|
-
|
8
|
-
def initialize(output)
|
9
|
-
@output = output
|
10
|
-
@buffer = ""
|
11
|
-
@output_type = :start
|
12
|
-
@list_indent_stack = []
|
13
|
-
@paragraph_modifier = nil
|
14
|
-
|
15
|
-
@logger = Logger.new(STDERR)
|
16
|
-
@logger.level = Logger::WARN
|
17
|
-
end
|
18
|
-
|
19
|
-
#+END_EXAMPLE
|
20
|
-
|
21
|
-
And now I should be back to normal text.
|
22
|
-
|
23
|
-
Putting in another paragraph for good measure.
|
24
|
-
|
25
|
-
|
26
|
-
Code should also get cancelled by a list, thus:
|
27
|
-
|
28
|
-
#+BEGIN_EXAMPLE
|
29
|
-
This is my code!
|
30
|
-
|
31
|
-
Another line!
|
32
|
-
#+END_EXAMPLE
|
33
|
-
|
34
|
-
- My list should cancel this.
|
35
|
-
- Another list line.
|
1
|
+
* Block Code
|
2
|
+
|
3
|
+
I need to get block code examples working. In =orgmode=, they look
|
4
|
+
like this:
|
5
|
+
|
6
|
+
#+BEGIN_EXAMPLE
|
7
|
+
|
8
|
+
def initialize(output)
|
9
|
+
@output = output
|
10
|
+
@buffer = ""
|
11
|
+
@output_type = :start
|
12
|
+
@list_indent_stack = []
|
13
|
+
@paragraph_modifier = nil
|
14
|
+
|
15
|
+
@logger = Logger.new(STDERR)
|
16
|
+
@logger.level = Logger::WARN
|
17
|
+
end
|
18
|
+
|
19
|
+
#+END_EXAMPLE
|
20
|
+
|
21
|
+
And now I should be back to normal text.
|
22
|
+
|
23
|
+
Putting in another paragraph for good measure.
|
24
|
+
|
25
|
+
|
26
|
+
Code should also get cancelled by a list, thus:
|
27
|
+
|
28
|
+
#+BEGIN_EXAMPLE
|
29
|
+
This is my code!
|
30
|
+
|
31
|
+
Another line!
|
32
|
+
#+END_EXAMPLE
|
33
|
+
|
34
|
+
- My list should cancel this.
|
35
|
+
- Another list line.
|
@@ -1,29 +1,29 @@
|
|
1
|
-
h1. Block Code
|
2
|
-
|
3
|
-
I need to get block code examples working. In @orgmode@, they look like this:
|
4
|
-
|
5
|
-
bc..
|
6
|
-
def initialize(output)
|
7
|
-
@output = output
|
8
|
-
@buffer = ""
|
9
|
-
@output_type = :start
|
10
|
-
@list_indent_stack = []
|
11
|
-
@paragraph_modifier = nil
|
12
|
-
|
13
|
-
@logger = Logger.new(STDERR)
|
14
|
-
@logger.level = Logger::WARN
|
15
|
-
end
|
16
|
-
|
17
|
-
|
18
|
-
p. And now I should be back to normal text.
|
19
|
-
|
20
|
-
Putting in another paragraph for good measure.
|
21
|
-
|
22
|
-
Code should also get cancelled by a list, thus:
|
23
|
-
|
24
|
-
bc.. This is my code!
|
25
|
-
|
26
|
-
Another line!
|
27
|
-
|
28
|
-
* My list should cancel this.
|
29
|
-
* Another list line.
|
1
|
+
h1. Block Code
|
2
|
+
|
3
|
+
I need to get block code examples working. In @orgmode@, they look like this:
|
4
|
+
|
5
|
+
bc..
|
6
|
+
def initialize(output)
|
7
|
+
@output = output
|
8
|
+
@buffer = ""
|
9
|
+
@output_type = :start
|
10
|
+
@list_indent_stack = []
|
11
|
+
@paragraph_modifier = nil
|
12
|
+
|
13
|
+
@logger = Logger.new(STDERR)
|
14
|
+
@logger.level = Logger::WARN
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
p. And now I should be back to normal text.
|
19
|
+
|
20
|
+
Putting in another paragraph for good measure.
|
21
|
+
|
22
|
+
Code should also get cancelled by a list, thus:
|
23
|
+
|
24
|
+
bc.. This is my code!
|
25
|
+
|
26
|
+
Another line!
|
27
|
+
|
28
|
+
* My list should cancel this.
|
29
|
+
* Another list line.
|