Text-Processing
文本處理:將目錄文本轉換為 djvu 書籤格式?
通常在一本書的目錄中,每一行代表一個章節或章節,並以頁碼結尾,例如,
1 first chapter 10 1.1 first section 11 1.1.1 first subsection 12 1.2 second section 13 2 second chapter 14 2.1 first section 16 2.2 second section 13
上例中 djvu 文件的書籤格式為
(bookmarks ("1 first chapter" "#10" ("1.1 first section" "#11" ("1.1.1 first subsection" "#12" )) ("1.2 second section" "#13" )) ("2 second chapter" "#14" ("2.1 first section" "#16" ) ("2.2 second section" "#13" )) )
其中要點是左右括號的配對,用於以樹狀組織章節和章節,每個書籤項目的雙引號和每個頁碼前面都有 a
#
。行和縮進之間的分隔只是為了方便手動查看和編輯書籤文本文件,並沒有關係。我的問題是:
- 我想知道是否有一些方便的方法可以將純文字文件的目錄轉換為djvu書籤格式,可以盡可能減少人工處理?這可以通過文本處理應用程序,或在某種程式語言下程式,或兩者結合來實現。
- 正如Dennis Williamson的相關回复所建議的那樣,
您正在做的事情開始看起來有點像 XML。也許您應該使用真實的東西並使用適當的工具來操縱它。
一個快速的Google出現了 djvuxml。可以使用適當的 Python 或 Perl 模組或 shell 實用程序(如 xmlstarlet)輕鬆操作 XML 文件。
我想知道djvu書籤格式是否類似於XML格式(我承認我對XML還不熟悉,但如果在這裡有幫助的話願意學習)?可以使用 XML 工具將內容表的文本文件轉換為 djvu 書籤格式嗎?
這是一個試圖產生體面縮進的 awk 腳本。它假定輸入格式正確(例如,前面的行
3.2.2
必須是3.1
or3.1.something
,not3
)。#! /usr/bin/awk -f BEGIN { printf "(bookmarks"; depth = 1; } { level = split($1, s, "."); while (level < depth) {--depth; printf ")";} print ""; depth = level + 1; gsub(/[\\"]/, "\\&"); page = $NF; sub(/ +[^ ]*$/,""); for (i in s) printf " "; printf "(\"%s\" \"#%s\"", $0, page; } END { while (depth-- > 0) printf ")"; print ""; }
DJVU 語法與 XML 無關;這些是s 表達式。