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

<%CONTENT%>
</body>
</html>
PAGE

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 = <<-'CSS' if in_tag
<style type="text/css">
#{sheet}
</style>
  CSS
  sheet
end

.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