Just making htmldoc use a better way to correct urls. Now uses 'URI' and Apache::URI, so that will probably need to be added to dependencies.
Index: lib/Apache/AxKit/Language/HtmlDoc.pm =================================================================== RCS file: /home/cvspublic/xml-axkit/lib/Apache/AxKit/Language/HtmlDoc.pm,v retrieving revision 1.4 diff -u -r1.4 HtmlDoc.pm --- lib/Apache/AxKit/Language/HtmlDoc.pm 18 Feb 2003 22:37:22 -0000 1.4 +++ lib/Apache/AxKit/Language/HtmlDoc.pm 9 May 2003 11:27:38 -0000 @@ -12,6 +12,8 @@ use Apache::AxKit::Language; use Apache::AxKit::LibXMLSupport; use Apache::AxKit::Provider; +use Apache::URI; +use URI; use XML::LibXSLT; use IPC::Run qw(run); use Cwd; @@ -44,12 +46,44 @@ $dom = $parser->parse_string($source_text, $r->uri()); } $dom->process_xinclude(); + + XML::LibXSLT->register_function("perl://apache/axkit/language/htmldoc", "url_fix", + sub { my ($ref) = @_; + my $str = $ref; + eval { + my $r = Apache->request(); + my $realabs = Apache::URI->parse($r)->unparse(); + $str = URI->new_abs( $ref, $realabs ); + }; + return "$str"; + } + ); + my $style_dom = $parser->parse_string(<< 'EOX','.'); <?xml version="1.0"?> -<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml"> +<xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:x="http://www.w3.org/1999/xhtml" + xmlns:perl="perl://apache/axkit/language/htmldoc"> <xsl:output method="html" encoding="ISO-8859-15"/> -<xsl:template match="*"><xsl:copy select="."><xsl:copy-of select="@*"/><xsl:apply-templates/></xsl:copy></xsl:template> -<xsl:template match="text()"><xsl:value-of select="."/></xsl:template> + <xsl:template match="*|comment()"> + <xsl:copy select="."> + <xsl:apply-templates select="@*"/> + <xsl:apply-templates/> + </xsl:copy> + </xsl:template> + <xsl:template match="@*"> + <xsl:attribute name="{name()}"><xsl:value-of select="."/></xsl:attribute> + </xsl:template> + <xsl:template match="text()"> + <xsl:value-of select="."/> + </xsl:template> + <xsl:template match="@href"> + <xsl:attribute name="href"><xsl:value-of select="perl:url_fix(.)"/></xsl:attribute> + </xsl:template> + <xsl:template match="@x:href"> + <xsl:attribute name="x:href"><xsl:value-of select="perl:url_fix(.)"/></xsl:attribute> + </xsl:template> </xsl:stylesheet> EOX my $stylesheet = XML::LibXSLT->parse_stylesheet($style_dom); @@ -57,16 +91,10 @@ my $result; my $input = $stylesheet->output_string($results); - my $host = $r->hostname; - $input =~ s{ href="/}{ href="http://$host/}g; - my $path = $r->document_root; - $input =~ s{ src="/}{ src="$path/}g; - $path = $r->uri; - $path =~ s{/+[^/]*$}{/}; - $input =~ s{ href="(?!/|.{0,5}:)}{ href="http://$host$path}g; + AxKit::Debug(8, "About to shell out to htmldoc - hope you have it installed..."); AxKit::Debug(10, $input); - run(['htmldoc','--quiet','--format','pdf13','--truetype','--size','a4','--co lor','--charset','8859-15','--webpage',$r->dir_config->get('AxHtmlDocOptions '),'-'],\$input,\$result); + run(['htmldoc','--quiet','--format','pdf13','--embedfonts', '--size','a4','--color','--charset','8859-15','--webpage',$r->dir_config->ge t('AxHtmlDocOptions'),'-'],\$input,\$result); if (substr($result,0,5) ne '%PDF-') { throw Apache::AxKit::Exception::Error(-text => 'htmldoc returned error: '.$result);