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

Defined in:
lib/coderay/encoders/html/output.rb

Overview

This module is included in the output String of the 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: Rewrite this without monkey patching.

Defined Under Namespace

Classes: Template

Constant Summary collapse

SPAN =
Template.new '<span class="CodeRay"><%CONTENT%></span>'
DIV =
Template.new "<div class=\"CodeRay\">\n  <div class=\"code\"><pre><%CONTENT%></pre></div>\n</div>\n"
TABLE =
Template.new "<table class=\"CodeRay\"><tr>\n  <td class=\"line-numbers\"><pre><%LINE_NUMBERS%></pre></td>\n  <td class=\"code\"><pre><%CONTENT%></pre></td>\n</tr></table>\n"
PAGE =
Template.new "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n  <title></title>\n  <style type=\"text/css\">\n.CodeRay .line-numbers a {\n  text-decoration: inherit;\n  color: inherit;\n}\nbody {\n  background-color: white;\n  padding: 0;\n  margin: 0;\n}\n<%CSS%>\n.CodeRay {\n  border: none;\n}\n  </style>\n</head>\n<body>\n\n<%CONTENT%>\n</body>\n</html>\n"

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#cssObject

Returns the value of attribute css.



16
17
18
# File 'lib/coderay/encoders/html/output.rb', line 16

def css
  @css
end

#wrapped_inObject



47
48
49
# File 'lib/coderay/encoders/html/output.rb', line 47

def wrapped_in
  @wrapped_in ||= nil
end

Class Method Details

.extended(o) ⇒ Object

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.



22
23
24
# File 'lib/coderay/encoders/html/output.rb', line 22

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

.make_stylesheet(css, in_tag = false) ⇒ Object

:nodoc:



26
27
28
29
30
31
32
33
34
# File 'lib/coderay/encoders/html/output.rb', line 26

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

.page_template_for_css(css) ⇒ Object

:nodoc:



36
37
38
39
# File 'lib/coderay/encoders/html/output.rb', line 36

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

Instance Method Details

#apply_title!(title) ⇒ Object



57
58
59
60
# File 'lib/coderay/encoders/html/output.rb', line 57

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

#stylesheet(in_tag = false) ⇒ Object



86
87
88
# File 'lib/coderay/encoders/html/output.rb', line 86

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

#wrap!(element, *args) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/coderay/encoders/html/output.rb', line 62

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
  else
    raise "Unknown value %p for :wrap" % element
  end
  @wrapped_in = element
  self
end

#wrap_in!(template) ⇒ Object



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

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

#wrapped_in?(element) ⇒ Boolean

Returns:

  • (Boolean)


43
44
45
# File 'lib/coderay/encoders/html/output.rb', line 43

def wrapped_in? element
  wrapped_in == element
end