org-ruby 0.4.1 → 0.4.2

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 CHANGED
@@ -1,3 +1,11 @@
1
+ == 0.4.2 / 2009-12-29
2
+
3
+ * Got rid of the extraneous newline at the start of code blocks.
4
+ * Everything now shows up in code blocks, even org-mode metadata.
5
+ * Fixed bugs:
6
+ * Regressed smart double quotes with HTML escaping. Added a test
7
+ case and fixed the regression.
8
+
1
9
  == 0.4.1 / 2009-12-29
2
10
 
3
11
  * HTML is now escaped by default
data/TAGS CHANGED
@@ -1,128 +1,133 @@
1
-
2
- ./spec/parser_spec.rb,0
3
-
4
- ./spec/headline_spec.rb,0
5
-
6
- ./spec/line_spec.rb,0
7
-
8
- ./spec/spec_helper.rb,0
9
-
10
- ./spec/regexp_helper_spec.rb,0
11
-
12
- ./spec/textile_output_buffer_spec.rb,0
13
-
14
- ./lib/org-ruby.rb,242
15
- module OrgRuby::OrgRuby2,1
16
- def self.version::OrgRuby.version12,251
17
- def self.libpath::OrgRuby.libpath20,450
18
- def self.path::OrgRuby.path28,695
19
- def self.require_all_libs_relative_to::OrgRuby.require_all_libs_relative_to37,1082
20
-
21
- ./lib/org-ruby/html_output_buffer.rb,349
22
- module Orgmode::Orgmode3,54
23
- class HtmlOutputBuffer::Orgmode::HtmlOutputBuffer5,72
24
- def push_mode::Orgmode::HtmlOutputBuffer#push_mode22,417
25
- def pop_mode::Orgmode::HtmlOutputBuffer#pop_mode27,525
26
- def flush!::Orgmode::HtmlOutputBuffer#flush!32,647
27
- def inline_formatting::Orgmode::HtmlOutputBuffer#inline_formatting62,1689
28
-
29
- ./lib/org-ruby/output_buffer.rb,1195
30
- module Orgmode::Orgmode3,18
31
- class OutputBuffer::Orgmode::OutputBuffer9,297
32
- attr_reader :buffer::Orgmode::OutputBuffer#buffer12,381
33
- attr_reader :output::Orgmode::OutputBuffer#output15,446
34
- attr_accessor :output_type::Orgmode::OutputBuffer#output_type18,532
35
- def initialize::Orgmode::OutputBuffer#Orgmode::OutputBuffer.new22,686
36
- def current_mode::Orgmode::OutputBuffer#current_mode40,1138
37
- def current_mode_list?::Orgmode::OutputBuffer#current_mode_list?44,1197
38
- def push_mode::Orgmode::OutputBuffer#push_mode48,1286
39
- def pop_mode::Orgmode::OutputBuffer#pop_mode53,1421
40
- def prepare::Orgmode::OutputBuffer#prepare61,1729
41
- def enter_table?::Orgmode::OutputBuffer#enter_table?73,2129
42
- def exit_table?::Orgmode::OutputBuffer#exit_table?79,2314
43
- def <<::Orgmode::OutputBuffer#<<85,2480
44
- def list_indent_level::Orgmode::OutputBuffer#list_indent_level90,2585
45
- def preserve_whitespace?::Orgmode::OutputBuffer#preserve_whitespace?95,2729
46
- def maintain_list_indent_stack::Orgmode::OutputBuffer#maintain_list_indent_stack102,2866
47
- def should_accumulate_output?::Orgmode::OutputBuffer#should_accumulate_output?127,3724
48
-
49
- ./lib/org-ruby/headline.rb,619
50
- module Orgmode::Orgmode3,45
51
- class Headline::Orgmode::Headline6,109
52
- attr_reader :level::Orgmode::Headline#level9,178
53
- attr_reader :headline_text::Orgmode::Headline#headline_text13,325
54
- attr_reader :body_lines::Orgmode::Headline#body_lines16,418
55
- attr_reader :tags::Orgmode::Headline#tags19,481
56
- attr_reader :keyword::Orgmode::Headline#keyword22,567
57
- def initialize::Orgmode::Headline#Orgmode::Headline.new35,896
58
- def self.headline?::Orgmode::Headline.headline?58,1687
59
- def to_textile::Orgmode::Headline#to_textile63,1818
60
- def to_html::Orgmode::Headline#to_html69,1950
61
-
62
- ./lib/org-ruby/regexp_helper.rb,1014
63
- module Orgmode::Orgmode3,18
64
- class RegexpHelper::Orgmode::RegexpHelper17,456
65
- attr_reader :pre_emphasis::Orgmode::RegexpHelper#pre_emphasis42,1785
66
- attr_reader :post_emphasis::Orgmode::RegexpHelper#post_emphasis43,1817
67
- attr_reader :border_forbidden::Orgmode::RegexpHelper#border_forbidden44,1850
68
- attr_reader :body_regexp::Orgmode::RegexpHelper#body_regexp45,1886
69
- attr_reader :markers::Orgmode::RegexpHelper#markers46,1917
70
- attr_reader :org_emphasis_regexp::Orgmode::RegexpHelper#org_emphasis_regexp48,1945
71
- def initialize::Orgmode::RegexpHelper#Orgmode::RegexpHelper.new50,1999
72
- def match_all::Orgmode::RegexpHelper#match_all65,2476
73
- def rewrite_emphasis::Orgmode::RegexpHelper#rewrite_emphasis92,3413
74
- def rewrite_links::Orgmode::RegexpHelper#rewrite_links124,4523
75
- def build_org_emphasis_regexp::Orgmode::RegexpHelper#build_org_emphasis_regexp135,4759
76
- def build_org_link_regexp::Orgmode::RegexpHelper#build_org_link_regexp145,5326
77
-
78
- ./lib/org-ruby/textile_output_buffer.rb,454
79
- module Orgmode::Orgmode3,20
80
- class TextileOutputBuffer::Orgmode::TextileOutputBuffer5,38
81
- def initialize::Orgmode::TextileOutputBuffer#Orgmode::TextileOutputBuffer.new7,84
82
- def push_mode::Orgmode::TextileOutputBuffer#push_mode12,169
83
- def pop_mode::Orgmode::TextileOutputBuffer#pop_mode17,262
84
- def inline_formatting::Orgmode::TextileOutputBuffer#inline_formatting34,585
85
- def flush!::Orgmode::TextileOutputBuffer#flush!48,973
86
-
87
- ./lib/org-ruby/parser.rb,471
88
- module Orgmode::Orgmode5,61
89
- class Parser::Orgmode::Parser7,79
90
- attr_reader :lines::Orgmode::Parser#lines10,140
91
- attr_reader :headlines::Orgmode::Parser#headlines13,207
92
- attr_reader :header_lines::Orgmode::Parser#header_lines16,287
93
- def initialize::Orgmode::Parser#Orgmode::Parser.new20,459
94
- def self.load::Orgmode::Parser.load48,1267
95
- def to_textile::Orgmode::Parser#to_textile54,1433
96
- def to_html::Orgmode::Parser#to_html63,1620
97
-
98
- ./lib/org-ruby/line.rb,1430
99
- module Orgmode::Orgmode1,0
100
- class Line::Orgmode::Line4,67
101
- attr_reader :line::Orgmode::Line#line7,114
102
- attr_reader :indent::Orgmode::Line#indent12,300
103
- def initialize::Orgmode::Line#Orgmode::Line.new14,325
104
- def to_s::Orgmode::Line#to_s21,465
105
- def comment?::Orgmode::Line#comment?26,546
106
- def metadata?::Orgmode::Line#metadata?31,663
107
- def nonprinting?::Orgmode::Line#nonprinting?35,755
108
- def blank?::Orgmode::Line#blank?39,807
109
- def plain_list?::Orgmode::Line#plain_list?43,859
110
- def unordered_list?::Orgmode::Line#unordered_list?49,974
111
- def strip_unordered_list_tag::Orgmode::Line#strip_unordered_list_tag53,1051
112
- def ordered_list?::Orgmode::Line#ordered_list?59,1168
113
- def strip_ordered_list_tag::Orgmode::Line#strip_ordered_list_tag63,1241
114
- def plain_text?::Orgmode::Line#plain_text?67,1309
115
- def table_row?::Orgmode::Line#table_row?71,1392
116
- def table_separator?::Orgmode::Line#table_separator?77,1539
117
- def table?::Orgmode::Line#table?85,1775
118
- def begin_block?::Orgmode::Line#begin_block?91,1888
119
- def end_block?::Orgmode::Line#end_block?95,1960
120
- def block_type::Orgmode::Line#block_type99,2030
121
- def paragraph_type::Orgmode::Line#paragraph_type104,2152
122
- def self.to_textile::Orgmode::Line.to_textile115,2470
123
- def self.to_html::Orgmode::Line.to_html121,2620
124
- def self.translate::Orgmode::Line.translate128,2816
125
-
126
- ./bin/org-ruby,0
127
-
128
- ./test/test_orgmode_parser.rb,0
1
+
2
+ ./bin/org-ruby,0
3
+
4
+ ./lib/org-ruby/headline.rb,619
5
+ module Orgmode::Orgmode3,45
6
+ class Headline::Orgmode::Headline6,109
7
+ attr_reader :level::Orgmode::Headline#level9,178
8
+ attr_reader :headline_text::Orgmode::Headline#headline_text13,325
9
+ attr_reader :body_lines::Orgmode::Headline#body_lines16,418
10
+ attr_reader :tags::Orgmode::Headline#tags19,481
11
+ attr_reader :keyword::Orgmode::Headline#keyword22,567
12
+ def initialize::Orgmode::Headline#Orgmode::Headline.new35,896
13
+ def self.headline?::Orgmode::Headline.headline?58,1687
14
+ def to_textile::Orgmode::Headline#to_textile63,1818
15
+ def to_html::Orgmode::Headline#to_html69,1939
16
+
17
+ ./lib/org-ruby/html_output_buffer.rb,591
18
+ module Orgmode::Orgmode3,54
19
+ class HtmlOutputBuffer::Orgmode::HtmlOutputBuffer5,72
20
+ def initialize::Orgmode::HtmlOutputBuffer#Orgmode::HtmlOutputBuffer.new22,417
21
+ def push_mode::Orgmode::HtmlOutputBuffer#push_mode31,619
22
+ def pop_mode::Orgmode::HtmlOutputBuffer#pop_mode42,918
23
+ def flush!::Orgmode::HtmlOutputBuffer#flush!51,1133
24
+ def escape_buffer!::Orgmode::HtmlOutputBuffer#escape_buffer!78,2163
25
+ def output_indentation::Orgmode::HtmlOutputBuffer#output_indentation84,2299
26
+ def inline_formatting::Orgmode::HtmlOutputBuffer#inline_formatting100,2827
27
+
28
+ ./lib/org-ruby/line.rb,1527
29
+ module Orgmode::Orgmode1,0
30
+ class Line::Orgmode::Line4,67
31
+ attr_reader :line::Orgmode::Line#line7,114
32
+ attr_reader :indent::Orgmode::Line#indent12,300
33
+ attr_accessor :assigned_paragraph_type::Orgmode::Line#assigned_paragraph_type19,664
34
+ def initialize::Orgmode::Line#Orgmode::Line.new21,708
35
+ def to_s::Orgmode::Line#to_s29,885
36
+ def comment?::Orgmode::Line#comment?34,966
37
+ def metadata?::Orgmode::Line#metadata?39,1083
38
+ def nonprinting?::Orgmode::Line#nonprinting?43,1175
39
+ def blank?::Orgmode::Line#blank?47,1227
40
+ def plain_list?::Orgmode::Line#plain_list?51,1279
41
+ def unordered_list?::Orgmode::Line#unordered_list?57,1394
42
+ def strip_unordered_list_tag::Orgmode::Line#strip_unordered_list_tag61,1471
43
+ def ordered_list?::Orgmode::Line#ordered_list?67,1588
44
+ def strip_ordered_list_tag::Orgmode::Line#strip_ordered_list_tag71,1661
45
+ def plain_text?::Orgmode::Line#plain_text?75,1729
46
+ def table_row?::Orgmode::Line#table_row?79,1812
47
+ def table_separator?::Orgmode::Line#table_separator?85,1959
48
+ def table?::Orgmode::Line#table?93,2195
49
+ def begin_block?::Orgmode::Line#begin_block?99,2308
50
+ def end_block?::Orgmode::Line#end_block?103,2380
51
+ def block_type::Orgmode::Line#block_type107,2450
52
+ def paragraph_type::Orgmode::Line#paragraph_type112,2572
53
+ def self.to_textile::Orgmode::Line.to_textile124,2956
54
+ def self.to_html::Orgmode::Line.to_html130,3106
55
+ def self.translate::Orgmode::Line.translate137,3320
56
+
57
+ ./lib/org-ruby/output_buffer.rb,1282
58
+ module Orgmode::Orgmode3,18
59
+ class OutputBuffer::Orgmode::OutputBuffer9,297
60
+ attr_reader :buffer::Orgmode::OutputBuffer#buffer12,381
61
+ attr_reader :output::Orgmode::OutputBuffer#output15,446
62
+ attr_accessor :output_type::Orgmode::OutputBuffer#output_type18,532
63
+ def initialize::Orgmode::OutputBuffer#Orgmode::OutputBuffer.new22,686
64
+ def current_mode::Orgmode::OutputBuffer#current_mode40,1138
65
+ def current_mode_list?::Orgmode::OutputBuffer#current_mode_list?44,1197
66
+ def push_mode::Orgmode::OutputBuffer#push_mode48,1286
67
+ def pop_mode::Orgmode::OutputBuffer#pop_mode53,1421
68
+ def prepare::Orgmode::OutputBuffer#prepare61,1729
69
+ def enter_table?::Orgmode::OutputBuffer#enter_table?73,2129
70
+ def exit_table?::Orgmode::OutputBuffer#exit_table?79,2314
71
+ def <<::Orgmode::OutputBuffer#<<85,2480
72
+ def list_indent_level::Orgmode::OutputBuffer#list_indent_level90,2585
73
+ def preserve_whitespace?::Orgmode::OutputBuffer#preserve_whitespace?95,2729
74
+ def continue_current_list?::Orgmode::OutputBuffer#continue_current_list?106,2991
75
+ def maintain_list_indent_stack::Orgmode::OutputBuffer#maintain_list_indent_stack109,3037
76
+ def should_accumulate_output?::Orgmode::OutputBuffer#should_accumulate_output?145,4184
77
+
78
+ ./lib/org-ruby/parser.rb,473
79
+ module Orgmode::Orgmode4,40
80
+ class Parser::Orgmode::Parser10,125
81
+ attr_reader :lines::Orgmode::Parser#lines13,186
82
+ attr_reader :headlines::Orgmode::Parser#headlines16,253
83
+ attr_reader :header_lines::Orgmode::Parser#header_lines19,333
84
+ def initialize::Orgmode::Parser#Orgmode::Parser.new23,505
85
+ def self.load::Orgmode::Parser.load73,2075
86
+ def to_textile::Orgmode::Parser#to_textile79,2241
87
+ def to_html::Orgmode::Parser#to_html89,2477
88
+
89
+ ./lib/org-ruby/regexp_helper.rb,1014
90
+ module Orgmode::Orgmode3,18
91
+ class RegexpHelper::Orgmode::RegexpHelper17,456
92
+ attr_reader :pre_emphasis::Orgmode::RegexpHelper#pre_emphasis42,1785
93
+ attr_reader :post_emphasis::Orgmode::RegexpHelper#post_emphasis43,1817
94
+ attr_reader :border_forbidden::Orgmode::RegexpHelper#border_forbidden44,1850
95
+ attr_reader :body_regexp::Orgmode::RegexpHelper#body_regexp45,1886
96
+ attr_reader :markers::Orgmode::RegexpHelper#markers46,1917
97
+ attr_reader :org_emphasis_regexp::Orgmode::RegexpHelper#org_emphasis_regexp48,1945
98
+ def initialize::Orgmode::RegexpHelper#Orgmode::RegexpHelper.new50,1999
99
+ def match_all::Orgmode::RegexpHelper#match_all65,2476
100
+ def rewrite_emphasis::Orgmode::RegexpHelper#rewrite_emphasis92,3413
101
+ def rewrite_links::Orgmode::RegexpHelper#rewrite_links124,4523
102
+ def build_org_emphasis_regexp::Orgmode::RegexpHelper#build_org_emphasis_regexp135,4759
103
+ def build_org_link_regexp::Orgmode::RegexpHelper#build_org_link_regexp145,5326
104
+
105
+ ./lib/org-ruby/textile_output_buffer.rb,454
106
+ module Orgmode::Orgmode3,20
107
+ class TextileOutputBuffer::Orgmode::TextileOutputBuffer5,38
108
+ def initialize::Orgmode::TextileOutputBuffer#Orgmode::TextileOutputBuffer.new7,84
109
+ def push_mode::Orgmode::TextileOutputBuffer#push_mode12,169
110
+ def pop_mode::Orgmode::TextileOutputBuffer#pop_mode17,262
111
+ def inline_formatting::Orgmode::TextileOutputBuffer#inline_formatting34,585
112
+ def flush!::Orgmode::TextileOutputBuffer#flush!48,973
113
+
114
+ ./lib/org-ruby.rb,243
115
+ module OrgRuby::OrgRuby3,27
116
+ def self.version::OrgRuby.version13,277
117
+ def self.libpath::OrgRuby.libpath21,476
118
+ def self.path::OrgRuby.path29,721
119
+ def self.require_all_libs_relative_to::OrgRuby.require_all_libs_relative_to38,1108
120
+
121
+ ./spec/headline_spec.rb,0
122
+
123
+ ./spec/line_spec.rb,0
124
+
125
+ ./spec/parser_spec.rb,0
126
+
127
+ ./spec/regexp_helper_spec.rb,0
128
+
129
+ ./spec/spec_helper.rb,0
130
+
131
+ ./spec/textile_output_buffer_spec.rb,0
132
+
133
+ ./test/test_orgmode_parser.rb,0
data/lib/org-ruby.rb CHANGED
@@ -3,7 +3,7 @@ unless defined? ::OrgRuby
3
3
  module OrgRuby
4
4
 
5
5
  # :stopdoc:
6
- VERSION = '0.4.1'
6
+ VERSION = '0.4.2'
7
7
  LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
8
8
  PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
9
9
  # :startdoc:
@@ -1,5 +1,4 @@
1
1
  require OrgRuby.libpath(*%w[org-ruby output_buffer])
2
- require 'cgi'
3
2
 
4
3
  module Orgmode
5
4
 
@@ -51,7 +50,7 @@ module Orgmode
51
50
 
52
51
  def flush!
53
52
  escape_buffer!
54
- if current_mode == :code then
53
+ if @buffer_mode == :code then
55
54
  # Whitespace is significant in :code mode. Always output the buffer
56
55
  # and do not do any additional translation.
57
56
  #
@@ -70,6 +69,7 @@ module Orgmode
70
69
  end
71
70
  end
72
71
  @buffer = ""
72
+ @buffer_mode = nil
73
73
  end
74
74
 
75
75
  ######################################################################
@@ -77,7 +77,9 @@ module Orgmode
77
77
 
78
78
  # Escapes any HTML content in the output accumulation buffer @buffer.
79
79
  def escape_buffer!
80
- @buffer = CGI.escapeHTML(@buffer)
80
+ @buffer.gsub!(/&/, "&amp;")
81
+ @buffer.gsub!(/</, "&lt;")
82
+ @buffer.gsub!(/>/, "&gt;")
81
83
  end
82
84
 
83
85
  def output_indentation
data/lib/org-ruby/line.rb CHANGED
@@ -11,10 +11,18 @@ module Orgmode
11
11
  # TODO 2009-12-20 bdewey: Handle tabs
12
12
  attr_reader :indent
13
13
 
14
+ # A line can have its type assigned instead of inferred from its
15
+ # content. For example, something that parses as a "table" on its
16
+ # own ("| one | two|\n") may just be a paragraph if it's inside
17
+ # #+BEGIN_EXAMPLE. Set this property on the line to assign its
18
+ # type. This will then affect the value of +paragraph_type+.
19
+ attr_accessor :assigned_paragraph_type
20
+
14
21
  def initialize(line)
15
22
  @line = line
16
23
  @indent = 0
17
24
  @line =~ /\s*/
25
+ @assigned_paragraph_type = nil
18
26
  @indent = $&.length unless blank?
19
27
  end
20
28
 
@@ -24,12 +32,12 @@ module Orgmode
24
32
 
25
33
  # Tests if a line is a comment.
26
34
  def comment?
27
- @line =~ /^\s*#/
35
+ check_assignment_or_regexp(:comment, /^\s*#/)
28
36
  end
29
37
 
30
38
  # Tests if a line contains metadata instead of actual content.
31
39
  def metadata?
32
- @line =~ /^\s*(CLOCK|DEADLINE|START|CLOSED|SCHEDULED):/
40
+ check_assignment_or_regexp(:metadata, /^\s*(CLOCK|DEADLINE|START|CLOSED|SCHEDULED):/)
33
41
  end
34
42
 
35
43
  def nonprinting?
@@ -37,7 +45,7 @@ module Orgmode
37
45
  end
38
46
 
39
47
  def blank?
40
- @line =~ /^\s*$/
48
+ check_assignment_or_regexp(:blank, /^\s*$/)
41
49
  end
42
50
 
43
51
  def plain_list?
@@ -47,7 +55,7 @@ module Orgmode
47
55
  UnorderedListRegexp = /^\s*(-|\+)\s*/
48
56
 
49
57
  def unordered_list?
50
- @line =~ UnorderedListRegexp
58
+ check_assignment_or_regexp(:unordered_list, UnorderedListRegexp)
51
59
  end
52
60
 
53
61
  def strip_unordered_list_tag
@@ -57,7 +65,7 @@ module Orgmode
57
65
  OrderedListRegexp = /^\s*\d+(\.|\))\s*/
58
66
 
59
67
  def ordered_list?
60
- @line =~ OrderedListRegexp
68
+ check_assignment_or_regexp(:ordered_list, OrderedListRegexp)
61
69
  end
62
70
 
63
71
  def strip_ordered_list_tag
@@ -71,7 +79,7 @@ module Orgmode
71
79
  def table_row?
72
80
  # for an org-mode table, the first non-whitespace character is a
73
81
  # | (pipe).
74
- @line =~ /^\s*\|/
82
+ check_assignment_or_regexp(:table_row, /^\s*\|/)
75
83
  end
76
84
 
77
85
  def table_separator?
@@ -79,7 +87,7 @@ module Orgmode
79
87
  # character as a | (pipe), then consists of nothing else other
80
88
  # than pipes, hyphens, and pluses.
81
89
 
82
- @line =~ /^\s*\|[-\|\+]*\s*$/
90
+ check_assignment_or_regexp(:table_separator, /^\s*\|[-\|\+]*\s*$/)
83
91
  end
84
92
 
85
93
  def table?
@@ -174,5 +182,29 @@ module Orgmode
174
182
  output_buffer.pop_mode until output_buffer.current_mode == :normal
175
183
  output_buffer.output
176
184
  end
185
+
186
+ ######################################################################
187
+ private
188
+
189
+ # This function is an internal helper for determining the paragraph
190
+ # type of a line... for instance, if the line is a comment or contains
191
+ # metadata. It's used in routines like blank?, plain_list?, etc.
192
+ #
193
+ # What's tricky is lines can have assigned types, so you need to check
194
+ # the assigned type, if present, or see if the characteristic regexp
195
+ # for the paragraph type matches if not present.
196
+ #
197
+ # call-seq:
198
+ # check_assignment_or_regexp(assignment, regexp) => boolean
199
+ #
200
+ # assignment:: if the paragraph has an assigned type, it will be
201
+ # checked to see if it equals +assignment+.
202
+ # regexp:: If the paragraph does not have an assigned type,
203
+ # the contents of the paragraph will be checked against
204
+ # this regexp.
205
+ def check_assignment_or_regexp(assignment, regexp)
206
+ return @assigned_paragraph_type == assignment if @assigned_paragraph_type
207
+ return @line =~ regexp
208
+ end
177
209
  end # class Line
178
210
  end # module Orgmode
@@ -8,9 +8,14 @@ module Orgmode
8
8
  # add a newline character prior emitting the output.
9
9
  class OutputBuffer
10
10
 
11
- # This is the temporary buffer that we accumulate into.
11
+ # This is the accumulation buffer. It's a holding pen so
12
+ # consecutive lines of the right type can get stuck together
13
+ # without intervening newlines.
12
14
  attr_reader :buffer
13
15
 
16
+ # This is the output mode of the accumulation buffer.
17
+ attr_reader :buffer_mode
18
+
14
19
  # This is the overall output buffer
15
20
  attr_reader :output
16
21
 
@@ -22,17 +27,22 @@ module Orgmode
22
27
  def initialize(output)
23
28
  @output = output
24
29
  @buffer = ""
30
+ @buffer_mode = nil
25
31
  @output_type = :start
26
32
  @list_indent_stack = []
27
33
  @paragraph_modifier = nil
28
34
  @cancel_modifier = false
29
35
  @mode_stack = []
30
- push_mode(:normal)
31
36
 
32
37
  @logger = Logger.new(STDERR)
33
- @logger.level = Logger::WARN
38
+ if ENV['DEBUG']
39
+ @logger.level = Logger::DEBUG
40
+ else
41
+ @logger.level = Logger::WARN
42
+ end
34
43
 
35
44
  @re_help = RegexpHelper.new
45
+ push_mode(:normal)
36
46
  end
37
47
 
38
48
  Modes = [:normal, :ordered_list, :unordered_list, :blockquote, :code, :table]
@@ -83,6 +93,11 @@ module Orgmode
83
93
 
84
94
  # Accumulate the string @str@.
85
95
  def << (str)
96
+ if @buffer_mode && @buffer_mode != current_mode then
97
+ raise "Accumulation buffer is mixing modes: @buffer_mode == #{@buffer_mode}, current_mode == #{current_mode}"
98
+ else
99
+ @buffer_mode = current_mode
100
+ end
86
101
  @buffer << str
87
102
  end
88
103
 
@@ -32,20 +32,42 @@ module Orgmode
32
32
  @headlines = Array.new
33
33
  @current_headline = nil
34
34
  @header_lines = []
35
+ mode = :normal
35
36
  @lines.each do |line|
36
- if (Headline.headline? line) then
37
- @current_headline = Headline.new line
38
- @headlines << @current_headline
39
- else
37
+ case mode
38
+ when :normal
39
+
40
+ if (Headline.headline? line) then
41
+ @current_headline = Headline.new line
42
+ @headlines << @current_headline
43
+ else
44
+ line = Line.new line
45
+ mode = :code if line.begin_block? and line.block_type == "EXAMPLE"
46
+ if (@current_headline) then
47
+ @current_headline.body_lines << line
48
+ else
49
+ @header_lines << line
50
+ end
51
+ end
52
+
53
+ when :code
54
+
55
+ # As long as we stay in code mode, force lines to be either blank or paragraphs.
56
+ # Don't try to interpret structural items, like headings and tables.
40
57
  line = Line.new line
58
+ if line.end_block? and line.block_type == "EXAMPLE"
59
+ mode = :normal
60
+ else
61
+ line.assigned_paragraph_type = :paragraph unless line.blank?
62
+ end
41
63
  if (@current_headline) then
42
64
  @current_headline.body_lines << line
43
65
  else
44
66
  @header_lines << line
45
67
  end
46
- end
68
+ end # case
47
69
  end
48
- end # initialize
70
+ end # initialize
49
71
 
50
72
  # Creates a new parser from the data in a given file
51
73
  def self.load(fname)
@@ -60,6 +60,7 @@ module Orgmode
60
60
  @output << inline_formatting(@buffer) << "\n"
61
61
  end
62
62
  @buffer = ""
63
+ @buffer_mode = nil
63
64
  end
64
65
 
65
66
 
@@ -2,10 +2,9 @@
2
2
  <p>I need to get block code examples working. In <code>orgmode</code>, they look like this:</p>
3
3
  <pre>
4
4
 
5
-
6
5
  def initialize(output)
7
6
  @output = output
8
- @buffer = &quot;&quot;
7
+ @buffer = ""
9
8
  @output_type = :start
10
9
  @list_indent_stack = []
11
10
  @paragraph_modifier = nil
@@ -19,7 +18,6 @@
19
18
  <p>Putting in another paragraph for good measure.</p>
20
19
  <p>Code should also get cancelled by a list, thus:</p>
21
20
  <pre>
22
-
23
21
  This is my code!
24
22
 
25
23
  Another line!
@@ -1,7 +1,6 @@
1
1
  <h1 class="title">Code Comment</h1>
2
2
  <p>I need to be able to export things that look like org-mode comments inside of code blocks, like this:</p>
3
3
  <pre>
4
-
5
4
  #+TITLE: orgmode_parser.org
6
5
  #+AUTHOR:
7
6
  #+EMAIL: brian@BRIAN-DESK
@@ -0,0 +1,3 @@
1
+ <p class="title">ENTITIES</p>
2
+ <p><code>Org-ruby</code> supports &#8220;smart double quotes,&#8221; &#8216;smart single quotes,&#8217; apostrophes for contractions like won&#8217;t and can&#8217;t, and other things&#8230; like elipses. Oh &#8211; and dashes.</p>
3
+ <p>Question: What does org-mode do for ampersands, like R&amp;R? or &amp;lt;? Answer: Those get escaped, too.</p>
@@ -0,0 +1,8 @@
1
+ ENTITIES
2
+
3
+ =Org-ruby= supports "smart double quotes," 'smart single quotes,'
4
+ apostrophes for contractions like won't and can't, and other
5
+ things... like elipses. Oh -- and dashes.
6
+
7
+ Question: What does org-mode do for ampersands, like R&R? or &lt;?
8
+ Answer: Those get escaped, too.
@@ -1,5 +1,4 @@
1
1
  <pre>
2
-
3
2
  &lt;li&gt;[ ] &amp;#8220;smart quotes&amp;#8221;&lt;/li&gt;
4
3
  &lt;li&gt;[ ] I think I need this for &amp;#8216;single quotes&amp;#8217; too. Don&amp;#8217;t I?&lt;/li&gt;
5
4
  &lt;li&gt;[ ] Em dashes would be great &amp;#8212; wouldn&amp;#8217;t they?&lt;/li&gt;
@@ -0,0 +1,27 @@
1
+ <h1 class="title">Metadata, etc.</h1>
2
+ <p>I normally filter out things that look like metadata. Can&#8217;t do it any more. I need to see all of the following:</p>
3
+ <pre>
4
+ * DONE Handle inline formatting
5
+ CLOSED: [2009-12-26 Sat 21:41]
6
+ :PROPERTIES:
7
+ :ARCHIVE_TIME: 2009-12-26 Sat 22:16
8
+ :ARCHIVE_FILE: ~/brians-brain/content/projects/orgmode_parser.org
9
+ :ARCHIVE_OLPATH: &lt;%= @page.title %&gt;/Future Development
10
+ :ARCHIVE_CATEGORY: orgmode_parser
11
+ :ARCHIVE_TODO: DONE
12
+ :END:
13
+
14
+ I still need to handle:
15
+
16
+ - [ ] =Inline code=
17
+
18
+ How does the =emacs= HTML parser handle *inline* formatting? Ah,
19
+ it looks like it defines everything in =org-emphasis-alist= (line
20
+ 2855 of =org.el=).
21
+
22
+ And then look at =org-emphasis-regexp-components=, line 2828 of
23
+ =org.el=. It looks like they just use a crazy regexp for inline
24
+ formatting. Which is good, because it means I can copy!
25
+
26
+
27
+ </pre>
data/spec/line_spec.rb CHANGED
@@ -86,4 +86,24 @@ describe Orgmode::Line do
86
86
  line.block_type.should eql(end_examples[str])
87
87
  end
88
88
  end
89
+
90
+ it "should accept assigned types" do
91
+ cases = {
92
+ "# this looks like a comment" => :comment,
93
+ " 1. This looks like an ordered list" => :ordered_list,
94
+ " - this looks like an # unordered list" => :unordered_list,
95
+ " | one | two | table! | \n" => :table_row,
96
+ "\n" => :blank,
97
+ " |-----+-----+--------| \n" => :table_separator
98
+ }
99
+
100
+ cases.each_pair do |key, value|
101
+ l = Orgmode::Line.new key
102
+ l.paragraph_type.should eql(value)
103
+ l.assigned_paragraph_type = :paragraph
104
+ l.paragraph_type.should eql(:paragraph)
105
+ l.assigned_paragraph_type = nil
106
+ l.paragraph_type.should eql(value)
107
+ end
108
+ end
89
109
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: org-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Dewey
@@ -72,6 +72,8 @@ files:
72
72
  - spec/html_examples/blockquote.org
73
73
  - spec/html_examples/code-comment.html
74
74
  - spec/html_examples/code-comment.org
75
+ - spec/html_examples/entities.html
76
+ - spec/html_examples/entities.org
75
77
  - spec/html_examples/escape-pre.html
76
78
  - spec/html_examples/escape-pre.org
77
79
  - spec/html_examples/html-literal.html
@@ -80,7 +82,8 @@ files:
80
82
  - spec/html_examples/inline-formatting.org
81
83
  - spec/html_examples/lists.html
82
84
  - spec/html_examples/lists.org
83
- - spec/html_examples/metadata-comment.org-fail
85
+ - spec/html_examples/metadata-comment.html
86
+ - spec/html_examples/metadata-comment.org
84
87
  - spec/html_examples/only-list.html
85
88
  - spec/html_examples/only-list.org
86
89
  - spec/html_examples/only-table.html