haml--haml/bin/html2haml

90 lines
1.7 KiB
Plaintext
Raw Normal View History

#!/usr/bin/env ruby
require File.dirname(__FILE__) + '/../lib/haml'
require 'haml/engine'
require 'rubygems'
require 'hpricot'
def tabulate(tabs)
' ' * tabs
end
TEXT_REGEXP = /^(\s*).*$/
def parse_text(text, tabs)
text.strip!
if text.empty?
String.new
else
lines = text.split("\n")
lines.map do |line|
line.strip!
"#{tabulate(tabs)}#{'\\' if Haml::Engine::SPECIAL_CHARACTERS.include?(line[0])}#{line}\n"
end.join
end
end
module Hpricot::Node
def to_haml(tabs)
parse_text(self.to_s, tabs)
end
end
class Hpricot::Doc
def to_haml
output = ''
children.each { |child| output += child.to_haml(0) }
output
end
end
class Hpricot::XMLDecl
def to_haml(tabs)
"#{tabulate(tabs)}!!! XML\n"
end
end
class Hpricot::DocType
def to_haml(tabs)
"#{tabulate(tabs)}!!!\n"
end
end
class Hpricot::Comment
def to_haml(tabs)
"#{tabulate(tabs)}/\n#{parse_text(self.content, tabs + 1)}"
end
end
class Hpricot::Elem
def to_haml(tabs)
output = "#{tabulate(tabs)}"
output += "%#{name}" unless name == 'div'
if attributes
output += "##{attributes['id']}" if attributes['id']
attributes['class'].split(' ').each { |c| output += ".#{c}" } if attributes['class']
attributes.delete("id")
attributes.delete("class")
output += attributes.inspect if attributes.length > 0
end
output += "/" if children.length == 0
output += "\n"
self.children.each do |child|
output += child.to_haml(tabs + 1)
end
output
end
end
# Must be required after Hpricot mods,
# so they're in scope
require 'haml/exec'
opts = Haml::Exec::HTML2Haml.new(ARGV)
opts.parse!