1
0
Fork 0
mirror of https://github.com/haml/haml.git synced 2022-11-09 12:33:31 -05:00

Drop PrettyHamlit

This commit is contained in:
Takashi Kokubun 2015-11-18 10:58:28 -06:00
parent 47e159cd44
commit 4243ab5ea1
10 changed files with 2 additions and 279 deletions

View file

@ -3,8 +3,6 @@ require 'thor'
module Hamlit
class CLI < Thor
class_option :style, type: :string, aliases: ['-t'], default: 'ugly'
desc 'render HAML', 'Render haml template'
def render(file)
code = generate_code(file)
@ -25,7 +23,7 @@ module Hamlit
def generate_code(file)
template = File.read(file)
Hamlit::HamlEngine.new(template, haml_options).precompiled
Hamlit::Engine.new.call(template)
end
def generate_ast(file)
@ -33,10 +31,6 @@ module Hamlit
Hamlit::Parser.new.call(template)
end
def haml_options
{ ugly: options['style'] == 'ugly' }
end
# Flexible default_task, compatible with haml's CLI
def method_missing(*args)
return super(*args) if args.length > 1

View file

@ -2,7 +2,6 @@ require 'temple'
require 'hamlit/parser'
require 'hamlit/compiler'
require 'hamlit/html'
require 'pretty_hamlit/engine'
module Hamlit
class Engine < Temple::Engine

View file

@ -5,6 +5,7 @@ module Hamlit
AVAILABLE_OPTIONS = %i[
autoclose
escape_html
escape_attrs
].freeze
def initialize(options = {})

View file

@ -1,41 +0,0 @@
require 'pretty_hamlit/compiler/children_compiler'
require 'pretty_hamlit/compiler/tag_compiler'
require 'pretty_hamlit/filters'
module PrettyHamlit
class Compiler < Hamlit::Compiler
def initialize(options = {})
super
@indent_level = 0
@children_compiler = ChildrenCompiler.new
@tag_compiler = TagCompiler.new(options)
@filter_compiler = Filters.new(options)
end
private
def compile_children(node)
@children_compiler.compile(node, @indent_level) { |n| compile(n) }
end
def compile_comment(node)
@indent_level += 1
super
ensure
@indent_level -= 1
end
def compile_filter(node)
@filter_compiler.compile(node, @indent_level)
end
def compile_tag(node)
@indent_level += 1
@tag_compiler.compile(node, @indent_level) { |n| compile_children(n) }
ensure
@indent_level -= 1
end
end
end

View file

@ -1,58 +0,0 @@
require 'hamlit/compiler/children_compiler'
module PrettyHamlit
class Compiler < Hamlit::Compiler
class ChildrenCompiler < Hamlit::Compiler::ChildrenCompiler
def compile(node, indent_level, &block)
temple = [:multi]
return temple if node.children.empty?
temple << :whitespace if prepend_whitespace?(node)
node.children.each do |n|
rstrip_whitespace!(temple) if nuke_outer_whitespace?(n)
insert_newlines!(temple, n)
temple << yield(n)
if insert_whitespace?(n)
if nuke_inner_whitespace?(node)
temple << :weak_whitespace
else
temple << :whitespace
end
end
end
rstrip_whitespace!(temple) if nuke_inner_whitespace?(node)
weaken_last_whitespace!(temple)
confirm_whitespace(temple, indent_level)
end
private
def rstrip_whitespace!(temple)
if %i[whitespace weak_whitespace].include?(temple[-1])
temple.delete_at(-1)
end
end
def weaken_last_whitespace!(temple)
if temple[-1] == :whitespace
temple.delete_at(-1)
temple << :weak_whitespace
end
end
def confirm_whitespace(temple, indent_level)
temple.map do |exp|
case exp
when :whitespace
[:static, "\n" + (' ' * indent_level)]
when :weak_whitespace
level = [0, indent_level - 1].max
[:static, "\n" + (' ' * level)]
else
exp
end
end
end
end
end
end

View file

@ -1,39 +0,0 @@
require 'hamlit/compiler/tag_compiler'
module PrettyHamlit
class Compiler < Hamlit::Compiler
class TagCompiler < Hamlit::Compiler::TagCompiler
def initialize(options = {})
super
@buffer = options[:buffer]
end
def compile(node, indent_level, &block)
attrs = @attribute_compiler.compile(node)
contents = compile_contents(node, indent_level, &block)
[:html, :tag, node.value[:name], attrs, contents]
end
private
def compile_contents(node, indent_level, &block)
case
when !node.children.empty?
yield(node)
when node.value[:value].nil? && self_closing?(node)
nil
when node.value[:parse]
[:multi,
[:code, "#{@buffer} << ::PrettyHamlit::DynamicIndentation.inline_or_expand(#{indent_level}) do |#{@buffer}|"],
[:dynamic, node.value[:value]],
[:code, 'end'],
]
when Haml::Util.contains_interpolation?(node.value[:value])
[:dynamic, node.value[:value]]
else
[:static, node.value[:value]]
end
end
end
end
end

View file

@ -1,33 +0,0 @@
module PrettyHamlit
class DynamicIndentation
class << self
def indent_with(indent_level, &block)
text = capture(&block)
insert_indent(text, indent_level)
end
def inline_or_expand(indent_level, &block)
text = capture(&block)
return text unless text.include?("\n")
indent_space(indent_level) <<
insert_indent(text, indent_level) <<
indent_space(indent_level - 1)
end
private
def indent_space(indent_level)
"\n" << ' ' * [indent_level, 0].max
end
def insert_indent(text, indent_level)
text.gsub("\n", indent_space(indent_level))
end
def capture(&block)
block.call([]).compact.join.rstrip
end
end
end
end

View file

@ -1,32 +0,0 @@
require 'temple'
require 'hamlit/parser'
require 'hamlit/html'
require 'pretty_hamlit/compiler'
require 'pretty_hamlit/dynamic_indentation'
module PrettyHamlit
class Engine < Temple::Engine
define_options(
generator: Temple::Generators::ArrayBuffer,
format: :html,
html_type: nil,
attr_quote: "'",
escape_html: true,
escape_attrs: true,
buffer: '_buf',
autoclose: %w(area base basefont br col command embed frame
hr img input isindex keygen link menuitem meta
param source track wbr),
filename: "",
)
use Hamlit::Parser
use Compiler
use Hamlit::HTML
filter :Escapable
filter :ControlFlow
filter :MultiFlattener
filter :StaticMerger
use :Generator, -> { options[:generator] }
end
end

View file

@ -1,51 +0,0 @@
require 'hamlit/filters'
require 'pretty_hamlit/filters/plain'
module PrettyHamlit
class Filters
@registered = Hamlit::Filters.registered.dup
class << self
attr_reader :registered
private
def register(name, compiler)
registered[name] = compiler
end
end
register :plain, Plain
def initialize(options = {})
@options = options
end
def compile(node, indent_level)
node.value[:text] ||= ''
content = find_compiler(node.value[:name]).compile(node)
[:multi,
[:code, "#{@options[:buffer]} << ::PrettyHamlit::DynamicIndentation.indent_with(#{indent_level}) do |#{@options[:buffer]}|"],
content,
[:code, 'end'],
]
end
private
def find_compiler(name)
name = name.to_sym
compiler = Filters.registered[name]
raise NotFound.new("FilterCompiler for '#{name}' was not found") unless compiler
compilers[name] ||= compiler.new(@options)
end
def compilers
@compilers ||= {}
end
class NotFound < RuntimeError
end
end
end

View file

@ -1,17 +0,0 @@
require 'hamlit/filters/plain'
module PrettyHamlit
class Filters
class Plain < Hamlit::Filters::Plain
def compile(node)
text = node.value[:text].rstrip
if Haml::Util.contains_interpolation?(text)
text = Haml::Util.unescape_interpolation(text)
[:escape, true, [:dynamic, text]]
else
[:static, text]
end
end
end
end
end