Processamento de texto: converte texto de tabela de conteúdo em formato de indicador de djvu?

1

Normalmente, na tabela de conteúdo de um livro, cada linha é para um capítulo ou seção e termina com seu número de página, por exemplo,

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

O formato do marcador de arquivos djvu para o exemplo acima é

(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" ))
)

em que os pontos principais são o pareamento dos parênteses esquerdo e direito para organização em árvore de seções e capítulos, as aspas duplas para cada item de marcador e cada número de página é precedido por um # . A separação entre linhas e recuo é apenas por conveniência para visualizar e editar manualmente o arquivo de texto do marcador, e não importa em nada.

Minhas perguntas são:

  1. Eu queria saber se há algumas maneiras convenientes de converter uma planície arquivo de texto de tabela de conteúdo em formato de indicador de djvu, que pode reduzir o manuseio manual o máximo possível? Isso pode ser feito por aplicativos de processamento de texto ou programação sob alguma linguagem de programação ou combinação de ambos.
  2. Como sugerido com uma resposta relacionada por Dennis Williamson ,

    What you're doing is starting to look a little bit like XML. Perhaps you should use the real thing and use proper tools to manipulate it.

    a quick google turns up djvuxml. XML files can be easily manipulated using the appropriate Python or Perl module or shell utilities such as xmlstarlet.

    Gostaria de saber se o formato de bookmark djvu é semelhante ao formato XML (eu admito Ainda não estou familiarizado com XML, mas estou disposto a aprender se puder ajudar Aqui)? As ferramentas XML podem ser usadas para converter um arquivo de texto da tabela de conteúdo em formato de bookmark djvu?

por Tim 20.07.2011 / 16:33

2 respostas

2

Aqui está um script awk que tenta produzir recuo decente. Ele supõe que a entrada é bem formada (por exemplo, a linha antes de 3.2.2 deve ser 3.1 ou 3.1.something , não 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 ""; }

A sintaxe DJVU não tem nada a ver com XML; estas são s-expressions .

    
por 20.07.2011 / 19:01
1

Qualquer linguagem de programação será capaz de analisar corretamente o seu exemplo de forma correta.

Escolha uma linguagem de programação e, em seguida, analise a entrada deliminando a entrada primeiro por "." e "" primeiro e "" segundo.

Eu usaria o Perl, mas qualquer linguagem com a qual o desenvolvedor esteja mais familiarizado funcionaria bem.

Tenha em mente que as soluções automáticas só funcionarão se a entrada seguir uma sintaxe estrita. E, a menos que seja um padrão conhecido, não haverá ferramentas prontas para converter isso em XML ou djvu.

    
por 20.07.2011 / 17:06