#
# $Id: htmlutils.rb 2227 2006-05-13 00:09:08Z aamine $
#
# Copyright (c) 2002-2006 Minero Aoki
#
# This program is free software.
# You can distribute or modify this program under the terms of
# the GNU LGPL, Lesser General Public License version 2.1.
#
module ReVIEW
module HTMLUtils
ESC = {
'&' => '&',
'<' => '<',
'>' => '>',
'"' => '"'
}
def escape_html(str)
t = ESC
str.gsub(/[&"<>]/) {|c| t[c] }
end
alias_method :escape, :escape_html
def unescape_html(str)
# FIXME better code
str.gsub('"', '"').gsub('>', '>').gsub('<', '<').gsub('&', '&')
end
alias_method :unescape, :unescape_html
def strip_html(str)
str.gsub(/<\/?[^>]*>/, "")
end
def escape_comment(str)
str.gsub('-', '-')
end
def highlight_pygments?
@book.config["pygments"].present? ||
@book.config["highlight"] && @book.config["highlight"]["html"] == "pygments"
end
def highlight(ops)
body = ops[:body] || ''
lexer = ops[:lexer].blank? ? 'text' : ops[:lexer]
format = ops[:format] || ''
options = {:nowrap => true, :noclasses => true}
if ops[:options] && ops[:options].kind_of?(Hash)
options.merge!(ops[:options])
end
return body if !highlight_pygments?
begin
require 'pygments'
begin
Pygments.highlight(
unescape_html(body),
:options => options,
:formatter => format,
:lexer => lexer)
rescue MentosError
body
end
rescue LoadError
body
end
end
def normalize_id(id)
if id =~ /\A[a-z][a-z0-9_.-]*\Z/i
return id
elsif id =~ /\A[0-9_.-][a-z0-9_.-]*\Z/i
return "id_#{id}" # dummy prefix
else
return "id_#{CGI.escape(id.gsub("_", "__")).gsub("%", "_").gsub("+", "-")}" # escape all
end
end
end
end # module ReVIEW