org-ruby 0.8.0 → 0.8.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 CHANGED
@@ -1,3 +1,7 @@
1
+ == 0.8.1 / 2013-02-17
2
+
3
+ * Fix for html escaping when code is inline
4
+
1
5
  == 0.8.0 / 2013-02-10
2
6
 
3
7
  * A lot of refactoring work and bugfixes contributed by vonavi (many thanks!)
@@ -1,3 +1,4 @@
1
+ require 'cgi'
1
2
  begin
2
3
  require 'pygments'
3
4
  rescue LoadError
@@ -110,11 +111,12 @@ module Orgmode
110
111
  strip_code_block! if mode_is_code? current_mode
111
112
 
112
113
  # NOTE: CodeRay and Pygments already escape the html once, so
113
- # no need to escape_string!(@buffer)
114
+ # no need to escapeHTML
114
115
  case
115
116
  when (current_mode == :src and defined? Pygments)
116
117
  lang = normalize_lang @block_lang
117
118
  @output << "\n" unless @new_paragraph == :start
119
+ @new_paragraph = true
118
120
 
119
121
  begin
120
122
  @buffer = Pygments.highlight(@buffer, :lexer => lang)
@@ -138,7 +140,8 @@ module Orgmode
138
140
  @buffer.gsub!(/\A\n/, "") if @new_paragraph == :start
139
141
  @new_paragraph = true
140
142
  else
141
- escape_string! @buffer
143
+ # *NOTE* Don't use escape_buffer! through its sensitivity to @<text> forms
144
+ @buffer = CGI::escapeHTML @buffer
142
145
  end
143
146
 
144
147
  # Whitespace is significant in :code mode. Always output the
@@ -201,8 +204,9 @@ module Orgmode
201
204
  @output << "\n<div id=\"footnotes\">\n<h2 class=\"footnotes\">Footnotes:</h2>\n<div id=\"text-footnotes\">\n"
202
205
 
203
206
  @footnotes.each do |name, defi|
207
+ @buffer = defi
204
208
  @output << "<p class=\"footnote\"><sup><a class=\"footnum\" name=\"fn.#{name}\" href=\"#fnr.#{name}\">#{name}</a></sup>" \
205
- << inline_formatting(defi) \
209
+ << inline_formatting(@buffer) \
206
210
  << "</p>\n"
207
211
  end
208
212
 
@@ -229,21 +233,21 @@ module Orgmode
229
233
  end
230
234
 
231
235
  # Escapes any HTML content in the output accumulation buffer @buffer.
232
- def escape_string! str
233
- str.gsub!(/&/, "&amp;")
236
+ def escape_buffer!
237
+ @buffer.gsub!(/&/, "&amp;")
234
238
  # Escapes the left and right angular brackets but construction
235
239
  # @<text> which is formatted to <text>
236
- str.gsub! /<([^<>\n]*)/ do |match|
240
+ @buffer.gsub! /<([^<>\n]*)/ do |match|
237
241
  if $`[-1..-1] == "@" and $'[0..0] == ">" then $&
238
242
  else "&lt;#{$1}"
239
243
  end
240
244
  end
241
- str.gsub! /([^<>\n]*)>/ do |match|
245
+ @buffer.gsub! /([^<>\n]*)>/ do |match|
242
246
  if $`[-2..-1] == "@<" then $&
243
247
  else "#{$1}&gt;"
244
248
  end
245
249
  end
246
- str.gsub!(/@(<[^<>\n]*>)/, "\\1")
250
+ @buffer.gsub!(/@(<[^<>\n]*>)/, "\\1")
247
251
  end
248
252
 
249
253
  def buffer_indentation
@@ -269,7 +273,12 @@ module Orgmode
269
273
  # Applies inline formatting rules to a string.
270
274
  def inline_formatting(str)
271
275
  @re_help.rewrite_emphasis str do |marker, s|
272
- "@<#{Tags[marker][:open]}>#{s}@</#{Tags[marker][:close]}>"
276
+ if marker == "=" or marker == "~"
277
+ s = CGI::escapeHTML s
278
+ "<#{Tags[marker][:open]}>#{s}</#{Tags[marker][:close]}>"
279
+ else
280
+ "@<#{Tags[marker][:open]}>#{s}@</#{Tags[marker][:close]}>"
281
+ end
273
282
  end
274
283
  if @options[:use_sub_superscripts] then
275
284
  @re_help.rewrite_subp str do |type, text|
@@ -319,7 +328,7 @@ module Orgmode
319
328
  "@<sup>@<a class=\"footref\" name=\"fnr.#{name}\" href=\"#fn.#{name}\">#{name}@</a>@</sup>"
320
329
  end
321
330
  end
322
- escape_string! str
331
+ escape_buffer!
323
332
  Orgmode.special_symbols_to_html str
324
333
  str = @re_help.restore_code_snippets str
325
334
  end
@@ -346,6 +355,7 @@ module Orgmode
346
355
  end
347
356
 
348
357
  def strip_code_block!
358
+ @code_block_indent ||= 0
349
359
  strip_regexp = Regexp.new("^" + " " * @code_block_indent)
350
360
  @buffer.gsub!(strip_regexp, "")
351
361
  @code_block_indent = nil
data/lib/org-ruby/line.rb CHANGED
@@ -3,9 +3,6 @@ module Orgmode
3
3
  # Represents a single line of an orgmode file.
4
4
  class Line
5
5
 
6
- # This is the line itself.
7
- attr_reader :line
8
-
9
6
  # The indent level of this line. this is important to properly translate
10
7
  # nested lists from orgmode to textile.
11
8
  # TODO 2009-12-20 bdewey: Handle tabs
@@ -125,7 +122,7 @@ module Orgmode
125
122
  return strip_unordered_list_tag if unordered_list?
126
123
  return @line.sub(InlineExampleRegexp, "") if inline_example?
127
124
  return strip_raw_text_tag if raw_text?
128
- return line
125
+ return @line
129
126
  end
130
127
 
131
128
  def plain_text?
@@ -91,10 +91,12 @@ module Orgmode
91
91
  if mode_is_code? current_mode and not line.block_type
92
92
  # Determines the amount of whitespaces to be stripped at the
93
93
  # beginning of each line in code block.
94
- if @code_block_indent
95
- @code_block_indent = [@code_block_indent, line.indent].min
96
- else
97
- @code_block_indent = line.indent
94
+ if line.paragraph_type != :blank
95
+ if @code_block_indent
96
+ @code_block_indent = [@code_block_indent, line.indent].min
97
+ else
98
+ @code_block_indent = line.indent
99
+ end
98
100
  end
99
101
  end
100
102
 
@@ -106,8 +106,8 @@ module Orgmode
106
106
 
107
107
  case mode
108
108
  when :normal, :quote, :center
109
- if Headline.headline? line.line
110
- line = Headline.new line.line, self, offset
109
+ if Headline.headline? line.to_s
110
+ line = Headline.new line.to_s, self, offset
111
111
  elsif line.table_separator?
112
112
  if previous_line and previous_line.paragraph_type == :table_row and !table_header_set
113
113
  previous_line.assigned_paragraph_type = :table_header
@@ -123,7 +123,7 @@ module Orgmode
123
123
  end
124
124
 
125
125
  if mode == :normal
126
- @headlines << @current_headline = line if Headline.headline? line.line
126
+ @headlines << @current_headline = line if Headline.headline? line.to_s
127
127
  # If there is a setting on this line, remember it.
128
128
  line.in_buffer_setting? do |key, value|
129
129
  store_in_buffer_setting key.upcase, value
@@ -95,14 +95,18 @@ module Orgmode
95
95
  str.gsub!(/%/, "%%")
96
96
  format_str = "%s"
97
97
  str.gsub! @org_emphasis_regexp do |match|
98
+ pre = $1
98
99
  # 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
105
- "#{$1}#{inner}"
100
+ if $2 == "=" or $2 == "~"
101
+ inner = yield $2, $3
102
+ # code is not formatted, so turn to single percent signs
103
+ inner.gsub!(/%%/, "%")
104
+ @code_snippet_stack.push inner
105
+ "#{pre}#{format_str}"
106
+ else
107
+ inner = yield $2, $3
108
+ "#{pre}#{inner}"
109
+ end
106
110
  end
107
111
  end
108
112
 
data/lib/org-ruby.rb CHANGED
@@ -21,7 +21,7 @@ require 'org-ruby/tilt'
21
21
  module OrgRuby
22
22
 
23
23
  # :stopdoc:
24
- VERSION = '0.8.0'
24
+ VERSION = '0.8.1'
25
25
  LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
26
26
  PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
27
27
  # :startdoc:
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.8.0
4
+ version: 0.8.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-07 00:00:00.000000000Z
12
+ date: 2013-02-17 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rubypants
16
- requirement: &70363076442520 !ruby/object:Gem::Requirement
16
+ requirement: &70245565801460 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,8 +21,9 @@ dependencies:
21
21
  version: 0.2.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70363076442520
25
- description: ! 'This gem contains Ruby routines for parsing org-mode files.The most
24
+ version_requirements: *70245565801460
25
+ description: ! 'An org-mode parser written in Ruby. This gem contains Ruby routines
26
+ for parsing org-mode files.The most
26
27
 
27
28
  significant thing this library does today is convert org-mode files to
28
29