rulex 0.1.7 → 0.1.8

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: 0cf20eb535ac1da63faf659b6a8adc218a8c668d
4
- data.tar.gz: d597b856dbc1584e6bb58e8d1882444ad9a439df
3
+ metadata.gz: c0b7e37b8df7d840e4e80107918b400adf154118
4
+ data.tar.gz: 6c174975e1eae9fc164383f81a918ee363da107d
5
5
  SHA512:
6
- metadata.gz: 6184f8d0366f77597729c749dba54a6e4d78a5aede1db6107566f314e2f4b2a146a9920f70327c75ac9f893b7dc72d4d81e3b3f44d151f3bf4089a3ef8b0d445
7
- data.tar.gz: 165875c0edbb36db64c69033a29f392c8fe3163581633b063268fc6d56b8ac4530e56ea414bc5cf9ff4fc2755f44823446e7ff522fa70eda9dfc511264aa1b3c
6
+ metadata.gz: 5e47edef1e0851c47b8bb2622ae257824f5dc27bb004199aa5d7fbf2fcbf0253356f09e4deea3eeadd29ebd8bc32d7d252d18c072428736ecba65a7815821553
7
+ data.tar.gz: 456de3ad1e30f61e8482f7cf08f7199df06f3dc6dc5eed962718dca3f37f4fc096cd703bb1cfb05ab86bb3a0b0dd6185f82c383a9b7a7e7b7a010b916fc62c9d
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Rulex
2
2
 
3
+ [![Join the chat at https://gitter.im/Nicowcow/rulex](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/Nicowcow/rulex?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
4
+
3
5
  ![Travis-CI badge](https://api.travis-ci.org/Nicowcow/rulex.svg)
4
6
  [![Code Climate](https://codeclimate.com/github/Nicowcow/rulex/badges/gpa.svg)](https://codeclimate.com/github/Nicowcow/rulex)
5
7
  [![Test Coverage](https://codeclimate.com/github/Nicowcow/rulex/badges/coverage.svg)](https://codeclimate.com/github/Nicowcow/rulex/coverage)
@@ -70,7 +72,7 @@ end
70
72
  document do
71
73
  section "A Short Lecture on How to Count"
72
74
 
73
- # You can use markdown
75
+ # You can use markdown (though you need `pandoc` to be installed)
74
76
  md "Pay attention, the following is *very* important."
75
77
 
76
78
  # You can of course call the functions you defined (AND NOT BE LIMITED TO 9 ******* ARGUMENTS)
@@ -179,9 +181,7 @@ That's the point. Seriously, the code might need some refactoring, and can alway
179
181
 
180
182
  * `Rulex::Tex::Grammar::Document` is a big misnommer! It should be changed to something that reflects better what its role is.
181
183
  * `Rulex::Rex::Reader#raw` might not be the best name either. Maybe change it to text.
182
- * Add markdown support to `Rulex::Rex::Reader` through Pandoc
183
184
  * The parser needs some beefin-up (not sure what it does with spaces, especially with command options)
184
- * Maybe add some syntax for LaTeX commands to output text directly rather than store the command in the tree
185
185
  * Coffee is on me if you write a Vim plugin
186
186
  * Another coffee if you also write a Rake task.
187
187
  * 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.
@@ -1,13 +1,34 @@
1
1
  require 'pandoc-ruby'
2
+ require 'yaml'
3
+
4
+ #grammar_path = File.join(File.dirname(File.expand_path(__FILE__)),
5
+ #'rulex.treetop')
6
+ #Treetop.load grammar_path
7
+
8
+
9
+
10
+
11
+ # Used when reading YAML
12
+ class Object
13
+ def deep_symbolize_keys
14
+ return self.inject({}){|memo,(k,v)| memo[k.to_sym] = v.deep_symbolize_keys; memo} if self.is_a? Hash
15
+ return self.inject([]){|memo,v | memo << v.deep_symbolize_keys; memo} if self.is_a? Array
16
+ return self
17
+ end
18
+ end
19
+
2
20
 
3
21
  module Rulex
4
22
  module Rex
5
23
  class Reader
6
-
7
24
  def initialize
8
25
  @content = []
9
26
  @content_stack = [@content]
10
27
  @latex_reader = Rulex::Tex::Reader.new
28
+ @delimiters = {
29
+ raw: { open: "<##", close: "##>"},
30
+ tex: { open: "<(#", close: "#)>"}
31
+ }
11
32
  end
12
33
 
13
34
  # Feeds instructions, either as a [String] or Rulex instructions (parsed and then interpreted
@@ -28,9 +49,20 @@ module Rulex
28
49
  instance_eval rex_to_ruby str
29
50
  end
30
51
 
31
- # There are a few characters ('\\', '\[' and '\]') that even %q[] escapes
32
52
  def rex_to_ruby str
33
- str.gsub(/<##(((?!##>)[\s\S])+)##>/) { |m| "raw %q[" + $1.gsub("\\","\\\\\\\\") + "]"}
53
+ @delimiters.inject(str) do |str, d|
54
+ key = d.first
55
+ val = d[1]
56
+
57
+ open_delimiter = Regexp.escape val[:open]
58
+ close_delimiter = Regexp.escape val[:close]
59
+
60
+ regexp = /#{open_delimiter}(((?!#{close_delimiter})[\s\S])+)#{close_delimiter}/
61
+
62
+ # There are a few characters ('\\', '\[' and '\]') that even %q[] "un"-escapes,
63
+ # hence the second gsub
64
+ str.gsub(regexp) { |m| "#{key} %q[" + $1.gsub("\\","\\\\\\\\") + "]"}
65
+ end
34
66
  end
35
67
 
36
68
  def add_node_to_content node
@@ -55,8 +87,37 @@ module Rulex
55
87
  append_nodes_to_content @latex_reader.read(str).to_a
56
88
  end
57
89
 
58
- def import filepath
59
- read File.open(filepath).read
90
+
91
+ # TODO
92
+ def import str
93
+ import_file str
94
+ end
95
+
96
+
97
+ # Reads a file, given a filepath
98
+ # @filepath a [String]
99
+ # @return self (the Rulex::Rex::Reader)
100
+ def import_file filepath
101
+ content = File.read(filepath)
102
+ import_content content
103
+ end
104
+
105
+
106
+ # Reads some content
107
+ # @content a [String]
108
+ # @return self (the Rulex::Rex::Reader)
109
+ def import_content content
110
+ if content =~ /\A(---\s*\n.*?\n?)^((---|\.\.\.)\s*$\n?)/m
111
+ content = $'
112
+ data = YAML.load($1).deep_symbolize_keys
113
+ end
114
+ content ||= ""
115
+ data ||= {}
116
+ if(delimiters = data[:delimiters])
117
+ @delimiters.merge! delimiters
118
+ end
119
+
120
+ read content
60
121
  end
61
122
 
62
123
  def export
@@ -66,14 +127,14 @@ module Rulex
66
127
  def build_tex_command(name, params)
67
128
 
68
129
  fail ArgumentError, "Command name must be a String or a Symbol, got #{name} of type #{name.class}" unless
69
- String === name or Symbol === name
130
+ String === name or Symbol === name
70
131
 
71
132
  case params.length
72
133
  when 0
73
134
  {type: :command, name: name}
74
135
  when 1
75
136
  fail ArgumentError "Command arguments must all be String s or Symbol s, got #{params}" unless
76
- params.all?{|s| String === s or Symbol === s}
137
+ params.all?{|s| String === s or Symbol === s}
77
138
  {type: :command, name: name, arguments: params}
78
139
  when 2
79
140
  first = params[0]
@@ -1,3 +1,3 @@
1
1
  module Rulex
2
- VERSION = "0.1.7"
2
+ VERSION = "0.1.8"
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.7
4
+ version: 0.1.8
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-28 00:00:00.000000000 Z
11
+ date: 2015-08-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: treetop