#!/usr/tools/bin/perl
#
# $Id: makebibtexdtd.pl,v 1.1 1994/04/26 15:19:34 connolly Exp $
#
# USAGE:
#   perl makebibtexdtd.pl <bibtexin.tex >>bibtex.dtd
#   vi bibtex.dtd # fix up stuff
#

$/ = "\n\n";

while(<>){
    local($gi, @required, @optional);

    last if /end\{desc/;

    next unless s/^\\item\[([^\\]+)[^\]]+\]//;

    $gi = $1;

    s/^[^\.]+// && print "\n<!-- $& -->\n";

    if(s/Required fields?: ([^\.]+)\.//){
	local($_) = $1;

	s/\\hbox\{\\tt //g;
	s/\}//g;
	@required = split(/[,\s]+/, $_);
    }

    if(s/Optional fields?: ([^\.]+)\.//){
	local($_) = $1;

	s/\\hbox\{\\tt //g;
	s/\}//g;
	@optional = split(/[,\s]+/, $_);
    }

    print "<!ELEMENT $gi - O (";
    undef($sep);
    foreach (@required){
	print $sep, " ", $_, " ";
	$sep = "&";
    }

    foreach (@optional){
	print $sep, " ", $_, "? ";
	$sep = "&";
    }

    print ")>\n";
}

while(<>){
    local($gi, @required, @optional);

    last if /end\{desc/;

    next unless s/^\\item\[([^\\]+)[^\]]+\]//;

    $gi = $1;

    print "\n<!ELEMENT $gi - O (%atomic)\n";
    s/^\s+//;
    s/\s+$//;
    print "--\n$_\n--\n>\n"; # comments
}
