Class: Haml::Exec::Haml

Inherits:
Generic show all
Defined in:
lib/haml/exec.rb

Overview

The haml executable.

Constant Summary

Constants inherited from Generic

Generic::COLORS

Instance Method Summary collapse

Methods inherited from Generic

#color, #get_line, #parse, #parse!, #puts_action, #to_s

Constructor Details

#initialize(args) ⇒ Haml

Returns a new instance of Haml.

Parameters:

  • args (Array<String>)

    The command-line arguments



400
401
402
403
404
405
# File 'lib/haml/exec.rb', line 400

def initialize(args)
  super
  @options[:for_engine] = {}
  @options[:requires] = []
  @options[:load_paths] = []
end

Instance Method Details

#process_result

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



471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
# File 'lib/haml/exec.rb', line 471

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

  begin
    engine = ::Haml::Engine.new(template, @options[:for_engine])
    if @options[:check_syntax]
      puts "Syntax OK"
      return
    end

    @options[:load_paths].each {|p| $LOAD_PATH << p}
    @options[:requires].each {|f| require f}

    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}\n  Use --trace for backtrace."
    end
  end

  output.write(result)
  output.close() if output.is_a? File
end

#set_opts(opts)

Tells optparse how to parse the arguments.

Parameters:

  • opts (OptionParser)


410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
# File 'lib/haml/exec.rb', line 410

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 xhtml (default), html4, or html5.') 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('-q', '--double-quote-attributes',
          'Set attribute wrapper to double-quotes (default is single).') do
    @options[:for_engine][:attr_wrapper] = '"'
  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 ::Haml::Util.ruby1_8?
    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('--debug', "Print out the precompiled Ruby source.") do
    @options[:debug] = true
  end
end