The `sass-convert` executable.
Processes the options set by the command-line arguments, and runs the CSS compiler appropriately.
# File lib/haml/exec.rb, line 709 709: def process_result 710: require 'sass' 711: 712: if @options[:recursive] 713: process_directory 714: return 715: end 716: 717: super 718: input = @options[:input] 719: raise "Error: '#{input.path}' is a directory (did you mean to use --recursive?)" if File.directory?(input) 720: output = @options[:output] 721: output = input if @options[:in_place] 722: process_file(input, output) 723: end
Tells optparse how to parse the arguments.
@param opts [OptionParser]
# File lib/haml/exec.rb, line 640 640: def set_opts(opts) 641: opts.banner = Usage: sass-convert [options] [INPUT] [OUTPUT]Description: Converts between CSS, Sass, and SCSS files. E.g. converts from SCSS to Sass, or converts from CSS to SCSS (adding appropriate nesting).Options: 642: 643: opts.on('-F', '--from FORMAT', 644: 'The format to convert from. Can be css, scss, sass, less, or sass2.', 645: 'sass2 is the same as sass, but updates more old syntax to new.', 646: 'By default, this is inferred from the input filename.', 647: 'If there is none, defaults to css.') do |name| 648: @options[:from] = name.downcase.to_sym 649: unless [:css, :scss, :sass, :less, :sass2].include?(@options[:from]) 650: raise "Unknown format for sass-convert --from: #{name}" 651: end 652: try_less_note if @options[:from] == :less 653: end 654: 655: opts.on('-T', '--to FORMAT', 656: 'The format to convert to. Can be scss or sass.', 657: 'By default, this is inferred from the output filename.', 658: 'If there is none, defaults to sass.') do |name| 659: @options[:to] = name.downcase.to_sym 660: unless [:scss, :sass].include?(@options[:to]) 661: raise "Unknown format for sass-convert --to: #{name}" 662: end 663: end 664: 665: opts.on('-R', '--recursive', 666: 'Convert all the files in a directory. Requires --from and --to.') do 667: @options[:recursive] = true 668: end 669: 670: opts.on('-i', '--in-place', 671: 'Convert a file to its own syntax.', 672: 'This can be used to update some deprecated syntax.') do 673: @options[:in_place] = true 674: end 675: 676: opts.on('--dasherize', 'Convert underscores to dashes') do 677: @options[:for_tree][:dasherize] = true 678: end 679: 680: opts.on('--old', 'Output the old-style ":prop val" property syntax.', 681: 'Only meaningful when generating Sass.') do 682: @options[:for_tree][:old] = true 683: end 684: 685: opts.on('-C', '--no-cache', "Don't cache to sassc files.") do 686: @options[:for_engine][:read_cache] = false 687: end 688: 689: unless ::Haml::Util.ruby1_8? 690: opts.on('-E encoding', 'Specify the default encoding for Sass and CSS files.') do |encoding| 691: Encoding.default_external = encoding 692: end 693: end 694: 695: super 696: end
# File lib/haml/exec.rb, line 727 727: def process_directory 728: unless input = @options[:input] = @args.shift 729: raise "Error: directory required when using --recursive." 730: end 731: 732: output = @options[:output] = @args.shift 733: raise "Error: --from required when using --recursive." unless @options[:from] 734: raise "Error: --to required when using --recursive." unless @options[:to] 735: raise "Error: '#{@options[:input]}' is not a directory" unless File.directory?(@options[:input]) 736: if @options[:output] && File.exists?(@options[:output]) && !File.directory?(@options[:output]) 737: raise "Error: '#{@options[:output]}' is not a directory" 738: end 739: @options[:output] ||= @options[:input] 740: 741: from = @options[:from] 742: from = :sass if from == :sass2 743: if @options[:to] == @options[:from] && !@options[:in_place] 744: fmt = @options[:from] 745: raise "Error: converting from #{fmt} to #{fmt} without --in-place" 746: end 747: 748: ext = @options[:from] 749: ext = :sass if ext == :sass2 750: Dir.glob("#{@options[:input]}/**/*.#{ext}") do |f| 751: output = 752: if @options[:in_place] 753: f 754: elsif @options[:output] 755: output_name = f.gsub(/\.(c|sa|sc|le)ss$/, ".#{@options[:to]}") 756: output_name[0...@options[:input].size] = @options[:output] 757: output_name 758: else 759: f.gsub(/\.(c|sa|sc|le)ss$/, ".#{@options[:to]}") 760: end 761: 762: unless File.directory?(File.dirname(output)) 763: puts_action :directory, :green, File.dirname(output) 764: FileUtils.mkdir_p(File.dirname(output)) 765: end 766: puts_action :convert, :green, f 767: if File.exists?(output) 768: puts_action :overwrite, :yellow, output 769: else 770: puts_action :create, :green, output 771: end 772: 773: input = open_file(f) 774: output = @options[:in_place] ? input : open_file(output, "w") 775: process_file(input, output) 776: end 777: end
# File lib/haml/exec.rb, line 779 779: def process_file(input, output) 780: if input.is_a?(File) 781: @options[:from] ||= 782: case input.path 783: when /\.scss$/; :scss 784: when /\.sass$/; :sass 785: when /\.less$/; :less 786: when /\.css$/; :css 787: end 788: elsif @options[:in_place] 789: raise "Error: the --in-place option requires a filename." 790: end 791: 792: if output.is_a?(File) 793: @options[:to] ||= 794: case output.path 795: when /\.scss$/; :scss 796: when /\.sass$/; :sass 797: end 798: end 799: 800: if @options[:from] == :sass2 801: @options[:from] = :sass 802: @options[:for_engine][:sass2] = true 803: end 804: 805: @options[:from] ||= :css 806: @options[:to] ||= :sass 807: @options[:for_engine][:syntax] = @options[:from] 808: 809: out = 810: ::Haml::Util.silence_haml_warnings do 811: if @options[:from] == :css 812: require 'sass/css' 813: ::Sass::CSS.new(input.read, @options[:for_tree]).render(@options[:to]) 814: elsif @options[:from] == :less 815: require 'sass/less' 816: try_less_note 817: input = input.read if input.is_a?(IO) && !input.is_a?(File) # Less is dumb 818: Less::Engine.new(input).to_tree.to_sass_tree.send("to_#{@options[:to]}", @options[:for_tree]) 819: else 820: if input.is_a?(File) 821: ::Sass::Files.tree_for(input.path, @options[:for_engine]) 822: else 823: ::Sass::Engine.new(input.read, @options[:for_engine]).to_tree 824: end.send("to_#{@options[:to]}", @options[:for_tree]) 825: end 826: end 827: 828: output = File.open(input.path, 'w') if @options[:in_place] 829: output.write(out) 830: rescue ::Sass::SyntaxError => e 831: raise e if @options[:trace] 832: file = " of #{e.sass_filename}" if e.sass_filename 833: raise "Error on line #{e.sass_line}#{file}: #{e.message}\n Use --trace for backtrace" 834: rescue LoadError => err 835: handle_load_error(err) 836: end
# File lib/haml/exec.rb, line 839 839: def try_less_note 840: return if @@less_note_printed 841: @@less_note_printed = true 842: warn * NOTE: Sass and Less are different languages, and they work differently.* I'll do my best to translate, but some features -- especially mixins --* should be checked by hand. 843: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.