schizm 0.0.5 → 0.0.6

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: d7974c85b370377641c71f2530a078dbe7fcbc8a
4
- data.tar.gz: 122f46ff65ee2704ea0da40cc26bb62eedfcef80
3
+ metadata.gz: e2123141f335e7349ec095d5b078acc21f09ed75
4
+ data.tar.gz: 7751549bb232c6cd6d9d4e63e5a3fd5d3a659574
5
5
  SHA512:
6
- metadata.gz: 4d96e2d5a4ee028fe26fdb14f63e05a493ad6a01fe0600697f3c6e377c8ef1050188928c74c28344ed0716c32126191f7894a647694d05dfd7213930aa198931
7
- data.tar.gz: 065ce47ca1aa7e726a9c7f2b551f577d9ead32d02c8f417775b326ba221c20a7fddda6def39ad9aa598205ecdc65a46bf88ab19fa7127675e9bde866faa8d647
6
+ metadata.gz: a5c82e3b896e625eaf65d54dbef821c192f9bbd742beeb1f2a4d0e73e42a258caf9766ca7c96efb2d3db7dd4f13948c0e85c289a20f8f89c948fb04bd2f79d5c
7
+ data.tar.gz: a2919358945784a928cc2d48201e23013ae5ce72983a2bf4e644c055dd1d4381db3877707f84c959dae8ae4bfff209766ef82f55ca7759680d927bddc38afff4
data/lib/schizm/match.rb CHANGED
@@ -33,6 +33,12 @@ module Schizm
33
33
  # Source path, extension put in match group 1.
34
34
  SOURCE_PATH = /^.*\.(c|cc|cpp|cxx|inl|tcc)$/
35
35
 
36
+ # Single quotes.
37
+ QUOTE1_STRING = /'((?:[^\\']*(?:\\.)*)*)'/u
38
+
39
+ # Double quotes.
40
+ QUOTE2_STRING = /"((?:[^\\"]*(?:\\.)*)*)"/u
41
+
36
42
  # Space sequence.
37
43
  SPACE = /\p{Space}+/u
38
44
 
@@ -100,13 +106,22 @@ module Schizm
100
106
  CHAR_ESCAPE = /\\(.)/u
101
107
 
102
108
  # Link definition, content put in match group 1, params put in match group 2.
103
- LINK_DEF = /^\((#{DELIM_PARENS})\):[ ]*(.*)[ ]*\n/u
109
+ LINK_DEF = /^\[(#{DELIM_BRACKS})\]:[ ]*(.*)[ ]*\n/u
104
110
 
105
111
  # Link reference, content put in match group 1, params put in match group 2.
106
- LINK_REF = /\[(#{DELIM_BRACKS})\]\((#{DELIM_PARENS})\)/um
112
+ LINK_REF_BRACKS = /\[(#{DELIM_BRACKS})\]\[(#{DELIM_BRACKS})\]/um
113
+
114
+ # Link reference, content put in match group 1, params put in match group 2.
115
+ LINK_REF_PARENS = /\[(#{DELIM_BRACKS})\]\((#{DELIM_PARENS})\)/um
116
+
117
+ # Image definition, entry put in match group 1, params put in match group 2.
118
+ IMAGE_DEF = /^!\[(#{DELIM_BRACKS})\]:[ ]*(.*)[ ]*\n/u
119
+
120
+ # Image reference, alt put in match group 1, params put in match group 2.
121
+ IMAGE_REF_PARENS = /!\[(#{DELIM_BRACKS})\]\((#{DELIM_PARENS})\)/u
107
122
 
108
- # Link params, title put in match group 1, target put in match group 2.
109
- LINK_PARAMS = /(?:"(.+?)"[ ]+)?(.+)/um
123
+ # Image reference, alt put in match group 1, params put in match group 2.
124
+ IMAGE_REF_BRACKS = /!\[(#{DELIM_BRACKS})\]\[(#{DELIM_BRACKS})\]/u
110
125
 
111
126
  # Center math, content put in match group 1.
112
127
  CENTER_MATH = /[$][$]((?:[^\\$]*(?:\\.)*)*)[$][$]/um
@@ -162,16 +177,16 @@ module Schizm
162
177
  ENTER_BUG = /^[ ]{0,3}[(][?][)]/u
163
178
 
164
179
  # Enter olist element.
165
- ENTER_OLIST = /^[ ]{0,3}--[#]/u
180
+ ENTER_OLIST = /^[ ]{0,3}--?[#]/u
166
181
 
167
182
  # Enter ulist element.
168
- ENTER_ULIST = /^[ ]{0,3}--[%]/u
183
+ ENTER_ULIST = /^[ ]{0,3}--?[%]/u
169
184
 
170
185
  # Enter tlist element, content put in match group 1.
171
186
  ENTER_TLIST = /^[ ]{0,3}\[([x ])\]/u
172
187
 
173
188
  # Enter dlist element, content put in match group 1.
174
- ENTER_DLIST = /^[ ]{0,3}\[(#{DELIM_BRACKS})\]:/u
189
+ ENTER_DLIST = /^[ ]{0,3}(.*?)::/u
175
190
 
176
191
  # Enter code block.
177
192
  ENTER_CODE = /^[ ]{4,}(?=\p{Graph})/u
@@ -186,11 +201,11 @@ module Schizm
186
201
  [/\(r\)/ui, 174], # Registered.
187
202
  [/\+-/u, 177], # Plus minus.
188
203
  [/==/u, 8801], # Identical.
189
- [/~=/u, 8773], # Congruent.
204
+ [/=~/u, 8773], # Congruent.
190
205
  [/!=/u, 8800], # Not equal.
191
206
  [/<=/u, 8804], # Less equal.
192
207
  [/>=/u, 8805], # Greater equal.
193
- [/~~/u, 8776], # Approximately.
208
+ [/~=/u, 8776], # Approximately.
194
209
  [/--/u, 8211], # En dash.
195
210
  [/---/u, 8212], # Em dash.
196
211
  [/\.{3}/u, 8230], # Ellipsis.
data/lib/schizm/parse.rb CHANGED
@@ -1,18 +1,18 @@
1
1
  # Copyright (c) 2017 M. Grady Saunders
2
- #
2
+ #
3
3
  # Redistribution and use in source and binary forms, with or without
4
4
  # modification, are permitted provided that the following conditions
5
5
  # are met:
6
- #
6
+ #
7
7
  # 1. Redistributions of source code must retain the above
8
8
  # copyright notice, this list of conditions and the following
9
9
  # disclaimer.
10
- #
10
+ #
11
11
  # 2. Redistributions in binary form must reproduce the above
12
12
  # copyright notice, this list of conditions and the following
13
13
  # disclaimer in the documentation and/or other materials
14
14
  # provided with the distribution.
15
- #
15
+ #
16
16
  # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
17
  # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
18
18
  # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
@@ -61,6 +61,18 @@ module Parse
61
61
  return @@links
62
62
  end
63
63
 
64
+ @@images =
65
+ Hash.new do |hash, where|
66
+ hash[where] =
67
+ Hash.new do |hash, entry|
68
+ hash[entry] = Hash.new
69
+ end
70
+ end
71
+
72
+ def self.images
73
+ return @@images
74
+ end
75
+
64
76
  # Hash attribute reference.
65
77
  class HashAttr
66
78
  def initialize hash, attr
@@ -116,7 +128,7 @@ module Parse
116
128
  max_glyph = glyph
117
129
  end
118
130
  end
119
- sscan.pointer =
131
+ sscan.pointer =
120
132
  sscan.pointer + max_glyph_len
121
133
  return false if max_glyph_len == 0
122
134
  return true
@@ -128,23 +140,31 @@ module Parse
128
140
  when sscan.skip(HTML_ENTITY) then sscan[0]
129
141
  when sscan.skip(HTML_ESCAPE) then sscan[0].codepoints[0]
130
142
  when sscan.skip(CHAR_ESCAPE) then sscan[0].codepoints[0]
131
- when sscan.skip(LINK_REF)
132
- attrs = Hash.new
133
- attrs["target"] = "_blank"
143
+ when sscan.skip(LINK_REF_PARENS)
134
144
  shown = String.new(sscan[1]).unescape("]")
135
145
  param = String.new(sscan[2]).unescape(")")
136
- param = LINK_PARAMS.match(param)
137
- if (param[2] =~ URI::regexp)
138
- attrs["href"] = param[2]
139
- attrs["title"] = param[1]
140
- else
141
- entry = param[2]
142
- attrs["href"] = HashAttr.new @@links[where][entry], "href"
143
- attrs["title"] = HashAttr.new @@links[where][entry], "title"
146
+ attrs = Hash.new
147
+ sscan2 = StringScanner.new(param)
148
+ until sscan2.eos?
149
+ case
150
+ when sscan2.skip(QUOTE1_STRING) then attrs["title"] = String.new(sscan2[1]).unescape("'")
151
+ when sscan2.skip(QUOTE2_STRING) then attrs["title"] = String.new(sscan2[1]).unescape("\"").gsub(/"/u, "'")
152
+ when sscan2.skip(/\p{Graph}+/u) then attrs["href"] = sscan2[0]
153
+ when sscan2.skip(/\p{Space}+/u) then nil
154
+ end
144
155
  end
145
156
  Markup.new("a")
157
+ .add_attrs("target" => "_blank")
146
158
  .add_attrs(attrs)
147
159
  .add_elems(line_elems(where, shown))
160
+ when sscan.skip(LINK_REF_BRACKS)
161
+ shown = String.new(sscan[1]).unescape("]")
162
+ param = String.new(sscan[2]).unescape("]")
163
+ Markup.new("a")
164
+ .add_attrs("target" => "_blank")
165
+ .add_attrs("title" => HashAttr.new(@@links[where][param], "title"))
166
+ .add_attrs("href" => HashAttr.new(@@links[where][param], "href"))
167
+ .add_elems(line_elems(where, shown))
148
168
  when sscan.skip(CENTER_MATH)
149
169
  Markup.new("script")
150
170
  .add_attrs(CENTER_MATH_ATTRS)
@@ -194,11 +214,11 @@ module Parse
194
214
  until sscan.eos?
195
215
  elems.add_elems(
196
216
  case
197
- when (sscan.skip EMPTY_LINE) then nil
198
- when (sscan.skip EOB_MARKER) then nil
199
- when (sscan.skip HRULE)
217
+ when sscan.skip(EMPTY_LINE) then nil
218
+ when sscan.skip(EOB_MARKER) then nil
219
+ when sscan.skip(HRULE)
200
220
  Markup.new "hr"
201
- when (sscan.skip HEADING_ATX)
221
+ when sscan.skip(HEADING_ATX)
202
222
  type = String.new sscan[1]
203
223
  text = String.new sscan[2]
204
224
  slug = text.slugify
@@ -211,7 +231,7 @@ module Parse
211
231
  when 5 then "h5"
212
232
  when 6 then "h6"
213
233
  end).add_elems(line_elems(where, text))
214
- when (sscan.skip HEADING_SETEXT)
234
+ when sscan.skip(HEADING_SETEXT)
215
235
  type = String.new sscan[2]
216
236
  text = String.new sscan[1]
217
237
  slug = text.slugify
@@ -222,30 +242,72 @@ module Parse
222
242
  end).add_attrs("id" => slug)
223
243
  .add_attrs("class" => "title")
224
244
  .add_elems(line_elems(where, text))
225
- when (sscan.skip LINK_DEF)
226
- entry = String.new(sscan[1]).unescape(")")
227
- param = String.new(sscan[2])#.unescape("]")
228
- param_match = LINK_PARAMS.match param
229
- @@links[where][entry]["href"] = param_match[2]
230
- @@links[where][entry]["title"] = param_match[1]
245
+ when sscan.skip(LINK_DEF)
246
+ entry = String.new(sscan[1]).unescape("]")
247
+ sscan2 = StringScanner.new(sscan[2])
248
+ until sscan2.eos?
249
+ case
250
+ when sscan2.skip(QUOTE1_STRING) then @@links[where][entry]["title"] = String.new(sscan2[1]).unescape("'")
251
+ when sscan2.skip(QUOTE2_STRING) then @@links[where][entry]["title"] = String.new(sscan2[1]).unescape("\"").gsub(/"/u, "'")
252
+ when sscan2.skip(/\p{Graph}+/u) then @@links[where][entry]["href"] = sscan2[0]
253
+ when sscan2.skip(/\p{Space}+/u) then nil
254
+ end
255
+ end
231
256
  nil
232
- when (sscan.skip /^#{CHUNK_LABEL}/u)
257
+ when sscan.skip(IMAGE_DEF)
258
+ entry = String.new(sscan[1]).unescape("]")
259
+ sscan2 = StringScanner.new(sscan[2])
260
+ until sscan2.eos?
261
+ case
262
+ when sscan2.skip(/w=(\d+)/u) then @@images[where][entry]["width"] = sscan2[1]
263
+ when sscan2.skip(/h=(\d+)/u) then @@images[where][entry]["height"] = sscan2[1]
264
+ when sscan2.skip(/\p{Graph}+/u) then @@images[where][entry]["src"] = sscan2[0]
265
+ when sscan2.skip(/\p{Space}+/u) then nil
266
+ end
267
+ end
268
+ when sscan.skip(/^[ ]{0,3}#{IMAGE_REF_PARENS}$/u)
269
+ alt = String.new(sscan[1]).unescape("]")
270
+ param = String.new(sscan[2]).unescape(")")
271
+ sscan2 = StringScanner.new(param)
272
+ attrs = Hash.new
273
+ until sscan2.eos?
274
+ case
275
+ when sscan2.skip(/w=(\d+)/u) then attrs["width"] = sscan2[1]
276
+ when sscan2.skip(/h=(\d+)/u) then attrs["height"] = sscan2[1]
277
+ when sscan2.skip(/\p{Graph}+/u) then attrs["src"] = sscan2[0]
278
+ when sscan2.skip(/\p{Space}+/u) then nil
279
+ end
280
+ end
281
+ Markup.new("img")
282
+ .add_attrs("alt" => alt)
283
+ .add_attrs(attrs)
284
+ when sscan.skip(/^[ ]{0,3}#{IMAGE_REF_BRACKS}$/u)
285
+ alt = String.new(sscan[1]).unescape("]")
286
+ entry = String.new(sscan[2]).unescape("]")
287
+ Markup.new("img")
288
+ .add_attrs("alt" => alt)
289
+ .add_attrs("src" => HashAttr.new(@@images[where][entry], "src"))
290
+ .add_attrs("width" => HashAttr.new(@@images[where][entry], "width"))
291
+ .add_attrs("height" => HashAttr.new(@@images[where][entry], "height"))
292
+ when sscan.skip(/^#{CHUNK_LABEL}/u)
233
293
  div = nil
234
294
  chunk = Chunk.hash[where][String.new(sscan[1]).unescape("]")]
235
295
  case
236
- when (sscan.skip /[ ]*->[ ]*(.*?)\n/u)
296
+ when sscan.skip(/[ ]*->[ ]*(.*?)\n/u)
237
297
  chunk.target = sscan[1].strip
238
- when (sscan.skip /[ ]*::[ ]*(.*?)\n/u)
298
+ when sscan.skip(/[ ]*::[ ]*(.*?)\n/u)
239
299
  case sscan[1].strip
240
300
  when "Share" then chunk.share = true
241
301
  when "Local" then chunk.share = false
242
302
  else raise "Unknown attribute."
243
303
  end
244
- when (sscan.skip /[ ]*\#=[ ]*(.*?)\n/u)
304
+ =begin
305
+ when sscan.skip(/[ ]*\#=[ ]*(.*?)\n/u)
245
306
  sscan[1].split(' ').each_with_index do |param, index|
246
307
  chunk.params[param][:index] = index
247
308
  end
248
- when (sscan.skip /[ ]*\+=[ ]*(?:#{CHUNK_BLOCK})?\n/u)
309
+ =end
310
+ when sscan.skip(/[ ]*\+=[ ]*(?:#{CHUNK_BLOCK})?\n/u)
249
311
  label = sscan[1]
250
312
  block = sscan.scan_until(END_INDENT)
251
313
  block = String.new(block).erase(INDENT).trim
@@ -287,7 +349,7 @@ module Parse
287
349
  ])
288
350
  end
289
351
  div
290
- when (sscan.skip ENTER_ASIDE)
352
+ when sscan.skip(ENTER_ASIDE)
291
353
  text = sscan.scan_until END_INDENT
292
354
  text = String.new(text).erase INDENT
293
355
  Markup.new("div")
@@ -300,7 +362,7 @@ module Parse
300
362
  .add_attrs("class" => "genericons-neue genericons-neue-info")),
301
363
  page_elems(where, text)
302
364
  ])
303
- when (sscan.skip ENTER_ALERT)
365
+ when sscan.skip(ENTER_ALERT)
304
366
  text = sscan.scan_until END_INDENT
305
367
  text = String.new(text).erase INDENT
306
368
  Markup.new("div")
@@ -313,7 +375,7 @@ module Parse
313
375
  .add_attrs("class" => "genericons-neue genericons-neue-notice")),
314
376
  page_elems(where, text)
315
377
  ])
316
- when (sscan.skip ENTER_BUG)
378
+ when sscan.skip(ENTER_BUG)
317
379
  text = sscan.scan_until END_INDENT
318
380
  text = String.new(text).erase INDENT
319
381
  Markup.new("div")
@@ -326,7 +388,7 @@ module Parse
326
388
  .add_attrs("class" => "genericons-neue genericons-neue-bug")),
327
389
  page_elems(where, text)
328
390
  ])
329
- when (sscan.skip ENTER_QUOTE)
391
+ when sscan.skip(ENTER_QUOTE)
330
392
  text = sscan.scan_until END_INDENT
331
393
  text = String.new(text).erase INDENT
332
394
  Markup.new("blockquote")
@@ -371,7 +433,6 @@ module Parse
371
433
  while sscan.skip ENTER_DLIST
372
434
  term = sscan[1]
373
435
  text = sscan.scan_until END_INDENT
374
- term = String.new(term).unescape("]")
375
436
  text = String.new(text).erase INDENT
376
437
  list.add_elems(Markup.new("dt").add_elems(line_elems(where, term)))
377
438
  list.add_elems(Markup.new("dd").add_elems(page_elems(where, text)))
data/res/scss/style.scss CHANGED
@@ -177,7 +177,7 @@ hr {
177
177
  padding-left: 48pt;
178
178
  padding-right: 48pt;
179
179
  margin-left: 192pt;
180
- max-width: 512pt;
180
+ max-width: 384pt;
181
181
  min-width: 192pt;
182
182
  }
183
183
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schizm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - M. Grady Saunders