org-ruby 0.7.2 → 0.8.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 +10 -0
- data/README.rdoc +55 -51
- data/lib/org-ruby.rb +1 -1
- data/lib/org-ruby/headline.rb +0 -1
- data/lib/org-ruby/html_output_buffer.rb +201 -214
- data/lib/org-ruby/html_symbol_replace.rb +359 -340
- data/lib/org-ruby/line.rb +79 -24
- data/lib/org-ruby/output_buffer.rb +144 -146
- data/lib/org-ruby/parser.rb +37 -122
- data/lib/org-ruby/regexp_helper.rb +49 -49
- data/lib/org-ruby/textile_output_buffer.rb +91 -44
- data/lib/org-ruby/textile_symbol_replace.rb +360 -341
- metadata +3 -14
data/lib/org-ruby/parser.rb
CHANGED
@@ -101,85 +101,45 @@ module Orgmode
|
|
101
101
|
table_header_set = false
|
102
102
|
@lines.each do |text|
|
103
103
|
line = Line.new text, self
|
104
|
+
mode = :normal if line.end_block? and mode == line.paragraph_type
|
105
|
+
mode = :normal if line.property_drawer_end_block? and mode == :property_drawer
|
104
106
|
|
105
107
|
case mode
|
106
|
-
when :normal
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
line.in_buffer_setting? do |key, value|
|
114
|
-
store_in_buffer_setting key, value
|
115
|
-
end
|
116
|
-
if line.table_separator? then
|
117
|
-
if previous_line and previous_line.paragraph_type == :table_row and !table_header_set
|
118
|
-
previous_line.assigned_paragraph_type = :table_header
|
119
|
-
table_header_set = true
|
120
|
-
end
|
108
|
+
when :normal, :quote, :center
|
109
|
+
if Headline.headline? line.line
|
110
|
+
line = Headline.new line.line, self, offset
|
111
|
+
elsif line.table_separator?
|
112
|
+
if previous_line and previous_line.paragraph_type == :table_row and !table_header_set
|
113
|
+
previous_line.assigned_paragraph_type = :table_header
|
114
|
+
table_header_set = true
|
121
115
|
end
|
122
|
-
table_header_set = false if !line.table?
|
123
|
-
mode = :code if line.begin_block? and line.block_type.casecmp("EXAMPLE") == 0
|
124
|
-
mode = :src_code if line.begin_block? and line.block_type.casecmp("SRC") == 0
|
125
|
-
mode = :block_comment if line.begin_block? and line.block_type == "COMMENT"
|
126
|
-
mode = :property_drawer if line.property_drawer_begin_block?
|
127
|
-
if (@current_headline) then
|
128
|
-
@current_headline.body_lines << line
|
129
|
-
else
|
130
|
-
@header_lines << line
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
when :block_comment
|
135
|
-
|
136
|
-
if line.end_block? and line.block_type == "COMMENT"
|
137
|
-
mode = :normal
|
138
|
-
else
|
139
|
-
line.assigned_paragraph_type = :comment
|
140
116
|
end
|
117
|
+
table_header_set = false if !line.table?
|
141
118
|
|
142
|
-
when :
|
143
|
-
|
144
|
-
# As long as we stay in code mode, force lines to be either blank or paragraphs.
|
119
|
+
when :example, :html, :src
|
120
|
+
# As long as we stay in code mode, force lines to be code.
|
145
121
|
# Don't try to interpret structural items, like headings and tables.
|
146
|
-
|
147
|
-
|
148
|
-
else
|
149
|
-
line.assigned_paragraph_type = :paragraph unless line.blank?
|
150
|
-
end
|
151
|
-
if (@current_headline) then
|
152
|
-
@current_headline.body_lines << line
|
153
|
-
else
|
154
|
-
@header_lines << line
|
155
|
-
end
|
156
|
-
|
157
|
-
when :src_code
|
122
|
+
line.assigned_paragraph_type = :code
|
123
|
+
end
|
158
124
|
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
if (@current_headline) then
|
165
|
-
@current_headline.body_lines << line
|
166
|
-
else
|
167
|
-
@header_lines << line
|
125
|
+
if mode == :normal
|
126
|
+
@headlines << @current_headline = line if Headline.headline? line.line
|
127
|
+
# If there is a setting on this line, remember it.
|
128
|
+
line.in_buffer_setting? do |key, value|
|
129
|
+
store_in_buffer_setting key.upcase, value
|
168
130
|
end
|
169
131
|
|
170
|
-
|
132
|
+
mode = line.paragraph_type if line.begin_block?
|
133
|
+
mode = :property_drawer if line.property_drawer_begin_block?
|
134
|
+
end
|
171
135
|
|
172
|
-
|
173
|
-
|
174
|
-
else
|
175
|
-
line.assigned_paragraph_type = :property_drawer unless line.blank?
|
176
|
-
end
|
177
|
-
if (@current_headline) then
|
136
|
+
unless mode == :comment
|
137
|
+
if @current_headline
|
178
138
|
@current_headline.body_lines << line
|
179
139
|
else
|
180
140
|
@header_lines << line
|
181
141
|
end
|
182
|
-
end
|
142
|
+
end
|
183
143
|
|
184
144
|
previous_line = line
|
185
145
|
end # @lines.each
|
@@ -196,9 +156,9 @@ module Orgmode
|
|
196
156
|
output = ""
|
197
157
|
output_buffer = TextileOutputBuffer.new(output)
|
198
158
|
|
199
|
-
|
159
|
+
translate(@header_lines, output_buffer)
|
200
160
|
@headlines.each do |headline|
|
201
|
-
|
161
|
+
translate(headline.body_lines, output_buffer)
|
202
162
|
end
|
203
163
|
output
|
204
164
|
end
|
@@ -207,7 +167,7 @@ module Orgmode
|
|
207
167
|
def to_html
|
208
168
|
mark_trees_for_export
|
209
169
|
export_options = {
|
210
|
-
:decorate_title =>
|
170
|
+
:decorate_title => @in_buffer_settings["TITLE"],
|
211
171
|
:export_heading_number => export_heading_number?,
|
212
172
|
:export_todo => export_todo?,
|
213
173
|
:use_sub_superscripts => use_sub_superscripts?,
|
@@ -222,9 +182,9 @@ module Orgmode
|
|
222
182
|
# If we're given a new title, then just create a new line
|
223
183
|
# for that title.
|
224
184
|
title = Line.new(@in_buffer_settings["TITLE"], self)
|
225
|
-
|
185
|
+
translate([title], output_buffer)
|
226
186
|
end
|
227
|
-
|
187
|
+
translate(@header_lines, output_buffer) unless skip_header_lines?
|
228
188
|
|
229
189
|
# If we've output anything at all, remove the :decorate_title option.
|
230
190
|
export_options.delete(:decorate_title) if (output.length > 0)
|
@@ -234,11 +194,13 @@ module Orgmode
|
|
234
194
|
when :exclude
|
235
195
|
# NOTHING
|
236
196
|
when :headline_only
|
237
|
-
|
197
|
+
translate(headline.body_lines[0, 1], output_buffer)
|
238
198
|
when :all
|
239
|
-
|
199
|
+
translate(headline.body_lines, output_buffer)
|
240
200
|
end
|
241
201
|
end
|
202
|
+
output << "\n"
|
203
|
+
|
242
204
|
rp = RubyPants.new(output)
|
243
205
|
rp.to_html
|
244
206
|
end
|
@@ -248,58 +210,11 @@ module Orgmode
|
|
248
210
|
|
249
211
|
# Converts an array of lines to the appropriate format.
|
250
212
|
# Writes the output to +output_buffer+.
|
251
|
-
def
|
213
|
+
def translate(lines, output_buffer)
|
252
214
|
output_buffer.output_type = :start
|
253
|
-
lines.each
|
254
|
-
|
255
|
-
# See if we're carrying paragraph payload, and output
|
256
|
-
# it if we're about to switch to some other output type.
|
257
|
-
output_buffer.prepare(line)
|
258
|
-
case line.paragraph_type
|
259
|
-
when :metadata, :table_separator, :blank, :comment, :property_drawer_item, :property_drawer_begin_block, :property_drawer_end_block
|
260
|
-
|
261
|
-
output_buffer << line.line if output_buffer.preserve_whitespace?
|
262
|
-
|
263
|
-
when :begin_block
|
264
|
-
|
265
|
-
output_buffer.push_mode(:blockquote) if line.block_type.casecmp("QUOTE") == 0
|
266
|
-
output_buffer.push_mode(:src) if line.block_type.casecmp("SRC") == 0
|
267
|
-
output_buffer.push_mode(:example) if line.block_type.casecmp("EXAMPLE") == 0
|
268
|
-
output_buffer.push_mode(:center) if line.block_type.casecmp("CENTER") == 0
|
269
|
-
|
270
|
-
when :end_block
|
271
|
-
|
272
|
-
output_buffer.pop_mode(:blockquote) if line.block_type.casecmp("QUOTE") == 0
|
273
|
-
output_buffer.pop_mode(:src) if line.block_type.casecmp("SRC") == 0
|
274
|
-
output_buffer.pop_mode(:example) if line.block_type.casecmp("EXAMPLE") == 0
|
275
|
-
output_buffer.pop_mode(:center) if line.block_type.casecmp("CENTER") == 0
|
276
|
-
|
277
|
-
when :table_row, :table_header
|
278
|
-
|
279
|
-
output_buffer << line.line.lstrip
|
280
|
-
|
281
|
-
when :unordered_list, :ordered_list, :definition_list
|
282
|
-
|
283
|
-
output_buffer << line.output_text << " "
|
284
|
-
|
285
|
-
when :inline_example
|
286
|
-
|
287
|
-
output_buffer << line.output_text
|
288
|
-
|
289
|
-
when :src
|
290
|
-
|
291
|
-
output_buffer << line.output_text << "\n"
|
292
|
-
|
293
|
-
else
|
294
|
-
if output_buffer.preserve_whitespace? then
|
295
|
-
output_buffer << line.output_text
|
296
|
-
else
|
297
|
-
output_buffer << line.output_text.strip << " "
|
298
|
-
end
|
299
|
-
end
|
300
|
-
end
|
215
|
+
lines.each { |line| output_buffer.insert(line) }
|
301
216
|
output_buffer.flush!
|
302
|
-
output_buffer.pop_mode
|
217
|
+
output_buffer.pop_mode while output_buffer.current_mode
|
303
218
|
output_buffer.output_footnotes!
|
304
219
|
output_buffer.output
|
305
220
|
end
|
@@ -39,24 +39,20 @@ module Orgmode
|
|
39
39
|
# body-regexp A regexp like \".\" to match a body character. Don't use
|
40
40
|
# non-shy groups here, and don't allow newline here.
|
41
41
|
# newline The maximum number of newlines allowed in an emphasis exp.
|
42
|
-
#
|
43
|
-
# I currently don't use +newline+ because I've thrown this information
|
44
|
-
# away by this point in the code. TODO -- revisit?
|
45
|
-
attr_reader :pre_emphasis
|
46
|
-
attr_reader :post_emphasis
|
47
|
-
attr_reader :border_forbidden
|
48
|
-
attr_reader :body_regexp
|
49
|
-
attr_reader :markers
|
50
42
|
|
51
|
-
attr_reader
|
43
|
+
attr_reader :org_image_file_regexp
|
52
44
|
|
53
45
|
def initialize
|
54
46
|
# Set up the emphasis regular expression.
|
55
|
-
@pre_emphasis =
|
56
|
-
@post_emphasis =
|
57
|
-
@border_forbidden = "
|
58
|
-
@body_regexp =
|
59
|
-
@
|
47
|
+
@pre_emphasis = ' \t\(\'"\{'
|
48
|
+
@post_emphasis = '- \t\.,:!\?;\'"\)\}\\\\'
|
49
|
+
@border_forbidden = '\s,"\''
|
50
|
+
@body_regexp = '.*?'
|
51
|
+
@max_newlines = 1
|
52
|
+
@body_regexp = "#{@body_regexp}" +
|
53
|
+
"(?:\\n#{@body_regexp}){0,#{@max_newlines}}" if @max_newlines > 0
|
54
|
+
@markers = '\*\/_=~\+'
|
55
|
+
@code_snippet_stack = []
|
60
56
|
@logger = Logger.new(STDERR)
|
61
57
|
@logger.level = Logger::WARN
|
62
58
|
build_org_emphasis_regexp
|
@@ -94,23 +90,32 @@ module Orgmode
|
|
94
90
|
# replace "*bold*", "/italic/", and "=code=",
|
95
91
|
# respectively. (Clearly this sample string will use HTML-like
|
96
92
|
# syntax, assuming +map+ is defined appropriately.)
|
97
|
-
def rewrite_emphasis
|
98
|
-
|
99
|
-
|
93
|
+
def rewrite_emphasis str
|
94
|
+
# escape the percent signs for safe restoring code snippets
|
95
|
+
str.gsub!(/%/, "%%")
|
96
|
+
format_str = "%s"
|
97
|
+
str.gsub! @org_emphasis_regexp do |match|
|
98
|
+
# preserve the code snippet from further formatting
|
99
|
+
inner = if $2 == "=" or $2 == "~"
|
100
|
+
@code_snippet_stack.push $3
|
101
|
+
yield $2, format_str
|
102
|
+
else
|
103
|
+
yield $2, $3
|
104
|
+
end
|
100
105
|
"#{$1}#{inner}"
|
101
106
|
end
|
102
107
|
end
|
103
108
|
|
104
109
|
# rewrite subscript and superscript (_{foo} and ^{bar})
|
105
|
-
def rewrite_subp
|
106
|
-
str.gsub
|
110
|
+
def rewrite_subp str # :yields: type ("_" for subscript and "^" for superscript), text
|
111
|
+
str.gsub! @org_subp_regexp do |match|
|
107
112
|
yield $1, $2
|
108
113
|
end
|
109
114
|
end
|
110
115
|
|
111
116
|
# rewrite footnotes
|
112
|
-
def rewrite_footnote
|
113
|
-
str.gsub
|
117
|
+
def rewrite_footnote str # :yields: name, definition or nil
|
118
|
+
str.gsub! @org_footnote_regexp do |match|
|
114
119
|
yield $1, $3
|
115
120
|
end
|
116
121
|
end
|
@@ -140,48 +145,43 @@ module Orgmode
|
|
140
145
|
# +http://www.hotmail.com+. In both cases, the block returns an
|
141
146
|
# HTML-style link, and that is how things will get recorded in
|
142
147
|
# +result+.
|
143
|
-
def rewrite_links
|
144
|
-
str.gsub
|
148
|
+
def rewrite_links str # :yields: link, text
|
149
|
+
str.gsub! @org_link_regexp do |match|
|
150
|
+
yield $1, $3
|
151
|
+
end
|
152
|
+
str.gsub! @org_angle_link_text_regexp do |match|
|
145
153
|
yield $1, nil
|
146
|
-
end.gsub(@org_link_text_regexp) do |match|
|
147
|
-
yield $1, $2
|
148
|
-
end.gsub(@org_angle_link_text_regexp) do |match|
|
149
|
-
yield "#{$2}:#{$3}", nil
|
150
154
|
end
|
155
|
+
|
156
|
+
str # for testing
|
151
157
|
end
|
152
158
|
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
end
|
159
|
+
def restore_code_snippets str
|
160
|
+
str = str % @code_snippet_stack
|
161
|
+
@code_snippet_stack = []
|
162
|
+
str
|
158
163
|
end
|
159
164
|
|
160
165
|
private
|
161
166
|
|
162
167
|
def build_org_emphasis_regexp
|
163
|
-
@org_emphasis_regexp = Regexp.new("([#{@pre_emphasis}]|^)
|
164
|
-
"(
|
165
|
-
"(
|
166
|
-
"[^#{@border_forbidden}]#{@body_regexp}
|
167
|
-
"\\2
|
168
|
-
"(?=[#{@post_emphasis}]|$)
|
168
|
+
@org_emphasis_regexp = Regexp.new("([#{@pre_emphasis}]|^)" +
|
169
|
+
"([#{@markers}])(?!\\2)" +
|
170
|
+
"([^#{@border_forbidden}]|" +
|
171
|
+
"[^#{@border_forbidden}]#{@body_regexp}" +
|
172
|
+
"[^#{@border_forbidden}])\\2" +
|
173
|
+
"(?=[#{@post_emphasis}]|$)")
|
169
174
|
@logger.debug "Just created regexp: #{@org_emphasis_regexp}"
|
170
175
|
end
|
171
176
|
|
172
177
|
def build_org_link_regexp
|
173
178
|
@org_link_regexp = /\[\[
|
174
|
-
([^\]]
|
175
|
-
\]\
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
@
|
180
|
-
([^\]]*) # This is the URL
|
181
|
-
\]\[
|
182
|
-
([^\]]*) # This is the friendly text
|
183
|
-
\]\]/x
|
184
|
-
@org_angle_link_text_regexp = /(<|<)(\w+):([^\]\t\n\r<> ][^\]\t\n\r<> ]*)(>|>)/x
|
179
|
+
([^\]\[]+) # This is the URL
|
180
|
+
\](\[
|
181
|
+
([^\]\[]+) # This is the friendly text
|
182
|
+
\])?\]/x
|
183
|
+
@org_angle_link_text_regexp = /<(\w+:[^\]\s<>]+)>/
|
184
|
+
@org_image_file_regexp = /\.(gif|jpe?g|p(?:bm|gm|n[gm]|pm)|svg|tiff?|x[bp]m)/i
|
185
185
|
end
|
186
186
|
end # class Emphasis
|
187
187
|
end # module Orgmode
|
@@ -6,21 +6,28 @@ module Orgmode
|
|
6
6
|
|
7
7
|
def initialize(output)
|
8
8
|
super(output)
|
9
|
-
@add_paragraph =
|
9
|
+
@add_paragraph = true
|
10
10
|
@support_definition_list = true # TODO this should be an option
|
11
|
-
@footnotes =
|
11
|
+
@footnotes = []
|
12
12
|
end
|
13
13
|
|
14
|
-
def push_mode(mode)
|
14
|
+
def push_mode(mode, indent)
|
15
|
+
@list_indent_stack.push(indent)
|
15
16
|
super(mode)
|
16
|
-
@output << "bc
|
17
|
-
|
17
|
+
@output << "bc. " if mode_is_code? mode
|
18
|
+
if mode == :center or mode == :quote
|
19
|
+
@add_paragraph = false
|
20
|
+
@output << "\n"
|
21
|
+
end
|
18
22
|
end
|
19
23
|
|
20
24
|
def pop_mode(mode = nil)
|
21
25
|
m = super(mode)
|
22
|
-
@
|
23
|
-
|
26
|
+
@list_indent_stack.pop
|
27
|
+
if m == :center or m == :quote
|
28
|
+
@add_paragraph = true
|
29
|
+
@output << "\n"
|
30
|
+
end
|
24
31
|
m
|
25
32
|
end
|
26
33
|
|
@@ -36,37 +43,68 @@ module Orgmode
|
|
36
43
|
|
37
44
|
# Handles inline formatting for textile.
|
38
45
|
def inline_formatting(input)
|
39
|
-
|
46
|
+
@re_help.rewrite_emphasis input do |marker, body|
|
40
47
|
m = TextileMap[marker]
|
41
48
|
"#{m}#{body}#{m}"
|
42
49
|
end
|
43
|
-
|
50
|
+
@re_help.rewrite_subp input do |type, text|
|
44
51
|
if type == "_" then
|
45
52
|
"~#{text}~"
|
46
53
|
elsif type == "^" then
|
47
54
|
"^#{text}^"
|
48
55
|
end
|
49
56
|
end
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
57
|
+
@re_help.rewrite_links input do |link, defi|
|
58
|
+
[link, defi].compact.each do |text|
|
59
|
+
# We don't support search links right now. Get rid of it.
|
60
|
+
text.sub!(/\A(file:[^\s]+)::[^\s]*?\Z/, "\\1")
|
61
|
+
text.sub!(/\A(file:[^\s]+)\.org\Z/i, "\\1.textile")
|
62
|
+
text.sub!(/\Afile:(?=[^\s]+\Z)/, "")
|
63
|
+
end
|
64
|
+
|
65
|
+
# We don't add a description for images in links, because its
|
66
|
+
# empty value forces the image to be inlined.
|
67
|
+
defi ||= link unless link =~ @re_help.org_image_file_regexp
|
68
|
+
link = link.gsub(/ /, "%%20")
|
69
|
+
|
70
|
+
if defi =~ @re_help.org_image_file_regexp
|
71
|
+
defi = "!#{defi}(#{defi})!"
|
72
|
+
elsif defi
|
73
|
+
defi = "\"#{defi}\""
|
74
|
+
end
|
75
|
+
|
76
|
+
if defi
|
77
|
+
"#{defi}:#{link}"
|
78
|
+
else
|
79
|
+
"!#{link}(#{link})!"
|
80
|
+
end
|
54
81
|
end
|
55
|
-
|
56
|
-
# textile only support numerical names
|
57
|
-
|
58
|
-
@footnotes[name]
|
59
|
-
|
82
|
+
@re_help.rewrite_footnote input do |name, definition|
|
83
|
+
# textile only support numerical names, so we need to do some conversion
|
84
|
+
# Try to find the footnote and use its index
|
85
|
+
footnote = @footnotes.select {|f| f[:name] == name }.first
|
86
|
+
if footnote
|
87
|
+
# The latest definition overrides other ones
|
88
|
+
footnote[:definition] = definition if definition and not footnote[:definition]
|
89
|
+
else
|
90
|
+
# There is no footnote with the current name so we add it
|
91
|
+
footnote = { :name => name, :definition => definition }
|
92
|
+
@footnotes << footnote
|
93
|
+
end
|
94
|
+
|
95
|
+
"[#{@footnotes.index(footnote)}]"
|
60
96
|
end
|
61
97
|
Orgmode.special_symbols_to_textile(input)
|
98
|
+
input = @re_help.restore_code_snippets input
|
62
99
|
input
|
63
100
|
end
|
64
101
|
|
65
102
|
def output_footnotes!
|
66
103
|
return false if @footnotes.empty?
|
67
104
|
|
68
|
-
@footnotes.each do |
|
69
|
-
|
105
|
+
@footnotes.each do |footnote|
|
106
|
+
index = @footnotes.index(footnote)
|
107
|
+
@output << "\nfn#{index}. #{footnote[:definition] || 'DEFINITION NOT FOUND' }\n"
|
70
108
|
end
|
71
109
|
|
72
110
|
return true
|
@@ -74,35 +112,44 @@ module Orgmode
|
|
74
112
|
|
75
113
|
# Flushes the current buffer
|
76
114
|
def flush!
|
115
|
+
return false if @buffer.empty? and @output_type != :blank
|
77
116
|
@logger.debug "FLUSH ==========> #{@output_type}"
|
78
|
-
|
117
|
+
@buffer.gsub!(/\A\n*/, "")
|
118
|
+
|
119
|
+
case
|
120
|
+
when preserve_whitespace?
|
121
|
+
@output << @buffer << "\n"
|
122
|
+
|
123
|
+
when @output_type == :blank
|
79
124
|
@output << "\n"
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
@output << inline_formatting(@buffer) << "\n"
|
125
|
+
|
126
|
+
else
|
127
|
+
case current_mode
|
128
|
+
when :paragraph
|
129
|
+
@output << "p. " if @add_paragraph
|
130
|
+
@output << "p=. " if @mode_stack[0] == :center
|
131
|
+
@output << "bq. " if @mode_stack[0] == :quote
|
132
|
+
|
133
|
+
when :list_item
|
134
|
+
if @mode_stack[-2] == :ordered_list
|
135
|
+
@output << "#" * @mode_stack.count(:list_item) << " "
|
136
|
+
else # corresponds to unordered list
|
137
|
+
@output << "*" * @mode_stack.count(:list_item) << " "
|
138
|
+
end
|
139
|
+
|
140
|
+
when :definition_term
|
141
|
+
if @support_definition_list
|
142
|
+
@output << "-" * @mode_stack.count(:definition_term) << " "
|
143
|
+
@buffer.sub!("::", ":=")
|
144
|
+
end
|
101
145
|
end
|
146
|
+
@output << inline_formatting(@buffer) << "\n"
|
102
147
|
end
|
103
|
-
|
148
|
+
@buffer = ""
|
104
149
|
end
|
105
150
|
|
106
|
-
|
151
|
+
def add_line_attributes headline
|
152
|
+
@output << "h#{headline.level}. "
|
153
|
+
end
|
107
154
|
end # class TextileOutputBuffer
|
108
155
|
end # module Orgmode
|