YkLib 0.1.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.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.rspec +3 -0
- data/.travis.yml +6 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +7 -0
- data/Gemfile.lock +34 -0
- data/LICENSE.txt +21 -0
- data/README.md +44 -0
- data/Rakefile +6 -0
- data/YkLib.gemspec +29 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/YkLib/Yk/__advance__.rb +151 -0
- data/lib/YkLib/Yk/__defun__.rb +44 -0
- data/lib/YkLib/Yk/__hook__.rb +244 -0
- data/lib/YkLib/Yk/__minmax__.rb +123 -0
- data/lib/YkLib/Yk/__stdlog.rb +329 -0
- data/lib/YkLib/Yk/adhocLiterals/email.rb +119 -0
- data/lib/YkLib/Yk/adhocLiterals/path.rb +402 -0
- data/lib/YkLib/Yk/adhocLiterals/tag.rb +19 -0
- data/lib/YkLib/Yk/adhocLiterals/url.rb +36 -0
- data/lib/YkLib/Yk/adhocLiterals.rb +199 -0
- data/lib/YkLib/Yk/auto_escseq.rb +5 -0
- data/lib/YkLib/Yk/auto_pstore.rb +179 -0
- data/lib/YkLib/Yk/bsearch.rb +120 -0
- data/lib/YkLib/Yk/clambda.rb +309 -0
- data/lib/YkLib/Yk/confLine.rb +423 -0
- data/lib/YkLib/Yk/create_tty_width_available.rb +24 -0
- data/lib/YkLib/Yk/crypt.rb +26 -0
- data/lib/YkLib/Yk/debug2 +1 -0
- data/lib/YkLib/Yk/debug2.rb +473 -0
- data/lib/YkLib/Yk/debugout.rb +139 -0
- data/lib/YkLib/Yk/email_tz.rb +533 -0
- data/lib/YkLib/Yk/enum_expect.rb +170 -0
- data/lib/YkLib/Yk/errlog.rb +5 -0
- data/lib/YkLib/Yk/escseq.rb +59 -0
- data/lib/YkLib/Yk/eval_alt.rb +281 -0
- data/lib/YkLib/Yk/expector.rb +93 -0
- data/lib/YkLib/Yk/fetch.rb +556 -0
- data/lib/YkLib/Yk/fetch_old.rb +290 -0
- data/lib/YkLib/Yk/fib.rb +158 -0
- data/lib/YkLib/Yk/file_aux.rb +843 -0
- data/lib/YkLib/Yk/file_aux2.rb +919 -0
- data/lib/YkLib/Yk/file_aux_old.rb +160 -0
- data/lib/YkLib/Yk/filemod.rb +19 -0
- data/lib/YkLib/Yk/force_escseq.rb +3 -0
- data/lib/YkLib/Yk/generator__.rb +144 -0
- data/lib/YkLib/Yk/generator__.rb.org +139 -0
- data/lib/YkLib/Yk/indenter/argless_case.rb +46 -0
- data/lib/YkLib/Yk/indenter/each_token.rb +671 -0
- data/lib/YkLib/Yk/indenter/free_case.rb +313 -0
- data/lib/YkLib/Yk/indenter/if_less.rb +53 -0
- data/lib/YkLib/Yk/indenter/independent_ensure.rb +23 -0
- data/lib/YkLib/Yk/indenter/independent_rescue.rb +23 -0
- data/lib/YkLib/Yk/indenter/operand_circumflex.rb +0 -0
- data/lib/YkLib/Yk/indenter/operand_period.rb +16 -0
- data/lib/YkLib/Yk/indenter/parenless_and.rb +37 -0
- data/lib/YkLib/Yk/indenter/post_test.rb +48 -0
- data/lib/YkLib/Yk/indenter/token.rb +1525 -0
- data/lib/YkLib/Yk/indenter.rb +1382 -0
- data/lib/YkLib/Yk/inot.rb +265 -0
- data/lib/YkLib/Yk/intf.rb +815 -0
- data/lib/YkLib/Yk/io_aux.rb +1332 -0
- data/lib/YkLib/Yk/ioctl.rb +60 -0
- data/lib/YkLib/Yk/ipcc.rb +87 -0
- data/lib/YkLib/Yk/ipcountry.rb +207 -0
- data/lib/YkLib/Yk/ipv4adr.rb +318 -0
- data/lib/YkLib/Yk/localmail.rb +276 -0
- data/lib/YkLib/Yk/method_chain.rb +359 -0
- data/lib/YkLib/Yk/misc_tz.rb +1716 -0
- data/lib/YkLib/Yk/missing_method.rb +50 -0
- data/lib/YkLib/Yk/mojiConv.rb +257 -0
- data/lib/YkLib/Yk/nostdlog.rb +4 -0
- data/lib/YkLib/Yk/on_marshal.rb +20 -0
- data/lib/YkLib/Yk/overrider.rb +47 -0
- data/lib/YkLib/Yk/path.rb +293 -0
- data/lib/YkLib/Yk/path_aux.rb +883 -0
- data/lib/YkLib/Yk/path_aux_alt.rb +0 -0
- data/lib/YkLib/Yk/path_rep.rb +1267 -0
- data/lib/YkLib/Yk/pg_setup.rb +917 -0
- data/lib/YkLib/Yk/procinfo.rb +314 -0
- data/lib/YkLib/Yk/proclist.rb +492 -0
- data/lib/YkLib/Yk/property.rb +863 -0
- data/lib/YkLib/Yk/ranger.rb +606 -0
- data/lib/YkLib/Yk/resolv_tz.rb +88 -0
- data/lib/YkLib/Yk/rlprompt.rb +73 -0
- data/lib/YkLib/Yk/rootexec.rb +48 -0
- data/lib/YkLib/Yk/rpm-packageproxy.rb +784 -0
- data/lib/YkLib/Yk/rpm-packageproxy2.rb +1430 -0
- data/lib/YkLib/Yk/rwhen.rb +21 -0
- data/lib/YkLib/Yk/selector.rb +124 -0
- data/lib/YkLib/Yk/set.rb +170 -0
- data/lib/YkLib/Yk/shellquote.rb +300 -0
- data/lib/YkLib/Yk/sio.rb +1001 -0
- data/lib/YkLib/Yk/sio0.rb +835 -0
- data/lib/YkLib/Yk/sio_aux.rb +1524 -0
- data/lib/YkLib/Yk/sio_inot.rb +86 -0
- data/lib/YkLib/Yk/sock_aux.rb +42 -0
- data/lib/YkLib/Yk/spipe.rb +843 -0
- data/lib/YkLib/Yk/sql_table.rb +565 -0
- data/lib/YkLib/Yk/stdlog.rb +4 -0
- data/lib/YkLib/Yk/syscommand.rb +173 -0
- data/lib/YkLib/Yk/sysinit.rb +75 -0
- data/lib/YkLib/Yk/ttyFontWidth.rb +46113 -0
- data/lib/YkLib/Yk/tty_char.dump +0 -0
- data/lib/YkLib/Yk/tty_char.rb +47 -0
- data/lib/YkLib/Yk/tty_char_create.rb +437031 -0
- data/lib/YkLib/Yk/tty_char_static.rb +437016 -0
- data/lib/YkLib/Yk/tty_rewrite.rb +142 -0
- data/lib/YkLib/Yk/tty_str.rb +461 -0
- data/lib/YkLib/Yk/tty_width.dat.rb +114 -0
- data/lib/YkLib/Yk/tty_width.rb +180 -0
- data/lib/YkLib/Yk/tty_width_available +569 -0
- data/lib/YkLib/Yk/tty_width_list +0 -0
- data/lib/YkLib/Yk/tty_width_list.linux +280 -0
- data/lib/YkLib/Yk/tty_width_list.windows +324 -0
- data/lib/YkLib/Yk/tz_tty +0 -0
- data/lib/YkLib/Yk/tz_tty.rb +0 -0
- data/lib/YkLib/Yk/uprepos.rb +94 -0
- data/lib/YkLib/Yk/userinfo.rb +91 -0
- data/lib/YkLib/Yk/with.rb +109 -0
- data/lib/YkLib/version.rb +3 -0
- data/lib/YkLib.rb +6 -0
- metadata +170 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
require 'Yk/__hook__'
|
|
4
|
+
|
|
5
|
+
module MissingMethod
|
|
6
|
+
def initialize_missing_method o, m
|
|
7
|
+
@obj__ = o
|
|
8
|
+
@method__ = m
|
|
9
|
+
end
|
|
10
|
+
def call *args, **opts, &bl
|
|
11
|
+
if @method__ =~ /[^a-zA-Z0-9_?]/ && !bl && args.size <= 1 && opts.size == 0
|
|
12
|
+
if args.size == 1
|
|
13
|
+
eval("@obj__ #{@method__} args[0]")
|
|
14
|
+
elsif args.size == 0
|
|
15
|
+
eval("#{@method__} @obj__")
|
|
16
|
+
end
|
|
17
|
+
else
|
|
18
|
+
eval("@obj__.#{@method__}(*args, **opts, &bl)")
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
def [] *args
|
|
22
|
+
call *args
|
|
23
|
+
end
|
|
24
|
+
def arity
|
|
25
|
+
raise NotImplementedError.new("MissingMethod#arity is not implemented")
|
|
26
|
+
end
|
|
27
|
+
def unbind
|
|
28
|
+
raise NotImplementedError.new("MissingMethod#unbound is not implemented")
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class Object
|
|
34
|
+
alias_method :method_____, :method
|
|
35
|
+
def method (n)
|
|
36
|
+
begin
|
|
37
|
+
method_____(n)
|
|
38
|
+
rescue NameError
|
|
39
|
+
prx = method_____(:__id__)
|
|
40
|
+
prx.extend MissingMethod
|
|
41
|
+
prx.initialize_missing_method self, n
|
|
42
|
+
prx.__hook__ :inspect do |org|
|
|
43
|
+
org.call.sub(/#[^#]+$/, "##{n}")
|
|
44
|
+
end
|
|
45
|
+
prx
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
module MojiKonv
|
|
4
|
+
ZhKanjiList =
|
|
5
|
+
'丑专业丛东丝丢两严丧个丰临为丽举么义乌乐乔乘习乡书买亏云亚产亩亲' +
|
|
6
|
+
'亿仅仆从仑仓仪们价仿众优伙伞伟传伤伦伪佛你佣侠侣侥侦侧侨俩俭债值' +
|
|
7
|
+
'倾假偿储儿兑兰关兴养兽冈册军农冯冰冲决况冻净凄凉凌减凑凛几凤凭凯' +
|
|
8
|
+
'击凿划刘则刚创删别刽剂剑剥剧剩劝办务动劲劳势勋匀华协单卖卜卢卤卧' +
|
|
9
|
+
'卫卷厂厅历厉压厌厕厢厦厨县叁发变叠只叶叹吁吃吊后吓吕吗吨听启吴呕' +
|
|
10
|
+
'员呛呜咏咙咸响哑哗哟唤啰啸喷嚣团园囱围图圆圈圣场坏块坚坛坝坞坟坠' +
|
|
11
|
+
'垄垒垦垫墙增壤壳壶壹处备复够头夸夹夺奋奖妆妇妈姊娄娇娘娱婴婶孙宁' +
|
|
12
|
+
'实宠审宪宫宽宾对寻导尔尘尝尸层屉屡屿岁岂岗岛岭峦崭巢巩币帅师帐帘' +
|
|
13
|
+
'帜带帮并广庄庆庐库应庙庞废开异弃张弥弯弹强归录彻德忆忧怀态怜总恳' +
|
|
14
|
+
'恶恼悬悯惊惠惧惩惫惭惯愈愤愿懒戏战户扎扑托执扩扫扬扰抚抠抡抢护报' +
|
|
15
|
+
'抬拂拔拜拟拢拣拥拦拧拨择挂挚挠挡挣挤挥捞损捡换捣据捻掷掸掺插揭揽' +
|
|
16
|
+
'搀搁搂搅搜摄摆摇摊撑撵攒收效敌敛斋斩无时旷昙显晋晒晓晕晚暂术朴机' +
|
|
17
|
+
'杀杂权杨杰极构枣枪枫柜柠查栅标栈栋栏树栖样档桥桨桩梦检椭榨樱橱欢' +
|
|
18
|
+
'步歼毁每毕毙毡气氛氢汇汉污汤汹沉沟沥沦沧沪泞泪泻泼泽洁洼浆浇浊' +
|
|
19
|
+
'测济浑浓涂涉涌涛涝涡涣涤润涧涨涩淀渊渐渔渗渴游溃溅溪滚满滤滥滨滩' +
|
|
20
|
+
'澜濒灭灵灶灾灿炮炼烁烂烛烟烦烧烫热焕爱爷牵牺犹狈狞狮狰狱猎猪玛环' +
|
|
21
|
+
'现琐琼瓮电畅畴疏疗疟疮疯痒痪瘪瘫癣皱盏盐监盖盘睁瞒矫矾矿码砖砚砾' +
|
|
22
|
+
'础硅硕确碍碎碱祷祸离秃秆种积秸秽稳稻穗穷窍窑窗窜窝窥竖竞笋笔笼筑' +
|
|
23
|
+
'筛筹签简箩篓篮篱类粤粪粮粹紧纠红纤约级纪纫纬纯纱纲纳纵纷纸纹纺纽' +
|
|
24
|
+
'线练组绅细织终绊绍绎经绑绒结绕绘给络绝绞统绢绣继绩绪续绰绳维绵绷' +
|
|
25
|
+
'绸综绽绿缀缅缆缎缓缔缕编缘缚缝缠缨缩缴网罗罚罢羡翘耸耻聂聋职联聪' +
|
|
26
|
+
'肃肠肤肾肿胀胁胜胶脉脏脐脑脓脸腊腻腾舆舍舰舱艰艳艺节芜芦苇苍苏苹' +
|
|
27
|
+
'范茧荆荐荚荡荣荤荧药莱莲获莹萝萤营萧萨葱蒋蓝蔼蕴藏虏虑虽虾蚀蚁蚂' +
|
|
28
|
+
'蜕蜗蜡蝇蝉蝎衅衔补衬袄袜袭裤裹见观规觅视览觉誊计订认讥讨让训议讯' +
|
|
29
|
+
'记讲讳讶许讹论讼讽设访诀证评诅识诈诉诊词译试诗诚话诞诡询该详诫诬' +
|
|
30
|
+
'语误诱诲说诵请诸诺读诽课谁调谅谆谈谊谋谍谎谐谒谓谚谜谢谣谤谦谨谬' +
|
|
31
|
+
'谭谱谴贝贞负贡财责贤败账货质贩贪贫贬购贮贯贰贱贴贵贷贸费贺贼贾' +
|
|
32
|
+
'贿赁赂赃资赊赋赌赎赏赐赔赖赘赚赛赞赠赡赢赵赶趋跃踪躯车轧轨轩转轮' +
|
|
33
|
+
'软轰轴轻载轿较辅辆辈辉辐辑输辕辖辙辩辫边辽达迁过迈运还这进远违连' +
|
|
34
|
+
'迟迹适选逊递逻遗遥邓邮邻郑酝酱酿醉采释鉴针钉钓钙钝钞钟钠钢钥钦钧' +
|
|
35
|
+
'钩钮钱钳钻钾铁铃铅铆铜铝铡铣铭铲银铸铺链销锁锄锅锈锋锌锐错锚锡锣' +
|
|
36
|
+
'锤锥锦锨锭键锯锰锹锻镀镇镊镐镜镣镰镶长门闪闭问闯闰闲间闷闸闹闺闻' +
|
|
37
|
+
'闽阀阁阅阎阐阔队阳阴阵阶际陆陈陕陨险陷隐隶难雏雕雾霉霸韧韩韵页顶' +
|
|
38
|
+
'顷项顺须顽顾顿颁颂预颅领颇颈颊频颓颖颗题颜额颠颤风飘飞饥饭饮饰饱' +
|
|
39
|
+
'饲饵饶饺饼饿馁馅馆馋馏馒马驮驯驰驱驳驴驶驹驻驼驾骂骄骆骇验骏骑骗' +
|
|
40
|
+
'骚骡骤髓鱼鲁鲜鲤鲸鳖鳞鸟鸡鸣鸥鸦鸭鸯鸳鸵鸽鸿鹃鹅鹊鹏鹤鹰黑默齐齿' +
|
|
41
|
+
'龄龙龟漥';
|
|
42
|
+
|
|
43
|
+
JaKanjiList =
|
|
44
|
+
'醜専業叢東絲丟両厳喪個豊臨為麗挙麽義烏楽喬乗習郷書買虧雲亜産畝親' +
|
|
45
|
+
'億僅僕従侖倉儀們価倣衆優夥傘偉伝傷倫偽仏妳傭俠侶僥偵側僑倆倹債値' +
|
|
46
|
+
'傾仮償儲児兌蘭関興養獣岡冊軍農馮氷沖決況凍浄淒涼淩減湊凜幾鳳憑凱' +
|
|
47
|
+
'撃鑿劃劉則剛創刪別劊剤剣剝劇剰勧辦務働勁労勢勲勻華協単売蔔盧鹵臥' +
|
|
48
|
+
'衛巻廠庁暦厲圧厭廁廂廈廚県三発変畳隻葉嘆籲喫弔後嚇呂嗎噸聴啓呉嘔' +
|
|
49
|
+
'員嗆嗚詠嚨鹹響啞嘩喲喚啰嘯噴囂団園囪囲図円圏聖場壊塊堅壇壩塢墳墜' +
|
|
50
|
+
'壟塁墾墊牆増壌殻壺壱処備復夠頭誇夾奪奮奨粧婦媽姉婁嬌嬢娯嬰嬸孫寧' +
|
|
51
|
+
'実寵審憲宮寛賓対尋導爾塵嘗屍層屜屢嶼歳豈崗島嶺巒嶄巣鞏幣帥師帳簾' +
|
|
52
|
+
'幟帯幫併広荘慶廬庫応廟龐廃開異棄張彌彎弾強帰録徹徳憶憂懐態憐総懇' +
|
|
53
|
+
'悪悩懸憫驚恵懼懲憊慚慣癒憤願懶戯戦戸紮撲託執拡掃揚擾撫摳掄搶護報' +
|
|
54
|
+
'擡払抜拝擬攏揀擁攔擰撥択掛摯撓擋掙擠揮撈損撿換搗拠撚擲撣摻挿掲攬' +
|
|
55
|
+
'攙擱摟攪捜摂擺揺攤撐攆攢収効敵斂斎斬無時曠曇顕晉曬暁暈晩暫術樸機' +
|
|
56
|
+
'殺雑権楊傑極構棗槍楓櫃檸査柵標桟棟欄樹棲様檔橋槳樁夢検橢搾桜櫥歓' +
|
|
57
|
+
'歩殲毀毎畢斃氈気雰氫彙漢汚湯洶沈溝瀝淪滄滬濘涙潟潑沢潔窪漿澆濁' +
|
|
58
|
+
'測済渾濃塗渉湧濤澇渦渙滌潤澗漲渋澱淵漸漁滲渇遊潰濺渓滾満濾濫濱灘' +
|
|
59
|
+
'瀾瀕滅霊竈災燦砲錬爍爛燭煙煩焼燙熱煥愛爺牽犠猶狽獰獅猙獄猟豬瑪環' +
|
|
60
|
+
'現瑣瓊甕電暢疇疎療瘧瘡瘋癢瘓癟癱癬皺盞塩監蓋盤睜瞞矯礬鉱碼磚硯礫' +
|
|
61
|
+
'礎矽碩確礙砕堿禱禍離禿稈種積稭穢穏稲穂窮竅窯窓竄窩窺豎競筍筆籠築' +
|
|
62
|
+
'篩籌簽簡籮簍籃籬類粵糞糧粋緊糾紅繊約級紀紉緯純紗綱納縦紛紙紋紡紐' +
|
|
63
|
+
'線練組紳細織終絆紹繹経綁絨結繞絵給絡絶絞統絹繡継績緒続綽縄維綿繃' +
|
|
64
|
+
'綢綜綻緑綴緬纜緞緩締縷編縁縛縫纏纓縮繳網羅罰罷羨翹聳恥聶聾職聯聰' +
|
|
65
|
+
'粛腸膚腎腫脹脅勝膠脈臓臍脳膿臉臘膩騰輿舎艦艙艱豔芸節蕪蘆葦蒼蘇蘋' +
|
|
66
|
+
'範繭荊薦莢蕩栄葷熒薬萊蓮獲瑩蘿蛍営蕭薩蔥蔣藍藹蘊蔵虜慮雖蝦蝕蟻螞' +
|
|
67
|
+
'蛻蝸蠟蠅蟬蠍釁銜補襯襖襪襲褲裏見観規覓視覧覚謄計訂認譏討譲訓議訊' +
|
|
68
|
+
'記講諱訝許訛論訟諷設訪訣証評詛識詐訴診詞訳試詩誠話誕詭詢該詳誡誣' +
|
|
69
|
+
'語誤誘誨説誦請諸諾読誹課誰調諒諄談誼謀諜謊諧謁謂諺謎謝謡謗謙謹謬' +
|
|
70
|
+
'譚譜譴貝貞負貢財責賢敗賬貨質販貪貧貶購貯貫弐賤貼貴貸貿費賀賊賈' +
|
|
71
|
+
'賄賃賂贓資賒賦賭贖賞賜賠頼贅賺賽賛贈贍贏趙趕趨躍蹤軀車軋軌軒転輪' +
|
|
72
|
+
'軟轟軸軽載轎較輔輛輩輝輻輯輸轅轄轍弁弁辺遼達遷過邁運還這進遠違連' +
|
|
73
|
+
'遅跡適選遜逓邏遺遙鄧郵隣鄭醞醬醸酔採釈鑑針釘釣鈣鈍鈔鐘鈉鋼鑰欽鈞' +
|
|
74
|
+
'鈎鈕銭鉗鑽鉀鉄鈴鉛鉚銅鋁鍘銑銘鏟銀鋳舗鏈銷鎖鋤鍋鏽鋒鋅鋭錯錨錫鑼' +
|
|
75
|
+
'錘錐錦鍁錠鍵鋸錳鍬鍛鍍鎮鑷鎬鏡鐐鐮鑲長門閃閉問闖閏閑間悶閘鬧閨聞' +
|
|
76
|
+
'閩閥閣閲閻闡闊隊陽陰陣階際陸陳陝隕険陥隠隷難雛彫霧黴覇韌韓韻頁頂' +
|
|
77
|
+
'頃項順須頑顧頓頒頌預顱領頗頸頰頻頹穎顆題顔額顛顫風飄飛飢飯飲飾飽' +
|
|
78
|
+
'飼餌饒餃餅餓餒餡館饞餾饅馬駄馴馳駆駁驢駛駒駐駝駕罵驕駱駭験駿騎騙' +
|
|
79
|
+
'騒騾驟髄魚魯鮮鯉鯨鼈鱗鳥鶏鳴鷗鴉鴨鴦鴛鴕鴿鴻鵑鵝鵲鵬鶴鷹黒黙斉歯' +
|
|
80
|
+
'齢龍亀窪';
|
|
81
|
+
|
|
82
|
+
HankakuList0 =
|
|
83
|
+
' !"#$%&'"'"'()*+,-./0123456789:;<=>?' +
|
|
84
|
+
'@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`' +
|
|
85
|
+
'abcdefghijklmnopqrstuvwxyz{|}~アイウ' +
|
|
86
|
+
'エオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤ' +
|
|
87
|
+
'ユヨラリルレロワヲンァィゥェォッャュョー。、「」゚゙・';
|
|
88
|
+
|
|
89
|
+
HankakuEisuList1 =
|
|
90
|
+
' ! " # $ % & '+"' "+'( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? ' +
|
|
91
|
+
'@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` ' +
|
|
92
|
+
'a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~'
|
|
93
|
+
|
|
94
|
+
ZenkakuEisuList1 =
|
|
95
|
+
' !”#$%&’()*+,-./0123456789:;<=>?' +
|
|
96
|
+
'@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`' +
|
|
97
|
+
'abcdefghijklmnopqrstuvwxyz{|}~'
|
|
98
|
+
|
|
99
|
+
HankakuList1 =
|
|
100
|
+
' ! " # $ % & '+"' "+'( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? ' +
|
|
101
|
+
'@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` ' +
|
|
102
|
+
'a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ ア イ ウ ' +
|
|
103
|
+
'エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ' +
|
|
104
|
+
'ユ ヨ ラ リ ル レ ロ ワ ヲ ン ァ ィ ゥ ェ ォ ッ ャ ュ ョ ー 。 、 「 」 ゚ ゙ ・ ';
|
|
105
|
+
|
|
106
|
+
ZenkakuList1 =
|
|
107
|
+
' !”#$%&’()*+,-./0123456789:;<=>?' +
|
|
108
|
+
'@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`' +
|
|
109
|
+
'abcdefghijklmnopqrstuvwxyz{|}~アイウ' +
|
|
110
|
+
'エオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤ' +
|
|
111
|
+
'ユヨラリルレロワヲンァィゥェォッャュョー。、「」゜゛・';
|
|
112
|
+
|
|
113
|
+
HankakuList2 =
|
|
114
|
+
'ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴ';
|
|
115
|
+
ZenkakuList2 =
|
|
116
|
+
'ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴ';
|
|
117
|
+
|
|
118
|
+
HiraganaList1 =
|
|
119
|
+
'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむ' +
|
|
120
|
+
'めもやゆよらりるれろわをんぁぃぅぇぉっゃゅょ';
|
|
121
|
+
KatakanaList1 =
|
|
122
|
+
'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミム' +
|
|
123
|
+
'メモヤユヨラリルレロワヲンァィゥェォッャュョ';
|
|
124
|
+
HankanaList1 =
|
|
125
|
+
'ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム ' +
|
|
126
|
+
'メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ヲ ン ァ ィ ゥ ェ ォ ッ ャ ュ ョ ';
|
|
127
|
+
|
|
128
|
+
HiraganaList2 =
|
|
129
|
+
'がぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽ';
|
|
130
|
+
KatakanaList2 =
|
|
131
|
+
'ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ';
|
|
132
|
+
HankanaList2 =
|
|
133
|
+
'ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ';
|
|
134
|
+
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
class String
|
|
139
|
+
def hankaku
|
|
140
|
+
ret = ""
|
|
141
|
+
each_char do |c|
|
|
142
|
+
i = MojiKonv::ZenkakuList2.index(c)
|
|
143
|
+
if i
|
|
144
|
+
cv = MojiKonv::HankakuList2[i * 2, 2]
|
|
145
|
+
else
|
|
146
|
+
i = MojiKonv::ZenkakuList1.index(c)
|
|
147
|
+
if i
|
|
148
|
+
cv = MojiKonv::HankakuList1[i * 2, 1]
|
|
149
|
+
else
|
|
150
|
+
cv = c
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
ret += cv
|
|
154
|
+
end
|
|
155
|
+
ret
|
|
156
|
+
end
|
|
157
|
+
def hankaku!
|
|
158
|
+
replace hankaku
|
|
159
|
+
self
|
|
160
|
+
end
|
|
161
|
+
def hiragana2hankaku
|
|
162
|
+
ret = ""
|
|
163
|
+
each_char do |c|
|
|
164
|
+
i = MojiKonv::HiraganaList2.index(c)
|
|
165
|
+
if i
|
|
166
|
+
cv = MojiKonv::HankanaList2[i * 2, 2]
|
|
167
|
+
else
|
|
168
|
+
i = MojiKonv::HiraganaList1.index(c)
|
|
169
|
+
if i
|
|
170
|
+
cv = MojiKonv::HankanaList1[i * 2, 1]
|
|
171
|
+
else
|
|
172
|
+
cv = c
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
ret += cv
|
|
176
|
+
end
|
|
177
|
+
ret
|
|
178
|
+
end
|
|
179
|
+
def eisuHankaku
|
|
180
|
+
ret = ""
|
|
181
|
+
each_char do |c|
|
|
182
|
+
i = MojiKonv::ZenkakuEisuList1.index(c)
|
|
183
|
+
if i
|
|
184
|
+
cv = MojiKonv::HankakuList1[i * 2, 1]
|
|
185
|
+
else
|
|
186
|
+
cv = c
|
|
187
|
+
end
|
|
188
|
+
ret += cv
|
|
189
|
+
end
|
|
190
|
+
ret
|
|
191
|
+
end
|
|
192
|
+
def hankakuEisu
|
|
193
|
+
eisuHankaku
|
|
194
|
+
end
|
|
195
|
+
def hankakuEisu!
|
|
196
|
+
replace eisuHankaku
|
|
197
|
+
end
|
|
198
|
+
def eisuHankaku!
|
|
199
|
+
replace eisuHankaku
|
|
200
|
+
end
|
|
201
|
+
def hiragana2hankaku!
|
|
202
|
+
replace hiragana2hankaku
|
|
203
|
+
self
|
|
204
|
+
end
|
|
205
|
+
def shinjitai
|
|
206
|
+
ret = ""
|
|
207
|
+
each_char do |c|
|
|
208
|
+
i = MojiKonv::ZhKanjiList.index(c)
|
|
209
|
+
if i
|
|
210
|
+
cv = MojiKonv::JaKanjiList[i]
|
|
211
|
+
else
|
|
212
|
+
cv = c
|
|
213
|
+
end
|
|
214
|
+
ret += cv
|
|
215
|
+
end
|
|
216
|
+
ret
|
|
217
|
+
end
|
|
218
|
+
def shinjitai!
|
|
219
|
+
replace shinjitai
|
|
220
|
+
self
|
|
221
|
+
end
|
|
222
|
+
def encodeOr encoding
|
|
223
|
+
ret = "".encode(encoding)
|
|
224
|
+
each_char do |c|
|
|
225
|
+
cv = nil
|
|
226
|
+
begin
|
|
227
|
+
cv = c.encode(encoding)
|
|
228
|
+
rescue
|
|
229
|
+
if block_given?
|
|
230
|
+
cv = yield(c).encode(encoding) rescue '?'.encode(encoding)
|
|
231
|
+
else
|
|
232
|
+
cv = '?'.encode(encoding)
|
|
233
|
+
end
|
|
234
|
+
end
|
|
235
|
+
ret += cv
|
|
236
|
+
end
|
|
237
|
+
ret
|
|
238
|
+
end
|
|
239
|
+
def encodeOr! encoding, &bl
|
|
240
|
+
ret = encodeOr encoding, &bl
|
|
241
|
+
replace ret
|
|
242
|
+
self
|
|
243
|
+
end
|
|
244
|
+
def width
|
|
245
|
+
w = 0
|
|
246
|
+
each_char do |c|
|
|
247
|
+
if MojiKonv::HankakuList0.include?(c) || c.ord < 0x80
|
|
248
|
+
w += 1
|
|
249
|
+
else
|
|
250
|
+
w += 2
|
|
251
|
+
end
|
|
252
|
+
end
|
|
253
|
+
w
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
|
|
2
|
+
module OnMarshal
|
|
3
|
+
def marshal_dump
|
|
4
|
+
if respond_to? :on_marshal_dump
|
|
5
|
+
on_marshal_dump
|
|
6
|
+
end
|
|
7
|
+
Marshal::dump(self.instance_variables.collect{|var| [var, instance_variable_get(var)]})
|
|
8
|
+
end
|
|
9
|
+
def marshal_load(obj)
|
|
10
|
+
Marshal::load(obj).each{ |value|
|
|
11
|
+
instance_variable_set(value[0], value[1])
|
|
12
|
+
}
|
|
13
|
+
if respond_to? :on_marshal_load
|
|
14
|
+
on_marshal_load
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
|
|
2
|
+
class Module
|
|
3
|
+
def override_prev (*mnames)
|
|
4
|
+
mnames.each do |mname|
|
|
5
|
+
alias_method "__org_" + mname.to_s, mname
|
|
6
|
+
if !defined? @prev_overriden
|
|
7
|
+
@prev_overriden = Hash.new
|
|
8
|
+
end
|
|
9
|
+
if @prev_overriden[mname] != nil
|
|
10
|
+
raise Exception.new("cannot define two overriding methods for #{mname}\n")
|
|
11
|
+
end
|
|
12
|
+
@prev_overriden[mname] = true
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
def override_prev_commit
|
|
16
|
+
@prev_overriden.each_key do |mname|
|
|
17
|
+
alias_method "__new_" + mname.to_s, mname
|
|
18
|
+
module_eval %Q{
|
|
19
|
+
def #{"org_" + mname.to_s} (*args, &proc)
|
|
20
|
+
k = "__#{name}__original__"
|
|
21
|
+
if Thread.current[k] == nil
|
|
22
|
+
Thread.current[k] = 0
|
|
23
|
+
end
|
|
24
|
+
Thread.current[k] += 1
|
|
25
|
+
begin
|
|
26
|
+
#{"__org_" + mname.to_s}(*args, &proc)
|
|
27
|
+
ensure
|
|
28
|
+
Thread.current[k] -= 1
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
def #{mname} (*args, &proc)
|
|
32
|
+
k = "__#{name}__original__"
|
|
33
|
+
if Thread.current[k] == nil
|
|
34
|
+
Thread.current[k] = 0
|
|
35
|
+
end
|
|
36
|
+
if Thread.current[k] > 0
|
|
37
|
+
#{"__org_" + mname.to_s}(*args, &proc)
|
|
38
|
+
else
|
|
39
|
+
#{"__new_" + mname.to_s}(*args, &proc)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
}
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
class AdhocLiterals
|
|
4
|
+
class Path
|
|
5
|
+
def initialize arg
|
|
6
|
+
@literal = arg
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
def self.__path__ arg
|
|
10
|
+
Path.new arg
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class GrammerExt
|
|
16
|
+
class Indenter
|
|
17
|
+
PATH_HEAD = "AdhocLiterals::__path__("
|
|
18
|
+
BOTH_HEAD = "AdhocLiterals::__reg_path__("
|
|
19
|
+
CSelectInPathRegExpr = '\[(\!|\^|)(\\\-|\.|\~|\w|[A-Z]\-[A-Z]|[a-z]\-[a-z]|[0-9]\-[0-9])*\]'
|
|
20
|
+
CSelectInPathRegExprPrev = Regexp.new(CSelectInPathRegExpr + '$')
|
|
21
|
+
CSelectInPathRegExprCur = Regexp.new('^' + CSelectInPathRegExpr)
|
|
22
|
+
def mayConcatenatePath t
|
|
23
|
+
if t.kind != :on_nl && t.kind != :on_sp && !@expr.anot[t.ipos]
|
|
24
|
+
ett = tt = t.prev_meaningful
|
|
25
|
+
if fap, mode = @expr.anot[tt.ipos]
|
|
26
|
+
modeList.unshift [mode, tt.ipos]
|
|
27
|
+
loop do
|
|
28
|
+
begin
|
|
29
|
+
ftt = tt
|
|
30
|
+
tt = tt.prev_meaningful
|
|
31
|
+
end until fap != (tfap, mode = @expr.anot[tt.ipos])[0]
|
|
32
|
+
if mode
|
|
33
|
+
modeList.unshift [mode, tt.ipos]
|
|
34
|
+
else
|
|
35
|
+
break
|
|
36
|
+
end
|
|
37
|
+
fap = tfap
|
|
38
|
+
end
|
|
39
|
+
if modeList.size > 1
|
|
40
|
+
modeList.each_cons 2 do |f, n|
|
|
41
|
+
case [f[0][0], n[0][0]]
|
|
42
|
+
when [:sl_beg, :sl_beg],
|
|
43
|
+
[:sl_beg, :sl_both],
|
|
44
|
+
[:sl_middle, :sl_beg],
|
|
45
|
+
[:sl_middle, :sl_both],
|
|
46
|
+
[:sl_end, :sl_end],
|
|
47
|
+
[:sl_end, :sl_middle],
|
|
48
|
+
[:sl_both, :sl_end],
|
|
49
|
+
[:sl_both, :sl_middle],
|
|
50
|
+
[:sl_url, :sl_beg],
|
|
51
|
+
[:sl_url, :sl_both]
|
|
52
|
+
else
|
|
53
|
+
raise Error.new("cannot concatenate path")
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
toConcatenate = @expr[ftt.ipos...ett.ipos + ett.str.size]
|
|
58
|
+
head = if defined?(AdhocLiterals::Url) && @expr[ftt.iops] =~ /^[a-zA-Z][a-zA-Z0-9\.+\-]*:/
|
|
59
|
+
URL_HEAD
|
|
60
|
+
elsif defined?(AdhocLiterals::Path)
|
|
61
|
+
modeList[0][1] == :both ? BOTH_HEAD : PATH_HEAD
|
|
62
|
+
end
|
|
63
|
+
if head
|
|
64
|
+
@expr[ftt.ipos...ett.ipos + ett.str.size] = head + toConcatenate + ")"
|
|
65
|
+
@expr.clear_anot
|
|
66
|
+
raise Restart.new
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
def pathRestart st, ed, pstack, mode
|
|
72
|
+
subst = ""
|
|
73
|
+
inDQ = false
|
|
74
|
+
dqStart = nil
|
|
75
|
+
if st < pstack[0]
|
|
76
|
+
if !["'", '"'].include? @expr[st]
|
|
77
|
+
subst += '"'
|
|
78
|
+
dqStart = st
|
|
79
|
+
inDQ = true
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
pstack.each_index do |idx|
|
|
83
|
+
i, j = pstack[idx], pstack[idx + 1]
|
|
84
|
+
if inDQ
|
|
85
|
+
if j
|
|
86
|
+
if i + 1 == j
|
|
87
|
+
next
|
|
88
|
+
elsif ["'", '"'].include? @expr[i + 1]
|
|
89
|
+
subst += @expr[dqStart .. i] + '"'
|
|
90
|
+
inDQ = false
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
else
|
|
94
|
+
subst += '"'
|
|
95
|
+
dqStart = i
|
|
96
|
+
inDQ = true
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
# inDQ should be true
|
|
100
|
+
if ed - 1 > pstack[-1]
|
|
101
|
+
if ["'", '"'].include? @expr[ed - 1]
|
|
102
|
+
subst += @expr[dqStart .. pstack[-1]] + '"' + @expr[pstack[-1] + 1 ... ed]
|
|
103
|
+
else
|
|
104
|
+
subst += @expr[dqStart ... ed] + '"'
|
|
105
|
+
end
|
|
106
|
+
else
|
|
107
|
+
subst += '"'
|
|
108
|
+
end
|
|
109
|
+
emode = case [@expr[st] == "/", @expr[ed] == "/"]
|
|
110
|
+
when [true, true]
|
|
111
|
+
:sl_both
|
|
112
|
+
when [true, false]
|
|
113
|
+
:sl_beg
|
|
114
|
+
when [false, true]
|
|
115
|
+
:sl_end
|
|
116
|
+
when [false, false]
|
|
117
|
+
:sl_middle
|
|
118
|
+
end
|
|
119
|
+
@expr.ssubst st...ed, subst, [mode, emode]
|
|
120
|
+
raise Restart.new
|
|
121
|
+
end
|
|
122
|
+
# /"can use backslash escape" :path
|
|
123
|
+
# /cannot_use_backslash_escape :path
|
|
124
|
+
# /using\ backslash\ / :regexp
|
|
125
|
+
# /path[)}\]] :path and closing ')', '}', ']'
|
|
126
|
+
# /path,(\s|$) :path '/path' and comma operator
|
|
127
|
+
# /path\s :path '/path'
|
|
128
|
+
# /foo/i :both functional object '/foo/i', without space and backslash until closing '/'
|
|
129
|
+
# /foo/.to_s :path '/foo/.to_s'
|
|
130
|
+
# /foo/ .to_s :both functional object '/foo/' calling method '.to_s'
|
|
131
|
+
# / a :devide operator
|
|
132
|
+
# /ab[)\]}] :path, '/ab' and parenthesis/bracket/brace closing
|
|
133
|
+
# /ab,(\s|$) :path, '/ab' and comma operator
|
|
134
|
+
# /ab,c :path, '/ab,c'
|
|
135
|
+
# /"ab c" :path
|
|
136
|
+
# /"ab c"aaa :error
|
|
137
|
+
# /abc"aa :error
|
|
138
|
+
# /abc"aa/ :regexp
|
|
139
|
+
# /abc"aa / :error: path '/abc"aa', '/'
|
|
140
|
+
# /"abc / regexp
|
|
141
|
+
# /"abc/" error, path segment cannot contain '/'
|
|
142
|
+
# /"abc\/" error, path segment cannot contain '/'
|
|
143
|
+
# /\"abc d/ regexp
|
|
144
|
+
# /* c comment start
|
|
145
|
+
#
|
|
146
|
+
def checkPath st, origin = nil, pstack = []
|
|
147
|
+
firstSlash = @expr[st] == "/"
|
|
148
|
+
bstack = []
|
|
149
|
+
i = st
|
|
150
|
+
i += 1 if @expr[i] == "}" #embeded expression closing
|
|
151
|
+
k = nil
|
|
152
|
+
res = nil
|
|
153
|
+
mode = origin && st != origin ? :path : nil
|
|
154
|
+
while o = @expr[i]
|
|
155
|
+
case o
|
|
156
|
+
when "/"
|
|
157
|
+
pstack.push i
|
|
158
|
+
if pstack.size == 3
|
|
159
|
+
mode = :path
|
|
160
|
+
end
|
|
161
|
+
rp = i
|
|
162
|
+
while ["'", '"'].include? @expr[i + 1]
|
|
163
|
+
i = getStringEndExceptSlash(i + 1)
|
|
164
|
+
if !i
|
|
165
|
+
raise Error.new("cannot find string end, #{@expr[i + 1]}")
|
|
166
|
+
else
|
|
167
|
+
j = i
|
|
168
|
+
while @expr[i + 1] == "/"
|
|
169
|
+
i += 1
|
|
170
|
+
pstack.push i
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
if rp != i
|
|
175
|
+
mode = :path
|
|
176
|
+
if @expr[i] != "/"
|
|
177
|
+
break # /"foo"[^\/]
|
|
178
|
+
end
|
|
179
|
+
#else continue after "/"
|
|
180
|
+
end
|
|
181
|
+
when ",", ";"
|
|
182
|
+
if @expr[i, 2] =~ /^.(\s|$)/
|
|
183
|
+
break
|
|
184
|
+
end
|
|
185
|
+
when '"', "'", "`"
|
|
186
|
+
break
|
|
187
|
+
when ")", "]", "}" #orphan
|
|
188
|
+
break
|
|
189
|
+
when "[", "{", "("
|
|
190
|
+
break if !firstSlash
|
|
191
|
+
if !(k = getClosing(i))
|
|
192
|
+
raise Error.new("cannot find closing #{@expr[i]}")
|
|
193
|
+
end
|
|
194
|
+
when "#" #embeded expression do not allow first ".", "/", "?", "*", "{}", "[]", otherwise use #wpd{...}, w:wild([],{}.?,*), p:period(.), d:directory(/)
|
|
195
|
+
k = checkExtendedEmbExpr(i, :path)
|
|
196
|
+
when "\\"
|
|
197
|
+
if mode == :path || pstack.size >= 2
|
|
198
|
+
raise Error.new("path expression without double quotation cannot contain bare backslash, '\\'")
|
|
199
|
+
else
|
|
200
|
+
mode = :regexp
|
|
201
|
+
break
|
|
202
|
+
end
|
|
203
|
+
when /\s/
|
|
204
|
+
break
|
|
205
|
+
else
|
|
206
|
+
if o < 0x20
|
|
207
|
+
raise Error.new("cannot use control character, chr(0x0x#{o.t_s.sprintf('%02x')})")
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
if !k
|
|
211
|
+
i += 1
|
|
212
|
+
else
|
|
213
|
+
i = k + 1
|
|
214
|
+
k = nil
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
if !mode && pstack.size == 2
|
|
218
|
+
ropts = "uesnmxi"
|
|
219
|
+
j = 1
|
|
220
|
+
while (c = @expr[pstack[1] + j]) && (roi = ropts.index(c))
|
|
221
|
+
ropts.slice!(roi)
|
|
222
|
+
++j
|
|
223
|
+
end
|
|
224
|
+
if j != 1 && @expr[pstack[1] + j - 1, 2] =~ /.\b/
|
|
225
|
+
mode = :both
|
|
226
|
+
else
|
|
227
|
+
mode = :path
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
if pstack.size != 0
|
|
231
|
+
if firstSlash
|
|
232
|
+
if !origin || origin == st
|
|
233
|
+
pathRestart @expr, st, i, pstack, mode
|
|
234
|
+
else
|
|
235
|
+
pathRestart @expr, origin, i, pstack, mode
|
|
236
|
+
end
|
|
237
|
+
else
|
|
238
|
+
yield i, pstack
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
def checkPrevIsPath tenum, st = nil, ed = nil, pstack = nil
|
|
243
|
+
if tenum
|
|
244
|
+
t = token = tenum.peek
|
|
245
|
+
last = nil
|
|
246
|
+
while t.prev&.kind == :on_tstring_end && ['"', "'"].include?(t.prev.beginner.str[0])
|
|
247
|
+
t = t.beginner
|
|
248
|
+
end
|
|
249
|
+
if t != token
|
|
250
|
+
checkPath token.ipos, t.ipos # no return raise Restart
|
|
251
|
+
end
|
|
252
|
+
i = token.ipos
|
|
253
|
+
else
|
|
254
|
+
i = st
|
|
255
|
+
end
|
|
256
|
+
k = nil
|
|
257
|
+
while o = @expr[i]
|
|
258
|
+
case o
|
|
259
|
+
when "[", "{", "("
|
|
260
|
+
break
|
|
261
|
+
when "]", "}", ")"
|
|
262
|
+
#if !(k = getOpening(@expr, i))
|
|
263
|
+
break
|
|
264
|
+
#end
|
|
265
|
+
when "\\", '"', "'", '`'
|
|
266
|
+
break
|
|
267
|
+
when 0x20
|
|
268
|
+
if @expr[i - 1] == "\\"
|
|
269
|
+
i -= 1
|
|
270
|
+
else
|
|
271
|
+
break
|
|
272
|
+
end
|
|
273
|
+
else
|
|
274
|
+
if o < 0x20
|
|
275
|
+
break
|
|
276
|
+
end
|
|
277
|
+
end
|
|
278
|
+
if k
|
|
279
|
+
i = k - 1
|
|
280
|
+
k = nil
|
|
281
|
+
else
|
|
282
|
+
i -= 1
|
|
283
|
+
end
|
|
284
|
+
end
|
|
285
|
+
if tenum
|
|
286
|
+
checkPath token.ipos, i + 1
|
|
287
|
+
else
|
|
288
|
+
pathRestart i + 1, ed, pstack, :path
|
|
289
|
+
end
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
end
|
|
293
|
+
end
|