Module: CodeRay::Encoders::HTML::Output

Extends:
Output::Template::Simple
Defined in:
vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/output.rb,
vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/numerization.rb

Overview

This module is included in the output String from thew HTML Encoder.

It provides methods like wrap, div, page etc.

Remember to use #clone instead of #dup to keep the modules the object was extended with.

TODO: more doc.

Defined Under Namespace

Classes: Template

Constant Summary

SPAN =

— don’t include the templates in docu

`<span class="CodeRay"><%CONTENT%></span>`
DIV =
"<div class=\"CodeRay\">\n<div class=\"code\"><pre><%CONTENT%></pre></div>\n</div>\n"
TABLE =
"<table class=\"CodeRay\"><tr>\n<td class=\"line_numbers\" title=\"click to toggle\" onclick=\"with (this.firstChild.style) { display = (display == '') ? 'none' : '' }\"><pre><%LINE_NUMBERS%></pre></td>\n<td class=\"code\"><pre ondblclick=\"with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }\"><%CONTENT%></pre></td>\n</tr></table>\n"
LIST =

title="double click to expand"

"<ol class=\"CodeRay\">\n<%CONTENT%>\n</ol>\n"
PAGE =
"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"de\">\n<head>\n<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n<title></title>\n<style type=\"text/css\">\n<%CSS%>\n</style>\n</head>\n<body style=\"background-color: white;\">\n\n<%CONTENT%>\n</body>\n</html>\n"

Instance Attribute Summary

Class Method Summary

Instance Method Summary

Methods included from Output::Template::Simple

`

Instance Attribute Details

- (Object) css

Returns the value of attribute css



18
19
20
# File 'vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/output.rb', line 18

def css
  @css
end

- (Object) wrapped_in



77
78
79
# File 'vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/output.rb', line 77

def wrapped_in
  @wrapped_in ||= nil
end

Class Method Details

+ (Object) extended(o)

Raises an exception if an object that doesn’t respond to to_str is extended by Output, to prevent users from misuse. Use Module#remove_method to disable.



37
38
39
# File 'vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/output.rb', line 37

def extended o
  warn "The Output module is intended to extend instances of String, not #{o.class}." unless o.respond_to? :to_str
end

+ (Object) make_stylesheet(css, in_tag = false)



41
42
43
44
45
# File 'vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/output.rb', line 41

def make_stylesheet css, in_tag = false
  sheet = css.stylesheet
  sheet = "<style type=\"text/css\">\n\#{sheet}\n</style>\n" if in_tag
  sheet
end

+ (Object) new(string, css = CSS.new, element = nil)

This makes Output look like a class.

Example:

 a = Output.new '<span class="co">Code</span>'
 a.wrap! :page


28
29
30
31
32
33
# File 'vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/output.rb', line 28

def new string, css = CSS.new, element = nil
  output = string.clone.extend self
  output.wrapped_in = element
  output.css = css
  output
end

+ (Object) page_template_for_css(css)



52
53
54
55
# File 'vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/output.rb', line 52

def page_template_for_css css
  sheet = make_stylesheet css
  PAGE.apply 'CSS', sheet
end

+ (Object) wrapper(*wrappers)

Define a new wrapper. This is meta programming.



58
59
60
61
62
63
64
65
66
67
# File 'vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/output.rb', line 58

def wrapper *wrappers
  wrappers.each do |wrapper|
    define_method wrapper do |*args|
      wrap wrapper, *args
    end
    define_method "#{wrapper}!".to_sym do |*args|
      wrap! wrapper, *args
    end
  end
end

Instance Method Details

- (Object) apply_title!(title)



91
92
93
94
# File 'vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/output.rb', line 91

def apply_title! title
  self.sub!(/(<title>)(<\/title>)/) { $1 + title + $2 }
  self
end

- (Object) line_count



117
118
119
120
121
122
123
124
125
126
# File 'vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/numerization.rb', line 117

def line_count
  line_count = count("\n")
  position_of_last_newline = rindex(?\n)
  if position_of_last_newline
    after_last_newline = self[position_of_last_newline + 1 .. -1]
    ends_with_newline = after_last_newline[/\A(?:<\/span>)*\z/]
    line_count += 1 if not ends_with_newline
  end
  line_count
end

- (Object) numerize(*args)



8
9
10
# File 'vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/numerization.rb', line 8

def numerize *args
  clone.numerize!(*args)
end

- (Object) numerize!(mode = :table, options = {})

:table => [:div, :page, nil],

        :inline => :all,
        :list => [:div, :page, nil]
      }
      NUMERIZABLE_WRAPPINGS.default = :all


19
# File 'vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/numerization.rb', line 19

def numerize! mode = :table, options = {}

- (Object) stylesheet(in_tag = false)



126
127
128
# File 'vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/output.rb', line 126

def stylesheet in_tag = false
  Output.make_stylesheet @css, in_tag
end

- (Object) wrap(*args)



122
123
124
# File 'vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/output.rb', line 122

def wrap *args
  clone.wrap!(*args)
end

- (Object) wrap!(element, *args)



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/output.rb', line 96

def wrap! element, *args
  return self if not element or element == wrapped_in
  case element
  when :div
    raise "Can't wrap %p in %p" % [wrapped_in, element] unless wrapped_in? nil
    wrap_in! DIV
  when :span
    raise "Can't wrap %p in %p" % [wrapped_in, element] unless wrapped_in? nil
    wrap_in! SPAN
  when :page
    wrap! :div if wrapped_in? nil
    raise "Can't wrap %p in %p" % [wrapped_in, element] unless wrapped_in? :div
    wrap_in! Output.page_template_for_css(@css)
    if args.first.is_a?(Hash) && title = args.first[:title]
      apply_title! title
    end
    self
  when nil
    return self
  else
    raise "Unknown value %p for :wrap" % element
  end
  @wrapped_in = element
  self
end

- (Object) wrap_in(template)



82
83
84
# File 'vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/output.rb', line 82

def wrap_in template
  clone.wrap_in! template
end

- (Object) wrap_in!(template)



86
87
88
89
# File 'vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/output.rb', line 86

def wrap_in! template
  Template.wrap! self, template, 'CONTENT'
  self
end

- (Boolean) wrapped_in?(element)

Returns:

  • (Boolean)


73
74
75
# File 'vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/output.rb', line 73

def wrapped_in? element
  wrapped_in == element
end