rulex 0.1.2 → 0.1.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5a4320567471b4e3e59824ba257532d95c470aa8
4
- data.tar.gz: 425acc9636e13862d28f563a8251f62d55c08f0d
3
+ metadata.gz: 615cc7d413292fbe99bd79cb0cdaee48d9e6ca91
4
+ data.tar.gz: 32dfee7e649b5f48c60d1f5e0e2d59e37c01b382
5
5
  SHA512:
6
- metadata.gz: fd20d78fd564ec24c2bc9c0252a09d847369da9de5cc55bd41a7ae1cc47ba47d2a5822c41032497e7993513dd9f84ec2a341a571a9f5f3f4e091da37b9157ef7
7
- data.tar.gz: 5f1a2eec6be5e5bcbe17e656fd72c6682a4051853e4725229e007708e7f0f22dcb3d56a16ba61796087dc6bff495287b8accd0c04a2a6bd60ee14c83a004a77f
6
+ metadata.gz: d506ff5ad0e7037afa8498884f06b4c591de5074b5de206480b21ca90b2e1db5011e36d517993eeb3f89334861e0918e6e0bc184c818b0d9eeda35a34107ccee
7
+ data.tar.gz: d4f609a790eb152cc056ec6fb26a0bdbb27711e719616dd6d003f5b629689510188f152348d0fbede1513714fcd259ffcda0c4644395ca7c5b02aca46c9c7fc8
data/README.md CHANGED
@@ -4,7 +4,16 @@ Rulex is a rubygem allowing you to use Ruby while writing LaTex files. It reads
4
4
 
5
5
  ## Installation
6
6
 
7
- Add this line to your application's Gemfile:
7
+ To start using Rulex, you'll first need Ruby and Rubygems (here for a Debian-like, though I recommend rvm):
8
+
9
+ $ apt-get install ruby && apt-get install rubygems
10
+
11
+ and then install the gem as
12
+
13
+ $ gem install rulex
14
+
15
+
16
+ To use it in your own project, add this line to your application's Gemfile:
8
17
 
9
18
  ```ruby
10
19
  gem 'rulex'
@@ -14,9 +23,6 @@ And then execute:
14
23
 
15
24
  $ bundle
16
25
 
17
- Or install it yourself as:
18
-
19
- $ gem install rulex
20
26
 
21
27
  ## Usage
22
28
 
@@ -29,14 +35,11 @@ Or install it yourself as:
29
35
  ### Example
30
36
 
31
37
  ```ruby
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.
38
+ # First thing to note, your rex file must follow the TeX document structure. You will start
39
+ # 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.
36
40
 
37
41
 
38
- # Just call `documentclass` to set the document class. This for instance will
39
- # be translated to `\documentclass{article}`.
42
+ # Just call `documentclass` to set the document class. This for instance will be translated to `\documentclass{article}`.
40
43
  documentclass :article
41
44
 
42
45
  # You can define your own Ruby functions.
@@ -44,20 +47,14 @@ def count_from range
44
47
  first = range.first
45
48
  last = range.last
46
49
 
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:
50
+ # Any function call, like `functionname("arg1", "arg2",...)`, will be translated to `\functionname{arg1}{arg2}{...}`.
51
+ # That way, you can start a subsection as follows:
50
52
  subsection "how to count from #{first} to #{last}"
51
53
 
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`.
54
+ # 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`.
57
55
  raw "Let's try to count."
58
56
 
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}`.
57
+ # 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}`.
61
58
  itemize do
62
59
  range.each do |n|
63
60
  item n.to_s
@@ -69,13 +66,17 @@ document do
69
66
  section "A Short Lecture on How to Count"
70
67
 
71
68
 
72
- # You can of course call the functions you defined (AND NOT BE LIMITED TO
73
- # 9 ******* ARGUMENTS)
69
+ # You can of course call the functions you defined (AND NOT BE LIMITED TO 9 ******* ARGUMENTS)
74
70
 
75
71
  count_from (1..5)
76
72
  count_from (10..20)
77
73
 
78
- raw "Good job, now off to section "; ref :acks;
74
+ # At any time, you can prefix a method call with `pure_`. This will return the LaTeX text
75
+ # (`String`) that would have been produced, instead of writing the command to the
76
+ # document tree. For instance, we want to write the whole text "Good job, ... " to the
77
+ # document tree, while referencing the next section; we don't want to write the reference
78
+ # to the tree on top of that!
79
+ raw "Good job, now off to section #{pure_ref :acks}\n"
79
80
 
80
81
  section "Acknowledgements"
81
82
  label :acks
@@ -94,7 +95,6 @@ end
94
95
  Run `rulex example.rex > example.tex` to get
95
96
 
96
97
  ```latex
97
- % example.tex
98
98
  \documentclass{article}
99
99
  \begin{document}
100
100
  \section{A Short Lecture on How to Count}
@@ -121,6 +121,7 @@ Let's try to count.\begin{itemize}
121
121
  \item{20}
122
122
  \end{itemize}
123
123
  Good job, now off to section \ref{acks}
124
+
124
125
  \section{Acknowledgements}
125
126
  \label{acks}
126
127
  Finally I would like to thank
@@ -139,13 +140,20 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
139
140
 
140
141
  ## Contributing
141
142
 
143
+ ### I want no business with Ruby.
144
+
145
+ Rulex is very young, and everything is very likely to break down. Just use it, and open an issue if something goes wrong. You can also contact me.
146
+
147
+ ### I want no business with LaTeX.
148
+
149
+ That's the point. Seriously, the code might need some refactoring, and can always use cool tricks.
150
+
142
151
  1. Fork it ( https://github.com/Nicowcow/rulex/fork )
143
152
  2. Create your feature branch (`git checkout -b my-new-feature`)
144
153
  3. Commit your changes (`git commit -am 'Add some feature'`)
145
154
  4. Push to the branch (`git push origin my-new-feature`)
146
155
  5. Create a new Pull Request
147
156
 
148
-
149
157
  ### What can I do?
150
158
 
151
159
  * `Rulex::Tex::Grammar::Document` is a big misnommer! It should be changed to something that reflects better what its role is.
@@ -154,3 +162,5 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
154
162
  * The parser needs some beefin-up (not sure what it does with spaces, especially with command options)
155
163
  * Maybe add some syntax for LaTeX commands to output text directly rather than store the command in the tree
156
164
  * Coffee is on me if you write a Vim plugin
165
+ * Another coffee if you also write a Rake task.
166
+ * There should be some special delimiters like Ruby's `#{...}` (maybe `#< ... >`) which would translate all method calls to `pure_` method calls. That would make inlining method calls in strings much easier.
data/examples/count.rex CHANGED
@@ -34,7 +34,12 @@ document do
34
34
  count_from (1..5)
35
35
  count_from (10..20)
36
36
 
37
- raw "Good job, now off to section #{pure_ref :acks}\n" # #{pure_ref :acks}\n"
37
+ # At any time, you can prefix a method call with `pure_`. This will return the LaTeX text
38
+ # (`String`) that would have been produced, instead of writing the command to the
39
+ # document tree. For instance, we want to write the whole text "Good job, ... " to the
40
+ # document tree, while referencing the next section; we don't want to write it to the
41
+ # tree on top of that!
42
+ raw "Good job, now off to section #{pure_ref :acks}\n"
38
43
 
39
44
  section "Acknowledgements"
40
45
  label :acks
@@ -8,18 +8,33 @@ module Rulex
8
8
  @latex_reader = Rulex::Tex::Reader.new
9
9
  end
10
10
 
11
- alias_method :read, :instance_eval
11
+ def read *args, &block
12
+ if args.length == 1
13
+ read_rex args.first
14
+ elsif block
15
+ instance_eval &block
16
+ end
17
+ end
18
+
19
+ def read_rex str
20
+ instance_eval rex_to_ruby str
21
+ end
12
22
 
13
- def add_to_content node
23
+ # There are a few characters ('\\', '\[' and '\]') that %q[] escapes anyway
24
+ def rex_to_ruby str
25
+ str.gsub(/<##(((?!##>).)+)##>/) { |m| "raw %q[" + $1.gsub("\\","\\\\\\\\") + "]"}
26
+ end
27
+
28
+ def add_node_to_content node
14
29
  @content_stack.last << node
15
30
  end
16
31
 
17
32
  def raw str
18
- add_to_content(type: :text, text: str)
33
+ add_node_to_content(type: :text, text: str)
19
34
  end
20
35
 
21
36
  def tex str
22
- add_to_content(type: :tex, children: @latex_reader.read(str))
37
+ add_node_to_content(type: :tex, children: @latex_reader.read(str))
23
38
  end
24
39
 
25
40
  def import filepath
@@ -50,31 +65,31 @@ module Rulex
50
65
  end
51
66
 
52
67
  def tex_command(name, params)
53
- add_to_content build_tex_command name, params
68
+ add_node_to_content build_tex_command name, params
54
69
  end
55
70
 
56
71
  def depth
57
72
  @content_stack.length - 1
58
73
  end
59
74
 
60
- def tex_environment(name, args, block)
75
+ def tex_environment(name, *args, &block)
61
76
  new_node = {type: :environment, name: name, arguments: args}
62
77
  @content_stack.push []
63
78
  read &block
64
79
  new_node.merge!(children: @content_stack.pop)
65
- add_to_content new_node
80
+ add_node_to_content new_node
66
81
  end
67
82
 
68
83
  def method_missing(m_id, *args, &block)
69
84
  if block
70
- tex_environment(m_id, args, block)
85
+ tex_environment(m_id, *args, &block)
71
86
  elsif /pure_([a-zA-Z]+)/.match(m_id)
72
87
  Rulex::Tex::Writer.to_str(build_tex_command($1,args))
73
- #"\\#{$1}{1}{2}"
74
88
  else
75
89
  tex_command(m_id, args)
76
90
  end
77
91
  end
92
+
78
93
  end
79
94
  end
80
95
  end
@@ -26,8 +26,12 @@ module Rulex
26
26
  end
27
27
  res = str += "\\end{#{item[:name]}}\n"
28
28
  else
29
- str = ""
30
- res = str += item[:children].inject(""){|acc, c| acc += Rulex::Tex::Writer.to_str c} if item[:children]
29
+ if item[:children]
30
+ str = ""
31
+ res = str += item[:children].inject(""){|acc, c| acc += Rulex::Tex::Writer.to_str c} if item[:children] else
32
+ ""
33
+ end
34
+
31
35
  end
32
36
  end
33
37
 
data/lib/rulex/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Rulex
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
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.2
4
+ version: 0.1.3
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-24 00:00:00.000000000 Z
11
+ date: 2015-06-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: treetop