script?: make function! [[
{檢查是否具有有效的劇本標頭(暫時)。}
source [file! url! binary! string!]
][
switch type?/word source [
file! [ source: read source ]
url! [ source: read source ]
string! [ source: to-binary source]
]
find-script source
]]
2008年6月19日
Bugfix: script?
修改後的結果如下:
2008年6月18日
Bugfix: ??
??: make function! [[
{印出變數名稱,後面跟著它的鑄模值(幫助除錯用)。}
'name
][
print either any [word? :name path? name] [
repend form name [": " mold name: get :name]
] [
mold :name
]
:name
]]
上面是??函數的源碼,有個小小的bug。必須把其中的form改成mold,否則當參數是path的時候,「/」會消失,例如:
>> ?? system/version
system version: 2.100.13.3.1
== 2.100.13.3.1
另外「any [word? :name path? name]」也應該要改成「any [word? name path? name]」。
2008年6月13日
Bugfix: parse-url
REBOL 3.0目前剖析URL的時候有Bug,當Path出現「@」、「!」或中文、日文、韓文…的時候,Path的解析出錯。這是相當嚴重的問題,因為檔案名稱中很常出現各國語言,如果用URL表示檔案,就會出問題,例如「file:///C:/音樂/love.mp3」就無法被順利剖析。
剖析URL的函數是decode-url,事實上,此函數會去使用到system/intrinsic/parse-url物件的定義。在parse-url物件定義中,為了要讓path納入「@」與「!」,必須修改path-char的定義修改如下:
為了要納入各國語言(#"^(100)" - #"^(FFFF)"),更必須將它改成:
我改天再把它呈遞給DevBase。
剖析URL的函數是decode-url,事實上,此函數會去使用到system/intrinsic/parse-url物件的定義。在parse-url物件定義中,為了要讓path納入「@」與「!」,必須修改path-char的定義修改如下:
path-char: make bitset!
#{00000000EFFFFFF5FFFFFFF57FFFFFEA}
為了要納入各國語言(#"^(100)" - #"^(FFFF)"),更必須將它改成:
path-char: union
make bitset!
#{00000000EFFFFFF5FFFFFFF57FFFFFEA}
charset [#"^(100)" - #"^(FFFF)"]
我改天再把它呈遞給DevBase。
Bugfix: ls與format
我已經修正完畢LS函數和FORMAT函數的Bug,下面列出的是FORMAT的定義。至於LS的定義修改方式很簡單,把LENGTH?用LENGTH+?取代即可。當FORMAT遇到中文時,終於不會出問題了!
LENGTH+?不會計算出字串的字元長度,而是會計算出「相當於多少個half-width字元」的長度。記得把前一篇文章的Full-Wide-Width-charset定義也加進來,因為LENGTH+?會用到這個定義。
我會找一天把修正後的結果透過DevBase遞交給REBOL公司。
LENGTH+?不會計算出字串的字元長度,而是會計算出「相當於多少個half-width字元」的長度。記得把前一篇文章的Full-Wide-Width-charset定義也加進來,因為LENGTH+?會用到這個定義。
我會找一天把修正後的結果透過DevBase遞交給REBOL公司。
length+?: func [str [string!] /local ans ] [
ans: 0
foreach ch str [
either find Full-Wide-Width-charset ch [
ans: ans + 2
] [
ans: ans + 1
]
]
]
format: make function! [[
"Format a string according to the format dialect."
rules {A block in the format dialect. E.g. [10 -10 #"-" 4]}
values
/pad p
/local out val
][
p: any [p #" "]
unless block? :rules [rules: reduce [:rules]]
unless block? :values [values: reduce [:values]]
out: make string! ""
foreach rule rules [
if word? :rule [rule: get rule]
switch type?/word :rule [
integer! [
val: first+ values
val: form :val
pad: (abs rule) - length+? val
if negative? pad [ pad: 0 ]
either positive? rule [
append out :val
append/dup out p pad
] [
append/dup out p pad
append out :val
]
]
string! [append out rule]
char! [append out rule]
]
]
if not tail? values [append out values]
head out
]]
訂閱:
文章 (Atom)