glaemscribe 1.1.9 → 1.1.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 75221aacc5c80300ac5f8b758830d3b5eb0d61db
4
- data.tar.gz: 7f79f88695484bfb0f4b2c66a85a88bb86176722
3
+ metadata.gz: 1c925a9a514e78b260c133356a6fb6f2c74a0604
4
+ data.tar.gz: ad4f4f17e164af4c096387babf85995f6dc9303e
5
5
  SHA512:
6
- metadata.gz: b1057b205737b740f5e07d4c39976d457d7c2678b8af04fce69c4313080e5918c98fec50d12fd4c6e73aeaf4e139308d1b41df0d5497979dcbda2bf2289c8f3e
7
- data.tar.gz: a507dff439ef8361b2d2ddd24dcf72bfa6f043a34f7eb8967e664bb03430ce8972e00784c3640b38d150a218806c84d7a08da0e55216b83b6c01fa430dba244c
6
+ metadata.gz: 34713507c8c624cdd3b98a31fc33e72b486544ab50026bd29ec608030401d1645f912059f934c91b19c7d239c4ceca9b6bc294294087d4e72f5a8c02606e1d4c
7
+ data.tar.gz: ca5d1ce433c25646d263e3afd19ac172803819a82ac98cee76cd8ecc7c2493d8fa990747832faed4db7d20bc766d4251af2f7b130b72ae945dc625c46524945f
@@ -131,10 +131,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
131
131
  {LVOWELS} === {AA} * {AEAE} * {OEOE} * {EE} * {II} * {OO} * {UU} * {YY}
132
132
  {LTEHTAR} === ARA A_TEHTA * ARA Y_TEHTA * ARA E_TEHTA_DOUBLE * ARA E_TEHTA * ARA I_TEHTA * ARA O_TEHTA * ARA U_TEHTA * ARA SEV_TEHTA
133
133
 
134
- {LVOWEL_MARKER} === SEV_TEHTA_INF
134
+ {LVOWEL_MARKER} === THINNAS
135
135
 
136
136
  \** DOWN TEHTAS **\
137
- {DTEHTAR} === A_TEHTA_INF * Y_TEHTA_INF * CIRC_TEHTA_INF * E_TEHTA_INF * I_TEHTA_INF * O_TEHTA_INF * U_TEHTA_INF * SEV_TEHTA_INF * {NULL}
137
+ {DTEHTAR} === A_TEHTA_INF * Y_TEHTA_INF * CIRC_TEHTA_INF * E_TEHTA_INF * I_TEHTA_INF * O_TEHTA_INF * U_TEHTA_INF * THINNAS * {NULL}
138
138
 
139
139
 
140
140
  {S_VOWELS_NP} === [ {S_VOWELS_NP_KERNEL} ]
@@ -48,7 +48,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
48
48
 
49
49
 
50
50
  \beg options
51
- \beg option consonant_modification_style CONSONANT_MODIFICATION_STYLE_BAR
51
+ \beg option consonant_modification_style CONSONANT_MODIFICATION_STYLE_WAVE
52
52
  \value CONSONANT_MODIFICATION_STYLE_WAVE 0
53
53
  \value CONSONANT_MODIFICATION_STYLE_BAR 1
54
54
  \end
@@ -76,7 +76,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
76
76
  _acirc_ --> A_TEHTA_CIRCUM
77
77
  _arev_ --> A_TEHTA_REVERSED
78
78
 
79
- _e_ --> E_TEHTA
79
+ _e_ --> E_TEHTA
80
+ _egrave_ --> E_TEHTA_GRAVE
81
+
82
+ _breve_ --> TEHTA_BREVE
83
+
80
84
  _i_ --> I_TEHTA
81
85
  _o_ --> O_TEHTA
82
86
  _u_ --> U_TEHTA
@@ -88,6 +92,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
88
92
  _u<_ --> U_TEHTA_INF
89
93
 
90
94
  _unutixe_ --> I_TEHTA_INF
95
+
96
+ _thinnas_ --> THINNAS
91
97
 
92
98
  _ee_ --> E_TEHTA_DOUBLE
93
99
  _ii_ --> I_TEHTA_DOUBLE
@@ -167,13 +173,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
167
173
  \** bearers **\
168
174
  _(telco)_ --> TELCO
169
175
  _(ara,ára)_ --> ARA
170
- _(halla)_ --> HALLA
176
+ _(halla,gasdil)_ --> HALLA
171
177
 
172
178
  \** consonant modifiers **\
173
179
  _(geminate)_ --> {GEMINATE}
174
180
  _(nasal)_ --> {NASAL}
175
181
  _(palatal)_ --> PALATAL_SIGN
176
-
182
+ _(labial)_ --> SEV_TEHTA
183
+
177
184
  _0_ --> NUM_0
178
185
  _1_ --> NUM_1
179
186
  _2_ --> NUM_2
@@ -186,6 +193,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
186
193
  _9_ --> NUM_9
187
194
  _10_ --> NUM_10
188
195
  _11_ --> NUM_11
196
+
197
+ _(lsd)_ --> CIRC_TEHTA_INF
189
198
 
190
199
  \end
191
200
 
@@ -132,7 +132,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
132
132
  {L_TEHTAR} === ARA E_TEHTA * ARA A_TEHTA * ARA E_TEHTA_DOUBLE * ARA Y_TEHTA * ARA I_TEHTA * ARA O_TEHTA * ARA U_TEHTA * ARA SEV_TEHTA
133
133
 
134
134
  \** DOWN TEHTAS **\
135
- {TEHTAR_DN} === E_TEHTA_INF * A_TEHTA_INF * CIRC_TEHTA_INF * Y_TEHTA_INF * I_TEHTA_INF * TELCO O_TEHTA * TELCO U_TEHTA * SEV_TEHTA_INF * VILYA * {NULL}
135
+ {TEHTAR_DN} === E_TEHTA_INF * A_TEHTA_INF * CIRC_TEHTA_INF * Y_TEHTA_INF * I_TEHTA_INF * TELCO O_TEHTA * TELCO U_TEHTA * THINNAS * VILYA * {NULL}
136
136
 
137
137
  {S_VOWELS_NP} === [ {S_VOWELS_NP_KERNEL} ]
138
138
  {S_VOWELS_NP_WN} === [ {S_VOWELS_NP_KERNEL} * {NULL} ]
data/lib/api/glaeml.rb CHANGED
@@ -153,7 +153,12 @@ module Glaemscribe
153
153
  @document.errors << Error.new(lnum, "Bad element name #{rest}.")
154
154
  else
155
155
  name = $1
156
- args = $'.shellsplit
156
+ begin
157
+ args = Shellwords.new.parse $'
158
+ rescue Shellwords::Error => e
159
+ @document.errors << Error.new(lnum, "Failed to parse args : #{e}")
160
+ args = []
161
+ end
157
162
  end
158
163
 
159
164
  n = Node.new(lnum, Node::Type::ElementBlock, name)
@@ -179,7 +184,13 @@ module Glaemscribe
179
184
  l = l[1..-1]
180
185
  l =~ /^([a-z_]+)/
181
186
  name = $1
182
- args = $'.shellsplit
187
+
188
+ begin
189
+ args = Shellwords.new.parse $'
190
+ rescue Shellwords::Error => e
191
+ @document.errors << Error.new(lnum, "Failed to parse args : #{e}")
192
+ args = []
193
+ end
183
194
 
184
195
  n = Node.new(lnum, Node::Type::ElementInline, name)
185
196
  n.args += args
@@ -0,0 +1,157 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Glǽmscribe (also written Glaemscribe) is a software dedicated to
4
+ # the transcription of texts between writing systems, and more
5
+ # specifically dedicated to the transcription of J.R.R. Tolkien's
6
+ # invented languages to some of his devised writing systems.
7
+ #
8
+ # Copyright (C) 2015 Benjamin Babut (Talagan).
9
+ #
10
+ # This program is free software: you can redistribute it and/or modify
11
+ # it under the terms of the GNU Affero General Public License as published by
12
+ # the Free Software Foundation, either version 3 of the License, or
13
+ # any later version.
14
+ #
15
+ # This program is distributed in the hope that it will be useful,
16
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ # GNU Affero General Public License for more details.
19
+ #
20
+ # You should have received a copy of the GNU Affero General Public License
21
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
22
+
23
+ module Glaemscribe
24
+ module API
25
+ module Glaeml
26
+ class Shellwords
27
+
28
+ class Error < StandardError
29
+ end
30
+
31
+ def initialize
32
+ end
33
+
34
+ ESCAPE_MODE_UNICODE = 1
35
+
36
+ def reset_state
37
+ @is_escaping = false
38
+ @is_eating_arg = false
39
+ @is_eating_arg_between_quotes = false
40
+ @args = []
41
+ @current_arg = ""
42
+
43
+ @escape_mode = nil
44
+ @unicode_escape_counter = 0
45
+ @unicode_escape_str = ''
46
+ end
47
+
48
+ def advance_inside_arg(l,i)
49
+ if l[i] == "\\"
50
+ @is_escaping = true
51
+ @escape_mode = nil
52
+ else
53
+ @current_arg += l[i]
54
+ end
55
+ end
56
+
57
+ def advance_inside_escape(l,i)
58
+ if !@escape_mode
59
+ # We don't now yet what to do.
60
+ case l[i]
61
+ when 'n'
62
+ @current_arg << "\n"
63
+ @is_escaping = false
64
+ return
65
+ when "\\"
66
+ @current_arg << "\\"
67
+ @is_escaping = false
68
+ when 't'
69
+ @current_arg << "\t"
70
+ @is_escaping = false
71
+ when "\""
72
+ @current_arg << "\""
73
+ @is_escaping = false
74
+ when "u"
75
+ @escape_mode = ESCAPE_MODE_UNICODE
76
+ @unicode_escape_counter = 0
77
+ @unicode_escape_str = ''
78
+ else
79
+ raise Error, "Unknown escapment : \\#{l[i]}"
80
+ end
81
+ else
82
+ case @escape_mode
83
+ when ESCAPE_MODE_UNICODE
84
+ c = l[i].downcase
85
+
86
+ if !(c =~ /[0-9a-f]/)
87
+ raise Error, 'Wrong format for unicode escaping, should be \u with 4 hex digits'
88
+ end
89
+
90
+ @unicode_escape_counter += 1
91
+ @unicode_escape_str += c
92
+ if @unicode_escape_counter == 4
93
+ @is_escaping = false
94
+ @current_arg += [@unicode_escape_str.hex].pack("U")
95
+ end
96
+
97
+ else
98
+ raise Error, "Unimplemented escape mode"
99
+ end
100
+ end
101
+
102
+ end
103
+
104
+ def parse(l)
105
+ reset_state
106
+
107
+ i = 0
108
+ l.length.times{ |i|
109
+
110
+ if !@is_eating_arg
111
+ next if l[i] =~ /\s/
112
+ @is_eating_arg = true
113
+ @is_eating_arg_between_quotes = (l[i] == "\"")
114
+ @current_arg << l[i] if !@is_eating_arg_between_quotes
115
+ else
116
+ # Eating arg
117
+ if @is_escaping
118
+ advance_inside_escape(l,i)
119
+ else
120
+ if !@is_eating_arg_between_quotes
121
+ if l[i] =~ /[\s"]/
122
+ @args << @current_arg
123
+ @current_arg = ""
124
+ @is_eating_arg = (l[i] == "\"") # Starting a new arg directly
125
+ @is_eating_arg_between_quotes = @is_eating_arg
126
+ next
127
+ else
128
+ advance_inside_arg(l,i)
129
+ end
130
+ else
131
+ if l[i] == "\""
132
+ @args << @current_arg
133
+ @current_arg = ""
134
+ @is_eating_arg = false
135
+ else
136
+ advance_inside_arg(l,i)
137
+ end
138
+ end
139
+ end
140
+ end
141
+ }
142
+
143
+ if @is_eating_arg && @is_eating_arg_between_quotes
144
+ raise Error, "Unmatched quote."
145
+ end
146
+
147
+ @args << @current_arg if !@current_arg.empty?
148
+
149
+ @args
150
+ end
151
+
152
+ end
153
+ end
154
+ end
155
+ end
156
+
157
+
data/lib/glaemscribe.rb CHANGED
@@ -57,6 +57,7 @@ module Glaemscribe
57
57
 
58
58
  require API_PATH + "/api/resource_manager.rb"
59
59
  require API_PATH + "/api/glaeml.rb"
60
+ require API_PATH + "/api/glaeml_shellwords.rb"
60
61
  require API_PATH + "/api/mode_parser.rb"
61
62
  require API_PATH + "/api/charset_parser.rb"
62
63
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glaemscribe
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.9
4
+ version: 1.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benjamin 'Talagan' Babut
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-26 00:00:00.000000000 Z
11
+ date: 2017-11-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: commander
@@ -75,6 +75,7 @@ files:
75
75
  - lib/api/eval.rb
76
76
  - lib/api/fragment.rb
77
77
  - lib/api/glaeml.rb
78
+ - lib/api/glaeml_shellwords.rb
78
79
  - lib/api/if_tree.rb
79
80
  - lib/api/mode.rb
80
81
  - lib/api/mode_parser.rb