[原创]批处理代码发帖着色脚本 Batch2ubb(CMD & GAWK) 7.30 日更新
这是我当初学习 AWK 时作出的东西,一直存在一些问题没有解决,所以也就没有贴出来。最近一段时间不能上网就重写了一下,并加入了可支持参数的调用批处理,多参数调用构架是 Willsort 兄的大作,我直接拷贝过来,详见:[原创]批处理参数问题一点谈 http://www.cn-dos.net/forum/viewthread.php?tid=17785。
其中主要功能是由 GAWK 脚本完成的,剪贴板操作依赖于 winclip.exe ,语法文件是由我自己使用的 EmEditor 的批处理语法文件简化而来。所需执行文件下载链接:
winclip http://www.dmst.aueb.gr/dds/sw/outwit/outwit-bin-1.26.zip
gawk http://www.klabaster.com/progs/gawk32.zip
关于此批处理的使用,有几种调用方式交待一下:
1、直接双击运行。
2、命令行调用,Batch2ubb /h 查看具体参数用法。
3、在 sendto 建立快捷方式调用。
4、建立快捷方式并设定热键调用。
关于第 1 种运行方式,会将剪贴板中的代码转为 UBB 代码,重新写到剪贴板。
关于第 3 种运行方式,使用方法是开始、运行 输入 sendto ,在 sendto 目录建立指向 Batch2ubb.cmd 的快捷方式,然后右键选定欲转换的批处理文件执行发送到建立的快捷方式,转换的代码存于剪贴板。此种方法适用于已经存在的批处理的转换。
关于第 4 种运行方式,使用方法是在桌面或开始菜单中建立指向 Batch2ubb.cmd 的快捷方式并设定热键(后一位置重启后生效或在桌面按住F5键十秒种生效)或由 hoekey 等软件代劳,然后拷贝欲贴代码,按下热键,就可以在发帖窗口中粘贴了。并切可以在快捷方式中的目标位置选择是否启用 /n 参数。
另请自行修改 Batch2ubb.awk 中时间戳语句中的名字为自己的名字。有问题或建议欢迎跟帖讨论,我会尽量完善的。
Batch2ubb.cmd
###########################################################
# Batch2ubb.awk -V0.2 -- 批处理转 UBB 代码脚本
# 无奈何 - 2005-7-2 -- GAWK 脚本
###########################################################
#读取配置文件,获取关键字
BEGIN {
IGNORECASE=1
while ((getline<"batch.esy") >0){
if ($0!~/^[ \t]*;/ && $0!~/^$/) {
if ($0~/^[ \t]*#LINECOMMENT=/){
LineComment=substr($0,index($0,"=")+1)
} else if ($0~/^[ \t]*#VARIABLE=/){
Variable=substr($0,index($0,"=")+1)
} else if ($0~/^[ \t]*#PARAMETER=/){
Parameter=substr($0,index($0,"=")+1)
} else if ($0~/^[ \t]*#LABEL=/){
Label=substr($0,index($0,"=")+1)
} else if ($0~/^[ \t]*#KEYWORD/){
color[++i]=substr($0,index($0,"=")+1)
} else {
keyword[$0]=color[i]
}
}
}
print "[quote]"
if (line) print "[list=1]"
}
#主程序开始
{
before="[color=]"
after="[/color]"
#处理注释行及标签行
if (($0~/^[ \t]*::/) || ($0~/^[ \t]*REM\>/)){
gsub(/=.*]/,"=" LineComment "]",before)
$0=before $0 after
}else if ($0~/^[ \t]*:[^:]+/){
gsub(/=.*]/,"=" Label "]",before)
$0=before $0 after
} else {
temp=$0
#分割出关键字
gsub(/[][ \t,;'`~:+"=()<>{}^&|@\.]+/,"□",temp)
gsub(/(^□|□$)/,"",temp)
len=split(temp,word,"□+")
for (i=1;i<=len;i++){
# COLOR 关键字与 UBB 颜色字符重叠,单独处理
if (word[i]~/COLOR/){
if(!fcolor){
gsub(/=.*]/,"=" keyword["COLOR"] "]",before)
gsub("\\<" word[i] "\\>",before "&" after,$0)
delete word[i]
fcolor=1
} else
delete word[i]
}
#删除重复关键字
for (j=i+1;j<=len;j++){
if (word[i]==word[j])
delete word[j]
}
}
for (i=1;i<=len;i++){
for (aa in keyword){
if (aa==toupper(word[i])){
gsub(/=.*]/,"=" keyword[aa] "]",before)
gsub("\\<" word[i] "\\>",before "&" after,$0)
}
}
}
#处理变量及命令参数等细节部分
gsub(/=.*]/,"=" Variable "]",before)
gsub (/%+[A-Za-z0-9:~]*%?/,before "&" after,$0)
gsub (/!+[A-Za-z0-9:~]*!*/,before "&" after,$0)
gsub(/=.*]/,"=" Parameter "]",before)
gsub (/ \/[A-Za-z?\-]+/,before "&" after,$0)
gsub (/(\(|\))/,"[b]&[/b]",$0)
gsub (/(")/,"[b]&[/b]",$0)
}
if (line) print "[*]" $0
else print $0
}
END {
if (line) printf "[/list]"
#添加时间戳自行修改作者名
print "[color=White]" strftime("\t无奈何发表于: %Y-%m-%d %H:%M") "[/color]"
print "[/quote]"
}