Número de cabeçalhos html

0

Eu tenho um arquivo html que contém a seguinte estrutura:

<h1 class="section">First title</h1>
  <div><h2 class="chapter">Chapter title</h2>
     Chapter text here.
  <div><h2 class="chapter">Chapter title</h2>
     Chapter text here.
  <div><h2 class="chapter">Chapter title</h2>
     Chapter text here.
<h1 class="section">Second title</h1>
  <div><h2 class="chapter">Chapter title</h2>
     Chapter text here.
  <div><h2 class="chapter">Chapter title</h2>
     Chapter text here.
  <div><h2 class="chapter">Chapter title</h2>
     Chapter text here.

Gostaria de adicionar um número antes dos títulos dos capítulos assim:

<h1 class="section">First title</h1>
  <div><h2 class="chapter">1. Chapter title</h2>
     Chapter text here.
  <div><h2 class="chapter">2. Chapter title</h2>
     Chapter text here.
  <div><h2 class="chapter">3. Chapter title</h2>
     Chapter text here.
<h1 class="section">Second title</h1>
  <div><h2 class="chapter">1. Chapter title</h2>
     Chapter text here.
  <div><h2 class="chapter">2. Chapter title</h2>
     Chapter text here.
  <div><h2 class="chapter">3. Chapter title</h2>
     Chapter text here.

Tentei inserir números de capítulo através de CSS usando contra-redefinição e contra-incremento para cabeçalhos, mas isso funciona apenas em determinados contextos.

Existe um script (python, perl, ???) que possa procurar a classe = "seção" e depois inserir sequencialmente números antes dos títulos dos capítulos?

Aqui está uma amostra do arquivo real:

<body><div class='root'><h1 class="section">Génesis</h1><div><h2
class="chapter">Dios ordena el universo</h2><div>01 En el principio,
cuando Dios creó los cielos y la tierra, </div><div>02 todo era
confusión y no había nada en la tierra. Las tinieblas cubrían los
abismos mientras el espíritu de Dios aleteaba sobre la superficie de
las ag [many lines here] </div><div><h2 class="chapter">Descanso del
séptimo día</h2><div>01 Así estuvieron [many lines here] <div
class='root'><h1 class="section">Éxodo</h1><div><h2 class="chapter">Los
hebreos se multiplican en Egipto</h2><div>01 Estos son los nombres de
los hijos de Israel que llegaron con Jacob a Egipto, cada uno con su
familia:</div><div>02 Rubén, Simeón, Leví, Judá,</div><div>03 Isacar,
[many lines here] etc, etc
Façam
fonte

Respostas:

1

Editar

Agora que eu vi o seu arquivo, o problema é que você não tem finais de linha regulares. De fato, parece que seu arquivo inteiro é uma linha longa, está correto?

Meu script depende da análise do seu arquivo linha por linha. No formato real do seu arquivo, as linhas parecem estar quebradas aleatoriamente, por isso será muito difícil de analisar. Obviamente, como foi expresso de maneira bastante eloquente, se um pouco demente aqui , você nunca deve analisar HTML com expressões regulares.

Dito isto, o script abaixo funciona no arquivo que você publicou.


#!/usr/bin/perl 

my $file=<>; ## Load the file into memory
my $a=1;     ## Set up a counter

## Split the file on each occurence of
## 'class="chapter"' and save into the array @b
my @b=split(/class=.chapter.>/,$file);

## Print the beginning of the file
## and remove it from the array.
print shift(@b);

## Now, go through the array, adding the counter ($a)
## to each chapter heading.
foreach (@b) {
    ## Print 'class="chapter"', the counter and 
    ## the rest of the text until the next chapter heading
    print "class=\"chapter\">$a. $_"; 

    $a++;   ## Increment the counter
    $a=1 if /class="section"/; ## reset the counter
}
Terdon
fonte
Eu tentei, mas não funcionou. Eu não sei perl, mas se eu entendi um pouco, esse script procura "Título" no título. Os "Título 1" e "Título 2" acima são exemplos. O bit comum para todas essas tags <a> é a class = "section" e não o título. Eu modifiquei meu exemplo acima disso pode ajudar.
Faça
@ToDo, modifiquei o script, deve funcionar agora
terdon
Ainda não funciona. Nenhuma mensagem de erro. Talvez se você pudesse explicar o que significam as diferentes linhas, eu poderia tentar depurar, se não houver muitos problemas.
Para fazer
@ToDo, comentários adicionados. O script postado funciona no exemplo da sua pergunta. É um trecho do seu arquivo real ? Caso contrário, publique o arquivo, qualquer pequena alteração no formato interromperá o script; eu poderia torná-lo mais geral se pudesse ver o arquivo real.
terdon 08/02
Eu adicionei uma amostra do arquivo real. I modificou a estrutura do arquivo, bem substituindo <a> com <h1>
Para Fazer
3

Você provavelmente pode usar <ol>com <li>?

Não tenho certeza do que você quer fazer com essas <a>tags, mas seus capítulos podem ter algo parecido com isto:

<ol>
  <li class="chapter">Chapter title</li>
  <li class="chapter">Chapter title</li>
  <li class="chapter">Chapter title</li>
</ol>

E todo novo conjunto de <ol>elementos redefinirá a numeração para você.

Steve Blackwell
fonte
0

O CSS também pode ajudá-lo a numerar automaticamente:

a { counter-reset: section; }
h2:before {
    counter-increment: section;
    content: counter(section) ". ";
    display: inline;
}
kamae
fonte