haml2slim 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,26 @@
1
+ # Haml2Slim
2
+
3
+ [Haml](https://github.com/nex3/haml) to [Slim](https://github.com/stonean/slim) converter.
4
+
5
+ ## Usage
6
+
7
+ You may convert files using the included executable `haml2slim`.
8
+
9
+ # haml2slim -h
10
+
11
+ Usage: haml2slim [options]
12
+ -s, --stdin Read input from standard input instead of an input file
13
+ -o, --output FILENAME Output file destination
14
+ --trace Show a full traceback on error
15
+ -h, --help Show this message
16
+ -v, --version Print version
17
+
18
+ Alternatively, to convert files or strings on the fly in your application, you may do so by calling `Haml2Slim.convert!`.
19
+
20
+ ## License
21
+
22
+ This project is released under the MIT license.
23
+
24
+ ## Author
25
+
26
+ [Fred Wu](https://github.com/fredwu)
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift File.dirname(__FILE__) + '/../lib'
4
+ require 'haml2slim/command'
5
+
6
+ cmd = Haml2Slim::Command.new(ARGV)
7
+ cmd.run
@@ -0,0 +1,8 @@
1
+ require 'haml2slim/version'
2
+ require 'haml2slim/converter'
3
+
4
+ module Haml2Slim
5
+ def self.convert!(input)
6
+ Converter.new(input)
7
+ end
8
+ end
@@ -0,0 +1,71 @@
1
+ require 'optparse'
2
+ require 'haml2slim'
3
+
4
+ module Haml2Slim
5
+ class Command
6
+ def initialize(args)
7
+ @args = args
8
+ @options = {}
9
+ end
10
+
11
+ def run
12
+ @opts = OptionParser.new(&method(:set_opts))
13
+ @opts.parse!(@args)
14
+ process
15
+ exit 0
16
+ rescue Exception => ex
17
+ raise ex if @options[:trace] || SystemExit === ex
18
+ $stderr.print "#{ex.class}: " if ex.class != RuntimeError
19
+ $stderr.puts ex.message
20
+ $stderr.puts ' Use --trace for backtrace.'
21
+ exit 1
22
+ end
23
+
24
+ protected
25
+
26
+ def set_opts(opts)
27
+ opts.on('-s', '--stdin', :NONE, 'Read input from standard input instead of an input file') do
28
+ @options[:input] = $stdin
29
+ end
30
+
31
+ opts.on('-o', '--output FILENAME', :NONE, 'Output file destination') do |filename|
32
+ @options[:output] = filename
33
+ end
34
+
35
+ opts.on('--trace', :NONE, 'Show a full traceback on error') do
36
+ @options[:trace] = true
37
+ end
38
+
39
+ opts.on_tail('-h', '--help', 'Show this message') do
40
+ puts opts
41
+ exit
42
+ end
43
+
44
+ opts.on_tail('-v', '--version', 'Print version') do
45
+ puts "Slim #{Haml2Slim::VERSION}"
46
+ exit
47
+ end
48
+ end
49
+
50
+ def process
51
+ args = @args.dup
52
+ unless @options[:input]
53
+ file = args.shift
54
+ if file
55
+ @options[:file] = file
56
+ @options[:input] = File.open(file, 'r')
57
+ else
58
+ @options[:file] = 'STDIN'
59
+ @options[:input] = $stdin
60
+ end
61
+ end
62
+
63
+ unless @options[:output]
64
+ file = args.shift || file.sub(/\.haml$/, '.slim')
65
+ @options[:output] = file ? File.open(file, 'w') : $stdout
66
+ end
67
+
68
+ @options[:output].puts Haml2Slim.convert!(@options[:input])
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,54 @@
1
+ module Haml2Slim
2
+ class Converter
3
+ def initialize(haml)
4
+ @slim = ""
5
+
6
+ haml.each_line do |line|
7
+ @slim << parse_line(line)
8
+ end
9
+ end
10
+
11
+ def to_s
12
+ @slim
13
+ end
14
+
15
+ def parse_line(line)
16
+ indent = line[/^[ \t]*/]
17
+ line.strip!
18
+
19
+ converted = case line[0]
20
+ when ?%, ?., ?# then parse_tag(line)
21
+ when ?: then "#{line[1..-1]}:"
22
+ when ?! then line.sub('!!!', '! doctype')
23
+ when ?-, ?= then line
24
+ when ?/ then line
25
+ when nil then ""
26
+ else "| #{line}"
27
+ end
28
+
29
+ if converted.chomp!(" |")
30
+ converted.sub!(/^\| /, "")
31
+ converted << " \\"
32
+ end
33
+
34
+ "#{indent}#{converted}\n"
35
+ end
36
+
37
+ def parse_tag(tag_line)
38
+ tag_line.sub!(/^%/, "")
39
+
40
+ if attrs = tag_line.match(/\{(.+)\}/)
41
+ tag = tag_line.match(/(\w+)\{/)[1]
42
+ attrs = tag_line.match(/\{(.+)\}/)[1]
43
+ .gsub(/:?"?([A-Za-z0-9\-_]+)"? ?=>/, '\1 =>')
44
+ .gsub(/ ?=> ?/, "=")
45
+ .gsub('",', '"')
46
+ .gsub(/=([^"]+)(?: |$)/, '=(\1)')
47
+
48
+ "#{tag} #{attrs}"
49
+ else
50
+ tag_line
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,3 @@
1
+ module Haml2Slim
2
+ VERSION = '0.1.0'
3
+ end
metadata ADDED
@@ -0,0 +1,110 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: haml2slim
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - Fred Wu
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-12-16 00:00:00 +11:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: haml
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ~>
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 3
30
+ - 0
31
+ - 0
32
+ version: 3.0.0
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: nokogiri
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ segments:
44
+ - 0
45
+ version: "0"
46
+ type: :runtime
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: ruby_parser
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ segments:
57
+ - 0
58
+ version: "0"
59
+ type: :runtime
60
+ version_requirements: *id003
61
+ description: Convert Haml templates to Slim templates.
62
+ email:
63
+ - ifredwu@gmail.com
64
+ executables:
65
+ - haml2slim
66
+ extensions: []
67
+
68
+ extra_rdoc_files:
69
+ - README.md
70
+ files:
71
+ - README.md
72
+ - bin/haml2slim
73
+ - lib/haml2slim.rb
74
+ - lib/haml2slim/command.rb
75
+ - lib/haml2slim/converter.rb
76
+ - lib/haml2slim/version.rb
77
+ has_rdoc: true
78
+ homepage: http://github.com/fredwu/haml2slim
79
+ licenses: []
80
+
81
+ post_install_message:
82
+ rdoc_options:
83
+ - --charset=UTF-8
84
+ require_paths:
85
+ - lib
86
+ required_ruby_version: !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ segments:
92
+ - 0
93
+ version: "0"
94
+ required_rubygems_version: !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ segments:
100
+ - 0
101
+ version: "0"
102
+ requirements: []
103
+
104
+ rubyforge_project:
105
+ rubygems_version: 1.3.7
106
+ signing_key:
107
+ specification_version: 3
108
+ summary: Haml to Slim converter.
109
+ test_files: []
110
+