Id's no sigil

Sérgio Luiz Araújo Silva

Sérgio Luiz Araújo Silva Publicado 14/02/2021 


O sigil adiciona IDs tipo sigil_toc_id_123 nas seções, Pergunto, há como determinar a ordem desses IDs?  

No meu caso estou interessado em usar REGEX para gerar IDs à partir do nome da seção bem como usar esses IDs nas referências, há como amarrar um ID deixanduo fixo?

Aproveitando o ensejo, para os usuários do vim, aqui vai uma dica de como adicionar números nas seções de forma crescente:
Para seções h2

:let c=0 | g/<h2[^>]*>\zs[^<]*\ze/ let c+=1 | s//\='1.' . c . ' - ' . submatch(0)

No caso o número 1 aí de cima refere-se ao capítulo 1, desse modo o contador que o vim cria vai sendo incrementado em cada subseção ficando algo do tipo: 1.3 nome da seção...

A regex:

/<h2[^>]*>\zs[^<]*\ze/ 

<h2  ............ cada h2
[^>]* ........... qualquer coisa menos fechamento de tag >
\zs ............. um recurso de regex que só tem no vim (tipo comece deste ponto)
[^<]* ........... tudo menos abertura de tag <
\ze ............. aqui o vim considera como final to matching (casamento)


Abaixo um print do que já consegui em termos de formatação do meu epub.

Solução com uso de editor externo

Como eu fiz para usar os nomes das seções sem número como ids para o epub:


OBS: Quando me refiro a "sem número" é porque numerei minhas seções como visto acima, e não queria usar os números de seção dentro dos IDS.
 

  1. Fiz um backup do livro, copiando o epub para outro local e mudei a extensão para zip
  2. Com o vim rodei os seguintes comandos:
Abrir os arquivos para numerar (no meu caso só numerei à partir do arquivo 003)
vim {003..020}*.xhtml

usar os títulos sem números em lowercase como id
:silent! argdo :%s/\v(\<h2 id\=")([^"]*)("\>)(\d+\.\d+ - )([^<]*)(\<\/h2\>)/\1\L\5\3\4\5\6/g

Trocar os espaços nos ids por underscores
:silent! argdo :%s/<h2 id="\zs[^"]*\ze/\=substitute(submatch(0), ' ', '_', 'g')/g

# salvar todos os arquivos
:silent! argdo update

Após fazer as alterações recompactei o arquivo para zip, renomeei para epub (extensão) e no sigil mandei gerar ovamente o Table of Contents

Apesar da complexidade dos comandos nota-se o poder absurdo do vim e obviamente das expressões regulares, cheguei a solititar a possibilidade de integração do vim como editor no site de desenvolvimento do sigil, mas a solicitação foi prontamente negada, em tom desdenhoso. 


Poder usar um editor externo para um só arquivo é até razoável, mas no vim podemos rodar um comando de substituição em todos os arquivos abertos de uma só vez. É provável que usando só o Sigil eu consiga, vou ver se somente com expressões regulares consigo pegar o nome da seção (sem o número), substituindo espaços por underscores e tudo o mais. 


Tenho por hábito documentar o meu progresso nos meus projetos para facilitar pesquisas futuras e claro ajudar outras pessoas que desejem se aprofundar.


 

Voltar ao topo -->