# -*- Ruby -*-
=begin
HtmlGenerator allows you to generate Html implementing
an interface similar but not identical to CGI.
It's a pre alpha based on software under a GNU licence.
If it ever get's released it has to be GNU software too.
=end
require 'cgi'
class HtmlGenerator
def reset
@page = ''
@depth = "\n"
end
def incDepth
@depth += ' '
end
def decDepth
@depth = @depth[0..-3]
end
def newFrame
reset
@page = ''
end
def newTransitional
reset
@page = ''
end
def escapeHTML(text)
return CGI.escapeHTML(text)
end
def quote(aString)
return '"' + aString + '"'
end
def formatTag(aTag)
return aTag.downcase
end
def cr
@page += @depth
end
def beginTag(tagname, parameters)
cr
@page += '<' + formatTag(tagname)
parameters.each_pair { |key, value|
@page += ' ' + key + '=' + quote(value)
}
@page += '>'
end
def endTag(aTag)
cr
@page += '' + formatTag(aTag) + '>'
end
def tag(tagname, parameters, &block)
beginTag(tagname, parameters)
incDepth
block.call # assume block modifies @page, too
decDepth
endTag(tagname)
end
def html(&block)
tag 'html', {}, &block
end
def head(&block)
tag 'head', {}, &block
end
def meta(params)
beginTag 'meta', params
end
def link(params)
beginTag 'link', params
end
def title(&block)
tag 'title', {}, &block
end
def body(params, &block)
tag 'body', params, &block
end
def center(&block)
tag 'center', {}, &block
end
def h1(params, &block)
tag 'h1', params, &block
end
def a(params, &block)
tag 'a', params, &block
end
def img(srcPath, altName)
tag('img', { 'src'=>srcPath, 'alt'=>altName }) {}
end
def table(params, &block)
tag 'table', params, &block
end
def tr(params, &block)
tag 'tr', params, &block
end
def td(params, &block)
tag 'td', params, &block
end
def frameset(params, &block)
tag 'frameset', params, &block
end
def frame(params)
beginTag 'frame', params
end
def noframes(&block)
tag 'noframes', {}, &block
end
def br
beginTag 'br', Hash.new
end
def addHtml(htmlString)
@page += htmlString
end
def getPage
return @page # CGI.pretty(@page)
end
end