rulex 0.1.0 → 0.1.1
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.
- checksums.yaml +4 -4
- data/README.md +31 -4
- data/examples/count.rex +50 -0
- data/examples/count.tex +34 -0
- data/lib/rulex/rex/reader.rb +13 -10
- data/lib/rulex/tex/writer.rb +3 -0
- data/lib/rulex/version.rb +1 -1
- data/rulex.gemspec +0 -4
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d4415c9c1a3b0a1b94e0a8227b9baa9e3dfd8ca6
|
4
|
+
data.tar.gz: 934a03920ea1d907f2544a5545a6456d1aedb5d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 841a5ce7e54eb466677677639f643b0eb8dfc17ae0903fa7fa3d6fa8f441f58c8c99e8d98ad2e746d2e42df26ba1200b2c44da5ac7e002bae9823f32589d578a
|
7
|
+
data.tar.gz: 5ba3f8afe690b1b242f4954c6318291f3957ab261ec3f056f8c78322cf898e0d1cd22b58bf838a7133c37efbff827c06420e1b8c4525fdbe1dfce9092fa02c66
|
data/README.md
CHANGED
@@ -20,33 +20,58 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
-
**Everything is still very experimental, and might break at any point!**
|
24
|
-
|
25
23
|
*For detailed documentation, please refer to the code, mainly `/spec/rulex_spec.rb`. There are a few examples as well in `/examples/`.*
|
26
24
|
|
25
|
+
**Everything is still very experimental, and might break at any point!** Consider using a specific version, and sticking to it if it works.
|
26
|
+
|
27
|
+
|
27
28
|
|
28
29
|
### Example
|
29
30
|
|
30
31
|
```ruby
|
31
|
-
#
|
32
|
-
documentclass
|
32
|
+
# First thing to note, your rex file must follow the TeX document structure.
|
33
|
+
# You will start with a `\documentclass` call, then wrap your document in a
|
34
|
+
# `document` environment by calling `\begin{document}` and `\end{document}`.
|
35
|
+
# The only difference here is that most of this process is wrapped in Ruby.
|
36
|
+
|
37
|
+
|
38
|
+
# Just call `documentclass` to set the document class. This for instance will
|
39
|
+
# be translated to `\documentclass{article}`.
|
40
|
+
documentclass :article
|
33
41
|
|
42
|
+
# You can define your own Ruby functions.
|
34
43
|
def count_from range
|
35
44
|
first = range.first
|
36
45
|
last = range.last
|
37
46
|
|
47
|
+
# Any function call, like `functionname("arg1", "arg2",...)`, will be
|
48
|
+
# translated to `\functionname{arg1}{arg2}{...}`. That way, you can start
|
49
|
+
# a subsection as follows:
|
38
50
|
subsection "how to count from #{first} to #{last}"
|
51
|
+
|
52
|
+
# Raw is a special `rex` function. It writes its argument as text in the rex
|
53
|
+
# tree (and subsequently in the TeX file) without parsing it. Note that the
|
54
|
+
# fact that it is not writing a `\raw` function is exceptional, because `raw`
|
55
|
+
# is a `rex` reserved function name. To use `raw` like you would use
|
56
|
+
# `subsection` call `tex_command :raw`.
|
39
57
|
raw "Let's try to count."
|
40
58
|
|
59
|
+
# If you pass a command a bloc, it will start a TeX environment. The
|
60
|
+
# following `itemize do ... end` is equivalent to `\begin{itemize} ... \end{itemize}`.
|
41
61
|
itemize do
|
42
62
|
range.each do |n|
|
43
63
|
item n.to_s
|
44
64
|
end
|
45
65
|
end
|
46
66
|
end
|
67
|
+
|
47
68
|
document do
|
48
69
|
section "A Short Lecture on How to Count"
|
49
70
|
|
71
|
+
|
72
|
+
# You can of course call the functions you defined (AND NOT BE LIMITED TO
|
73
|
+
# 9 ******* ARGUMENTS)
|
74
|
+
|
50
75
|
count_from (1..5)
|
51
76
|
count_from (10..20)
|
52
77
|
|
@@ -58,6 +83,7 @@ document do
|
|
58
83
|
raw "Finally I would like to thank \n"
|
59
84
|
|
60
85
|
enumerate do
|
86
|
+
# You can of course use just any kind of Ruby goodness you like.
|
61
87
|
%w[Donald\ Knuth Yukihiro\ Matsumoto].each do |name|
|
62
88
|
item "Mr. #{name}"
|
63
89
|
end
|
@@ -127,3 +153,4 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
127
153
|
* Add markdown support to `Rulex::Rex::Reader` through Pandoc
|
128
154
|
* The parser needs some beefin-up (not sure what it does with spaces, especially with command options)
|
129
155
|
* Maybe add some syntax for LaTeX commands to output text directly rather than store the command in the tree
|
156
|
+
* Coffee is on me if you write a Vim plugin
|
data/examples/count.rex
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
# First thing to note, your rex file must follow the TeX document structure. You will start
|
2
|
+
# with a `\documentclass` call, then wrap your document in a `document` environment by calling `\begin{document}` and `\end{document}`. The only difference here is that most of this process is wrapped in Ruby.
|
3
|
+
|
4
|
+
|
5
|
+
# Just call `documentclass` to set the document class. This for instance will be translated to `\documentclass{article}`.
|
6
|
+
documentclass :article
|
7
|
+
|
8
|
+
# You can define your own Ruby functions.
|
9
|
+
def count_from range
|
10
|
+
first = range.first
|
11
|
+
last = range.last
|
12
|
+
|
13
|
+
# Any function call, like `functionname("arg1", "arg2",...)`, will be translated to `\functionname{arg1}{arg2}{...}`.
|
14
|
+
# That way, you can start a subsection as follows:
|
15
|
+
subsection "how to count from #{first} to #{last}"
|
16
|
+
|
17
|
+
# Raw is a special `rex` function. It writes its argument as text in the rex tree (and subsequently in the TeX file) without parsing it. Note that the fact that it is not writing a `\raw` function is exceptional, because `raw` is a `rex` reserved function name. To use `raw` like you would use `subsection` call `tex_command :raw`.
|
18
|
+
raw "Let's try to count."
|
19
|
+
|
20
|
+
# If you pass a command a bloc, it will start a TeX environment. The following `itemize do ... end` is equivalent to `\begin{itemize} ... \end{itemize}`.
|
21
|
+
itemize do
|
22
|
+
range.each do |n|
|
23
|
+
item n.to_s
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
document do
|
29
|
+
section "A Short Lecture on How to Count"
|
30
|
+
|
31
|
+
|
32
|
+
# You can of course call the functions you defined (AND NOT BE LIMITED TO 9 ******* ARGUMENTS)
|
33
|
+
|
34
|
+
count_from (1..5)
|
35
|
+
count_from (10..20)
|
36
|
+
|
37
|
+
raw "Good job, now off to section "; ref :acks;
|
38
|
+
|
39
|
+
section "Acknowledgements"
|
40
|
+
label :acks
|
41
|
+
|
42
|
+
raw "Finally I would like to thank \n"
|
43
|
+
|
44
|
+
enumerate do
|
45
|
+
# You can of course use just any kind of Ruby goodness you like.
|
46
|
+
%w[Donald\ Knuth Yukihiro\ Matsumoto].each do |name|
|
47
|
+
item "Mr. #{name}"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/examples/count.tex
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
\documentclass{article}
|
2
|
+
\begin{document}
|
3
|
+
\section{A Short Lecture on How to Count}
|
4
|
+
\subsection{how to count from 1 to 5}
|
5
|
+
Let's try to count.\begin{itemize}
|
6
|
+
\item{1}
|
7
|
+
\item{2}
|
8
|
+
\item{3}
|
9
|
+
\item{4}
|
10
|
+
\item{5}
|
11
|
+
\end{itemize}
|
12
|
+
\subsection{how to count from 10 to 20}
|
13
|
+
Let's try to count.\begin{itemize}
|
14
|
+
\item{10}
|
15
|
+
\item{11}
|
16
|
+
\item{12}
|
17
|
+
\item{13}
|
18
|
+
\item{14}
|
19
|
+
\item{15}
|
20
|
+
\item{16}
|
21
|
+
\item{17}
|
22
|
+
\item{18}
|
23
|
+
\item{19}
|
24
|
+
\item{20}
|
25
|
+
\end{itemize}
|
26
|
+
Good job, now off to section \ref{acks}
|
27
|
+
\section{Acknowledgements}
|
28
|
+
\label{acks}
|
29
|
+
Finally I would like to thank
|
30
|
+
\begin{enumerate}
|
31
|
+
\item{Mr. Donald Knuth}
|
32
|
+
\item{Mr. Yukihiro Matsumoto}
|
33
|
+
\end{enumerate}
|
34
|
+
\end{document}
|
data/lib/rulex/rex/reader.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module Rulex
|
2
2
|
module Rex
|
3
3
|
class Reader
|
4
|
+
|
4
5
|
def initialize
|
5
6
|
@content = []
|
6
7
|
@content_stack = [@content]
|
@@ -15,8 +16,6 @@ module Rulex
|
|
15
16
|
|
16
17
|
def raw str
|
17
18
|
add_to_content(type: :text, text: str)
|
18
|
-
#new_node = {type: :text, text: str }
|
19
|
-
#@content << new_node
|
20
19
|
end
|
21
20
|
|
22
21
|
def tex str
|
@@ -31,8 +30,18 @@ module Rulex
|
|
31
30
|
@content
|
32
31
|
end
|
33
32
|
|
34
|
-
def tex_command(name,
|
35
|
-
|
33
|
+
def tex_command(name, params)
|
34
|
+
if params.length == 1
|
35
|
+
add_to_content(type: :command, name: name, arguments: params)
|
36
|
+
elsif params.length == 2
|
37
|
+
opts = params[0]
|
38
|
+
args = params[1]
|
39
|
+
add_to_content(type: :command, name: name, arguments: args, options: opts)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def depth
|
44
|
+
@content_stack.length - 1
|
36
45
|
end
|
37
46
|
|
38
47
|
def tex_environment(name, args, block)
|
@@ -40,12 +49,6 @@ module Rulex
|
|
40
49
|
@content_stack.push []
|
41
50
|
read &block
|
42
51
|
new_node.merge!(children: @content_stack.pop)
|
43
|
-
|
44
|
-
#new_node = {type: :environment, name: name, arguments: args}
|
45
|
-
#deeper_parser = Rulex::Rex::Reader.new
|
46
|
-
#deeper_parser.read &block
|
47
|
-
#new_node.merge!(children: deeper_parser.export)
|
48
|
-
|
49
52
|
add_to_content new_node
|
50
53
|
end
|
51
54
|
|
data/lib/rulex/tex/writer.rb
CHANGED
data/lib/rulex/version.rb
CHANGED
data/rulex.gemspec
CHANGED
@@ -17,10 +17,6 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
|
20
|
-
#if spec.respond_to?(:metadata)
|
21
|
-
#spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com' to prevent pushes to rubygems.org, or delete to allow pushes to any server."
|
22
|
-
#end
|
23
|
-
|
24
20
|
spec.add_runtime_dependency "treetop"
|
25
21
|
|
26
22
|
spec.add_development_dependency "bundler", "~> 1.9"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rulex
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nicolas Mattia
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-06-
|
11
|
+
date: 2015-06-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: treetop
|
@@ -83,6 +83,8 @@ files:
|
|
83
83
|
- bin/console
|
84
84
|
- bin/setup
|
85
85
|
- examples/bracket_bloc.tex
|
86
|
+
- examples/count.rex
|
87
|
+
- examples/count.tex
|
86
88
|
- examples/hello_world.rex
|
87
89
|
- examples/hello_world.tex
|
88
90
|
- examples/simple.tex
|