sass-align 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.
- data/.gitignore +5 -0
- data/Rakefile +35 -0
- data/bin/sass-align +121 -0
- data/doc/man/README.txt +52 -0
- data/doc/ronn/README.ronn +41 -0
- data/sass-align.gemspec +14 -0
- metadata +51 -0
data/Rakefile
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
task :default => "man:all"
|
2
|
+
|
3
|
+
directory "tmp"
|
4
|
+
|
5
|
+
task :gem => "tmp" do
|
6
|
+
sh "gem build sass-align.gemspec"
|
7
|
+
sh "mv sass-align-*.gem tmp"
|
8
|
+
end
|
9
|
+
|
10
|
+
begin
|
11
|
+
require "ronn"
|
12
|
+
|
13
|
+
namespace :man do
|
14
|
+
basename = "README"
|
15
|
+
ronn = "doc/ronn/#{basename}.ronn"
|
16
|
+
roff = "doc/roff/#{basename}"
|
17
|
+
man = "doc/man/#{basename}.txt"
|
18
|
+
|
19
|
+
directory "doc/roff"
|
20
|
+
directory "doc/man"
|
21
|
+
|
22
|
+
file roff => [ronn, "doc/roff"] do
|
23
|
+
sh "ronn --roff --pipe #{ronn} > #{roff}"
|
24
|
+
end
|
25
|
+
|
26
|
+
file man => [roff, "doc/man"] do
|
27
|
+
sh "groff -Wall -mandoc -Tascii #{roff} > #{man}"
|
28
|
+
end
|
29
|
+
|
30
|
+
task :all => [man]
|
31
|
+
end
|
32
|
+
rescue LoadError
|
33
|
+
$stderr.puts "Install ronn to build man page"
|
34
|
+
end
|
35
|
+
|
data/bin/sass-align
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
require 'stringio'
|
5
|
+
|
6
|
+
read_from_stdin = false
|
7
|
+
edit_in_place = false
|
8
|
+
recursive = false
|
9
|
+
|
10
|
+
options = {
|
11
|
+
:offset => 30
|
12
|
+
}
|
13
|
+
|
14
|
+
opts = OptionParser.new do |opts|
|
15
|
+
opts.banner = <<EOB
|
16
|
+
Usage: sass-align [options] [FILES...]
|
17
|
+
|
18
|
+
Run 'sass-align --help' for more information.
|
19
|
+
|
20
|
+
EOB
|
21
|
+
|
22
|
+
opts.on '-s', '--stdin', 'Read input from standard input instead of an input file' do |v|
|
23
|
+
read_from_stdin = true
|
24
|
+
end
|
25
|
+
|
26
|
+
opts.on '-e', '--edit-in-place', "Edit files in place. Make sure you've backed them up (preferably using version control)." do |v|
|
27
|
+
edit_in_place = true
|
28
|
+
end
|
29
|
+
|
30
|
+
opts.on '-R', '--recursive', "Format all the files in a directory. Implies the `-e' flag." do |v|
|
31
|
+
recursive = true
|
32
|
+
end
|
33
|
+
|
34
|
+
opts.on '-o N', '--offset N', Integer, "Specify left character offset for property values (default 30)" do |v|
|
35
|
+
options[:offset] = v
|
36
|
+
end
|
37
|
+
|
38
|
+
opts.on '-h', '--help', 'Display man page' do
|
39
|
+
system "less", File.expand_path('../../doc/man/README.txt', __FILE__)
|
40
|
+
exit
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
begin
|
45
|
+
opts.parse!
|
46
|
+
rescue OptionParser::ParseError => e
|
47
|
+
$stderr.puts e
|
48
|
+
$stderr.puts
|
49
|
+
$stderr.puts opts
|
50
|
+
exit -1
|
51
|
+
end
|
52
|
+
|
53
|
+
if read_from_stdin and (edit_in_place or recursive)
|
54
|
+
$stderr.puts "`--stdin' cannot be combined with `--edit-in-place' or `--recursive'."
|
55
|
+
exit -1
|
56
|
+
end
|
57
|
+
|
58
|
+
def format(input, output, options)
|
59
|
+
input = File.open(input) if input.is_a?(String)
|
60
|
+
output = File.open(output, 'w') if output.is_a?(String)
|
61
|
+
|
62
|
+
while line = input.gets
|
63
|
+
if match = line.match(/^(\s*)(@extend|:[a-z\-]+|[a-z\-]+:)(\s+)(?=\S)(.+?)(\s*)$/)
|
64
|
+
offset = options[:offset]
|
65
|
+
offset -= 1 if ['-', '.'].include?(match[4][0..0])
|
66
|
+
|
67
|
+
left = (match[1] + match[2]).ljust(offset-1)
|
68
|
+
right = match[4]
|
69
|
+
|
70
|
+
output.puts(left + " " + right)
|
71
|
+
else
|
72
|
+
output.puts(line)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
rescue
|
76
|
+
input.close_read if input.respond_to?(:close_read)
|
77
|
+
output.close_write if output.respond_to?(:close_write)
|
78
|
+
raise
|
79
|
+
end
|
80
|
+
|
81
|
+
def format_in_place(path, options)
|
82
|
+
output = StringIO.new
|
83
|
+
format(path, output, options)
|
84
|
+
File.open(path, 'w') { |f| f.write(output.string) }
|
85
|
+
end
|
86
|
+
|
87
|
+
if recursive
|
88
|
+
dir = ARGV.shift
|
89
|
+
|
90
|
+
unless File.directory?(dir)
|
91
|
+
$stderr.puts "Not a directory: #{dir}"
|
92
|
+
exit -1
|
93
|
+
end
|
94
|
+
|
95
|
+
Dir.glob(File.join(dir, "**/*.sass")).each do |path|
|
96
|
+
format_in_place(path, options)
|
97
|
+
$stderr.puts "formatted #{path}"
|
98
|
+
end
|
99
|
+
elsif edit_in_place
|
100
|
+
ARGV.each do |path|
|
101
|
+
format_in_place(path, options)
|
102
|
+
end
|
103
|
+
else
|
104
|
+
input = if read_from_stdin
|
105
|
+
STDIN
|
106
|
+
elsif ARGV.any?
|
107
|
+
ARGV.shift
|
108
|
+
else
|
109
|
+
$stderr.puts opts
|
110
|
+
exit -1
|
111
|
+
end
|
112
|
+
|
113
|
+
output = if ARGV.any?
|
114
|
+
ARGV.shift
|
115
|
+
else
|
116
|
+
STDOUT
|
117
|
+
end
|
118
|
+
|
119
|
+
format(input, output, options)
|
120
|
+
end
|
121
|
+
|
data/doc/man/README.txt
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
SASS-ALIGN(1) SASS-ALIGN(1)
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
NNAAMMEE
|
6
|
+
ssaassss--aalliiggnn - nicely align property values in .sass files
|
7
|
+
|
8
|
+
SSyynnooppssiiss
|
9
|
+
ssaassss--aalliiggnn _f_i_l_e _f_i_l_e
|
10
|
+
ssaassss--aalliiggnn --ss|----ssttddiinn [_f_i_l_e]
|
11
|
+
ssaassss--aalliiggnn --ee|----eeddiitt--iinn--ppllaaccee _f_i_l_e...
|
12
|
+
ssaassss--aalliiggnn --RR|----rreeccuurrssiivvee _d_i_r_e_c_t_o_r_y
|
13
|
+
|
14
|
+
DDeessccrriippttiioonn
|
15
|
+
sass-align is a command-line tool to format .sass files in the mildly
|
16
|
+
idiosyncratic style used at Unspace _h_t_t_p_:_/_/_u_n_s_p_a_c_e_._c_a. That means:
|
17
|
+
|
18
|
+
1. All property values and arguments to @@eexxtteenndd calls are placed at an
|
19
|
+
(at least) 30-character left offset.
|
20
|
+
|
21
|
+
2. Unless they start with a -- (e.g. lleefftt:: --3300ppxx) or a .. (e.g. @@eexxtteenndd
|
22
|
+
..bbuuttttoonn), in which case they're shifted left 1 character.
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
FFoorrmmaatt eexxaammppllee
|
27
|
+
#wrapper
|
28
|
+
.sidebar
|
29
|
+
:border-top 8px solid black
|
30
|
+
:margin-right -100px
|
31
|
+
.content
|
32
|
+
:width 500px
|
33
|
+
@extend .helvetica
|
34
|
+
|
35
|
+
OOppttiioonnss
|
36
|
+
--ss, ----ssttddiinn
|
37
|
+
Read input from standard input instead of an input file.
|
38
|
+
|
39
|
+
--ee, ----eeddiitt--iinn--ppllaaccee
|
40
|
+
Edit files in place. Make sure you've backed them up (preferably
|
41
|
+
using version control).
|
42
|
+
|
43
|
+
--RR, ----rreeccuurrssiivvee
|
44
|
+
Format all the files in a directory. Implies the `-e' flag.
|
45
|
+
|
46
|
+
--oo NN, ----ooffffsseett NN
|
47
|
+
Specify left character offset for property values (default 30).
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
|
52
|
+
September 2011 SASS-ALIGN(1)
|
@@ -0,0 +1,41 @@
|
|
1
|
+
sass-align(1) -- nicely align property values in .sass files
|
2
|
+
=============================================================
|
3
|
+
|
4
|
+
## Synopsis
|
5
|
+
|
6
|
+
`sass-align` <file> <file><br>
|
7
|
+
`sass-align` `-s`|`--stdin` [<file>]<br>
|
8
|
+
`sass-align` `-e`|`--edit-in-place` <file>...<br>
|
9
|
+
`sass-align` `-R`|`--recursive` <directory>
|
10
|
+
|
11
|
+
## Description
|
12
|
+
|
13
|
+
sass-align is a command-line tool to format .sass files in the mildly idiosyncratic style used at [Unspace](http://unspace.ca). That means:
|
14
|
+
|
15
|
+
1. All property values and arguments to `@extend` calls are placed at an (at least) 30-character left offset.
|
16
|
+
2. Unless they start with a `-` (e.g. `left: -30px`) or a `.` (e.g. `@extend .button`), in which case they're shifted left 1 character.
|
17
|
+
|
18
|
+
## Format example
|
19
|
+
|
20
|
+
#wrapper
|
21
|
+
.sidebar
|
22
|
+
:border-top 8px solid black
|
23
|
+
:margin-right -100px
|
24
|
+
.content
|
25
|
+
:width 500px
|
26
|
+
@extend .helvetica
|
27
|
+
|
28
|
+
## Options
|
29
|
+
|
30
|
+
* `-s`, `--stdin`:
|
31
|
+
Read input from standard input instead of an input file.
|
32
|
+
|
33
|
+
* `-e`, `--edit-in-place`:
|
34
|
+
Edit files in place. Make sure you've backed them up (preferably using version control).
|
35
|
+
|
36
|
+
* `-R`, `--recursive`:
|
37
|
+
Format all the files in a directory. Implies the `-e' flag.
|
38
|
+
|
39
|
+
* `-o N`, `--offset N`:
|
40
|
+
Specify left character offset for property values (default 30).
|
41
|
+
|
data/sass-align.gemspec
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = "sass-align"
|
3
|
+
s.version = "0.1.0"
|
4
|
+
s.authors = ["Aanand Prasad"]
|
5
|
+
s.email = "aanand.prasad@gmail.com"
|
6
|
+
s.homepage = "https://github.com/aanand/sass-align"
|
7
|
+
s.summary = "Command-line tool to align property values nicely in .sass files"
|
8
|
+
|
9
|
+
man_files = Dir.glob("doc/man/*")
|
10
|
+
|
11
|
+
s.files = `git ls-files`.split("\n") + man_files
|
12
|
+
s.executables = ["sass-align"]
|
13
|
+
end
|
14
|
+
|
metadata
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sass-align
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Aanand Prasad
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-09-14 00:00:00.000000000Z
|
13
|
+
dependencies: []
|
14
|
+
description:
|
15
|
+
email: aanand.prasad@gmail.com
|
16
|
+
executables:
|
17
|
+
- sass-align
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- .gitignore
|
22
|
+
- Rakefile
|
23
|
+
- bin/sass-align
|
24
|
+
- doc/ronn/README.ronn
|
25
|
+
- sass-align.gemspec
|
26
|
+
- doc/man/README.txt
|
27
|
+
homepage: https://github.com/aanand/sass-align
|
28
|
+
licenses: []
|
29
|
+
post_install_message:
|
30
|
+
rdoc_options: []
|
31
|
+
require_paths:
|
32
|
+
- lib
|
33
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
45
|
+
requirements: []
|
46
|
+
rubyforge_project:
|
47
|
+
rubygems_version: 1.8.10
|
48
|
+
signing_key:
|
49
|
+
specification_version: 3
|
50
|
+
summary: Command-line tool to align property values nicely in .sass files
|
51
|
+
test_files: []
|