org-ruby 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
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