org-ruby 0.8.0 → 0.8.1

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