일반적으로 책의 목차에서 각 줄은 장이나 섹션을 나타내며 해당 페이지 번호로 끝납니다.
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" ))
)
요점은 섹션과 장의 트리형 구성을 달성하기 위한 왼쪽 및 오른쪽 대괄호 쌍, 각 북마크 항목에 대한 큰따옴표, #
북마크 텍스트 파일의 수동 보기 및 편집을 용이하게 하기 위해 각 페이지 번호 앞에 .line 분리를 사용하는 것입니다. 그것은 전혀 중요하지 않습니다.
내 질문은 다음과 같습니다
- 디렉터리의 일반 텍스트 파일을 djvu 책갈피 형식으로 변환하여 수동 처리를 최대한 줄이는 편리한 방법이 있는지 궁금합니다. 이는 텍스트 처리 응용 프로그램이나 프로그래밍 언어로 프로그래밍하거나 둘의 조합을 통해 수행할 수 있습니다.
-
당신이 하고 있는 일은 약간 XML처럼 보이기 시작했습니다. 어쩌면 실물을 사용하고 적절한 도구를 사용하여 조작해야 할 수도 있습니다.
빠른 Google 검색으로 djvuxml이 표시됩니다. XML 파일은 적절한 Python 또는 Perl 모듈이나 xmlstarlet과 같은 쉘 유틸리티를 사용하여 쉽게 조작할 수 있습니다.
djvu 북마크 형식이 XML 형식과 비슷한지 궁금합니다(아직 XML에 익숙하지 않다는 점은 인정하지만 여기서 도움이 된다면 기꺼이 배우고 싶습니다). XML 도구를 사용하여 목차 텍스트 파일을 djvu 책갈피 형식으로 변환할 수 있습니까?
답변1
이것은 적절한 들여쓰기를 생성하려고 시도하는 awk 스크립트입니다. 입력이 올바른 형식이라고 가정합니다(예: 앞의 줄은 또는 3.2.2
이어야 하고 가 아니어야 합니다 ).3.1
3.1.something
3
#! /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-표현.
답변2
모든 프로그래밍 언어는 입력을 구문 분석할 수 있습니다.예옳은.
프로그래밍 언어를 선택하고 입력을 구문 분석한 후 먼저 "."로 구분합니다. 첫 번째는 " "이고 그 다음은 " "입니다.
저는 Perl을 사용하겠지만, 개발자에게 가장 익숙한 언어는 무엇이든 잘 작동할 것입니다.
자동 솔루션은 입력이 엄격한 구문을 따르는 경우에만 작동한다는 점을 기억하세요. 이것이 알려진 표준이 아닌 이상 이를 XML이나 djvu로 변환하기 위한 사전 구축된 도구가 없습니다.