AoBane 0.1.14 → 0.1.15
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/AoBane.icns +0 -0
- data/AoBane.jpg +0 -0
- data/AoBane.tiff +0 -0
- data/lib/AoBane.rb +130 -179
- data/lib/AoBane/utilities.rb +192 -62
- data/lib/AoBane/version.rb +1 -1
- data/test/Test.html +48 -16
- data/test/Test.md +18 -4
- data/test/test2.html +30 -0
- data/test/test2.md +24 -0
- metadata +7 -2
data/AoBane.icns
ADDED
Binary file
|
data/AoBane.jpg
ADDED
Binary file
|
data/AoBane.tiff
ADDED
Binary file
|
data/lib/AoBane.rb
CHANGED
@@ -52,9 +52,9 @@ require 'math_ml/string'
|
|
52
52
|
|
53
53
|
|
54
54
|
module AoBane
|
55
|
-
VERSION = '0.1.
|
56
|
-
VERSION_NUMBER = 0.
|
57
|
-
RELEASE_DATE = '2013-
|
55
|
+
VERSION = '0.1.15'
|
56
|
+
VERSION_NUMBER = 0.0115
|
57
|
+
RELEASE_DATE = '2013-05-07'
|
58
58
|
VERSION_LABEL = "#{VERSION} (#{RELEASE_DATE})"
|
59
59
|
|
60
60
|
UTF8_BOM = "\xef\xbb\xbf"
|
@@ -523,44 +523,23 @@ module AoBane
|
|
523
523
|
text += "\n\n"
|
524
524
|
@log.debug "Normalized line-endings: %p" % text
|
525
525
|
|
526
|
-
#Insert by set.minami 2013-
|
527
|
-
text.gsub!(/\*\[(.*?)\]\((.*?)(\|.*?)*(\/.*?)*\)/){|match|
|
528
|
-
'<font color="' +
|
529
|
-
if $2.nil? then '' else $2 end +'" ' +
|
530
|
-
'face="' +
|
531
|
-
if $3.nil? then '' else $3.delete('|') end + '" ' +
|
532
|
-
'size="' +
|
533
|
-
if $4.nil? then '' else $4.delete('/') end + '">' +
|
534
|
-
$1 + '</font>'
|
535
|
-
}
|
536
|
-
#Insert by set.minami 2013-04-13
|
537
|
-
text = Utilities::prePaling(text)
|
538
|
-
#Insert by set.minami 2013-04-21
|
539
|
-
text = Utilities::abbrPreProcess(text)
|
540
|
-
#Insert by set.minami 2013-04-01
|
541
|
-
text.gsub!(/\\TeX\{(.+?)\\TeX\}/){
|
542
|
-
begin
|
543
|
-
$1.to_mathml
|
544
|
-
rescue => e
|
545
|
-
puts 'math_ml Error: ' + $1
|
546
|
-
puts e
|
547
|
-
end
|
548
|
-
}
|
549
|
-
|
526
|
+
#text = Utilities::prePaling(text) #Insert by set.minami 2013-04-27
|
550
527
|
#Insert by set.minami 2013-04-03
|
551
528
|
nrange = []
|
552
529
|
departure = 1
|
553
530
|
preproc = Marshal.load(Marshal.dump(text))
|
554
531
|
text.clear
|
532
|
+
stack = []
|
555
533
|
html_text_number = 0
|
534
|
+
# Utilities::initNumberStack
|
535
|
+
|
556
536
|
preproc.lines { |line|
|
557
537
|
html_text_number += 1
|
558
538
|
begin
|
559
|
-
line.gsub!(/^\{nrange:(.*?)(;\d+)
|
560
|
-
depNum = $2.delete(';').to_i
|
561
|
-
departure =
|
562
|
-
if
|
563
|
-
if /[hH]([1-6])\-[hH]([1-6])/ =~ $1
|
539
|
+
line.gsub!(/^\{nrange:(.*?)(;\d+)??\}/){ |match|
|
540
|
+
#depNum = $2.delete(';').to_i
|
541
|
+
#departure = if depNum > 0 then depNum else 1 end
|
542
|
+
if /h(\d)\-h(\d)/i =~ $1
|
564
543
|
nrange.push($1)
|
565
544
|
nrange.push($2)
|
566
545
|
if nrange.size > 2 then
|
@@ -580,18 +559,43 @@ module AoBane
|
|
580
559
|
"@ l.#{html_text_number}";exit(-1)
|
581
560
|
raise FatalError,"AoBane Syntax Error:Header range is WRONG!"
|
582
561
|
end
|
583
|
-
line
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
562
|
+
if line =~ /^(%{1,#{range}})(.*?)\n/ then
|
563
|
+
text << Utilities.
|
564
|
+
calcSectionNo(nrange.min,range,$1.size,departure,$2,stack) +
|
565
|
+
"\n"
|
566
|
+
else
|
567
|
+
text << line
|
568
|
+
end
|
588
569
|
@log.debug nrange.minmax
|
589
570
|
rescue => e
|
590
571
|
@log.warn "AoBane Syntax WARNING l.#{html_text_number}:#{line.chomp} haven't adopted"
|
591
572
|
@log.warn e
|
592
573
|
end
|
593
574
|
}
|
594
|
-
|
575
|
+
|
576
|
+
text.gsub!(/\*\[(.*?)\]\((.*?)(\|.*?)*(\/.*?)*\)/){|match|
|
577
|
+
'<font color="' +
|
578
|
+
if $2.nil? then '' else $2 end +'" ' +
|
579
|
+
'face="' +
|
580
|
+
if $3.nil? then '' else $3.delete('|') end + '" ' +
|
581
|
+
'size="' +
|
582
|
+
if $4.nil? then '' else $4.delete('/') end + '">' +
|
583
|
+
$1 + '</font>'
|
584
|
+
}
|
585
|
+
#Insert by set.minami 2013-04-21
|
586
|
+
text = Utilities::abbrPreProcess(text)
|
587
|
+
#Insert by set.minami 2013-04-01
|
588
|
+
text.gsub!(/\\TeX\{(.+?)\\TeX\}/){
|
589
|
+
begin
|
590
|
+
$1.to_mathml
|
591
|
+
rescue => e
|
592
|
+
puts 'math_ml Error: ' + $1
|
593
|
+
puts e
|
594
|
+
end
|
595
|
+
}
|
596
|
+
|
597
|
+
text = Utilities::preProcFence(text,0).join("\n") #Insert by set.minami 2013-04-27
|
598
|
+
#Insert by set.minami 2013-03-30
|
595
599
|
#Insert by set.minami
|
596
600
|
|
597
601
|
# Filter HTML if we're asked to do so
|
@@ -657,75 +661,15 @@ module AoBane
|
|
657
661
|
end
|
658
662
|
end
|
659
663
|
|
660
|
-
#Insert by Set.Minami 2013-04-13
|
661
|
-
text = Utilities::postPaling(text)
|
662
664
|
#Insert by set.minami 2013-04-21
|
663
665
|
text = Utilities::abbrPostProcess(text)
|
664
666
|
#Insert by set.minami 2013-03-30
|
665
667
|
text = Utilities::insertTimeStamp(text)
|
666
|
-
|
667
|
-
#output = text.split("\n")
|
668
|
-
specialChar = {
|
669
|
-
"\-\-" => "—",
|
670
|
-
"<=" => "⇔",
|
671
|
-
"<\->" => "↔",
|
672
|
-
"\->" =>"→",
|
673
|
-
"<\-" =>"←",
|
674
|
-
"=>" => "⇒",
|
675
|
-
"<=" => "⇐",
|
676
|
-
"\|\|\^" => "⇑",
|
677
|
-
"\|\|\/" => "⇓",
|
678
|
-
"\|\/" => "↓",
|
679
|
-
"\|\^" => "↑",
|
680
|
-
">>" => "»",
|
681
|
-
"\<\<" => "«",
|
682
|
-
"+_" => "±",
|
683
|
-
"!=" => "≠",
|
684
|
-
"~~" => "≈",
|
685
|
-
"~=" => "≅",
|
686
|
-
"<_" => "≤",
|
687
|
-
">_" => "&ge",
|
688
|
-
"\|FA" => "∀",
|
689
|
-
"\|EX" => "∃",
|
690
|
-
"\|=" => "≡",
|
691
|
-
"\(+\)" => "&oplus",
|
692
|
-
"\(x\)" => "⊗",
|
693
|
-
"\(c\)" => "©",
|
694
|
-
"\(R\)" =>"®",
|
695
|
-
"\(SS\)" => "§",
|
696
|
-
"\(TM\)" => "™",
|
697
|
-
"!in" => "∉"}
|
668
|
+
text = Utilities::postProcFence(text) #Insert by set.minami 2013-04-27
|
698
669
|
|
699
|
-
|
670
|
+
text = Utilities::transformSpecialChar(text) #Insert by set.minami 2013-04-27
|
700
671
|
|
701
|
-
|
702
|
-
text.gsub!(/<\/pre>(.*?)<pre>/i){|m|
|
703
|
-
if m.nil? then '<\/pre><pre>'
|
704
|
-
else
|
705
|
-
'<\/pre>' + m.gsub!(/#{entry}/,specialChar).to_s + '<pre>'
|
706
|
-
end
|
707
|
-
}
|
708
|
-
text.gsub!(/<\/pre>(.*?)/i){|m|
|
709
|
-
if m.nil? then '<\/pre>'
|
710
|
-
else
|
711
|
-
'</pre>' + m.gsub!(/#{entry}/,specialChar).to_s
|
712
|
-
end
|
713
|
-
}
|
714
|
-
text.gsub!(/(.*?)<pre>/i){|m|
|
715
|
-
if m.nil? then '<pre>'
|
716
|
-
else
|
717
|
-
m.gsub!(/#{entry}/,specialChar).to_s + '<pre>'
|
718
|
-
end
|
719
|
-
}
|
720
|
-
else
|
721
|
-
if text.nil? then ''
|
722
|
-
else text.gsub!(/#{entry}/,specialChar)
|
723
|
-
end
|
724
|
-
end
|
725
|
-
#return output.join("\n")
|
726
|
-
#Insert by set.minami
|
727
|
-
return text
|
728
|
-
|
672
|
+
return text
|
729
673
|
end
|
730
674
|
|
731
675
|
alias parse parse_text
|
@@ -879,6 +823,7 @@ module AoBane
|
|
879
823
|
|
880
824
|
@log.debug "Applying block transforms to:\n %p" % str
|
881
825
|
text = str
|
826
|
+
|
882
827
|
text = pretransform_fenced_code_blocks( text, rs )
|
883
828
|
text = pretransform_block_separators(text, rs)
|
884
829
|
|
@@ -1231,12 +1176,11 @@ module AoBane
|
|
1231
1176
|
}
|
1232
1177
|
end
|
1233
1178
|
|
1234
|
-
CaptionRegexp =
|
1179
|
+
CaptionRegexp = '\[(.+?)\](\{(.+?)\})??'
|
1235
1180
|
TableRegexp = %r{
|
1236
1181
|
(?:
|
1237
|
-
(#{CaptionRegexp}\s*\n)
|
1238
|
-
|
1239
|
-
^([ ]{0,#{TabWidth - 1}}) # not indented
|
1182
|
+
(#{CaptionRegexp}\s*\n)??# modified by set.minami 2013-04-20
|
1183
|
+
([ ]{0,#{TabWidth - 1}}) # not indented
|
1240
1184
|
(?:[|][ ]*) # NOT optional border
|
1241
1185
|
|
1242
1186
|
\S.*? # 1st cell content
|
@@ -1253,9 +1197,9 @@ module AoBane
|
|
1253
1197
|
|
1254
1198
|
# Transform tables.
|
1255
1199
|
def transform_tables(str, rs)
|
1256
|
-
|
1257
|
-
|
1258
|
-
|
1200
|
+
str.gsub(TableRegexp){
|
1201
|
+
transform_table_rows($~[0], rs)
|
1202
|
+
}
|
1259
1203
|
end
|
1260
1204
|
|
1261
1205
|
TableSeparatorCellRegexp = %r{
|
@@ -1271,79 +1215,86 @@ module AoBane
|
|
1271
1215
|
}x
|
1272
1216
|
|
1273
1217
|
def transform_table_rows(str, rs)
|
1274
|
-
|
1275
|
-
|
1276
|
-
|
1277
|
-
|
1278
|
-
|
1279
|
-
|
1280
|
-
|
1281
|
-
|
1282
|
-
|
1283
|
-
|
1284
|
-
|
1285
|
-
|
1286
|
-
|
1287
|
-
|
1288
|
-
|
1289
|
-
|
1290
|
-
|
1291
|
-
|
1292
|
-
|
1293
|
-
|
1294
|
-
|
1295
|
-
|
1296
|
-
|
1297
|
-
|
1298
|
-
|
1299
|
-
|
1300
|
-
|
1301
|
-
|
1302
|
-
|
1303
|
-
|
1304
|
-
|
1305
|
-
|
1306
|
-
|
1307
|
-
|
1308
|
-
|
1309
|
-
|
1310
|
-
|
1311
|
-
|
1312
|
-
|
1313
|
-
|
1314
|
-
|
1315
|
-
|
1316
|
-
|
1317
|
-
|
1318
|
-
|
1319
|
-
|
1320
|
-
|
1321
|
-
|
1322
|
-
|
1323
|
-
|
1324
|
-
|
1325
|
-
|
1326
|
-
|
1327
|
-
|
1328
|
-
|
1329
|
-
|
1330
|
-
|
1331
|
-
|
1332
|
-
|
1333
|
-
|
1334
|
-
|
1335
|
-
|
1336
|
-
|
1337
|
-
|
1338
|
-
|
1339
|
-
|
1340
|
-
|
1341
|
-
|
1342
|
-
|
1343
|
-
|
1218
|
+
# split cells to 2-d array
|
1219
|
+
data = str.split("\n").map{|x| x.split('|')}
|
1220
|
+
caption = '' #Inserted by set.minami 2013-04-20
|
1221
|
+
captionName = ''
|
1222
|
+
if /#{CaptionRegexp}/ =~ data[0].first then
|
1223
|
+
caption = if $1.nil? then '' else $1 end
|
1224
|
+
captionName = if $3.nil? then '' else $3 end
|
1225
|
+
data.shift
|
1226
|
+
end #Inserted by set.minami 2013-04-20
|
1227
|
+
data.each do |row|
|
1228
|
+
if row.first.nil? then next end
|
1229
|
+
# cut left space
|
1230
|
+
row.first.lstrip!
|
1231
|
+
|
1232
|
+
# cut when optional side-borders is included
|
1233
|
+
row.shift if row.first.empty?
|
1234
|
+
end
|
1235
|
+
|
1236
|
+
column_attrs = []
|
1237
|
+
|
1238
|
+
re = ''
|
1239
|
+
re << if captionName == '' then
|
1240
|
+
"<table>\n"
|
1241
|
+
else
|
1242
|
+
"<table id=\"#{captionName}\">\n"
|
1243
|
+
end
|
1244
|
+
re << "<caption>#{caption}</caption>\n"
|
1245
|
+
#Insert by set.minami 2013-04-20
|
1246
|
+
|
1247
|
+
# head is exist?
|
1248
|
+
|
1249
|
+
#if !data[1].nil? && data[1].last =~ /\s+/ then
|
1250
|
+
### p data
|
1251
|
+
# data.each{|d|
|
1252
|
+
# d.pop
|
1253
|
+
# }
|
1254
|
+
#end #Insert by set.minami @ 2013-04-29
|
1255
|
+
if data.size >= 3 and data[1].all?{|x| x =~ TableSeparatorCellRegexp} then
|
1256
|
+
head_row = data.shift
|
1257
|
+
separator_row = data.shift
|
1258
|
+
|
1259
|
+
separator_row.each do |cell|
|
1260
|
+
cell.match TableSeparatorCellRegexp
|
1261
|
+
left = $1; right = $2
|
1262
|
+
|
1263
|
+
if left and right then
|
1264
|
+
column_attrs << ' style="text-align: center"'
|
1265
|
+
elsif right then
|
1266
|
+
column_attrs << ' style="text-align: right"'
|
1267
|
+
elsif left then
|
1268
|
+
column_attrs << ' style="text-align: left"'
|
1269
|
+
else
|
1270
|
+
column_attrs << ''
|
1271
|
+
end
|
1272
|
+
end
|
1273
|
+
|
1274
|
+
re << "\t<thead><tr>\n"
|
1275
|
+
head_row.each_with_index do |cell, i|
|
1276
|
+
re << "\t\t<th#{column_attrs[i]}>#{apply_span_transforms(cell.strip, rs)}</th>\n"
|
1277
|
+
end
|
1278
|
+
re << "\t</tr></thead>\n"
|
1279
|
+
end
|
1280
|
+
|
1281
|
+
# data row
|
1282
|
+
re << "\t<tbody>\n"
|
1283
|
+
data.each do |row|
|
1284
|
+
re << "\t\t<tr>\n"
|
1285
|
+
row.each_with_index do |cell, i|
|
1286
|
+
re << "\t\t\t<td#{column_attrs[i]}>#{apply_span_transforms(cell.strip, rs)}</td>\n"
|
1287
|
+
end
|
1288
|
+
re << "\t\t</tr>\n"
|
1289
|
+
end
|
1290
|
+
re << "\t</tbody>\n"
|
1291
|
+
|
1292
|
+
re << "</table>\n"
|
1293
|
+
|
1294
|
+
re
|
1344
1295
|
end
|
1345
1296
|
|
1346
|
-
|
1297
|
+
|
1347
1298
|
### Transform any Markdown-style horizontal rules in a copy of the specified
|
1348
1299
|
### +str+ and return it.
|
1349
1300
|
def transform_hrules( str, rs )
|
data/lib/AoBane/utilities.rb
CHANGED
@@ -15,6 +15,66 @@ module Utilities
|
|
15
15
|
$MAX_H = 6
|
16
16
|
@@log = Logger.new(STDOUT)
|
17
17
|
@@log.level = Logger::WARN
|
18
|
+
|
19
|
+
def transformSpecialChar(text)
|
20
|
+
#output = text.split("\n")
|
21
|
+
specialChar = {
|
22
|
+
"\-\-" => "—",
|
23
|
+
"<=" => "⇔",
|
24
|
+
"<\->" => "↔",
|
25
|
+
"\->" =>"→",
|
26
|
+
"<\-" =>"←",
|
27
|
+
"=>" => "⇒",
|
28
|
+
"<=" => "⇐",
|
29
|
+
"\|\|\^" => "⇑",
|
30
|
+
"\|\|\/" => "⇓",
|
31
|
+
"\|\/" => "↓",
|
32
|
+
"\|\^" => "↑",
|
33
|
+
">>" => "»",
|
34
|
+
"\<\<" => "«",
|
35
|
+
"+_" => "±",
|
36
|
+
"!=" => "≠",
|
37
|
+
"~~" => "≈",
|
38
|
+
"~=" => "≅",
|
39
|
+
"<_" => "≤",
|
40
|
+
">_" => "&ge",
|
41
|
+
"\|FA" => "∀",
|
42
|
+
"\|EX" => "∃",
|
43
|
+
"\|=" => "≡",
|
44
|
+
"\(\+\)" => "⊕",
|
45
|
+
"\(\-\)" => "⊖",
|
46
|
+
"\(X\)" => "⊗",
|
47
|
+
"\(c\)" => "©",
|
48
|
+
"\(R\)" =>"®",
|
49
|
+
"\(SS\)" => "§",
|
50
|
+
"\(TM\)" => "™",
|
51
|
+
"!in" => "∉"}
|
52
|
+
|
53
|
+
entry = '(?!\-+\|)\-\-|<=>|<\->|\->|<\-|=>|<=|\|\^|\|\|\/|\|\/|\^|\>\>|\<\<|' +
|
54
|
+
'\+_|!=|~~|~=|>_|<_|\|FA|\|EX|\|=|\(\+\)|\(\-\)|\(X\)|\(c\)|\(R\)|\(SS\)|\(TM\)|!in'
|
55
|
+
|
56
|
+
|
57
|
+
|
58
|
+
zoneofPre = ["<pre>","<\/pre>"]
|
59
|
+
dup = []
|
60
|
+
doc = text.split("\n")
|
61
|
+
index = 0
|
62
|
+
doc.each{
|
63
|
+
if doc[index] =~ /#{zoneofPre[0]}/i
|
64
|
+
until doc[index] =~ /#{zoneofPre[1]}/i
|
65
|
+
dup[index] = doc[index]
|
66
|
+
index += 1
|
67
|
+
end
|
68
|
+
dup[index] = doc[index]
|
69
|
+
else
|
70
|
+
dup[index] = if !doc[index].nil? then doc[index].gsub(/#{entry}/,specialChar) end
|
71
|
+
index += 1
|
72
|
+
end
|
73
|
+
}
|
74
|
+
|
75
|
+
#Insert by set.minami
|
76
|
+
return dup.join("\n")
|
77
|
+
end
|
18
78
|
###Insert Timestamp#################################################################
|
19
79
|
def insertTimeStamp(text)
|
20
80
|
if /\$date/i =~ text then
|
@@ -78,37 +138,81 @@ def abbrPostProcess(text)
|
|
78
138
|
end
|
79
139
|
end
|
80
140
|
###paling proccessing##########################################################
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
141
|
+
StartDivMark =
|
142
|
+
'[\/\|]\-:b=(\d+?)\s(\w+?\s\w+?\s)' + # $1 $2
|
143
|
+
'(w=(\w+?)\s)??' + # $3 $4
|
144
|
+
'(h=(\w+?)\s)??' + # $5 $6
|
145
|
+
'(bg=((#)??\w+?)\s)??' + # $7 $8 $9
|
146
|
+
'(lh=([\w%]+?)\s)??' + # $10 $11
|
147
|
+
'(mg=(\d+?)\s)??' + # $12 $13
|
148
|
+
'(al=(\w+?)\s)??' + # $14 $15
|
149
|
+
'(rad=(\d+?))\-+[\|\/]' + # $16 $17
|
150
|
+
'({(.+?)})??' # $18 $19
|
151
|
+
EndDivMark = '\|\_+\|'
|
152
|
+
AllChar = '\w\s\!@\#\$%\^&\*\(\)\-\+=\[\{\}\];:\'"<>\,\.\/\?\\|'
|
153
|
+
InnerRepresent = ["@","/"]
|
154
|
+
|
155
|
+
def preProcFence(text,startPoint)
|
156
|
+
output = []
|
157
|
+
dup = []
|
158
|
+
isInFence = [false]
|
159
|
+
linePointer = 0
|
160
|
+
exclude = '(?!^\|_+|\|\-:)^\||^[#]{1,6}\s|^\s+\*|^\s+\-'
|
161
|
+
if !text.instance_of?(Array) then output = text.split("\n") else output = text end
|
162
|
+
|
92
163
|
output.each_with_index{|line,index|
|
93
|
-
if
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
164
|
+
if index < startPoint then next
|
165
|
+
elsif /#{StartDivMark}/ =~ line then
|
166
|
+
start = line.split("|")
|
167
|
+
dup << "/" + start[1] + "/"
|
168
|
+
if start.size >= 2 then dup << start[2..-1] end
|
169
|
+
isInFence.push(true)
|
170
|
+
next
|
171
|
+
elsif /#{EndDivMark}/ =~ line then
|
172
|
+
dup << '/@/'
|
173
|
+
next
|
174
|
+
else
|
175
|
+
if isInFence.last then
|
176
|
+
if dup.last.nil? then
|
177
|
+
dup << compressWSpaces(line)
|
178
|
+
else
|
179
|
+
if dup.last =~ /#{exclude}/i || line =~ /#{exclude}/i then
|
180
|
+
if line =~ /#{exclude}/i then dup << line
|
181
|
+
else dup << compressWSpaces(line) end
|
182
|
+
else
|
183
|
+
if line == "" then
|
184
|
+
dup << '<br />'
|
185
|
+
else
|
186
|
+
dup.last << compressWSpaces(line)
|
187
|
+
next
|
188
|
+
end
|
189
|
+
end
|
106
190
|
end
|
191
|
+
else
|
192
|
+
dup << if !line.nil? then line else "" end
|
193
|
+
end
|
107
194
|
end
|
108
|
-
end #if
|
109
195
|
}
|
110
|
-
return
|
111
|
-
end
|
196
|
+
return dup
|
197
|
+
end
|
198
|
+
|
199
|
+
def compressWSpaces(line)
|
200
|
+
dup = if line =~ /\s+$/ then line.strip + " " else line end
|
201
|
+
return dup
|
202
|
+
end
|
203
|
+
|
204
|
+
|
205
|
+
# Pattern to match strong emphasis in Markdown text
|
206
|
+
BoldRegexp = %r{ (\*\*) (\S|\S.*?\S) \1 }x
|
207
|
+
|
208
|
+
# Pattern to match normal emphasis in Markdown text
|
209
|
+
ItalicRegexp = %r{ (\*) (\S|\S.*?\S) \1 }x
|
210
|
+
|
211
|
+
def italic_and_bold(str)
|
212
|
+
str.
|
213
|
+
gsub( BoldRegexp, %{<strong>\\2</strong>} ).
|
214
|
+
gsub( ItalicRegexp, %{<em>\\2</em>} )
|
215
|
+
end
|
112
216
|
|
113
217
|
def isDigit(str)
|
114
218
|
if /\d+/ =~ str then
|
@@ -118,7 +222,7 @@ def isDigit(str)
|
|
118
222
|
end
|
119
223
|
end
|
120
224
|
|
121
|
-
def
|
225
|
+
def postProcFence(text)
|
122
226
|
output = text.split("\n")
|
123
227
|
output.each_with_index{|line,index|
|
124
228
|
if /#{StartDivMark}/ =~ line then
|
@@ -127,22 +231,33 @@ def postPaling(text)
|
|
127
231
|
if $6.nil? then '' else 'height:' + if Utilities::isDigit($6) then $6 + 'px;' else $6 + ';' end end +
|
128
232
|
if $8.nil? then '' else 'background-color:' + $8 + ';' end +
|
129
233
|
if $11.nil? then 'line-height:100%;' else 'line-height:' + $11 + ';' end +
|
234
|
+
if $13.nil? then '' else 'margin:' + $13 + 'px;' end +
|
235
|
+
if $15.nil? then '' else 'text-align:' + $15 + ';' end +
|
130
236
|
'border-radius:' +
|
131
|
-
if $
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
237
|
+
if $16.nil? then '' else $16 end + 'px;"' +
|
238
|
+
if $19.nil? then '' else 'class="#{$19}"' end +
|
239
|
+
'>'
|
240
|
+
output.each_with_index{|l,i = index|
|
241
|
+
if /\/@\// =~ l then
|
242
|
+
output[i] = '</div>'
|
243
|
+
index = i
|
136
244
|
break
|
137
245
|
end
|
138
|
-
|
246
|
+
i += 1
|
247
|
+
}
|
139
248
|
end
|
140
249
|
}
|
141
250
|
return output.join("\n")
|
142
|
-
end #def
|
251
|
+
end #def postProcFence
|
252
|
+
|
253
|
+
### Initialize a Stack class ############################
|
254
|
+
def initNumberStack
|
255
|
+
Stack.destroy
|
256
|
+
end
|
257
|
+
|
143
258
|
### Return a caluculated section number and string.############################
|
144
|
-
def calcSectionNo(startNo=1, range=0, size=0, dep=1, str='')
|
145
|
-
stack = Stack.instance
|
259
|
+
def calcSectionNo(startNo=1, range=0, size=0, dep=1, str='', outerStack)
|
260
|
+
stack = outerStack #Stack.instance
|
146
261
|
i = dep.to_i
|
147
262
|
counter = 0
|
148
263
|
numberStr = [["%",i,counter],["%%",i,counter],["%%%",i,counter],
|
@@ -154,25 +269,30 @@ end #def postPailing
|
|
154
269
|
@@log.error("AoBane Syntax Error: Header shortage!")
|
155
270
|
raise SyntaxError,"Headder shortage!"
|
156
271
|
else
|
157
|
-
(1..
|
158
|
-
|
272
|
+
(1..headNo).each_with_index{|k| #h1 to h6
|
273
|
+
p k
|
159
274
|
if (k < headNo) then
|
160
|
-
|
161
|
-
if k >= stack.
|
275
|
+
p "+++" # #{k},#{stack.sizeofStack}"
|
276
|
+
if k >= stack.size then
|
162
277
|
stack.push(numberStr[k])
|
163
278
|
end
|
164
|
-
elsif
|
165
|
-
|
279
|
+
elsif k == headNo then
|
280
|
+
p "---"
|
281
|
+
if stack.size == 0 then
|
166
282
|
stack.push(numberStr[k-1])
|
167
283
|
end
|
168
|
-
if
|
169
|
-
|
284
|
+
if stack.last[$S_SLOT].size > numberStr[k-1][$S_SLOT].size then
|
285
|
+
loop do
|
286
|
+
stack.pop
|
287
|
+
if stack.last[$S_SLOT].size == numberStr[k-1][$S_SLOT].size then
|
288
|
+
break
|
289
|
+
end
|
290
|
+
end
|
170
291
|
end
|
171
292
|
else
|
172
|
-
|
293
|
+
p "~~~~"
|
173
294
|
stack.push(numberStr[k])
|
174
295
|
end #if...elsif
|
175
|
-
stack.dump
|
176
296
|
}
|
177
297
|
=begin
|
178
298
|
else
|
@@ -181,22 +301,35 @@ end #def postPailing
|
|
181
301
|
end #case
|
182
302
|
=end
|
183
303
|
end #if...else
|
184
|
-
|
185
|
-
number =
|
304
|
+
p "$$$$"
|
305
|
+
number = ""
|
306
|
+
stack.each { |item|
|
307
|
+
if item == stack.last then
|
308
|
+
item[$N_SLOT] += item[$C_SLOT]
|
309
|
+
item[$C_SLOT] = 1
|
310
|
+
end
|
311
|
+
number << (item[$N_SLOT]).to_s + '.'
|
312
|
+
@@log.debug number
|
313
|
+
}
|
314
|
+
|
186
315
|
h = "#"
|
187
316
|
times = startNo.to_i + size.to_i - 1
|
188
317
|
return h*times + number + str
|
189
318
|
end #def
|
190
319
|
|
320
|
+
module_function:compressWSpaces
|
321
|
+
module_function:italic_and_bold
|
322
|
+
module_function:transformSpecialChar
|
191
323
|
module_function:getNowTime
|
192
324
|
module_function:insertTimeStamp
|
193
325
|
module_function:abbrPreProcess
|
194
326
|
module_function:abbrPostProcess
|
195
327
|
module_function:storeAbbr
|
328
|
+
module_function:initNumberStack
|
196
329
|
module_function:calcSectionNo
|
197
|
-
module_function:
|
330
|
+
module_function:preProcFence
|
198
331
|
module_function:isDigit
|
199
|
-
module_function:
|
332
|
+
module_function:postProcFence
|
200
333
|
#############################################################################
|
201
334
|
end
|
202
335
|
|
@@ -234,16 +367,7 @@ class Stack
|
|
234
367
|
end
|
235
368
|
|
236
369
|
def insertNumber
|
237
|
-
|
238
|
-
@stack.each { |item|
|
239
|
-
if isTopofStack(item) then
|
240
|
-
item[$N_SLOT] += item[$C_SLOT]
|
241
|
-
item[$C_SLOT] = 1
|
242
|
-
end
|
243
|
-
str << (item[$N_SLOT]).to_s + '.'
|
244
|
-
@@log.debug str
|
245
|
-
}
|
246
|
-
return str
|
370
|
+
# return str
|
247
371
|
end
|
248
372
|
|
249
373
|
def evalStackTop
|
@@ -268,9 +392,15 @@ class Stack
|
|
268
392
|
end
|
269
393
|
end
|
270
394
|
|
271
|
-
def dump
|
395
|
+
def self.dump
|
272
396
|
@@log.debug("Stack DUMP:#{@stack}")
|
273
397
|
end
|
274
398
|
|
399
|
+
def self.destroy
|
400
|
+
if @stack.nil? then @stack = [] else @stack.clear end
|
401
|
+
p @stack
|
402
|
+
@sp = 0
|
403
|
+
end
|
404
|
+
|
275
405
|
end
|
276
406
|
|
data/lib/AoBane/version.rb
CHANGED
data/test/Test.html
CHANGED
@@ -8,7 +8,22 @@
|
|
8
8
|
|
9
9
|
<ul>
|
10
10
|
<li><a href="#bfheader-0cbc6611f5540bd0809a388dc95a615b" rel="toc">Test</a>
|
11
|
-
|
11
|
+
<ul>
|
12
|
+
<li><a href="#bfheader-f2b20ed74117a2bda0525514a898e0e0" rel="toc">1. →1.</a>
|
13
|
+
<ul>
|
14
|
+
<li><a href="#bfheader-4e7b97bf9819709771ba6c716991e3ef" rel="toc">1.1. →1.1.</a></li>
|
15
|
+
<li><a href="#bfheader-a4940c538c7be252daf50cc4237617ce" rel="toc">1.2. →1.2.</a>
|
16
|
+
<ul>
|
17
|
+
<li><a href="#bfheader-b162ec5d01c9e20e3551a5b96fa9f650" rel="toc">1.2.1. →1.2.1.</a></li>
|
18
|
+
<li><a href="#bfheader-584eba1c1d454adaca0318b151a2dcb2" rel="toc">1.2.2. →1.2.2.</a></li>
|
19
|
+
</ul></li>
|
20
|
+
<li><a href="#bfheader-9868f67e1aa2e9e7d90a9a4846b8558f" rel="toc">1.3. →1.3.</a></li>
|
21
|
+
</ul></li>
|
22
|
+
<li><a href="#bfheader-bd5a30e45e46b39eca67398f88312a1b" rel="toc">2. →2.</a>
|
23
|
+
<ul>
|
24
|
+
<li><a href="#bfheader-acbd18db4cc2f85cedef654fccc4a4d8" rel="toc">foo</a></li>
|
25
|
+
</ul></li>
|
26
|
+
</ul></li>
|
12
27
|
</ul>
|
13
28
|
|
14
29
|
<h1 id="bfheader-0cbc6611f5540bd0809a388dc95a615b">Test</h1>
|
@@ -19,26 +34,43 @@
|
|
19
34
|
|
20
35
|
<p>aa » «</p>
|
21
36
|
|
22
|
-
<
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
<
|
31
|
-
abccccc</p></li>
|
32
|
-
</ol>
|
37
|
+
<h2 id="bfheader-f2b20ed74117a2bda0525514a898e0e0">1. →1.</h2>
|
38
|
+
|
39
|
+
<h3 id="bfheader-4e7b97bf9819709771ba6c716991e3ef">1.1. →1.1.</h3>
|
40
|
+
|
41
|
+
<h3 id="bfheader-a4940c538c7be252daf50cc4237617ce">1.2. →1.2.</h3>
|
42
|
+
|
43
|
+
<h4 id="bfheader-b162ec5d01c9e20e3551a5b96fa9f650">1.2.1. →1.2.1.</h4>
|
44
|
+
|
45
|
+
<h4 id="bfheader-584eba1c1d454adaca0318b151a2dcb2">1.2.2. →1.2.2.</h4>
|
33
46
|
|
34
|
-
<
|
47
|
+
<h3 id="bfheader-9868f67e1aa2e9e7d90a9a4846b8558f">1.3. →1.3.</h3>
|
48
|
+
|
49
|
+
<p>abcdefg</p>
|
50
|
+
|
51
|
+
<h2 id="bfheader-bd5a30e45e46b39eca67398f88312a1b">2. →2.</h2>
|
52
|
+
|
53
|
+
<p>abccccc</p>
|
54
|
+
|
55
|
+
<div style="border:2px solid gray ;width:300px;line-height:100%;border-radius:rad=10px;">
|
35
56
|
|
36
57
|
<h3 id="bfheader-acbd18db4cc2f85cedef654fccc4a4d8">foo</h3>
|
37
58
|
|
38
|
-
<p>
|
59
|
+
<p>barasdf
|
60
|
+
<br />
|
61
|
+
<div style="border:2px solid gray ;width:200px;line-height:100%;border-radius:rad=10px;">
|
62
|
+
aaaaaa
|
63
|
+
cccc
|
64
|
+
<div style="border:2px solid gray ;width:100px;line-height:100%;border-radius:rad=10px;">
|
65
|
+
bbbbbb
|
66
|
+
</div>
|
67
|
+
</div>
|
68
|
+
<div style="border:2px solid gray ;width:200px;line-height:100%;border-radius:rad=10px;">
|
69
|
+
aaaaaa
|
70
|
+
</div>
|
71
|
+
<br />
|
72
|
+
<br />
|
39
73
|
</div>
|
40
|
-
|
41
|
-
<p><font color="#ff0000" face="" size="5">foo</font></p>
|
42
74
|
|
43
75
|
</body>
|
44
76
|
</html>
|
data/test/Test.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
{nrange:h2-h5}
|
2
2
|
{toc:h1-h6}
|
3
3
|
|
4
4
|
Test
|
@@ -28,10 +28,24 @@ abcdefg
|
|
28
28
|
abccccc
|
29
29
|
|
30
30
|
|-:b=2 solid gray w=300 rad=10-----------------|
|
31
|
-
|
32
|
-
|
33
|
-
|
31
|
+
### foo
|
32
|
+
bar
|
33
|
+
asdf
|
34
|
+
|
35
|
+
|-:b=2 solid gray w=200 rad=10-----------------|
|
36
|
+
aaaaaa
|
37
|
+
cccc
|
38
|
+
|-:b=2 solid gray w=100 rad=10-----------------|
|
39
|
+
bbbbbb
|
40
|
+
|____________________________________|
|
41
|
+
|__________________________________________|
|
42
|
+
kkkkkk
|
43
|
+
|-:b=2 solid gray w=200 rad=10-----------------|
|
44
|
+
aaaaaa
|
45
|
+
|__________________________________________|
|
46
|
+
|
34
47
|
|
48
|
+
|__________________________________________|
|
35
49
|
*[foo](#ff0000/5)
|
36
50
|
|
37
51
|
|
data/test/test2.html
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
5
|
+
<title>Test</title>
|
6
|
+
</head>
|
7
|
+
<body>
|
8
|
+
|
9
|
+
<h1 id="bfheader-0cbc6611f5540bd0809a388dc95a615b">Test</h1>
|
10
|
+
|
11
|
+
<h1 id="bfheader-afbc53b5508660ebc55ef0e9f6b92fc4">1. aaa</h1>
|
12
|
+
|
13
|
+
<h2 id="bfheader-5de9e1fcd9cd2972a7eb946c7bf542c6">1.1. abc</h2>
|
14
|
+
|
15
|
+
<h3 id="bfheader-27b4fea764f25be818fbddc9644dacda">1.1.1. kkkk</h3>
|
16
|
+
|
17
|
+
<h4 id="bfheader-9a36ccc535c67e888612b6c40b377ac0">1.1.1.1. www</h4>
|
18
|
+
|
19
|
+
<h1 id="bfheader-7ce41b8fd4205ac8204851ebda7996cc">2. qqq</h1>
|
20
|
+
|
21
|
+
<h2 id="bfheader-76627366ec5ded7ed3f5dd8bffbab2a0">2.1. rrr</h2>
|
22
|
+
|
23
|
+
<p>cccc</p>
|
24
|
+
|
25
|
+
<h3 id="bfheader-a87f63d7e810f249c861814cea02f2af">2.1.1. rtttt</h3>
|
26
|
+
|
27
|
+
<p>aaaa</p>
|
28
|
+
|
29
|
+
</body>
|
30
|
+
</html>
|
data/test/test2.md
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: AoBane
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.15
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-05-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: math_ml
|
@@ -69,6 +69,9 @@ extra_rdoc_files: []
|
|
69
69
|
files:
|
70
70
|
- .gitignore
|
71
71
|
- AoBane.gemspec
|
72
|
+
- AoBane.icns
|
73
|
+
- AoBane.jpg
|
74
|
+
- AoBane.tiff
|
72
75
|
- Gemfile
|
73
76
|
- LICENSE.txt
|
74
77
|
- README.md
|
@@ -81,6 +84,7 @@ files:
|
|
81
84
|
- lib/AoBane/version.rb
|
82
85
|
- test/Test.html
|
83
86
|
- test/Test.md
|
87
|
+
- test/test2.html
|
84
88
|
- test/test2.md
|
85
89
|
homepage: https://github.com/setminami/AoBane
|
86
90
|
licenses:
|
@@ -110,4 +114,5 @@ summary: You can generate complex HTML with simple way.
|
|
110
114
|
test_files:
|
111
115
|
- test/Test.html
|
112
116
|
- test/Test.md
|
117
|
+
- test/test2.html
|
113
118
|
- test/test2.md
|