为了方便生成的 HTML 的打包与上传, 最好不要把 viki 文件与生成的 HTML 文件放在同一个目录下, 滇狐提供的 Linux 和 Windows 下的编译脚本中, 开头部分都含有目的 HTML 存放路径的定义, 请根据需要进行修改。
在 Linux 下利用 Makefile 来实现 ViKi 编译, 还挺方便的。 只要将下面的脚本存放到 viki 文件所在的文件夹, 修改“TARGET_DIR”一行, 将它指向你存放 HTML 的目的文件夹, 然后到 viki 所在文件夹下执行该脚本就可以了。
#!/bin/sh
TARGET_DIR=~/public_html/html
ARGS="-m zh-cn-autospace -m code-gvim -t bright.html --css bright -X"
rm -f Makefile
echo TARGET_DIR = $TARGET_DIR >> Makefile
echo ARGS = $ARGS >> Makefile
echo "" >> Makefile
echo "all: \\" >> Makefile
for file in *.viki
do
echo \$\(TARGET_DIR\)/`basename $file .viki`.html \\ >> Makefile
done
echo "" >> Makefile
for file in *.viki
do
echo "" >> Makefile
echo \$\(TARGET_DIR\)/`basename $file .viki`.html: \
$file build.sh >> Makefile
echo " deplate -d \$(TARGET_DIR) \$(ARGS) $file" >> Makefile
echo " echo `basename $file .viki`.html >> upload.txt" \
>> Makefile
echo " rm -f $TARGET_DIR/_code_* $TARGET_DIR/deplateCodeAuto*" >> Makefile
done
make
mv upload.txt upload.bak
sort upload.bak | uniq > upload.txt
rm -f upload.bak
滇狐不在 Windows 下写 ViKi, 不过还是为仍在 Windows 下受苦的朋友们提供了使用 vbs 编写的编译脚本。 将这个脚本放到 viki 文件所在的文件夹下, 命名为 build.vbs, 修改“htmlPath”一行, 将它指向你存放 HTML 的目的文件夹, 然后到 viki 所在文件夹下双击该脚本就可以了。
On Error Resume Next
htmlPath = "C:\Documents and Settings\edward\My Documents\html"
args = "-m zh-cn-autospace -m code-gvim -t bright.html --css bright -X"
If Right(htmlPath, 1) <> "\" Then
htmlPath = htmlPath & "\"
End If
sSelfPath = WScript.ScriptFullName
sSelfPath = Left(sSelfPath, InStrRev(sSelfPath, "\") - 1)
Set WshShell = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
tSelfTime = fso.GetFile(WScript.ScriptFullName).DateLastModified
Set folder = fso.GetFolder(sSelfPath)
For Each file In folder.Files
build = false
vikiName = file.Name
htmlFilename = ""
If Len(vikiName) > 5 Then
If LCase(Right(vikiName, 5)) = ".viki" Then
htmlFilename = htmlPath & Left(vikiName, Len(vikiName) - 5) _
& ".html"
If fso.FileExists(htmlFilename) Then
Set htmlFile = fso.GetFile(htmlFilename)
If file.DateLastModified > htmlFile.DateLastModified Or _
tSelfTime> htmlFile.DateLastModified Then
build = True
End if
Else
build = True
End if
End if
End If
If build Then
cmdLine = "deplate.exe " & args & " -d " _
& """" & Replace(htmlPath, "\", "/") & """ " _
& """" & Replace(file.Path, "\", "/") & """"
WScript.StdOut.WriteLine cmdLine
Set oExec = WshShell.Exec("cmd.exe /c " & cmdLine & " 2>&1")
While Not oExec.StdOut.AtEndOfStream
Line = oExec.StdOut.ReadLine
WScript.StdOut.WriteLine Line
Wend
End if
Next
cmdLine = "del """ & htmlPath & "code_*"" """ & htmlPath & "deplateCodeAuto*"""
WScript.StdOut.WriteLine cmdLine
Set oExec = WshShell.Exec("cmd.exe /c " & cmdLine & " 2>&1")
While Not oExec.StdOut.AtEndOfStream
Line = oExec.StdOut.ReadLine
WScript.StdOut.WriteLine Line
Wend
Set fso = Nothing
Set WshShell = Nothing
滇狐使用这段 sh 脚本生成网站的更新日志, 目前暂不提供该脚本的 Windows 版本。
#!/bin/sh
get_title()
{
titleline="`grep '^#TITLE:' $filename`"
title="${titleline/\\#TITLE:/}"
title=`echo $title`
if test "$title" = ""; then
title="<无标题文档>"
fi
}
list_item()
{
get_title
echo >> $logfile
echo " * [[`basename $filename .viki`][$title]]" >> $logfile
}
logtitle=`date +"%Y 年 %m 月 %d 日 更新日志"`
logfile=`date +"log_%Y%m%d.viki"`
echo "#TITLE: $logtitle" > $logfile
echo >> $logfile
echo $logtitle >> $logfile
for item in `grep \\.html$ upload.txt`
do
filename=`basename $item .html`.viki
list_item
done
touch log.viki
grep -v '#TITLE:' log.viki > log.bak
echo "#TITLE: 更新日志" > log.viki
echo >> log.viki
echo " * [[`basename $logfile .viki`][$logtitle]]" >> log.viki
cat log.bak >> log.viki
rm -f log.bak
由于学校提供的服务器不支持 FTP 上传, HTTP 上传总是比较麻烦。 幸好服务器支持 zip 包的上传解压, 为了节省工作量, 滇狐使用这段脚本生成上传用的 zip 包。 从上文的编译脚本可以看出, 滇狐在编译时记录了被更新过的文件名列表, 所以打包的时候就比较简单了:
#!/bin/sh
TARGET_DIR=~/public_html
TARGET=html
ZIP_FILE=html.zip
curpath=`pwd`
pushd .
cd $TARGET_DIR
rm -f $ZIP_FILE
for file in `cat $curpath/upload.txt`
do
zip $ZIP_FILE $TARGET/$file
done
popd
rm -f upload.txt
Windows 下的打包脚本就不提供了, 因为 xcopy 命令可以自动判断文件修改时间, 很容易自己写一个打包脚本。 而且, 大部分 Windows 机器上都不会安装 zip.exe, 所以滇狐没法提供一个通用的 zip 打包脚本。
| | | |