Class: Rouge::Formatters::Tex
- Inherits:
-
Rouge::Formatter
- Object
- Rouge::Formatter
- Rouge::Formatters::Tex
- Defined in:
- lib/rouge/formatters/tex.rb
Constant Summary collapse
- ESCAPE =
A map of TeX escape characters. Newlines are handled specially by using #token_lines spaces are preserved as long as they aren't at the beginning of a line. see #tag_first for our initial-space strategy
{ '&' => '\&', '%' => '\%', '$' => '\$', '#' => '\#', '_' => '\_', '{' => '\{', '}' => '\}', '~' => '{\textasciitilde}', '^' => '{\textasciicircum}', '|' => '{\textbar}', '\\' => '{\textbackslash}', '`' => '{\textasciigrave}', "'" => "'{}", '"' => '"{}', "\t" => '{\tab}', }
- ESCAPE_REGEX =
/[#{ESCAPE.keys.map(&Regexp.method(:escape)).join}]/om
Instance Method Summary collapse
- #escape_tex(str) ⇒ Object
-
#hphantom_tag(tok, val) {|"\\hphantom{#{'x' * leading}}"| ... } ⇒ Object
Special handling for leading spaces, since they may be gobbled by a previous command.
-
#initialize(opts = {}) ⇒ Tex
constructor
A new instance of Tex.
- #render_line(line, &b) ⇒ Object
- #stream(tokens) {|"\\begin{#{@prefix}*}%\n"| ... } ⇒ Object
- #tag(tok, val) ⇒ Object
Methods inherited from Rouge::Formatter
disable_escape!, enable_escape!, #escape?, escape_enabled?, #filter_escapes, find, format, #format, #render, tag, #token_lines, with_escape
Constructor Details
#initialize(opts = {}) ⇒ Tex
Returns a new instance of Tex.
33 34 35 |
# File 'lib/rouge/formatters/tex.rb', line 33 def initialize(opts={}) @prefix = opts.fetch(:prefix) { 'RG' } end |
Instance Method Details
#escape_tex(str) ⇒ Object
37 38 39 |
# File 'lib/rouge/formatters/tex.rb', line 37 def escape_tex(str) str.gsub(ESCAPE_REGEX, ESCAPE) end |
#hphantom_tag(tok, val) {|"\\hphantom{#{'x' * leading}}"| ... } ⇒ Object
Special handling for leading spaces, since they may be gobbled by a previous command. We replace all initial spaces with \hphantomxxxx, which renders an empty space equal to the size of the x's.
74 75 76 77 78 79 |
# File 'lib/rouge/formatters/tex.rb', line 74 def hphantom_tag(tok, val) leading = nil val.sub!(/^[ ]+/) { leading = $&.size; '' } yield "\\hphantom{#{'x' * leading}}" if leading yield tag(tok, val) unless val.empty? end |
#render_line(line, &b) ⇒ Object
64 65 66 67 68 |
# File 'lib/rouge/formatters/tex.rb', line 64 def render_line(line, &b) line.each do |(tok, val)| hphantom_tag(tok, val, &b) end end |
#stream(tokens) {|"\\begin{#{@prefix}*}%\n"| ... } ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/rouge/formatters/tex.rb', line 41 def stream(tokens, &b) # surround the output with \begin{RG*}...\end{RG*} yield "\\begin{#{@prefix}*}%\n" # we strip the newline off the last line to avoid # an extra line being rendered. we do this by yielding # the \newline tag *before* every line group except # the first. first = true token_lines tokens do |line| if first first = false else yield "\\newline%\n" end render_line(line, &b) end yield "%\n\\end{#{@prefix}*}%\n" end |