selfml 0.0.3 → 0.0.4
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/.rvmrc +1 -52
- data/.travis.yml +6 -0
- data/Gemfile +4 -1
- data/LICENSE +18 -0
- data/README.markdown +6 -6
- data/bin/selfml +26 -0
- data/lib/selfml/ast/comment.rb +9 -0
- data/lib/selfml/ast/document.rb +12 -0
- data/lib/selfml/ast/node.rb +38 -0
- data/lib/selfml/ast/string_node.rb +22 -0
- data/lib/selfml/ast.rb +5 -71
- data/lib/selfml/engines/array.rb +19 -0
- data/lib/selfml/{transformer.rb → engines/document.rb} +6 -20
- data/lib/selfml/engines/hash.rb +20 -0
- data/lib/selfml/engines/json.rb +9 -0
- data/lib/selfml/engines.rb +8 -0
- data/lib/selfml/parser.rb +53 -47
- data/lib/selfml/version.rb +1 -1
- data/lib/selfml.rb +8 -5
- data/man/selfml.1.ronn +123 -0
- data/man/selfml.5.ronn +0 -0
- data/self-ml.gemspec +5 -1
- data/spec/basic_spec.rb +3 -0
- data/spec/engines_spec.rb +30 -0
- data/spec/spec_helper.rb +0 -7
- data/spec/string_spec.rb +3 -0
- metadata +67 -5
data/.rvmrc
CHANGED
@@ -1,52 +1 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# This is an RVM Project .rvmrc file, used to automatically load the ruby
|
4
|
-
# development environment upon cd'ing into the directory
|
5
|
-
|
6
|
-
# First we specify our desired <ruby>[@<gemset>], the @gemset name is optional,
|
7
|
-
# Only full ruby name is supported here, for short names use:
|
8
|
-
# echo "rvm use 1.9.3" > .rvmrc
|
9
|
-
environment_id="ruby-1.9.3-p125"
|
10
|
-
|
11
|
-
# Uncomment the following lines if you want to verify rvm version per project
|
12
|
-
# rvmrc_rvm_version="1.13.4 (master)" # 1.10.1 seams as a safe start
|
13
|
-
# eval "$(echo ${rvm_version}.${rvmrc_rvm_version} | awk -F. '{print "[[ "$1*65536+$2*256+$3" -ge "$4*65536+$5*256+$6" ]]"}' )" || {
|
14
|
-
# echo "This .rvmrc file requires at least RVM ${rvmrc_rvm_version}, aborting loading."
|
15
|
-
# return 1
|
16
|
-
# }
|
17
|
-
|
18
|
-
# First we attempt to load the desired environment directly from the environment
|
19
|
-
# file. This is very fast and efficient compared to running through the entire
|
20
|
-
# CLI and selector. If you want feedback on which environment was used then
|
21
|
-
# insert the word 'use' after --create as this triggers verbose mode.
|
22
|
-
if [[ -d "${rvm_path:-$HOME/.rvm}/environments"
|
23
|
-
&& -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
|
24
|
-
then
|
25
|
-
\. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
|
26
|
-
[[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]] &&
|
27
|
-
\. "${rvm_path:-$HOME/.rvm}/hooks/after_use" || true
|
28
|
-
if [[ $- == *i* ]] # check for interactive shells
|
29
|
-
then echo "Using: $(tput setaf 2)$GEM_HOME$(tput sgr0)" # show the user the ruby and gemset they are using in green
|
30
|
-
else echo "Using: $GEM_HOME" # don't use colors in non-interactive shells
|
31
|
-
fi
|
32
|
-
else
|
33
|
-
# If the environment file has not yet been created, use the RVM CLI to select.
|
34
|
-
rvm --create use "$environment_id" || {
|
35
|
-
echo "Failed to create RVM environment '${environment_id}'."
|
36
|
-
return 1
|
37
|
-
}
|
38
|
-
fi
|
39
|
-
|
40
|
-
# If you use bundler, this might be useful to you:
|
41
|
-
# if [[ -s Gemfile ]] && {
|
42
|
-
# ! builtin command -v bundle >/dev/null ||
|
43
|
-
# builtin command -v bundle | GREP_OPTIONS= \grep $rvm_path/bin/bundle >/dev/null
|
44
|
-
# }
|
45
|
-
# then
|
46
|
-
# printf "%b" "The rubygem 'bundler' is not installed. Installing it now.\n"
|
47
|
-
# gem install bundler
|
48
|
-
# fi
|
49
|
-
# if [[ -s Gemfile ]] && builtin command -v bundle >/dev/null
|
50
|
-
# then
|
51
|
-
# bundle install | GREP_OPTIONS= \grep -vE '^Using|Your bundle is complete'
|
52
|
-
# fi
|
1
|
+
rvm use default@selfml --create
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/LICENSE
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
Copyright (c) 2012 Ricardo Mendes
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
4
|
+
this software and associated documentation files (the "Software"), to deal in
|
5
|
+
the Software without restriction, including without limitation the rights to
|
6
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
7
|
+
the Software, and to permit persons to whom the Software is furnished to do so,
|
8
|
+
subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in all
|
11
|
+
copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
15
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
16
|
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
17
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
18
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.markdown
CHANGED
@@ -1,4 +1,7 @@
|
|
1
1
|
# Self-ML
|
2
|
+
[](http://coderwall.com/locks)
|
3
|
+
[](http://travis-ci.org/locks/self-ml)
|
4
|
+
[](https://gemnasium.com/locks/self-ml)
|
2
5
|
|
3
6
|
This is a ruby library for reading [self-ml](http://chocolatapp.com/blog/self-ml) files.
|
4
7
|
It is mostly finished, just needs a good polish.
|
@@ -7,9 +10,9 @@ It will only parse correctly formed files, returning an error otherwise.
|
|
7
10
|
|
8
11
|
## Install
|
9
12
|
|
10
|
-
|
11
|
-
|
13
|
+
```ruby
|
12
14
|
gem install self-ml
|
15
|
+
```
|
13
16
|
|
14
17
|
## Usage
|
15
18
|
|
@@ -45,7 +48,4 @@ See issue tracker.
|
|
45
48
|
|
46
49
|
* locks - ruby implementation
|
47
50
|
* devyn - helpful support
|
48
|
-
* alexgordon - clearing up self-ml grammar
|
49
|
-
|
50
|
-
[](http://coderwall.com/locks)
|
51
|
-
[](http://travis-ci.org/locks/self-ml)
|
51
|
+
* alexgordon - clearing up self-ml grammar
|
data/bin/selfml
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
|
5
|
+
require 'selfml'
|
6
|
+
require 'json'
|
7
|
+
|
8
|
+
engine = nil
|
9
|
+
|
10
|
+
options = {}
|
11
|
+
opts = OptionParser.new do |opts|
|
12
|
+
executable_name = File.split($0)[1]
|
13
|
+
opts.banner = <<-EOS
|
14
|
+
Banner banner
|
15
|
+
|
16
|
+
Usage: #{executable_name} [options] args...
|
17
|
+
EOS
|
18
|
+
|
19
|
+
opts.on("--json", "Generate JSON") do
|
20
|
+
engine = SelfML::Engines::JSON
|
21
|
+
end
|
22
|
+
end
|
23
|
+
opts.parse!
|
24
|
+
|
25
|
+
input = ARGF.read
|
26
|
+
$stdout << SelfML.parse(input, engine)
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module SelfML::AST
|
2
|
+
|
3
|
+
class Node
|
4
|
+
attr_accessor :head , :tail
|
5
|
+
|
6
|
+
def initialize( head , tail = [] )
|
7
|
+
@head , @tail = head , tail
|
8
|
+
end
|
9
|
+
|
10
|
+
def serialize( level = 1 )
|
11
|
+
tail = @tail.sort.map do |t|
|
12
|
+
case t
|
13
|
+
when Node
|
14
|
+
"\n" + " "*level*4 + (t.serialize level+1)
|
15
|
+
when StringNode
|
16
|
+
" "+t.serialize
|
17
|
+
else
|
18
|
+
nil
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# puts "head", head, @head.serialize
|
23
|
+
# puts "tail", tail
|
24
|
+
|
25
|
+
"(" + head.serialize + tail.join("") + ")"
|
26
|
+
end
|
27
|
+
|
28
|
+
alias :to_s :serialize
|
29
|
+
|
30
|
+
def <=> rhs
|
31
|
+
case rhs when Node then 0
|
32
|
+
when StringNode then 1
|
33
|
+
else -1 end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module SelfML::AST
|
2
|
+
|
3
|
+
class StringNode < String
|
4
|
+
|
5
|
+
def serialize
|
6
|
+
return "`#{self.gsub("`","``")}`" if self.count("[") != self.count("]")
|
7
|
+
return "[#{self}]" if self.match(/[#`()\[\]{} ]/)
|
8
|
+
|
9
|
+
self
|
10
|
+
end
|
11
|
+
|
12
|
+
alias :to_s :serialize
|
13
|
+
|
14
|
+
def <=> rhs
|
15
|
+
case rhs when StringNode then 0
|
16
|
+
when Node then -1
|
17
|
+
else 1 end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
data/lib/selfml/ast.rb
CHANGED
@@ -1,72 +1,6 @@
|
|
1
|
-
module SelfML::AST
|
1
|
+
module SelfML::AST; end
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
a.join("\n\n") + "\n"
|
8
|
-
end
|
9
|
-
|
10
|
-
end
|
11
|
-
|
12
|
-
class Node
|
13
|
-
attr_accessor :head , :tail
|
14
|
-
|
15
|
-
def initialize( head , tail = [] )
|
16
|
-
@head , @tail = head , tail
|
17
|
-
end
|
18
|
-
|
19
|
-
def serialize( level = 1 )
|
20
|
-
tail = @tail.sort.map do |t|
|
21
|
-
case t
|
22
|
-
when Node
|
23
|
-
"\n" + " "*level*4 + (t.serialize level+1)
|
24
|
-
when StringNode
|
25
|
-
" "+t.serialize
|
26
|
-
else
|
27
|
-
nil
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
# puts "head", head, @head.serialize
|
32
|
-
# puts "tail", tail
|
33
|
-
|
34
|
-
"(" + head.serialize + tail.join("") + ")"
|
35
|
-
end
|
36
|
-
|
37
|
-
alias :to_s :serialize
|
38
|
-
|
39
|
-
def <=> rhs
|
40
|
-
case rhs when Node then 0
|
41
|
-
when StringNode then 1
|
42
|
-
else -1 end
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
|
-
class StringNode < String
|
48
|
-
|
49
|
-
def serialize
|
50
|
-
return "`#{self.gsub("`","``")}`" if self.count("[") != self.count("]")
|
51
|
-
return "[#{self}]" if self.match(/[#`()\[\]{} ]/)
|
52
|
-
|
53
|
-
self
|
54
|
-
end
|
55
|
-
|
56
|
-
alias :to_s :serialize
|
57
|
-
|
58
|
-
def <=> rhs
|
59
|
-
case rhs when StringNode then 0
|
60
|
-
when Node then -1
|
61
|
-
else 1 end
|
62
|
-
end
|
63
|
-
|
64
|
-
end
|
65
|
-
|
66
|
-
class Comment < String
|
67
|
-
def serialize; nil; end
|
68
|
-
|
69
|
-
alias :to_s :serialize
|
70
|
-
end
|
71
|
-
|
72
|
-
end
|
3
|
+
require_relative 'ast/document'
|
4
|
+
require_relative 'ast/node'
|
5
|
+
require_relative 'ast/string_node'
|
6
|
+
require_relative 'ast/comment'
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module SelfML::Engines
|
2
|
+
|
3
|
+
class Array < Parslet::Transform
|
4
|
+
rule(:verbatim => simple(:s)) { String(s).to_sym }
|
5
|
+
rule(:string => simple(:s)) { s.to_sym }
|
6
|
+
|
7
|
+
rule(:list => subtree(:l)) do
|
8
|
+
# (tail = Array(l[:tail]).empty? ? [ String(l[:head]).to_sym , Array(l[:tail]) ]
|
9
|
+
[String(l[:head].to_sym)].tap do |ary|
|
10
|
+
tail = Array(l[:tail])
|
11
|
+
|
12
|
+
ary.concat tail unless tail.empty?
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
rule(:document => subtree(:d)) { Array(d) }
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -1,31 +1,17 @@
|
|
1
|
-
|
1
|
+
require_relative '../ast'
|
2
2
|
|
3
|
-
module SelfML
|
3
|
+
module SelfML::Engines
|
4
4
|
|
5
|
-
class
|
6
|
-
|
7
|
-
rule(:list => subtree(:l)) do
|
8
|
-
head = String(l[:head]).to_sym
|
9
|
-
tail = Array(l[:tail])
|
10
|
-
|
11
|
-
{ head => tail }
|
12
|
-
end
|
13
|
-
|
14
|
-
rule(:string => simple(:s)) { String(s) }
|
15
|
-
rule(:verbatim => simple(:s)) { String(s) }
|
16
|
-
end
|
5
|
+
class Document < Parslet::Transform
|
6
|
+
include SelfML::AST
|
17
7
|
|
18
|
-
|
19
|
-
class Transformer < Parslet::Transform
|
20
|
-
include AST
|
21
|
-
|
22
|
-
rule(:document => sequence(:doc)) { Document.new(doc) }
|
8
|
+
rule(:document => sequence(:doc)) { SelfML::AST::Document.new(doc) }
|
23
9
|
rule(:list => subtree(:l)) do
|
24
10
|
Node.new(
|
25
11
|
StringNode.new(l[:head]) , Array(l[:tail])
|
26
12
|
)
|
27
13
|
end
|
28
|
-
|
14
|
+
|
29
15
|
# Comments
|
30
16
|
rule(:comment => simple(:s)) { Comment.new(s) }
|
31
17
|
rule(:block => simple(:blk)) { Comment.new(blk) }
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module SelfML::Engines
|
2
|
+
|
3
|
+
class Hash < Parslet::Transform
|
4
|
+
rule(:document => sequence(:d)) { Array(d) }
|
5
|
+
rule(:list => subtree(:l)) do
|
6
|
+
head = String(l[:head]).to_sym
|
7
|
+
tail = Array(l[:tail])
|
8
|
+
|
9
|
+
{ head => tail }
|
10
|
+
end
|
11
|
+
|
12
|
+
rule(:string => simple(:s)) { String(s) }
|
13
|
+
rule(:verbatim => simple(:s)) { String(s) }
|
14
|
+
|
15
|
+
rule(:brackets => sequence(:b)) { "[#{b.reduce(:+)}]" }
|
16
|
+
|
17
|
+
rule(:text => simple(:t)) { String(t) }
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
data/lib/selfml/parser.rb
CHANGED
@@ -1,54 +1,60 @@
|
|
1
|
+
require 'bundler/setup'
|
1
2
|
require 'parslet'
|
2
3
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
rule(:word?) { word.maybe }
|
9
|
-
end # monkey patching in a couple of helpers
|
10
|
-
|
11
|
-
class SelfML::Parser < Parslet::Parser
|
12
|
-
root(:top)
|
13
|
-
rule(:top) do
|
14
|
-
(space? >> node >> space?).repeat.as(:document)
|
15
|
-
end
|
4
|
+
module SelfML
|
5
|
+
class Parslet::Parser
|
6
|
+
|
7
|
+
rule(:space) { match('\s').repeat(1) }
|
8
|
+
rule(:space?) { space.maybe }
|
16
9
|
|
17
|
-
|
10
|
+
rule(:word) { match('\w').repeat }
|
11
|
+
rule(:word?) { word.maybe }
|
12
|
+
end # monkey patching in a couple of helpers
|
18
13
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
)
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
(
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
14
|
+
class Parser < Parslet::Parser
|
15
|
+
root(:top)
|
16
|
+
rule(:top) do
|
17
|
+
(space? >> node >> space?).repeat.as(:document)
|
18
|
+
end
|
19
|
+
|
20
|
+
rule(:node) { comment.as(:comment) | list.as(:list) | string.as(:string) }
|
21
|
+
|
22
|
+
# String
|
23
|
+
rule(:string) { backtick.as(:backticks) | bracketed.as(:brackets) | verbatim.as(:verbatim) }
|
24
|
+
rule(:backtick) do
|
25
|
+
str('`') >> (
|
26
|
+
# str('``').as(:ticks) | match('``|[^`]').as(:text)
|
27
|
+
str('``').as(:ticks) | (str("`").absent? >> any).as(:text)
|
28
|
+
).repeat >> str('`')
|
29
|
+
end
|
30
|
+
rule(:bracketed) do
|
31
|
+
str('[') >> (
|
32
|
+
# bracketed.as(:nested) | match('[^\]]').as(:text)
|
33
|
+
bracketed.as(:nested) | (str("]").absent? >> any).as(:text)
|
34
|
+
).repeat >> str(']')
|
35
|
+
end
|
36
|
+
rule(:verbatim) { str("#").absnt? >> match['^\[\](){}\s'].repeat(1) }
|
37
|
+
|
38
|
+
# List
|
39
|
+
rule(:tail) do
|
40
|
+
(node >> space?).repeat
|
41
|
+
end
|
42
|
+
rule(:list) do
|
43
|
+
str('(') >> space? >>
|
44
|
+
comment.as(:comment).maybe >> space? >>
|
45
|
+
string.as(:head) >> space? >>
|
46
|
+
tail.as(:tail) >> space? >>
|
47
|
+
space? >> str(')')
|
48
|
+
end
|
49
|
+
|
50
|
+
# Comment
|
51
|
+
rule(:comment) { line.as(:line) | block.as(:block) }
|
52
|
+
rule(:line) { str('#') >> match['^\\n'].repeat.as(:text) >> (str("\n") | any.absnt?) }
|
53
|
+
rule(:block) do
|
54
|
+
str('{#') >> (
|
55
|
+
block.as(:block) | match['^#}'].as(:text)
|
56
|
+
).repeat >> str('#}')
|
57
|
+
end
|
44
58
|
|
45
|
-
# Comment
|
46
|
-
rule(:comment) { line.as(:line) | block.as(:block) }
|
47
|
-
rule(:line) { str('#') >> match['^\\n'].repeat.as(:text) >> (str("\n") | any.absnt?) }
|
48
|
-
rule(:block) do
|
49
|
-
str('{#') >> (
|
50
|
-
block.as(:block) | match['^#}'].as(:text)
|
51
|
-
).repeat >> str('#}')
|
52
59
|
end
|
53
|
-
|
54
60
|
end
|
data/lib/selfml/version.rb
CHANGED
data/lib/selfml.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
require 'bundler'
|
2
|
+
Bundler.require(:default)
|
3
|
+
|
4
|
+
require_relative 'selfml/engines'
|
5
|
+
require_relative 'selfml/parser'
|
6
|
+
require_relative 'selfml/ast'
|
4
7
|
|
5
8
|
module SelfML
|
6
9
|
|
@@ -8,10 +11,10 @@ module SelfML
|
|
8
11
|
transformer = engine.new if engine.instance_of? Class
|
9
12
|
|
10
13
|
parser = Parser.new
|
11
|
-
transformer ||=
|
14
|
+
transformer ||= Engines::Document.new
|
12
15
|
|
13
16
|
tree = parser.parse(s)
|
14
17
|
out = transformer.apply(tree)
|
15
18
|
end
|
16
19
|
|
17
|
-
end
|
20
|
+
end
|
data/man/selfml.1.ronn
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
self-ml(1) -- read self-ml files
|
2
|
+
=============================================
|
3
|
+
|
4
|
+
## SYNOPSIS
|
5
|
+
|
6
|
+
`ronn` [<format>...] <file>...<br>
|
7
|
+
`ronn` `-m`|`--man` <file>...<br>
|
8
|
+
`ronn` `-S`|`--server` <file>...<br>
|
9
|
+
`ronn` `--pipe` <file><br>
|
10
|
+
`ronn` < <file>
|
11
|
+
|
12
|
+
`self-ml` filename
|
13
|
+
|
14
|
+
## DESCRIPTION
|
15
|
+
|
16
|
+
**Self-ML** parses files written in the self-ml format.
|
17
|
+
|
18
|
+
Something something
|
19
|
+
|
20
|
+
## FILES
|
21
|
+
|
22
|
+
The `self-ml` command expects input to be valid self-ml(7) text. Source files
|
23
|
+
are typically named <name>.selfml (e.g., `example.1.ronn`). The <name>
|
24
|
+
and <section> should match the name and section defined in the <file>'s heading.
|
25
|
+
|
26
|
+
When building roff or HTML output files, destination filenames are determined by
|
27
|
+
taking the basename of the input <file> and adding the appropriate file
|
28
|
+
extension (or removing the file extension in the case of roff output). For
|
29
|
+
example, executing `ronn example.1.ronn` generates `example.1` with roff output
|
30
|
+
and `example.1.html` with HTML output.
|
31
|
+
|
32
|
+
## OPTIONS
|
33
|
+
|
34
|
+
These options control whether output is written to file(s), standard output, or
|
35
|
+
directly to a man pager.
|
36
|
+
|
37
|
+
* `-o`=<output>:
|
38
|
+
Generate file <output>.
|
39
|
+
|
40
|
+
* `--pipe`:
|
41
|
+
Don't generate files, write generated output to standard output. This is the
|
42
|
+
default behavior when ronn source text is piped in on standard input and no
|
43
|
+
<file> arguments are provided.
|
44
|
+
|
45
|
+
Format options control the files `ronn` generates, or the output format when the
|
46
|
+
`--pipe` argument is specified. When no format options are given, both `--roff`
|
47
|
+
and `--html` are assumed.
|
48
|
+
|
49
|
+
* `-r`, `--roff`:
|
50
|
+
Generate roff output. This is the default behavior when no <file>s are given
|
51
|
+
and ronn source text is read from standard input.
|
52
|
+
|
53
|
+
* `-5`, `--html`:
|
54
|
+
Generate output in HTML format.
|
55
|
+
|
56
|
+
* `-f`, `--fragment`:
|
57
|
+
Generate output in HTML format but only the document fragment, not the
|
58
|
+
header, title, or footer.
|
59
|
+
|
60
|
+
Document attributes displayed in the header and footer areas of generated
|
61
|
+
content are specified with these options. (These values may also be set via
|
62
|
+
the [ENVIRONMENT][].)
|
63
|
+
|
64
|
+
* `--manual`=<manual>:
|
65
|
+
The name of the manual this man page belongs to; <manual> is prominently
|
66
|
+
displayed top-center in the header area.
|
67
|
+
|
68
|
+
* `--organization`=<name>:
|
69
|
+
The name of the group, organization, or individual responsible for
|
70
|
+
publishing the document; <name> is displayed in the bottom-left footer area.
|
71
|
+
|
72
|
+
* `--date`=<date>:
|
73
|
+
The document's published date; <date> must be formatted `YYYY-MM-DD` and is
|
74
|
+
displayed in the bottom-center footer area. The <file> mtime is used when no
|
75
|
+
<date> is given, or the current time when no <file> is available.
|
76
|
+
|
77
|
+
Miscellaneous options:
|
78
|
+
|
79
|
+
* `-v`, `--version`:
|
80
|
+
Show ronn version and exit.
|
81
|
+
|
82
|
+
* `-h`, `--help`:
|
83
|
+
Show selfml help and exit.
|
84
|
+
|
85
|
+
## EXAMPLES
|
86
|
+
|
87
|
+
|
88
|
+
## ENVIRONMENT
|
89
|
+
|
90
|
+
* `RONN_MANUAL`:
|
91
|
+
A default manual name to be displayed in the top-center header area.
|
92
|
+
The `--manual` option takes precedence over this value.
|
93
|
+
|
94
|
+
* `RONN_ORGANIZATION`:
|
95
|
+
The default manual publishing group, organization, or individual to be
|
96
|
+
displayed in the bottom-left footer area. The `--organization` option takes
|
97
|
+
precedence over this value.
|
98
|
+
|
99
|
+
* `RONN_DATE`:
|
100
|
+
The default manual date in `YYYY-MM-DD` format. Displayed in the
|
101
|
+
bottom-center footer area. The `--date` option takes precedence over this
|
102
|
+
value.
|
103
|
+
|
104
|
+
* `RONN_STYLE`:
|
105
|
+
A `PATH`-style list of directories to check for stylesheets given to the
|
106
|
+
`--style` option. Directories are separated by a _:_; blank entries are
|
107
|
+
ignored. Use _._ to include the current working directory.
|
108
|
+
|
109
|
+
* `MANPAGER`:
|
110
|
+
The paging program used for man pages. This is typically set to
|
111
|
+
something like 'less -is'.
|
112
|
+
|
113
|
+
|
114
|
+
## BUGS
|
115
|
+
|
116
|
+
|
117
|
+
## COPYRIGHT
|
118
|
+
|
119
|
+
Self-ML is Copyright (C) 2012 Ricardo Mendes <http://ricardomend.es>
|
120
|
+
|
121
|
+
## SEE ALSO
|
122
|
+
|
123
|
+
selfml(7)
|
data/man/selfml.5.ronn
ADDED
File without changes
|
data/self-ml.gemspec
CHANGED
@@ -15,11 +15,15 @@ Gem::Specification.new do |s|
|
|
15
15
|
|
16
16
|
s.files = `git ls-files`.split("\n")
|
17
17
|
s.test_files = `git ls-files -- spec/*`.split("\n")
|
18
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
|
+
# s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.executables << 'selfml'
|
19
20
|
s.require_paths = ["lib"]
|
20
21
|
|
21
22
|
s.add_development_dependency "parslet"
|
22
23
|
s.add_development_dependency "minitest"
|
24
|
+
s.add_development_dependency "ronn"
|
25
|
+
s.add_development_dependency "aruba"
|
23
26
|
|
24
27
|
s.add_runtime_dependency "parslet"
|
28
|
+
s.add_runtime_dependency "gem-man"
|
25
29
|
end
|
data/spec/basic_spec.rb
CHANGED
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
Bundler.require(:default, :test)
|
3
|
+
|
4
|
+
require_relative 'spec_helper'
|
5
|
+
|
6
|
+
require 'selfml/engines/hash'
|
7
|
+
|
8
|
+
describe SelfML do
|
9
|
+
|
10
|
+
let(:document) { SelfML::Parser.new.parse("(grandparent (parent child1 child2))") }
|
11
|
+
|
12
|
+
describe "Engines" do
|
13
|
+
|
14
|
+
describe "Hash" do
|
15
|
+
subject { SelfML::Engines::Hash.new }
|
16
|
+
# let(:engine) { SelfML::Engines::Hash }
|
17
|
+
|
18
|
+
it "parses correctly" do
|
19
|
+
subject.apply(document)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "outputs correctly" do
|
23
|
+
output = {:document=>[{:grandparent=>[{:parent=>["child1", "child2"]}]}]}
|
24
|
+
subject.apply(document).must_equal output
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
data/spec/spec_helper.rb
CHANGED
data/spec/string_spec.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: selfml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-07-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: parslet
|
@@ -43,6 +43,38 @@ dependencies:
|
|
43
43
|
- - ! '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: ronn
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: aruba
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
46
78
|
- !ruby/object:Gem::Dependency
|
47
79
|
name: parslet
|
48
80
|
requirement: !ruby/object:Gem::Requirement
|
@@ -59,11 +91,28 @@ dependencies:
|
|
59
91
|
- - ! '>='
|
60
92
|
- !ruby/object:Gem::Version
|
61
93
|
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: gem-man
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :runtime
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
62
110
|
description: Self-ML is, as the name implies, a self-ml parser. It also has some utilities
|
63
111
|
to aid in building self-ml files.
|
64
112
|
email:
|
65
113
|
- rokusu@gmail.com
|
66
|
-
executables:
|
114
|
+
executables:
|
115
|
+
- selfml
|
67
116
|
extensions: []
|
68
117
|
extra_rdoc_files: []
|
69
118
|
files:
|
@@ -71,15 +120,28 @@ files:
|
|
71
120
|
- .rvmrc
|
72
121
|
- .travis.yml
|
73
122
|
- Gemfile
|
123
|
+
- LICENSE
|
74
124
|
- README.markdown
|
75
125
|
- Rakefile
|
126
|
+
- bin/selfml
|
76
127
|
- lib/selfml.rb
|
77
128
|
- lib/selfml/ast.rb
|
129
|
+
- lib/selfml/ast/comment.rb
|
130
|
+
- lib/selfml/ast/document.rb
|
131
|
+
- lib/selfml/ast/node.rb
|
132
|
+
- lib/selfml/ast/string_node.rb
|
133
|
+
- lib/selfml/engines.rb
|
134
|
+
- lib/selfml/engines/array.rb
|
135
|
+
- lib/selfml/engines/document.rb
|
136
|
+
- lib/selfml/engines/hash.rb
|
137
|
+
- lib/selfml/engines/json.rb
|
78
138
|
- lib/selfml/parser.rb
|
79
|
-
- lib/selfml/transformer.rb
|
80
139
|
- lib/selfml/version.rb
|
140
|
+
- man/selfml.1.ronn
|
141
|
+
- man/selfml.5.ronn
|
81
142
|
- self-ml.gemspec
|
82
143
|
- spec/basic_spec.rb
|
144
|
+
- spec/engines_spec.rb
|
83
145
|
- spec/fixtures/basic.selfml
|
84
146
|
- spec/fixtures/comments.selfml
|
85
147
|
- spec/fixtures/output.basic.selfml
|
@@ -114,6 +176,7 @@ specification_version: 3
|
|
114
176
|
summary: self-ml parser
|
115
177
|
test_files:
|
116
178
|
- spec/basic_spec.rb
|
179
|
+
- spec/engines_spec.rb
|
117
180
|
- spec/fixtures/basic.selfml
|
118
181
|
- spec/fixtures/comments.selfml
|
119
182
|
- spec/fixtures/output.basic.selfml
|
@@ -122,4 +185,3 @@ test_files:
|
|
122
185
|
- spec/fixtures/strings.selfml
|
123
186
|
- spec/spec_helper.rb
|
124
187
|
- spec/string_spec.rb
|
125
|
-
has_rdoc:
|