Class Haml::Exec::Haml
In: lib/haml/exec.rb
Parent: HamlSass

The `haml` executable.

Methods

Public Class methods

@param args [Array<String>] The command-line arguments

[Source]

     # File lib/haml/exec.rb, line 275
275:       def initialize(args)
276:         super
277:         @name = "Haml"
278:         @options[:requires] = []
279:         @options[:load_paths] = []
280:       end

Public Instance methods

Processes the options set by the command-line arguments, and runs the Haml compiler appropriately.

[Source]

     # File lib/haml/exec.rb, line 318
318:       def process_result
319:         super
320:         input = @options[:input]
321:         output = @options[:output]
322: 
323:         template = input.read()
324:         input.close() if input.is_a? File
325: 
326:         begin
327:           engine = ::Haml::Engine.new(template, @options[:for_engine])
328:           if @options[:check_syntax]
329:             puts "Syntax OK"
330:             return
331:           end
332: 
333:           @options[:load_paths].each {|p| $LOAD_PATH << p}
334:           @options[:requires].each {|f| require f}
335: 
336:           if @options[:debug]
337:             puts engine.precompiled
338:             puts '=' * 100
339:           end
340: 
341:           result = engine.to_html
342:         rescue Exception => e
343:           raise e if @options[:trace]
344: 
345:           case e
346:           when ::Haml::SyntaxError; raise "Syntax error on line #{get_line e}: #{e.message}"
347:           when ::Haml::Error;       raise "Haml error on line #{get_line e}: #{e.message}"
348:           else raise "Exception on line #{get_line e}: #{e.message}\n  Use --trace for backtrace."
349:           end
350:         end
351: 
352:         output.write(result)
353:         output.close() if output.is_a? File
354:       end

Tells optparse how to parse the arguments.

@param opts [OptionParser]

[Source]

     # File lib/haml/exec.rb, line 285
285:       def set_opts(opts)
286:         super
287: 
288:         opts.on('-t', '--style NAME',
289:                 'Output style. Can be indented (default) or ugly.') do |name|
290:           @options[:for_engine][:ugly] = true if name.to_sym == :ugly
291:         end
292: 
293:         opts.on('-f', '--format NAME',
294:                 'Output format. Can be xhtml (default), html4, or html5.') do |name|
295:           @options[:for_engine][:format] = name.to_sym
296:         end
297: 
298:         opts.on('-e', '--escape-html',
299:                 'Escape HTML characters (like ampersands and angle brackets) by default.') do
300:           @options[:for_engine][:escape_html] = true
301:         end
302: 
303:         opts.on('-r', '--require FILE', "Same as 'ruby -r'.") do |file|
304:           @options[:requires] << file
305:         end
306: 
307:         opts.on('-I', '--load-path PATH', "Same as 'ruby -I'.") do |path|
308:           @options[:load_paths] << path
309:         end
310: 
311:         opts.on('--debug', "Print out the precompiled Ruby source.") do
312:           @options[:debug] = true
313:         end
314:       end

[Validate]