org-ruby 0.5.0 → 0.5.1
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 +7 -1
- data/lib/org-ruby.rb +1 -1
- data/lib/org-ruby/html_output_buffer.rb +14 -7
- data/lib/org-ruby/line.rb +21 -2
- data/lib/org-ruby/output_buffer.rb +11 -7
- data/lib/org-ruby/textile_output_buffer.rb +2 -2
- data/spec/html_examples/advanced-code.html +36 -0
- data/spec/html_examples/advanced-code.org +53 -0
- data/spec/html_examples/block_code.html +2 -2
- data/spec/html_examples/code-comment.html +1 -1
- data/spec/html_examples/escape-pre.html +1 -1
- data/spec/html_examples/metadata-comment.html +1 -1
- data/spec/line_spec.rb +7 -0
- metadata +3 -1
data/History.txt
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
== 0.5.
|
|
1
|
+
== 0.5.1 / 2009-12-30
|
|
2
|
+
|
|
3
|
+
* Minor enhancement: Recognize lines starting with ":" as examples.
|
|
4
|
+
* Minor enhancement: Recognize #+BEGIN_SRC as source blocks
|
|
5
|
+
* Minor enhancement: Add "src" and "example" classes to <pre> blocks.
|
|
6
|
+
|
|
7
|
+
== 0.5.0 / 2009-12-30
|
|
2
8
|
|
|
3
9
|
* Parse (but not necessarily *use*) in-buffer settings. The following
|
|
4
10
|
in-buffer settings *are* used:
|
data/lib/org-ruby.rb
CHANGED
|
@@ -17,7 +17,9 @@ module Orgmode
|
|
|
17
17
|
:ordered_list => "ol",
|
|
18
18
|
:table => "table",
|
|
19
19
|
:blockquote => "blockquote",
|
|
20
|
-
:
|
|
20
|
+
:example => "pre",
|
|
21
|
+
:src => "pre",
|
|
22
|
+
:inline_example => "pre"
|
|
21
23
|
}
|
|
22
24
|
|
|
23
25
|
attr_reader :options
|
|
@@ -33,17 +35,25 @@ module Orgmode
|
|
|
33
35
|
@logger.debug "HTML export options: #{@options.inspect}"
|
|
34
36
|
end
|
|
35
37
|
|
|
38
|
+
# Output buffer is entering a new mode. Use this opportunity to
|
|
39
|
+
# write out one of the block tags in the ModeTag constant to put
|
|
40
|
+
# this information in the HTML stream.
|
|
36
41
|
def push_mode(mode)
|
|
37
42
|
if ModeTag[mode] then
|
|
38
43
|
output_indentation
|
|
39
|
-
|
|
40
|
-
|
|
44
|
+
css_class = ""
|
|
45
|
+
css_class = " class=\"src\"" if mode == :src
|
|
46
|
+
css_class = " class=\"example\"" if (mode == :example || mode == :inline_example)
|
|
47
|
+
@logger.debug "#{mode}: <#{ModeTag[mode]}#{css_class}>\n"
|
|
48
|
+
@output << "<#{ModeTag[mode]}#{css_class}>\n" unless mode == :table and skip_tables?
|
|
41
49
|
# Entering a new mode obliterates the title decoration
|
|
42
50
|
@title_decoration = ""
|
|
43
51
|
end
|
|
44
52
|
super(mode)
|
|
45
53
|
end
|
|
46
54
|
|
|
55
|
+
# We are leaving a mode. Close any tags that were opened when
|
|
56
|
+
# entering this mode.
|
|
47
57
|
def pop_mode(mode = nil)
|
|
48
58
|
m = super(mode)
|
|
49
59
|
if ModeTag[m] then
|
|
@@ -55,12 +65,9 @@ module Orgmode
|
|
|
55
65
|
|
|
56
66
|
def flush!
|
|
57
67
|
escape_buffer!
|
|
58
|
-
if @buffer_mode
|
|
68
|
+
if mode_is_code(@buffer_mode) then
|
|
59
69
|
# Whitespace is significant in :code mode. Always output the buffer
|
|
60
70
|
# and do not do any additional translation.
|
|
61
|
-
#
|
|
62
|
-
# FIXME 2009-12-29 bdewey: It looks like I'll always get an extraneous
|
|
63
|
-
# newline at the start of code blocks. Find a way to fix this.
|
|
64
71
|
@logger.debug "FLUSH CODE ==========> #{@buffer.inspect}"
|
|
65
72
|
@output << @buffer << "\n"
|
|
66
73
|
else
|
data/lib/org-ruby/line.rb
CHANGED
|
@@ -117,6 +117,18 @@ module Orgmode
|
|
|
117
117
|
$2 if @line =~ BlockRegexp
|
|
118
118
|
end
|
|
119
119
|
|
|
120
|
+
def code_block_type?
|
|
121
|
+
block_type =~ /^(EXAMPLE|SRC)$/
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
InlineExampleRegexp = /^\s*:/
|
|
125
|
+
|
|
126
|
+
# Test if the line matches the "inline example" case:
|
|
127
|
+
# the first character on the line is a colon.
|
|
128
|
+
def inline_example?
|
|
129
|
+
check_assignment_or_regexp(:inline_example, InlineExampleRegexp)
|
|
130
|
+
end
|
|
131
|
+
|
|
120
132
|
InBufferSettingRegexp = /^#\+(\w+):\s*(.*)$/
|
|
121
133
|
|
|
122
134
|
# call-seq:
|
|
@@ -148,6 +160,7 @@ module Orgmode
|
|
|
148
160
|
return :table_separator if table_separator?
|
|
149
161
|
return :table_row if table_row?
|
|
150
162
|
return :table_header if table_header?
|
|
163
|
+
return :inline_example if inline_example?
|
|
151
164
|
return :paragraph
|
|
152
165
|
end
|
|
153
166
|
|
|
@@ -180,10 +193,12 @@ module Orgmode
|
|
|
180
193
|
|
|
181
194
|
if line.begin_block?
|
|
182
195
|
output_buffer.push_mode(:blockquote) if line.block_type == "QUOTE"
|
|
183
|
-
output_buffer.push_mode(:
|
|
196
|
+
output_buffer.push_mode(:src) if line.block_type == "SRC"
|
|
197
|
+
output_buffer.push_mode(:example) if line.block_type == "EXAMPLE"
|
|
184
198
|
elsif line.end_block?
|
|
185
199
|
output_buffer.pop_mode(:blockquote) if line.block_type == "QUOTE"
|
|
186
|
-
output_buffer.pop_mode(:
|
|
200
|
+
output_buffer.pop_mode(:src) if line.block_type == "SRC"
|
|
201
|
+
output_buffer.pop_mode(:example) if line.block_type == "EXAMPLE"
|
|
187
202
|
else
|
|
188
203
|
output_buffer << line.line if output_buffer.preserve_whitespace?
|
|
189
204
|
end
|
|
@@ -200,6 +215,10 @@ module Orgmode
|
|
|
200
215
|
|
|
201
216
|
output_buffer << line.strip_unordered_list_tag << " "
|
|
202
217
|
|
|
218
|
+
when :inline_example
|
|
219
|
+
|
|
220
|
+
output_buffer << line.line.sub(InlineExampleRegexp, "")
|
|
221
|
+
|
|
203
222
|
when :paragraph
|
|
204
223
|
|
|
205
224
|
if output_buffer.preserve_whitespace? then
|
|
@@ -45,7 +45,7 @@ module Orgmode
|
|
|
45
45
|
push_mode(:normal)
|
|
46
46
|
end
|
|
47
47
|
|
|
48
|
-
Modes = [:normal, :ordered_list, :unordered_list, :blockquote, :
|
|
48
|
+
Modes = [:normal, :ordered_list, :unordered_list, :blockquote, :src, :example, :table, :inline_example]
|
|
49
49
|
|
|
50
50
|
def current_mode
|
|
51
51
|
@mode_stack.last
|
|
@@ -75,6 +75,8 @@ module Orgmode
|
|
|
75
75
|
maintain_list_indent_stack(line)
|
|
76
76
|
@output_type = line.paragraph_type
|
|
77
77
|
end
|
|
78
|
+
push_mode(:inline_example) if line.inline_example? and current_mode != :inline_example
|
|
79
|
+
pop_mode(:inline_example) if current_mode == :inline_example && !line.inline_example?
|
|
78
80
|
push_mode(:table) if enter_table?
|
|
79
81
|
pop_mode(:table) if exit_table?
|
|
80
82
|
end
|
|
@@ -108,17 +110,19 @@ module Orgmode
|
|
|
108
110
|
|
|
109
111
|
# Test if we're in an output mode in which whitespace is significant.
|
|
110
112
|
def preserve_whitespace?
|
|
111
|
-
|
|
113
|
+
mode_is_code current_mode
|
|
112
114
|
end
|
|
113
115
|
|
|
114
116
|
######################################################################
|
|
115
117
|
private
|
|
116
118
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
119
|
+
def mode_is_code(mode)
|
|
120
|
+
case mode
|
|
121
|
+
when :src, :inline_example, :example
|
|
122
|
+
true
|
|
123
|
+
else
|
|
124
|
+
false
|
|
125
|
+
end
|
|
122
126
|
end
|
|
123
127
|
|
|
124
128
|
def maintain_list_indent_stack(line)
|
|
@@ -11,12 +11,12 @@ module Orgmode
|
|
|
11
11
|
|
|
12
12
|
def push_mode(mode)
|
|
13
13
|
super(mode)
|
|
14
|
-
@output << "bc.. " if mode
|
|
14
|
+
@output << "bc.. " if mode_is_code(mode)
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
def pop_mode(mode = nil)
|
|
18
18
|
m = super(mode)
|
|
19
|
-
@add_paragraph = (m
|
|
19
|
+
@add_paragraph = (mode_is_code(m))
|
|
20
20
|
m
|
|
21
21
|
end
|
|
22
22
|
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<p class="title">advanced-code.org</p>
|
|
2
|
+
<p>Turns out there’s more way to do code than just BEGIN_EXAMPLE.</p>
|
|
3
|
+
<h1><span class="heading-number heading-number-1">1 </span>Inline examples</h1>
|
|
4
|
+
<p>This should work:</p>
|
|
5
|
+
<pre class="example">
|
|
6
|
+
fixed width? how does this work?
|
|
7
|
+
...........
|
|
8
|
+
............
|
|
9
|
+
.
|
|
10
|
+
. . . .
|
|
11
|
+
. ..
|
|
12
|
+
....... .....
|
|
13
|
+
. .
|
|
14
|
+
....
|
|
15
|
+
</pre>
|
|
16
|
+
<p>Two ASCII blobs.</p>
|
|
17
|
+
<h1><span class="heading-number heading-number-1">2 </span>BEGIN_SRC</h1>
|
|
18
|
+
<pre class="example">
|
|
19
|
+
PROPERTIES:
|
|
20
|
+
ARCHIVE_TIME: 2009-12-26 Sat 22:16
|
|
21
|
+
ARCHIVE_FILE: ~/brians-brain/content/projects/orgmode_parser.org
|
|
22
|
+
ARCHIVE_OLPATH: &lt;%= @page.title %&gt;/Future Development
|
|
23
|
+
ARCHIVE_CATEGORY: orgmode_parser
|
|
24
|
+
ARCHIVE_TODO: DONE
|
|
25
|
+
END:
|
|
26
|
+
</pre>
|
|
27
|
+
<p>And this:</p>
|
|
28
|
+
<pre class="src">
|
|
29
|
+
# Finds all emphasis matches in a string.
|
|
30
|
+
# Supply a block that will get the marker and body as parameters.
|
|
31
|
+
def match_all(str)
|
|
32
|
+
str.scan(@org_emphasis_regexp) do |match|
|
|
33
|
+
yield $2, $3
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
</pre>
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#+TITLE: advanced-code.org
|
|
2
|
+
#+AUTHOR: Brian Dewey
|
|
3
|
+
#+EMAIL: bdewey@gmail.com
|
|
4
|
+
#+DATE: 2009-12-30 Wed
|
|
5
|
+
#+DESCRIPTION: More types of code support
|
|
6
|
+
#+KEYWORDS:
|
|
7
|
+
#+LANGUAGE: en
|
|
8
|
+
#+OPTIONS: H:3 num:t toc:nil \n:nil @:t ::t |:t ^:t -:t f:t *:t <:t
|
|
9
|
+
#+OPTIONS: TeX:t LaTeX:nil skip:nil d:nil todo:t pri:nil tags:not-in-toc
|
|
10
|
+
#+INFOJS_OPT: view:nil toc:nil ltoc:t mouse:underline buttons:0 path:http://orgmode.org/org-info.js
|
|
11
|
+
#+EXPORT_SELECT_TAGS: export
|
|
12
|
+
#+EXPORT_EXCLUDE_TAGS: noexport
|
|
13
|
+
#+LINK_UP:
|
|
14
|
+
#+LINK_HOME:
|
|
15
|
+
|
|
16
|
+
Turns out there's more way to do code than just BEGIN_EXAMPLE.
|
|
17
|
+
|
|
18
|
+
* Inline examples
|
|
19
|
+
|
|
20
|
+
This should work:
|
|
21
|
+
|
|
22
|
+
: fixed width? how does this work?
|
|
23
|
+
: ...........
|
|
24
|
+
: ............
|
|
25
|
+
: .
|
|
26
|
+
: . . . .
|
|
27
|
+
: . ..
|
|
28
|
+
: ....... .....
|
|
29
|
+
: . .
|
|
30
|
+
: ....
|
|
31
|
+
|
|
32
|
+
Two ASCII blobs.
|
|
33
|
+
|
|
34
|
+
* BEGIN_SRC
|
|
35
|
+
:PROPERTIES:
|
|
36
|
+
:ARCHIVE_TIME: 2009-12-26 Sat 22:16
|
|
37
|
+
:ARCHIVE_FILE: ~/brians-brain/content/projects/orgmode_parser.org
|
|
38
|
+
:ARCHIVE_OLPATH: <%= @page.title %>/Future Development
|
|
39
|
+
:ARCHIVE_CATEGORY: orgmode_parser
|
|
40
|
+
:ARCHIVE_TODO: DONE
|
|
41
|
+
:END:
|
|
42
|
+
|
|
43
|
+
And this:
|
|
44
|
+
|
|
45
|
+
#+BEGIN_SRC ruby
|
|
46
|
+
# Finds all emphasis matches in a string.
|
|
47
|
+
# Supply a block that will get the marker and body as parameters.
|
|
48
|
+
def match_all(str)
|
|
49
|
+
str.scan(@org_emphasis_regexp) do |match|
|
|
50
|
+
yield $2, $3
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
#+END_SRC
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<h1 class="title">Block Code</h1>
|
|
2
2
|
<p>I need to get block code examples working. In <code>orgmode</code>, they look like this:</p>
|
|
3
|
-
<pre>
|
|
3
|
+
<pre class="example">
|
|
4
4
|
|
|
5
5
|
def initialize(output)
|
|
6
6
|
@output = output
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
<p>And now I should be back to normal text.</p>
|
|
18
18
|
<p>Putting in another paragraph for good measure.</p>
|
|
19
19
|
<p>Code should also get cancelled by a list, thus:</p>
|
|
20
|
-
<pre>
|
|
20
|
+
<pre class="example">
|
|
21
21
|
This is my code!
|
|
22
22
|
|
|
23
23
|
Another line!
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<pre>
|
|
1
|
+
<pre class="example">
|
|
2
2
|
<li>[ ] &#8220;smart quotes&#8221;</li>
|
|
3
3
|
<li>[ ] I think I need this for &#8216;single quotes&#8217; too. Don&#8217;t I?</li>
|
|
4
4
|
<li>[ ] Em dashes would be great &#8212; wouldn&#8217;t they?</li>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<h1 class="title">Metadata, etc.</h1>
|
|
2
2
|
<p>I normally filter out things that look like metadata. Can’t do it any more. I need to see all of the following:</p>
|
|
3
|
-
<pre>
|
|
3
|
+
<pre class="example">
|
|
4
4
|
* DONE Handle inline formatting
|
|
5
5
|
CLOSED: [2009-12-26 Sat 21:41]
|
|
6
6
|
:PROPERTIES:
|
data/spec/line_spec.rb
CHANGED
|
@@ -24,6 +24,13 @@ describe Orgmode::Line do
|
|
|
24
24
|
end
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
+
[": inline", " :inline", "\t\t:\tinline"].each do |inline_example|
|
|
28
|
+
it "should recognize this inline example: #{inline_example}" do
|
|
29
|
+
Orgmode::Line.new(inline_example).inline_example?.should be_true
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
|
|
27
34
|
it "should recognize plain lists" do
|
|
28
35
|
list_formats = ["-",
|
|
29
36
|
"+",
|
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.5.
|
|
4
|
+
version: 0.5.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Brian Dewey
|
|
@@ -65,6 +65,8 @@ files:
|
|
|
65
65
|
- spec/data/hyp-planning.org
|
|
66
66
|
- spec/data/remember.org
|
|
67
67
|
- spec/headline_spec.rb
|
|
68
|
+
- spec/html_examples/advanced-code.html
|
|
69
|
+
- spec/html_examples/advanced-code.org
|
|
68
70
|
- spec/html_examples/advanced-lists.html
|
|
69
71
|
- spec/html_examples/advanced-lists.org
|
|
70
72
|
- spec/html_examples/block_code.html
|