Notas e Regex: um casamento perfeito <3

Baixe como e-book

Nos livros digitais, as notas são elementos que sempre precisarão ser adaptados. Num impresso, há duas formas principais de organizá-las: no rodapé das páginas (de modo que o leitor pode visualizá-las imediatamente após se deparar com a indicação numérica) ou numa seção específica no final do livro (o leitor passa as páginas e checa a informação). No primeiro caso, temos a questão da fluidez: o conceito de página num e-book não existe como no impresso, de modo que não há um rodapé onde posicioná-las; todas deverão, portanto, ir para o final do capítulo – uma modificação bem simples. Já no segundo, não existe adaptação em si: basta criar uma página exclusiva para as notas, replicando o original.

A adaptação decisiva não é de posicionamento, mas de acesso: o leitor deve poder acessar a nota tão logo o número apareça. Para isso, o recurso comumente utilizado é o da linkagem (na falta de uma palavra melhor). Um link para a nota correspondente é inserido no número em meio ao texto, e um link de retorno é inserido no número da nota no final do capítulo ou do livro, de modo que o leitor pode transitar entre texto e notas imediatamente.

A linkagem pode ser um trabalho árduo. É preciso criar os links um por um, todos diferentes entre si, e de modo sequencial, para manter uma organização. Imaginem um capítulo com 100 notas. Imaginem compor os links na mão, um por um, ida e volta. Barra pesada.

Por sorte, temos o nosso companheiro de todas as horas, o Regex. A Joana já falou sobre ele em duas ocasiões (aqui e aqui). Alguns recursos desse motor de busca por expressões regulares facilitam muito o trabalho de linkar as notas do seu livro.

Notas de rodapé

Neste caso, a primeira coisa a fazer é posicionar as notas relativas a um capítulo no final dele, caso já não estejam lá. Isso feito, posicione o cursor no topo da página para iniciar a busca e mude o motor de busca para Regex.

Os números das notas virão assinalados com uma classe de caractere1. Identificando essa classe, pode-se compor a linha de busca:

(<span class=”nomedaclasse”>)(\d+)(</span>)

imagem01-busca

O segredo aqui é o (\d+). Trata-se de um comando que indica qualquer número. A busca vai retornar, portanto, todos os trechos que contenham um número abrangido pela aplicação da classe de caractere utilizada para as notas.

Agora, no campo de substituição, digite:

<a href=”#nota\2″ id=”nota\2-volta”>\1\2\3</a>

A substituição começa com a composição do link. O href=”#nota\2″ indica para onde o link está apontando, ou seja, para o onde se deve ir. Nesse caso, como a nota está na mesma página xhtml do texto do capítulo, basta escolher um nome para designar o ponto para o qual se quer ir. A tralha (“#”) serve para isso. Aquele link, portanto, levará ao ponto daquela página com a identificação “nota\2”. O id=”nota\2-volta” serve para atribuir uma identificação ao número da nota, ou seja, um link poderá também ser endereçado a ele.

Há vários números na linha de substituição, como você certamente notou. Perceba que, na busca, separamos os elementos com parênteses. Na hora de substituir, não precisamos escrevê-los novamente: basta numerá-los. O número era o segundo elemento buscado e vamos usá-lo para endereçar o link e para identificá-lo; portanto, basta usar \2 (a contra-barra é INDISPENSÁVEL!) para atribuí-lo na linha de substituição.

imagem01-substituicao

Os demais elementos se repetem: \1 para a classe de nota; \2 novamente para o número, que não muda; \3 para o </span>. E, por fim, o </a> fecha a área de abrangência do link.

Com isso, temos os links de ida. Mas o leitor também precisa voltar ao texto. Posicione o cursor antes de todas as notas. A linha de busca será:

(<p class=”classe-notas”>)(\d+)

Os resultados serão todos os inícios das notas em si (imagem abaixo), que é tudo que precisamos.

imagem02-busca

No campo de substituição, escreva:

\1<a href=”#nota\2-volta” id=”nota\2″>\2</a>

Aqui a lógica de substituição é mais simples: mantemos o primeiro item preocurado, <p class=“classe-notas”>, através do \1 pois o parágrafo tem classe atribuída; depois, à semelhança do que fizemos anteriormente, formamos um link, mas este de retorno ao número da nota (onde, por sua vez, está o link de ida). Aqui, novamente, o número foi o segundo item buscado, e o \2 o representa na linha de substituição. Perceba a lógica: os links vão e voltam porque o primeiro aponta para o id do segundo e o segundo aponta para o id do primeiro.

imagem02-substituicao

Nos dois casos (ida e volta), basta usar o botão “Replace all” para efetuar todas as substituições  de uma vez (sempre com “Current File” selecionado, como indicado na imagem, para que as alterações ocorram num capítulo de cada vez, por precaução) e economizar um bom tempo.

Notas no fim do livro

Nesse caso, o procedimento se complexifica. Agora temos que lidar com a localização das notas num ponto mais distante do livro – outro arquivo xhtml. Para encontrar os números das notas, nada muda: (<span class=”nomedaclasse”>)(\d+)(</span>)

A substituição é que fica diferente:

<a href=”../Text/notas.xhtml#nota\2a” id=”nota\2-volta”>\1\2\3</a>

imagem03-1

Acrescentamos: o nome do arquivo xhtml onde se encontram as notas, já que dessa vez elas não se encontram no final do capítulo; e uma letra (no exemplo, a) ao endereço da nota. Por que a letra? Aqui entra o pulo do gato: se as notas estão todas numa única página, não podemos ter identificadores iguais. “nota1”, “nota2”, “nota3”… certamente se repetirão, o que gerará erros. É necessário, portanto, diferenciá-los, e letras são uma forma prática de fazer isso, já que são sequenciais2. Não é necessário acrescentar letra no id do próprio número da nota (que, como vimos, serve para receber o link de retorno), uma vez que, na página daquele capítulo, só haverá aquele id. A operação deve ser repetida em cada capítulo, com a letra sendo modificada – nota1b no capítulo 2, nota1c no capítulo 3 e assim por diante.

<a href=”../Text/notas.xhtml#nota\2b” id=”nota\2-volta”>\1\2\3</a>

<a href=”../Text/notas.xhtml#nota\2c” id=”nota\2-volta”>\1\2\3</a>

<a href=”../Text/notas.xhtml#nota\2d” id=”nota\2-volta”>\1\2\3</a> …

Agora, vamos para a página das notas. Aqui não se pode usar o “Replace all”, é necessário dar passos mais lentos, observando os conjuntos de notas um por um. Na busca, nenhuma mudança: (<p class=”classe-notas”>)(\d+)

Na substituição:

\1<a href=”../Text/capitulo1.xhtml#nota\2-volta” id=”nota\2a”>\2</a>

imagem03-2

Acrescenta-se o nome do arquivo xhtml referente ao capítulo das notas em questão. Se o capítulo 1 tem 30 notas, a substituição deve ser feita apenas nessas 30 notas, com toda a atenção. Quando as substituições do capítulo 2 forem feitas, deve-se modificar o nome do arquivo para o correspondente (capitulo2.xhtml) e mudar o id da nota de acordo com o capítulo – o que, em nosso exemplo, fazemos mudando a letra.

\1<a href=”../Text/capitulo1.xhtml#nota\2-volta” id=”nota\2b”>\2</a>

\1<a href=”../Text/capitulo1.xhtml#nota\2-volta” id=”nota\2c”>\2</a>

\1<a href=”../Text/capitulo1.xhtml#nota\2-volta” id=”nota\2d”>\2</a> …

Se isso tudo soou confuso – se você está entrando pela primeira vez em contato com Regex, imagino que soou –, abra o Sigil e treine bastante. Se bem entendido e aplicado, esses recursos te ajudarão a poupar um tempo precioso e otimizar sua produção.


 

1.  Outra forma de aplicar o estilo sobrescrito aos números é usar a propriedade <sup>. Para os fins deste texto, tenho em mente um arquivo exportado do InDesign, onde o estilo estaria aplicado por meio de uma classe.

2. Naturalmente, você pode fazer de outra forma. Basta a diferenciação.

escrito por Josué de Oliveira

Josué de Oliveira

Josué de Oliveira tem 25 anos e trabalha com e-books há pouco mais de três. Integra a equipe de digitais da editora Intrínseca, lidando diretamente com a produção dos mesmos, da conversão à finalização. É formado em Estudos de Mídia pela Universidade Federal Fluminense. Gosta de ler, escrever, ver filmes esquisitos e curte bandas que ninguém conhece. Tem alguns contos publicados em antologias e um romance policial que, segundo rumores, um dia ficará pronto.

7 comentários sobre “Notas e Regex: um casamento perfeito <3

  1. Prezados, fiquei surpreso com o post do Josué de hoje.
    Como sou novo no mundo dos livros digitais e cheguei para trabalhar em uma plataforma especifica e personalizada, não acreditei que as tecnologias convencionais ainda não possuam um ícone para “linkagem” automática de notas e referencias.
    Nosso aplicativo possui esse sistema padrão, fácil e totalmente preparado para ser utilizado por editores, mesmo sem conhecimentos de programação.
    Estou a disposição para maiores informações e querendo fazer uma analise da nossa ferramenta será muito bem-vindo.
    Obrigado!
    Adoro o Colofão!! rs
    André.

    • Oi, André, tudo certo? Obrigado pelo comentário.

      Bem, cabe uma explicação aqui. Os softwares que utilizamos para editar ePubs (sobretudo o Sigil, que é esse mostrado nos prints do post, mas também outros, como Notepad++ e Text Wranggler) possuem esse ícone para linkagem automática. É um dos recursos básicos. A questão é que ele permite a criação de um link de cada vez, e você precisa manualmente selecionar o texto a ser linkado, direcioná-lo para o ponto de chegada etc. O que o Regex oferece é a possibilidade de localizar e selecionar os trechos específicos do texto que receberão os links — a partir de parâmetros amplos predefinidos (ex. TODO e QUALQUER NÚMERO que esteja com a classe X aplicada) –, e aplicá-los de modo automático. A seleção fica toda por conta do próprio mecanismo, não sendo necessário que você marque o texto. Daí a praticidade desse método em específico. :)

      Abraços.

  2. Olá Josué

    Muito útil e didático o tutorial para aplicar essa RegEx. Já lancei de mão algumas vezes mas é bom ter alternativas.
    Quanto ao termo que colocaste: linkagem. Para fins de imagem mental eu costumo usar a expressão “salto” ou “zona de salto” que aprendi com o MAQ do acessibilidade legal – http://www.acessibilidadelegal.com/13-saltos.php.
    Como estamos lidando com HTML no ePUB acredito que também seja aplicável e até facilite a compreensão da funcionalidade dos links entre conteúdos internos do livro.

    Abraço

    Israel

  3. Bom dia, Josué!
    Seria possível fazer isso com palavras?
    Por exemplo: Eu possuo 10 ocorrências de “Blog Colofão” no meu documento e eu preciso fazer um link da 1ª ocorrência para a 2ª, da 2ª pra 3ª e assim por diante até a 10ª.
    É possível?

    Abs
    João

Deixe um comentário