diff options
Diffstat (limited to 'stylesheets/lfs-xsl/docbook-xsl-1.78.1/xhtml5/html5-element-mods.xsl')
-rw-r--r-- | stylesheets/lfs-xsl/docbook-xsl-1.78.1/xhtml5/html5-element-mods.xsl | 790 |
1 files changed, 790 insertions, 0 deletions
diff --git a/stylesheets/lfs-xsl/docbook-xsl-1.78.1/xhtml5/html5-element-mods.xsl b/stylesheets/lfs-xsl/docbook-xsl-1.78.1/xhtml5/html5-element-mods.xsl new file mode 100644 index 000000000..f3cb2d128 --- /dev/null +++ b/stylesheets/lfs-xsl/docbook-xsl-1.78.1/xhtml5/html5-element-mods.xsl @@ -0,0 +1,790 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE xsl:stylesheet [ +<!ENTITY % common.entities SYSTEM "../common/entities.ent"> +%common.entities; +]> +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:exsl="http://exslt.org/common" + xmlns="http://www.w3.org/1999/xhtml" + xmlns:stbl="http://nwalsh.com/xslt/ext/com.nwalsh.saxon.Table" + xmlns:xtbl="xalan://com.nwalsh.xalan.Table" + xmlns:lxslt="http://xml.apache.org/xslt" + xmlns:ptbl="http://nwalsh.com/xslt/ext/xsltproc/python/Table" + exclude-result-prefixes="exsl stbl xtbl lxslt ptbl" + version="1.0"> + +<!-- $Id: html5-element-mods.xsl,v 1.2 2011-09-18 17:47:28 bobs Exp $ --> + +<!--==============================================================--> +<!-- DocBook XSL Parameter settings --> +<!--==============================================================--> +<!-- Set these to blank so can output special HTML5 empty DOCTYPE --> +<xsl:param name="chunker.output.doctype-system" select="''"/> +<xsl:param name="chunker.output.doctype-public" select="''"/> + +<xsl:param name="table.borders.with.css" select="1"/> +<xsl:param name="html.ext">.xhtml</xsl:param> +<xsl:param name="toc.list.type">ul</xsl:param> +<xsl:param name="css.decoration" select="1"/> +<xsl:param name="make.clean.html" select="1"/> +<xsl:param name="generate.id.attributes" select="1"/> +<xsl:variable name="div.element">section</xsl:variable> + +<!--==============================================================--> +<!-- Customized templates --> +<!--==============================================================--> + +<!-- HTML5: needs special doctype --> +<xsl:template name="user.preroot"> + <xsl:text disable-output-escaping="yes"><!DOCTYPE html></xsl:text> +</xsl:template> + +<!-- HTML5: Replace HTML acronum with abbr for HTML 5 --> +<xsl:template match="acronym"> + <xsl:call-template name="inline.charseq"> + <xsl:with-param name="wrapper-name">abbr</xsl:with-param> + </xsl:call-template> +</xsl:template> + +<!-- HTML5: replace border="0" with border="" --> +<!-- HTML5: No @summary allowed --> +<!-- HTML5: replace many table atts with CSS styles --> +<xsl:template match="tgroup" name="tgroup"> + <xsl:if test="not(@cols) or @cols = '' or string(number(@cols)) = 'NaN'"> + <xsl:message terminate="yes"> + <xsl:text>Error: CALS tables must specify the number of columns.</xsl:text> + </xsl:message> + </xsl:if> + + <xsl:variable name="summary"> + <xsl:call-template name="pi.dbhtml_table-summary"/> + </xsl:variable> + + <xsl:variable name="cellspacing"> + <xsl:call-template name="pi.dbhtml_cellspacing"/> + </xsl:variable> + + <xsl:variable name="cellpadding"> + <xsl:call-template name="pi.dbhtml_cellpadding"/> + </xsl:variable> + + <!-- First generate colgroup with attributes --> + <xsl:variable name="colgroup.with.attributes"> + <colgroup> + <xsl:call-template name="generate.colgroup"> + <xsl:with-param name="cols" select="@cols"/> + </xsl:call-template> + </colgroup> + </xsl:variable> + + <!-- then modify colgroup attributes with extension --> + <xsl:variable name="colgroup.with.extension"> + <xsl:choose> + <xsl:when test="$use.extensions != 0 + and $tablecolumns.extension != 0"> + <xsl:choose> + <xsl:when test="function-available('stbl:adjustColumnWidths')"> + <xsl:copy-of select="stbl:adjustColumnWidths($colgroup.with.attributes)"/> + </xsl:when> + <xsl:when test="function-available('xtbl:adjustColumnWidths')"> + <xsl:copy-of select="xtbl:adjustColumnWidths($colgroup.with.attributes)"/> + </xsl:when> + <xsl:when test="function-available('ptbl:adjustColumnWidths')"> + <xsl:copy-of select="ptbl:adjustColumnWidths($colgroup.with.attributes)"/> + </xsl:when> + <xsl:otherwise> + <xsl:message terminate="yes"> + <xsl:text>No adjustColumnWidths function available.</xsl:text> + </xsl:message> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:otherwise> + <xsl:copy-of select="$colgroup.with.attributes"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <!-- Now convert to @style --> + <xsl:variable name="colgroup"> + <xsl:call-template name="colgroup.with.style"> + <xsl:with-param name="colgroup" select="$colgroup.with.extension"/> + </xsl:call-template> + </xsl:variable> + + <xsl:variable name="explicit.table.width"> + <xsl:call-template name="pi.dbhtml_table-width"> + <xsl:with-param name="node" select=".."/> + </xsl:call-template> + </xsl:variable> + + <xsl:variable name="table.width.candidate"> + <xsl:choose> + <xsl:when test="$explicit.table.width != ''"> + <xsl:value-of select="$explicit.table.width"/> + </xsl:when> + <xsl:when test="$default.table.width = ''"> + <xsl:text>100%</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$default.table.width"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + + <xsl:variable name="table.width"> + <xsl:if test="$default.table.width != '' + or $explicit.table.width != ''"> + <xsl:choose> + <xsl:when test="contains($table.width.candidate, '%')"> + <xsl:value-of select="$table.width.candidate"/> + </xsl:when> + <xsl:when test="$use.extensions != 0 + and $tablecolumns.extension != 0"> + <xsl:choose> + <xsl:when test="function-available('stbl:convertLength')"> + <xsl:value-of select="stbl:convertLength($table.width.candidate)"/> + </xsl:when> + <xsl:when test="function-available('xtbl:convertLength')"> + <xsl:value-of select="xtbl:convertLength($table.width.candidate)"/> + </xsl:when> + <xsl:otherwise> + <xsl:message terminate="yes"> + <xsl:text>No convertLength function available.</xsl:text> + </xsl:message> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$table.width.candidate"/> + </xsl:otherwise> + </xsl:choose> + </xsl:if> + </xsl:variable> + + <!-- assemble a table @style --> + <xsl:variable name="table.style"> + + <xsl:if test="$cellspacing != '' or $html.cellspacing != ''"> + <xsl:text>cellspacing: </xsl:text> + <xsl:choose> + <xsl:when test="$cellspacing != ''"> + <xsl:value-of select="$cellspacing"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$html.cellspacing"/> + </xsl:otherwise> + </xsl:choose> + <xsl:text>; </xsl:text> + </xsl:if> + + <xsl:if test="$cellpadding != '' or $html.cellpadding != ''"> + <xsl:text>cellpadding: </xsl:text> + <xsl:choose> + <xsl:when test="$cellpadding != ''"> + <xsl:value-of select="$cellpadding"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$html.cellpadding"/> + </xsl:otherwise> + </xsl:choose> + <xsl:text>; </xsl:text> + </xsl:if> + + <xsl:choose> + <xsl:when test="string-length($table.width) != 0"> + <xsl:text>width: </xsl:text> + <xsl:value-of select="$table.width"/> + <xsl:text>; </xsl:text> + </xsl:when> + <xsl:when test="../@pgwide=1 or local-name(.) = 'entrytbl'"> + <xsl:text>width: 100%; </xsl:text> + </xsl:when> + <xsl:otherwise> + </xsl:otherwise> + </xsl:choose> + + <xsl:choose> + <xsl:when test="../@frame='all' or (not(../@frame) and $default.table.frame='all')"> + <xsl:text>border-collapse: collapse; </xsl:text> + <xsl:call-template name="border"> + <xsl:with-param name="side" select="'top'"/> + <xsl:with-param name="style" select="$table.frame.border.style"/> + <xsl:with-param name="color" select="$table.frame.border.color"/> + <xsl:with-param name="thickness" select="$table.frame.border.thickness"/> + </xsl:call-template> + <xsl:call-template name="border"> + <xsl:with-param name="side" select="'bottom'"/> + <xsl:with-param name="style" select="$table.frame.border.style"/> + <xsl:with-param name="color" select="$table.frame.border.color"/> + <xsl:with-param name="thickness" select="$table.frame.border.thickness"/> + </xsl:call-template> + <xsl:call-template name="border"> + <xsl:with-param name="side" select="'left'"/> + <xsl:with-param name="style" select="$table.frame.border.style"/> + <xsl:with-param name="color" select="$table.frame.border.color"/> + <xsl:with-param name="thickness" select="$table.frame.border.thickness"/> + </xsl:call-template> + <xsl:call-template name="border"> + <xsl:with-param name="side" select="'right'"/> + <xsl:with-param name="style" select="$table.frame.border.style"/> + <xsl:with-param name="color" select="$table.frame.border.color"/> + <xsl:with-param name="thickness" select="$table.frame.border.thickness"/> + </xsl:call-template> + </xsl:when> + <xsl:when test="../@frame='topbot' or (not(../@frame) and $default.table.frame='topbot')"> + <xsl:text>border-collapse: collapse;</xsl:text> + <xsl:call-template name="border"> + <xsl:with-param name="side" select="'top'"/> + <xsl:with-param name="style" select="$table.frame.border.style"/> + <xsl:with-param name="color" select="$table.frame.border.color"/> + <xsl:with-param name="thickness" select="$table.frame.border.thickness"/> + </xsl:call-template> + <xsl:call-template name="border"> + <xsl:with-param name="side" select="'bottom'"/> + <xsl:with-param name="style" select="$table.frame.border.style"/> + <xsl:with-param name="color" select="$table.frame.border.color"/> + <xsl:with-param name="thickness" select="$table.frame.border.thickness"/> + </xsl:call-template> + </xsl:when> + <xsl:when test="../@frame='top' or (not(../@frame) and $default.table.frame='top')"> + <xsl:text>border-collapse: collapse;</xsl:text> + <xsl:call-template name="border"> + <xsl:with-param name="side" select="'top'"/> + <xsl:with-param name="style" select="$table.frame.border.style"/> + <xsl:with-param name="color" select="$table.frame.border.color"/> + <xsl:with-param name="thickness" select="$table.frame.border.thickness"/> + </xsl:call-template> + </xsl:when> + <xsl:when test="../@frame='bottom' or (not(../@frame) and $default.table.frame='bottom')"> + <xsl:text>border-collapse: collapse;</xsl:text> + <xsl:call-template name="border"> + <xsl:with-param name="side" select="'bottom'"/> + <xsl:with-param name="style" select="$table.frame.border.style"/> + <xsl:with-param name="color" select="$table.frame.border.color"/> + <xsl:with-param name="thickness" select="$table.frame.border.thickness"/> + </xsl:call-template> + </xsl:when> + <xsl:when test="../@frame='sides' or (not(../@frame) and $default.table.frame='sides')"> + <xsl:text>border-collapse: collapse;</xsl:text> + <xsl:call-template name="border"> + <xsl:with-param name="side" select="'left'"/> + <xsl:with-param name="style" select="$table.frame.border.style"/> + <xsl:with-param name="color" select="$table.frame.border.color"/> + <xsl:with-param name="thickness" select="$table.frame.border.thickness"/> + </xsl:call-template> + <xsl:call-template name="border"> + <xsl:with-param name="side" select="'right'"/> + <xsl:with-param name="style" select="$table.frame.border.style"/> + <xsl:with-param name="color" select="$table.frame.border.color"/> + <xsl:with-param name="thickness" select="$table.frame.border.thickness"/> + </xsl:call-template> + </xsl:when> + <xsl:when test="../@frame='none'"> + <xsl:text>border: none;</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>border-collapse: collapse;</xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <table> + <!-- HTML5: no table summary allowed --> + <xsl:if test="string-length($table.style) != 0"> + <xsl:attribute name="style"> + <xsl:value-of select="$table.style"/> + </xsl:attribute> + </xsl:if> + + + <xsl:copy-of select="$colgroup"/> + + <xsl:apply-templates select="thead"/> + <xsl:apply-templates select="tfoot"/> + <xsl:apply-templates select="tbody"/> + + <xsl:if test=".//footnote|../title//footnote"> + <tbody class="footnotes"> + <tr> + <td colspan="{@cols}"> + <xsl:apply-templates select=".//footnote|../title//footnote" mode="table.footnote.mode"/> + </td> + </tr> + </tbody> + </xsl:if> + </table> +</xsl:template> + +<!-- HTML5: convert col attributes to col CSS styles --> +<xsl:template name="colgroup.with.style"> + <xsl:param name="colgroup"/> + + <xsl:variable name="colgroup.nodeset" select="exsl:node-set($colgroup)"/> + <xsl:apply-templates select="$colgroup.nodeset" mode="convert.to.style"/> +</xsl:template> + +<xsl:template match="colgroup" mode="convert.to.style"> + <xsl:copy> + <xsl:copy-of select="@*"/> + <xsl:apply-templates mode="convert.to.style"/> + </xsl:copy> +</xsl:template> + +<!-- HTML5: converts obsolete HTML attributes to CSS styles --> +<xsl:template match="*" mode="convert.to.style"> + + <xsl:variable name="element" select="local-name(.)"/> + + <xsl:variable name="style.from.atts"> + <xsl:for-each select="@*"> + + <xsl:choose> + <!-- width and height attributes are ok for img element --> + <xsl:when test="local-name() = 'width' and $element != 'img'"> + <xsl:text>width: </xsl:text> + <xsl:value-of select="."/> + <xsl:text>; </xsl:text> + </xsl:when> + + <xsl:when test="local-name() = 'height' and $element != 'img'"> + <xsl:text>height </xsl:text> + <xsl:value-of select="."/> + <xsl:text>; </xsl:text> + </xsl:when> + + <xsl:when test="local-name() = 'align'"> + <xsl:text>text-align: </xsl:text> + <xsl:value-of select="."/> + <xsl:text>; </xsl:text> + </xsl:when> + + <xsl:when test="local-name() = 'valign'"> + <xsl:text>vertical-align: </xsl:text> + <xsl:value-of select="."/> + <xsl:text>; </xsl:text> + </xsl:when> + + <xsl:when test="local-name() = 'border'"> + <xsl:text>border: </xsl:text> + <xsl:value-of select="."/> + <xsl:text>; </xsl:text> + </xsl:when> + + <xsl:when test="local-name() = 'cellspacing'"> + <xsl:text>border-spacing: </xsl:text> + <xsl:value-of select="."/> + <xsl:text>; </xsl:text> + </xsl:when> + + <xsl:when test="local-name() = 'cellpadding'"> + <xsl:text>padding: </xsl:text> + <xsl:value-of select="."/> + <xsl:text>; </xsl:text> + </xsl:when> + </xsl:choose> + </xsl:for-each> + </xsl:variable> + + <!-- merge existing styles with these new styles --> + <xsl:variable name="style"> + <xsl:value-of select="concat($style.from.atts, @style)"/> + </xsl:variable> + + <!-- HTML5: reserved for element name conversion if needed --> + <xsl:variable name="element.name"> + <xsl:value-of select="local-name(.)"/> + </xsl:variable> + + <xsl:element name="{$element.name}"> + <xsl:if test="string-length($style) != 0"> + <xsl:attribute name="style"> + <xsl:value-of select="$style"/> + </xsl:attribute> + </xsl:if> + <!-- skip converted atts, and also skip disallowed summary attribute --> + <xsl:for-each select="@*"> + <xsl:choose> + <xsl:when test="local-name(.) = 'width' and $element != 'img'"/> + <xsl:when test="local-name(.) = 'height' and $element != 'img'"/> + <xsl:when test="local-name(.) = 'summary'"/> + <xsl:when test="local-name(.) = 'border'"/> + <xsl:when test="local-name(.) = 'cellspacing'"/> + <xsl:when test="local-name(.) = 'cellpadding'"/> + <xsl:when test="local-name(.) = 'style'"/> + <xsl:when test="local-name(.) = 'align'"/> + <xsl:when test="local-name(.) = 'valign'"/> + <xsl:otherwise> + <xsl:copy-of select="."/> + </xsl:otherwise> + </xsl:choose> + </xsl:for-each> + <xsl:apply-templates mode="convert.to.style"/> + </xsl:element> +</xsl:template> + +<!-- HTML5: convert some attributes to CSS style attribute --> +<xsl:template match="entry|entrytbl"> + <xsl:param name="col"> + <xsl:choose> + <xsl:when test="@revisionflag"> + <xsl:number from="row"/> + </xsl:when> + <xsl:otherwise>1</xsl:otherwise> + </xsl:choose> + </xsl:param> + + <xsl:param name="spans"/> + + + <!-- Process with stock template --> + <xsl:variable name="cell"> + <xsl:call-template name="entry"> + <xsl:with-param name="col" select="$col"/> + <xsl:with-param name="spans" select="$spans"/> + </xsl:call-template> + </xsl:variable> + + <xsl:variable name="cell.nodes" select="exsl:node-set($cell)"/> + + <xsl:apply-templates select="$cell.nodes" mode="convert.to.style"/> + +</xsl:template> + +<xsl:template match="mediaobject|inlinemediaobject"> + <xsl:call-template name="convert.styles"/> +</xsl:template> + +<xsl:template match="qandaset"> + <xsl:call-template name="convert.styles"/> +</xsl:template> + +<xsl:template match="calloutlist|revhistory|footnote|figure|co"> + <xsl:call-template name="convert.styles"/> +</xsl:template> + +<xsl:template match="revhistory" mode="titlepage.mode"> + <xsl:call-template name="convert.styles"/> +</xsl:template> + +<xsl:template match="variablelist"> + <xsl:call-template name="convert.styles"/> +</xsl:template> + +<xsl:template match="orderedlist[@inheritnum = 'inherit']"> + <xsl:call-template name="convert.styles"/> +</xsl:template> + +<xsl:template match="simplelist"> + <xsl:call-template name="convert.styles"/> +</xsl:template> + +<xsl:template match="blockquote"> + <xsl:call-template name="convert.styles"/> +</xsl:template> + +<xsl:template match="note|important|warning|caution|tip"> + <xsl:call-template name="convert.styles"/> +</xsl:template> + +<xsl:template match="funcprototype" mode="ansi-tabular"> + <xsl:call-template name="convert.styles"/> +</xsl:template> + +<xsl:template match="funcprototype" mode="kr-tabular"> + <xsl:call-template name="convert.styles"/> +</xsl:template> + +<xsl:template name="convert.styles"> + <xsl:param name="content"> + <xsl:apply-imports/> + </xsl:param> + <xsl:variable name="nodes" select="exsl:node-set($content)"/> + + <xsl:apply-templates mode="convert.to.style" select="$nodes"/> +</xsl:template> + +<!-- HTML5: link rel="home" is not permitted --> +<!-- Add support for attributes on <html> element --> +<xsl:template match="*" mode="process.root"> + <xsl:variable name="doc" select="self::*"/> + + <xsl:call-template name="user.preroot"/> + <xsl:call-template name="root.messages"/> + + <html> + <xsl:call-template name="root.attributes"/> + <head> + <xsl:call-template name="system.head.content"> + <xsl:with-param name="node" select="$doc"/> + </xsl:call-template> + <xsl:call-template name="head.content"> + <xsl:with-param name="node" select="$doc"/> + </xsl:call-template> + <xsl:call-template name="user.head.content"> + <xsl:with-param name="node" select="$doc"/> + </xsl:call-template> + </head> + <body> + <xsl:call-template name="body.attributes"/> + <xsl:call-template name="user.header.content"> + <xsl:with-param name="node" select="$doc"/> + </xsl:call-template> + <xsl:apply-templates select="."/> + <xsl:call-template name="user.footer.content"> + <xsl:with-param name="node" select="$doc"/> + </xsl:call-template> + </body> + </html> + <xsl:value-of select="$html.append"/> + + <!-- Generate any css files only once, not once per chunk --> + <xsl:call-template name="generate.css.files"/> +</xsl:template> + +<xsl:template name="root.attributes"> +</xsl:template> + +<!-- HTML5: uses <ul> instead of <dl> for TOC --> +<xsl:template match="question" mode="qandatoc.mode"> + <xsl:variable name="firstch"> + <!-- Use a titleabbrev or title if available --> + <xsl:choose> + <xsl:when test="../blockinfo/titleabbrev"> + <xsl:apply-templates select="../blockinfo/titleabbrev[1]/node()"/> + </xsl:when> + <xsl:when test="../blockinfo/title"> + <xsl:apply-templates select="../blockinfo/title[1]/node()"/> + </xsl:when> + <xsl:when test="../info/titleabbrev"> + <xsl:apply-templates select="../info/titleabbrev[1]/node()"/> + </xsl:when> + <xsl:when test="../titleabbrev"> + <xsl:apply-templates select="../titleabbrev[1]/node()"/> + </xsl:when> + <xsl:when test="../info/title"> + <xsl:apply-templates select="../info/title[1]/node()"/> + </xsl:when> + <xsl:when test="../title"> + <xsl:apply-templates select="../title[1]/node()"/> + </xsl:when> + <xsl:otherwise> + <xsl:apply-templates select="(*[local-name(.)!='label'])[1]/node()"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="deflabel"> + <xsl:choose> + <xsl:when test="ancestor-or-self::*[@defaultlabel]"> + <xsl:value-of select="(ancestor-or-self::*[@defaultlabel])[last()] + /@defaultlabel"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$qanda.defaultlabel"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <li> + <a> + <xsl:attribute name="href"> + <xsl:call-template name="href.target"> + <xsl:with-param name="object" select=".."/> + </xsl:call-template> + </xsl:attribute> + <xsl:apply-templates select="." mode="label.markup"/> + <xsl:if test="contains($deflabel,'number') and not(label)"> + <xsl:apply-templates select="." mode="intralabel.punctuation"/> + </xsl:if> + <xsl:text> </xsl:text> + <xsl:value-of select="$firstch"/> + </a> + <!-- * include nested qandaset/qandaentry in TOC if user wants it --> + + <xsl:if test="not($qanda.nested.in.toc = 0)"> + <xsl:apply-templates select="following-sibling::answer" mode="qandatoc.mode"/> + </xsl:if> + </li> +</xsl:template> + +<xsl:template match="answer" mode="qandatoc.mode"> + <xsl:if test="descendant::question"> + <xsl:call-template name="process.qanda.toc"/> + </xsl:if> +</xsl:template> + +<!-- html5 uses <ul> instead of <dl> for toc --> +<xsl:template name="process.qanda.toc"> + <ul> + <xsl:apply-templates select="qandadiv" mode="qandatoc.mode"/> + <xsl:apply-templates select="qandaset|qandaentry" mode="qandatoc.mode"/> + </ul> +</xsl:template> + +<xsl:template match="qandadiv" mode="qandatoc.mode"> + <!-- + <dt><xsl:apply-templates select="title" mode="qandatoc.mode"/></dt> + <dd><xsl:call-template name="process.qanda.toc"/></dd> + --> + <li> + <xsl:apply-templates select="title" mode="qandatoc.mode"/> + <xsl:call-template name="process.qanda.toc"/> + </li> +</xsl:template> + +<xsl:template match="audiodata"> + <xsl:variable name="filename"> + <xsl:call-template name="mediaobject.filename"> + <xsl:with-param name="object" select=".."/> + </xsl:call-template> + </xsl:variable> + + <audio> + <xsl:call-template name="common.html.attributes"/> + + <xsl:attribute name="src"> + <xsl:value-of select="$filename"/> + </xsl:attribute> + + <xsl:apply-templates select="@*"/> + <xsl:apply-templates select="../multimediaparam"/> + + <!-- add any fallback content --> + <xsl:call-template name="audio.fallback"/> + </audio> +</xsl:template> + +<!-- generate <video> element for html5 --> +<xsl:template match="videodata"> + <xsl:variable name="filename"> + <xsl:call-template name="mediaobject.filename"> + <xsl:with-param name="object" select=".."/> + </xsl:call-template> + </xsl:variable> + + <video> + <xsl:call-template name="common.html.attributes"/> + + <xsl:attribute name="src"> + <xsl:value-of select="$filename"/> + </xsl:attribute> + + <xsl:call-template name="video.poster"/> + + <xsl:apply-templates select="@*[local-name() != 'fileref']"/> + <xsl:apply-templates select="../multimediaparam"/> + + <!-- add any fallback content --> + <xsl:call-template name="video.fallback"/> + </video> +</xsl:template> + +<!-- use only an imageobject with @role = 'poster' --> +<xsl:template name="video.poster"> + <xsl:variable name="imageobject" select="../../imageobject[@role = 'poster'][1]"/> + <xsl:if test="$imageobject"> + <xsl:attribute name="poster"> + <xsl:value-of select="$imageobject/imagedata/@fileref"/> + </xsl:attribute> + </xsl:if> +</xsl:template> + +<xsl:template match="videodata/@fileref"> + <!-- already handled by videodata template --> +</xsl:template> + +<xsl:template match="audiodata/@fileref"> + <!-- already handled by audiodata template --> +</xsl:template> + +<xsl:template match="videodata/@contentwidth"> + <xsl:attribute name="width"> + <xsl:value-of select="."/> + </xsl:attribute> +</xsl:template> + +<xsl:template match="videodata/@contentdepth"> + <xsl:attribute name="height"> + <xsl:value-of select="."/> + </xsl:attribute> +</xsl:template> + +<xsl:template match="videodata/@depth"> + <xsl:attribute name="height"> + <xsl:value-of select="."/> + </xsl:attribute> +</xsl:template> + +<!-- pass through these attributes --> +<xsl:template match="videodata/@autoplay | + videodata/@controls | + audiodata/@autoplay | + audiodata/@controls"> + <xsl:copy-of select="."/> +</xsl:template> + +<xsl:template match="videodata/@*" priority="-1"> + <!-- Do nothing with the rest of the attributes --> +</xsl:template> + +<xsl:template match="audiodata/@*" priority="-1"> + <!-- Do nothing with the rest of the attributes --> +</xsl:template> + +<xsl:template match="multimediaparam"> + <xsl:call-template name="process.multimediaparam"> + <xsl:with-param name="object" select=".."/> + <xsl:with-param name="param.name" select="@name"/> + <xsl:with-param name="param.value" select="@value"/> + </xsl:call-template> +</xsl:template> + +<!-- Determines the best value of a media attribute from the + attributes and multimediaparam elements --> +<xsl:template name="process.multimediaparam"> + <xsl:param name="object" select="NOTANELEMENT"/> + <xsl:param name="param.name"/> + <xsl:param name="param.value"/> + + <xsl:choose> + <xsl:when test="$object/*/@*[local-name(.) = $param.name]"> + <!-- explicit attribute with that name takes precedence --> + <xsl:attribute name="{$param.name}"> + <xsl:value-of select="$object/*/@*[local-name(.) = $param.name]"/> + </xsl:attribute> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="{$param.name}"> + <xsl:value-of select="$param.value"/> + </xsl:attribute> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + +<xsl:template name="video.fallback"> + <xsl:param name="videodata" select="."/> + <xsl:variable name="textobject" select="$videodata/../../textobject"/> + + <xsl:apply-templates select="$textobject" mode="fallback"/> +</xsl:template> + +<xsl:template name="audio.fallback"> + <xsl:param name="audiodata" select="."/> + <xsl:variable name="textobject" select="$audiodata/../../textobject"/> + + <xsl:apply-templates select="$textobject" mode="fallback"/> +</xsl:template> + +<xsl:template match="textobject" mode="fallback"> + <div> + <xsl:apply-templates select="." mode="class.attribute"/> + <xsl:apply-templates/> + </div> +</xsl:template> + +<!-- HTML5: no body attributes --> +<xsl:template name="body.attributes"/> + +</xsl:stylesheet> |