module CodeRay::Encoders::HTML::Output

def apply_title! title

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

def extended o # :nodoc:

:nodoc:
to prevent users from misuse. Use Module#remove_method to disable.
Raises an exception if an object that doesn't respond to to_str is extended by Output,
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

def make_stylesheet css, in_tag = false # :nodoc:

:nodoc:
def make_stylesheet css, in_tag = false  # :nodoc:
  sheet = css.stylesheet
  sheet = <<-'CSS' if in_tag
ype="text/css">


  CSS
  sheet
end

def page_template_for_css css # :nodoc:

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

def stylesheet in_tag = false

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

def wrap! element, *args

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

def wrap_in! template

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

def wrapped_in

def wrapped_in
  @wrapped_in ||= nil
end

def wrapped_in? element

def wrapped_in? element
  wrapped_in == element
end