tbmx 0.2.4 → 0.3.0
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.
- data/lib/tbmx.rb +126 -6
- metadata +1 -2
data/lib/tbmx.rb
CHANGED
@@ -82,12 +82,17 @@ module TBMX
|
|
82
82
|
|
83
83
|
class StringToken < Token
|
84
84
|
attr_reader :text
|
85
|
+
|
85
86
|
def initialize(text)
|
86
87
|
raise ArgumentError if not text.is_a? String
|
87
88
|
raise ArgumentError if not text =~ self.class.full_match_regex
|
88
89
|
@text = text
|
89
90
|
end
|
90
91
|
|
92
|
+
def to_s
|
93
|
+
@text
|
94
|
+
end
|
95
|
+
|
91
96
|
def to_html
|
92
97
|
@text
|
93
98
|
end
|
@@ -210,6 +215,10 @@ module TBMX
|
|
210
215
|
@expressions = expressions
|
211
216
|
end
|
212
217
|
|
218
|
+
def command_error(message)
|
219
|
+
%{<span style="color: red">[#{message}]</span>}
|
220
|
+
end
|
221
|
+
|
213
222
|
def to_html
|
214
223
|
case command.word
|
215
224
|
when "backslash", "bslash"
|
@@ -221,21 +230,124 @@ module TBMX
|
|
221
230
|
when "br", "newline"
|
222
231
|
"\n</br>\n"
|
223
232
|
when "bold", "b", "textbf"
|
224
|
-
|
233
|
+
html_tag :b
|
234
|
+
when "del", "s", "strike", "strikethrough", "strikeout"
|
235
|
+
html_tag :del
|
225
236
|
when "italic", "i", "textit"
|
226
|
-
|
237
|
+
html_tag :i
|
227
238
|
when "underline", "u"
|
228
|
-
|
239
|
+
html_tag :u
|
240
|
+
when "tt", "texttt", "teletype", "typewriter"
|
241
|
+
html_tag :tt
|
242
|
+
when "small"
|
243
|
+
html_tag :small
|
244
|
+
when "big"
|
245
|
+
html_tag :big
|
229
246
|
when "subscript", "sub"
|
230
|
-
|
247
|
+
html_tag :sub
|
231
248
|
when "superscript", "sup"
|
232
|
-
|
249
|
+
html_tag :sup
|
250
|
+
when "user", "user-id", "user_id"
|
251
|
+
user_command_handler
|
252
|
+
when "link-id", "link_id"
|
253
|
+
link_id_command_handler
|
254
|
+
when "tag-id", "tag_id"
|
255
|
+
tag_id_command_handler
|
256
|
+
when "bookmark-folder-id", "bookmark_folder_id", "bookmark_folder-id", "bookmark-folder_id"
|
257
|
+
bookmark_folder_id_command_handler
|
233
258
|
else
|
234
|
-
|
259
|
+
command_error "unknown command #{command.to_html}"
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
def html_tag(tag)
|
264
|
+
"<#{tag}>" + expressions.map(&:to_html).join + "</#{tag}>"
|
265
|
+
end
|
266
|
+
|
267
|
+
def user_command_handler
|
268
|
+
user = expressions.select {|expr| expr.is_a? WordToken}.first
|
269
|
+
if not user
|
270
|
+
command_error "user: error: no user specified"
|
271
|
+
else
|
272
|
+
if @@action_view.kind_of? ActionView::Base
|
273
|
+
the_user = User.smart_find user.to_s
|
274
|
+
if the_user
|
275
|
+
@@action_view.render partial: 'users/name_link',
|
276
|
+
locals: {the_user: the_user}
|
277
|
+
else
|
278
|
+
command_error "unknown user #{user.to_s}"
|
279
|
+
end
|
280
|
+
else
|
281
|
+
%{<a href="http://thinkingbicycle.com/users/#{user}">#{user.to_s}</a>}
|
282
|
+
end
|
283
|
+
end
|
284
|
+
end
|
285
|
+
|
286
|
+
def link_id_command_handler
|
287
|
+
link_id = expressions.select {|expr| expr.is_a? WordToken}.first
|
288
|
+
if not link_id
|
289
|
+
command_error "link_id: error: no link ID specified"
|
290
|
+
elsif not link_id.to_s =~ /\A[0-9]+\z/
|
291
|
+
command_error "link_id: error: invalid link ID specified"
|
292
|
+
else
|
293
|
+
if @@action_view.kind_of? ActionView::Base
|
294
|
+
link = Link.find Integer(link_id.to_s)
|
295
|
+
if link
|
296
|
+
@@action_view.render partial: 'links/inline',
|
297
|
+
locals: {link: link}
|
298
|
+
else
|
299
|
+
command_error "unknown link ID #{link_id.to_s}"
|
300
|
+
end
|
301
|
+
else
|
302
|
+
%{<a href="http://thinkingbicycle.com/links/#{link_id.to_s}">Link ##{link_id.to_s}</a>}
|
303
|
+
end
|
304
|
+
end
|
305
|
+
end
|
306
|
+
|
307
|
+
def tag_id_command_handler
|
308
|
+
tag_id = expressions.select {|expr| expr.is_a? WordToken}.first
|
309
|
+
if not tag_id
|
310
|
+
command_error "tag_id: error: no tag ID specified"
|
311
|
+
elsif not tag_id.to_s =~ /\A[0-9]+\z/
|
312
|
+
command_error "tag_id: error: invalid tag ID specified"
|
313
|
+
else
|
314
|
+
if @@action_view.kind_of? ActionView::Base
|
315
|
+
tag = Tag.find Integer(tag_id.to_s)
|
316
|
+
if tag
|
317
|
+
"<br/>" + @@action_view.render(partial: 'tags/show',locals: {tag: tag}) + "<br/>"
|
318
|
+
else
|
319
|
+
command_error "unknown tag ID #{tag_id.to_s}"
|
320
|
+
end
|
321
|
+
else
|
322
|
+
%{<a href="http://thinkingbicycle.com/tags/#{tag_id.to_s}">Tag ##{tag_id.to_s}</a>}
|
323
|
+
end
|
324
|
+
end
|
325
|
+
end
|
326
|
+
|
327
|
+
def bookmark_folder_id_command_handler
|
328
|
+
bookmark_folder_id = expressions.select {|expr| expr.is_a? WordToken}.first
|
329
|
+
if not bookmark_folder_id
|
330
|
+
command_error "bookmark_folder_id: error: no bookmark folder ID specified"
|
331
|
+
elsif not bookmark_folder_id.to_s =~ /\A[0-9]+\z/
|
332
|
+
command_error "bookmark_folder_id: error: invalid bookmark folder ID specified"
|
333
|
+
else
|
334
|
+
if @@action_view.kind_of? ActionView::Base
|
335
|
+
bookmark_folder = BookmarkFolder.find Integer(bookmark_folder_id.to_s)
|
336
|
+
if bookmark_folder
|
337
|
+
%{<a href="/bookmark_folders/#{bookmark_folder.id}">Bookmark Folder ##{bookmark_folder.id}</a>}
|
338
|
+
else
|
339
|
+
command_error "unknown bookmark folder ID #{bookmark_folder_id.to_s}"
|
340
|
+
end
|
341
|
+
else
|
342
|
+
%{<a href="http://thinkingbicycle.com/bookmark_folders/#{bookmark_folder_id.to_s}">Bookmark Folder ##{bookmark_folder_id.to_s}</a>}
|
343
|
+
end
|
235
344
|
end
|
236
345
|
end
|
237
346
|
|
238
347
|
class << self
|
348
|
+
@@action_view = nil
|
349
|
+
@@controller = nil
|
350
|
+
|
239
351
|
def parse(tokens)
|
240
352
|
expressions = []
|
241
353
|
rest = tokens
|
@@ -266,6 +378,14 @@ module TBMX
|
|
266
378
|
return [CommandParser.new(command, expressions), rest]
|
267
379
|
end
|
268
380
|
end
|
381
|
+
|
382
|
+
def action_view=(new)
|
383
|
+
@@action_view = new
|
384
|
+
end
|
385
|
+
|
386
|
+
def controller=(new)
|
387
|
+
@@controller = new
|
388
|
+
end
|
269
389
|
end
|
270
390
|
end
|
271
391
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tbmx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -75,4 +75,3 @@ signing_key:
|
|
75
75
|
specification_version: 3
|
76
76
|
summary: TBMX is a markup language based on TeX for ThinkingBicycle.com.
|
77
77
|
test_files: []
|
78
|
-
has_rdoc:
|