#!/usr/local/bin/perl # Index of descriptor names. # Arnaud Le Hors lehors@w3.org/Ian Jacobs ij@w3.org # $Id: mkdescidx,v 2.0 1998-02-02 18:53:01 bbos Exp $ use English; if (($_ = $ARGV[0], /^-r/) && $ARGV[0]) { shift; $realpath = $ARGV[0]; shift; } else { $realpath = (); } $PROGNAME = substr($0, rindex($0, "/") + 1); if (!$ARGV[1]) { print "Usage: $PROGNAME [-r realpath] indexfile dbase\n"; exit 1; } else { $indexf = $ARGV[0]; $dbasef = $ARGV[1]; } ### main # compute path relative to index file $root = ""; @elems = split("/", $indexf); pop @elems; # get rid of the file itself foreach (@elems) { $root .= "../"; } # copy file in memory sub readdb { if (!open(DBASE, $_[0])) { die "$PROGNAME Error: Cannot open file: $_[0]\n"; } $INPUT_RECORD_SEPARATOR="/*"; $buf = ""; $indexes = (); while ($buf = ) { $INPUT_RECORD_SEPARATOR="*/"; unless (eof(DBASE)) { $entry=; $INPUT_RECORD_SEPARATOR="/*"; if ($entry =~ /((.*?);;.*)\*\//sio) { $data = $1; $key = $2; # Newlines and tabs-> space $data =~ s/[\n\t]+/ /gs; $indexes{$key} = $data; } else { warn "Bad syntax: $entry\n"; } } } close(DBASE); } sub cleanup { # Put in right HTML markup $arg = $_[0]; $arg =~ s/^[ \t\n]+//gs; $arg =~ s/[ \t\n]+$//gs; $arg =~ s/[&]/\&\;/gs; $arg =~ s/[<]/\<\;/gs; $arg =~ s/[>]/\>\;/gs; return "$arg"; } # Descriptor database entries between "/*" and "*/" sub format_name { $name = cleanup($_[0]); # print OUTPUT "'" . $name . "'<\/span>\n"; print OUTPUT "'" . $name . "'<\/span>\n"; } sub format_val { # Replace by link to value def of n # Replace <'m'> by link to descriptor 'm' $value = $_[0]; $value =~ s/^[ \t\n]+//gs; $value =~ s/[ \t\n]+$//gs; $value =~ s/\<([^']+?)\>/\<\;\1\>\;<\/span>/sgi; $value =~ s/\<\'(.+?)\'\>/\'\1\'<\/span>/sgi; print OUTPUT "$value\n"; } sub format_init { print OUTPUT "" . cleanup($_[0]) . "\n"; } #sub format_media { # # If just visual, replace by space. # $fmedia = cleanup($_[0]); # $fmedia =~ s/^visual$/ /; # print OUTPUT "$fmedia\n"; #} sub table_head { print OUTPUT "\n"; print OUTPUT ""; print OUTPUT ""; print OUTPUT ""; print OUTPUT "\n"; } sub table_body { foreach $key (sort (keys %indexes)) { ($name, $val, $init, $media) = split(/;;/, $indexes{$key}); print OUTPUT ""; format_name($name); format_val($val); format_init($init); print OUTPUT "\n"; } } sub table_foot { print OUTPUT "
Name"; print OUTPUT "Values"; print OUTPUT "Initial value"; print OUTPUT "
\n"; } # main readdb($dbasef); open(OUTPUT, "> $indexf"); table_head(); table_body(); table_foot(); close(OUTPUT); close(DBASE);