#!/usr/bin/perl # Use -*- perl -*- mode. # # This is a simple HTML document contents list creator and chapter # renumberer. # Copyright © 1997 Jaakko Hyvätti # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # The author may be contacted at: # # Email: Jaakko.Hyvatti@iki.fi # URL: http://www.iki.fi/hyvatti/ # Phone: +358 40 5011222 # # Please send any suggestions, bug reports, success stories etc. to the # Email address above. # Muuttaa

-otsikoiden alussa (mahdollisesti) esiintyvän numeron # vastaamaan järjestysnumeroa sisällysluettelossa. # # Lisää

-

-otsikkoihin ankkurin # # Lisää sisällysluetteloksi kaikki

-otsikot, ja muut otsikot alaotsikoiksi # Sisällysluettelo on ensimmäinen
    yksin rivillä, ja ulottuu seuraavaan #
:ään. # # Artikkelin rakenne: #

- pääotsikko, tähän ei kosketa. #

- lukujen otsikot. Numeroidaan, numeroitu lista sis.luettelossa # - alaotsikot, kerätään numeroimattomaan listaan # sisällysluettelossa, hierarkisesti sisennettynä. # # Huom! otsikon tai alaotsikon ankkuria (A NAME=)voi muuttaa mieleisekseen, # kunhan se alkaa ei-numerolla! Tällöin sitä käytetään numeroviitteen sijasta. $before_ol = ""; $ol = ""; $got_ol = 0; $wait_ol = 0; $after_ol = ""; $next_num = 0; $next_ref = 0; $level = 2; while (<>) { chomp; if (!$got_ol && !$wait_ol && /
    /i) { $before_ol .= $` . "\n" if $`; $before_ol .= $& . "\n"; $_ = $'; $wait_ol = 1; } if ($wait_ol) { if (m,
,i) { $after_ol = $& . "\n"; $after_ol .= $' . "\n" if $'; $wait_ol = 0; $got_ol = 1; } next; } if (m,^\s*\s*((]+)"?\s*>|<.*>)\s*)*([0-9]+\.\s+)?([^<>]+\S)(\s*<.*>)*\s*\s*$,i) { $h_level = $1; $name = $4; $header = $6; while ($h_level < $level) { $ol .= " \n"; $level--; } while ($h_level > $level) { $ol .= "
    \n"; $level++; } if (2 == $h_level) { $next_num++; $name = $next_num unless $name =~ /^[^0-9]/; $_ = "

    $next_num. $header

    "; $ol .= "
  • $header\n"; $next_ref = 0; } else { $next_ref++; $name = $next_num . "-" . $next_ref unless $name =~ /^[^0-9]/; $_ = "$header"; $ol .= "
  • $header\n"; } } if ($got_ol) { $after_ol .= $_ . "\n"; } else { $before_ol .= $_ . "\n"; } } while (2 < $level) { $ol .= "
\n"; $level--; } print $before_ol . $ol . $after_ol;