class Haml::Exec::Haml
The `haml` executable.
Public Class Methods
new(args)
click to toggle source
@param args [Array<String>] The command-line arguments
Calls superclass method
Haml::Exec::Generic.new
# File lib/haml/exec.rb, line 187 def initialize(args) super @options[:for_engine] = {} @options[:requires] = [] @options[:load_paths] = [] end
Public Instance Methods
process_result()
click to toggle source
Processes the options set by the command-line arguments, and runs the Haml compiler appropriately.
Calls superclass method
Haml::Exec::Generic#process_result
# File lib/haml/exec.rb, line 283 def process_result super @options[:for_engine][:filename] = @options[:filename] input = @options[:input] output = @options[:output] template = input.read() input.close() if input.is_a? File @options[:load_paths].each {|p| $LOAD_PATH << p} @options[:requires].each {|f| require f} begin engine = ::Haml::Engine.new(template, @options[:for_engine]) if @options[:check_syntax] puts "Syntax OK" return end if @options[:parse] pp engine.parser.root return end if @options[:debug] puts engine.precompiled puts '=' * 100 end result = engine.to_html rescue Exception => e raise e if @options[:trace] case e when ::Haml::SyntaxError; raise "Syntax error on line #{get_line e}: #{e.message}" when ::Haml::Error; raise "Haml error on line #{get_line e}: #{e.message}" else raise "Exception on line #{get_line e}: #{e.message}" end end output.write(result) output.close() if output.is_a? File end
set_opts(opts)
click to toggle source
Tells optparse how to parse the arguments.
@param opts [OptionParser]
Calls superclass method
Haml::Exec::Generic#set_opts
# File lib/haml/exec.rb, line 197 def set_opts(opts) super opts.banner = <<END Usage: haml [options] [INPUT] [OUTPUT] Description: Converts Haml files to HTML. Options: END opts.on('-c', '--check', "Just check syntax, don't evaluate.") do require 'stringio' @options[:check_syntax] = true @options[:output] = StringIO.new end opts.on('-t', '--style NAME', 'Output style. Can be indented (default) or ugly.') do |name| @options[:for_engine][:ugly] = true if name.to_sym == :ugly end opts.on('-f', '--format NAME', 'Output format. Can be html5 (default), xhtml, or html4.') do |name| @options[:for_engine][:format] = name.to_sym end opts.on('-e', '--escape-html', 'Escape HTML characters (like ampersands and angle brackets) by default.') do @options[:for_engine][:escape_html] = true end opts.on('--no-escape-attrs', "Don't escape HTML characters (like ampersands and angle brackets) in attributes.") do @options[:for_engine][:escape_attrs] = false end opts.on('-q', '--double-quote-attributes', 'Set attribute wrapper to double-quotes (default is single).') do @options[:for_engine][:attr_wrapper] = '"' end opts.on('--cdata', 'Always add CDATA sections to javascript and css blocks.') do @options[:for_engine][:cdata] = true end opts.on('--autoclose LIST', 'Comma separated list of elements to be automatically self-closed.') do |list| @options[:for_engine][:autoclose] = list.split(',') end opts.on('--suppress-eval', 'Don\t evaluate Ruby scripts.') do @options[:for_engine][:suppress_eval] = true end opts.on('-r', '--require FILE', "Same as 'ruby -r'.") do |file| @options[:requires] << file end opts.on('-I', '--load-path PATH', "Same as 'ruby -I'.") do |path| @options[:load_paths] << path end unless RUBY_VERSION < "1.9" opts.on('-E ex[:in]', 'Specify the default external and internal character encodings.') do |encoding| external, internal = encoding.split(':') Encoding.default_external = external if external && !external.empty? Encoding.default_internal = internal if internal && !internal.empty? end end opts.on('-d', '--debug', "Print out the precompiled Ruby source.") do @options[:debug] = true end opts.on('-p', '--parse', "Print out Haml parse tree.") do @options[:parse] = true end end