# -*-perl-*-
#+##############################################################################
#
# xhtml.pm: convert to well-formed xhtml transitional
# !!!!!!! This is very out of date!!!!
#
#    Copyright (C) 2003 Free Software Foundation, Inc.
#
# 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 3 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, see <http://www.gnu.org/licenses/>.
#
# Originally written by Patrice Dumas.
#
#-##############################################################################

# FIXME this is out of date. There are still the T2H_ prefixes!

# APA: Add SystemLiteral to identify the canonical DTD.
# [Definition:] The SystemLiteral is called the entity's system
# identifier. It is a URI, which may be used to retrieve the entity.
# See http://www.xml.com/axml/target.html#NT-ExternalID
set_default('DOCTYPE', '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/xhtml1-transitional.dtd">');

set_default('FRAMESET_DOCTYPE', '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/xhtml1-frameset.dtd">');

# -iso
# if set, ISO8859 characters are used for special symbols (like copyright, etc)
# FIXME certainly obsoleted by t2h_default_set_iso_symbols which should 
# certainly ba called indirectly through html_default_load
set_default('USE_ISO', 1);

# horizontal rules
$SMALL_RULE = '<hr size="1"/>';
$DEFAULT_RULE = '<hr/>';
$MIDDLE_RULE = '<hr size="2"/>';
$BIG_RULE = '<hr size="6"/>';

# this is added inside <head></head> after <title> and some <meta name>
# stuff, it can be used for eg. <style>, <script>, <meta> etc. tags.
$EXTRA_HEAD = '';

$print_page_head	      = \&T2H_XHTML_print_page_head;
$print_page_foot	      = \&T2H_XHTML_print_page_foot;
$print_frame              = \&T2H_XHTML_print_frame;
$button_icon_img	      = \&T2H_XHTML_button_icon_img;

#FIXME update once it is more stabilized in texi2html.pm
sub T2H_XHTML_print_page_head
{
    my $fh = shift;
    my $longtitle = "$Texi2HTML::THISDOC{'title_no_texi'}";
    $longtitle .= ": $Texi2HTML::NO_TEXI{'This'}" if exists $T2H_NO_TEXI{'This'};
    my $doctype = get_conf('doctype');
    my $bodytext = get_conf('BODYTEXT');
    print $fh <<EOT;
<?xml version="1.0" encoding="iso-8859-1"?>
$doctype
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="$T2H_LANG" lang="$T2H_LANG">
$T2H_THISDOC{'copying'}<!-- Created on $Texi2HTML::THISDOC{today} by $Texi2HTML::THISDOC{program} -->
<!--
$Texi2HTML::THISDOC{program_authors}
-->
<head>
<title>$longtitle</title>

<meta name="description" content="$longtitle"/>
<meta name="keywords" content="$longtitle"/>
<meta name="resource-type" content="document"/>
<meta name="distribution" content="global"/>
<meta name="Generator" content="$T2H_THISDOC{program}"/>
$EXTRA_HEAD
</head>

<body $bodytext>
$AFTER_BODY_OPEN
EOT
}

# <span> instead of <font>
sub T2H_XHTML_print_page_foot
{
    my $fh = shift;
    print $fh <<EOT;
<p>
 <span style="font-size: smaller">
  This document was generated $ADDRESS
  using <a href="$T2H_THISDOC{program_homepage}"><i>$Texi2HTML::THISDOC{program}</i></a>.
 </span>
 <br/>
$PRE_BODY_CLOSE
</p>
</body>
</html>
EOT
}

sub T2H_XHTML_print_frame
{
    my $fh = shift;
    my $toc_file = shift;
    my $main_file = shift;
    my $doctype = get_conf('FRAMESET_DOCTYPE');
    print $fh <<EOT;
$doctype
<html>
<head><title>$Texi2HTML::THISDOC{title}</title></head>
<frameset cols="140,*">
  <frame name="toc" src="$toc_file"/>
  <frame name="main" src="$main_file"/>
</frameset>
</html>
EOT
}

# / in <img>
sub T2H_XHTML_button_icon_img
{
    my $button = shift;
    my $icon = shift;
    my $name = shift;
    return '' if (!defined($icon));
    if (defined($name) && $name)
    {
        $name = ": $name";
    }
    else
    {
        $name = '';
    }
    $button = "" if (!defined ($button));
    return qq{<img src="$icon" border="0" alt="$button$name" align="middle"/>};
}

$simple_map{'*'} = '<br/>';

# formatting functions

$def_line	       = \&t2h_xhtml_def_line;
$index_summary     = \&t2h_xhtml_index_summary;
$image             = \&t2h_xhtml_image;

# need / in <img>
sub t2h_xhtml_image($$$)
{
   my $file = shift;
   my $base = shift;
   my $preformatted = shift;
   return "[ $base ]" if ($preformatted);
   return "<img src=\"$file\" alt=\"$base\"/>";
}

# process definition commands line @deffn for example
# <u> replaced by <span>
sub t2h_xhtml_def_line($$$$$)
{
   my $category = shift;
   my $name = shift;
   my $type = shift;
   my $arguments = shift;
   my $index_label = shift;
   $index_label = '' if (!defined($index_label));
   $name = '' if (!defined($name) or ($name =~ /^\s*$/));
   $type = '' if (!defined($type) or $type =~ /^\s*$/);
   if (!defined($arguments) or $arguments =~ /^\s*$/)
   {
       $arguments = '';
   }
   else
   {
       $arguments = '<i>' . $arguments . '</i>';
   }
   my $type_name = '';
   $type_name = " $type" if ($type ne '');
   $type_name .= ' <b>' . $name . '</b>' if ($name ne '');
   $type_name .= $arguments . "\n";
   if (! get_conf('DEF_TABLE'))
   {
       return '<dt>'. '<span style="text-decoration: underline">' . $category . ':</span>' . $type_name . $index_label . "</dt>\n";
   }
   else
   {
       
       return "<tr>\n<td align=\"left\">" . $type_name . 
       "</td>\n<td align=\"right\">" . $category . $index_label . "</td>\n" . "</tr>\n";
   }
}

# There is a br which needs / 
sub t2h_xhtml_index_summary($$)
{
    my $alpha = shift;
    my $nonalpha = shift;
    my $join = '';
    my $nonalpha_text = '';
    my $alpha_text = '';
    $join = " &nbsp; \n<br/>\n" if (@$nonalpha and @$alpha);
    if (@$nonalpha)
    {
       $nonalpha_text = join("\n &nbsp; \n", @$nonalpha) . "\n";
    }
    if (@$alpha)
    {
       $alpha_text = join("\n &nbsp; \n", @$alpha) . "\n &nbsp; \n";
    }
    #I18n
    return "<table><tr><th valign=\"top\">Jump to: &nbsp; </th><td>" .
    $nonalpha_text . $join . $alpha_text . '</td></tr></table>';
}
