https://opensource.com/article/18/8/gawk-script-convert-smart-quotes
作者 | Jim Hall
譯者 | DarkSun (lujun9972) ?????共計翻譯:81 篇 貢獻時間:277 天
得到我的 awk 秘籍。
我管理著一個個人網站,用手工編輯網站上的網頁。由於網站上的頁面並不多,這種方法對我很適合,可以讓我對網站程式碼的細節一清二楚。
最近我升級了網站的設計樣式,我決定把所有的普通引號都轉換成“花引號”,即在列印材料中使用的那種引號:用 “” 來代替 “”。
手工修改所有的引號太耗時了,因此我決定將這個轉換所有 HTML 檔案中引號的過程自動化。不過透過程式或指令碼來實現該功能需要費點勁。這個指令碼需要知道何時將普通引號轉換成花引號,並決定使用哪種引號(LCTT 譯註:左引號還是右引號,單引號還是雙引號)。
有多種方法可以轉換引號。Greg Pittman 寫過一個 Python 指令碼[1] 來修正文字中的花引號。而我自己使用 GNU awk[2] (gawk) 來實現。
下載我的 awk 秘籍。免費下載[2]。
開始之前,我寫了一個簡單的 gawk 函式來評估單個字元。若該字元是一個引號,這該函式判斷是輸出普通引號還是花引號。函式檢視前一個字元;若前一個字元是空格,則函式輸出左花引號。否則函式輸出右花引號。指令碼對單引號的處理方式也一樣。
function smartquote (char, prevchar) {
# print smart quotes depending on the previous character
# otherwise just print the character as-is
if (prevchar ~ /\s/) {
# prev char is a space
if (char == "'") {
printf("‘");
}
else if (char == "\"") {
printf("“");
}
else {
printf("%c", char);
}
}
else {
# prev char is not a space
if (char == "'") {
printf("’");
}
else if (char == "\"") {
printf("”");
}
else {
printf("%c", char);
}
}
}
這個 gawk 指令碼的主體部分透過該函式處理 HTML 輸入檔案的一個個字元。該指令碼在 HTML 標簽內部逐字原樣輸出所有內容(比如,)。在 HTML 標簽外,指令碼使用
smartquote()
函式來輸出文本。smartquote()
函式來評估是輸出普通引號還是花引號。
function smartquote (char, prevchar) {
...
}
BEGIN {htmltag = 0}
{
# for each line, scan one letter at a time:
linelen = length($0);
prev = "\n";
for (i = 1; i <= linelen; i++) {
char = substr($0, i, 1);
if (char == ") {
htmltag = 1;
}
if (htmltag == 1) {
printf("%c", char);
}
else {
smartquote(char, prev);
prev = char;
}
if (char == ">") {
htmltag = 0;
}
}
# add trailing newline at end of each line
printf ("\n");
}
下麵是一個例子:
gawk -f quotes.awk test.html > test2.html
其輸入為:
lang="en">
Test page
rel="stylesheet" type="text/css" href="/test.css" />
charset="UTF-8">
name="viewport" content="width=device-width" />
href="/"> src="logo.png" alt="Website logo" />
其輸出為:
lang="en">
Test page
rel="stylesheet" type="text/css" href="/test.css" />
charset="UTF-8">
name="viewport" content="width=device-width" />
href="/"> src="logo.png" alt="Website logo" />
via: https://opensource.com/article/18/8/gawk-script-convert-smart-quotes
作者:Jim Hall[4] 選題:lujun9972 譯者:lujun9972 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出