org-ruby 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.bnsignore +18 -0
- data/History.txt +40 -32
- data/README.txt +66 -66
- data/Rakefile +27 -26
- data/bin/org-ruby +40 -40
- data/lib/org-ruby.rb +50 -50
- data/lib/org-ruby/headline.rb +80 -75
- data/lib/org-ruby/html_output_buffer.rb +105 -81
- data/lib/org-ruby/line.rb +173 -173
- data/lib/org-ruby/output_buffer.rb +172 -154
- data/lib/org-ruby/parser.rb +80 -76
- 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/advanced-lists.html +31 -0
- data/spec/html_examples/advanced-lists.org +31 -0
- data/spec/html_examples/block_code.html +30 -30
- 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 -7
- data/spec/html_examples/escape-pre.org +6 -6
- 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 -5
- data/spec/html_examples/only-list.org +3 -3
- data/spec/html_examples/only-table.html +6 -6
- data/spec/html_examples/only-table.org +5 -5
- 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 -49
- metadata +5 -2
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.
|