Files
dokuwiki-plugins/lib/plugins/odt/ODT/ODTDefaultStyles.php
Trevor Batley bce7dd054a add contents
2025-10-09 15:04:29 +11:00

228 lines
14 KiB
PHP

<?php
require_once DOKU_INC.'lib/plugins/odt/ODT/styleset.php';
require_once DOKU_INC.'lib/plugins/odt/ODT/page.php';
/**
* ODTDefaultStyles: class for using the basic styles from styles.xml.
* This is also used if a ODT template is used, as the style names
* need to match the names in styles.xml.
*
* The class is doing nothing for import/export because it expects
* the file styles.xml to be there. So the file is neither read nor written.
*
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author LarsDW223
*/
class ODTDefaultStyles extends ODTStyleSet
{
protected $automatic =
'<office:automatic-styles>
<style:page-layout style:name="pm1">
<style:page-layout-properties fo:page-width="21cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
<style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.1cm" style:distance-after-sep="0.1cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
</style:page-layout-properties>
<style:header-style/>
<style:footer-style/>
</style:page-layout>
<style:style style:name="sub" style:family="text">
<style:text-properties style:text-position="-33% 80%"/>
</style:style>
<style:style style:name="sup" style:family="text">
<style:text-properties style:text-position="33% 80%"/>
</style:style>
<style:style style:name="del" style:family="text">
<style:text-properties style:text-line-through-style="solid"/>
</style:style>
<style:style style:name="underline" style:family="text">
<style:text-properties style:text-underline-style="solid"
style:text-underline-width="auto" style:text-underline-color="font-color"/>
</style:style>
<style:style style:name="media" style:family="graphic" style:parent-style-name="Graphics">
<style:graphic-properties style:run-through="foreground" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit"
style:wrap-contour="false" style:vertical-pos="top" style:vertical-rel="baseline" style:horizontal-pos="left"
style:horizontal-rel="paragraph"/>
</style:style>
<style:style style:name="medialeft" style:family="graphic" style:parent-style-name="Graphics">
<style:graphic-properties style:run-through="foreground" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit"
style:wrap-contour="false" style:horizontal-pos="left" style:horizontal-rel="paragraph"/>
</style:style>
<style:style style:name="mediaright" style:family="graphic" style:parent-style-name="Graphics">
<style:graphic-properties style:run-through="foreground" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit"
style:wrap-contour="false" style:horizontal-pos="right" style:horizontal-rel="paragraph"/>
</style:style>
<style:style style:name="mediacenter" style:family="graphic" style:parent-style-name="Graphics">
<style:graphic-properties style:run-through="foreground" style:wrap="none" style:horizontal-pos="center"
style:horizontal-rel="paragraph"/>
</style:style>
<style:style style:name="Table" style:family="table">
<style:table-properties table:border-model="collapsing" fo:margin-top="0.25cm" fo:margin-bottom="0.25cm"/>
</style:style>
<style:style style:name="tablealigncenter" style:family="paragraph" style:parent-style-name="Table_20_Contents">
<style:paragraph-properties fo:text-align="center"/>
</style:style>
<style:style style:name="tablealignright" style:family="paragraph" style:parent-style-name="Table_20_Contents">
<style:paragraph-properties fo:text-align="end"/>
</style:style>
<style:style style:name="tablealignleft" style:family="paragraph" style:parent-style-name="Table_20_Contents">
<style:paragraph-properties fo:text-align="left"/>
</style:style>
<style:style style:name="tableheader" style:family="table-cell">
<style:table-cell-properties fo:padding="0.05cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
</style:style>
<style:style style:name="tablecell" style:family="table-cell">
<style:table-cell-properties fo:padding="0.05cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
</style:style>
<style:style style:name="legendcenter" style:family="paragraph" style:parent-style-name="Illustration">
<style:paragraph-properties fo:text-align="center"/>
</style:style>
<style:style style:name="Table_Quotation1" style:family="table">
<style:table-properties table:border-model="collapsing" fo:margin-top="0pt" fo:margin-bottom="16.8pt"/>
</style:style>
<style:style style:name="Table_Quotation2" style:family="table">
<style:table-properties table:border-model="collapsing" fo:margin-top="0pt" fo:margin-bottom="0pt"/>
</style:style>
<style:style style:name="Table_Quotation3" style:family="table">
<style:table-properties table:border-model="collapsing" fo:margin-top="0pt" fo:margin-bottom="0pt"/>
</style:style>
<style:style style:name="Table_Quotation4" style:family="table">
<style:table-properties table:border-model="collapsing" fo:margin-top="0pt" fo:margin-bottom="0pt"/>
</style:style>
<style:style style:name="Table_Quotation5" style:family="table">
<style:table-properties table:border-model="collapsing" fo:margin-top="0pt" fo:margin-bottom="0pt"/>
</style:style>
<style:style style:name="Cell_Quotation1" style:family="table-cell">
<style:table-cell-properties fo:margin="0cm" fo:padding-left="6pt" fo:padding-right="6pt" fo:padding-top="0pt" fo:padding-bottom="0pt" fo:border-left="3pt solid #cccccc" fo:border-right="none" fo:border-top="none" fo:border-bottom="none"/>
</style:style>
<style:style style:name="Cell_Quotation2" style:family="table-cell">
<style:table-cell-properties fo:margin="0cm" fo:padding-left="6pt" fo:padding-right="6pt" fo:padding-top="0pt" fo:padding-bottom="0pt" fo:border-left="3pt solid #cccccc" fo:border-right="none" fo:border-top="none" fo:border-bottom="none"/>
</style:style>
<style:style style:name="Cell_Quotation3" style:family="table-cell">
<style:table-cell-properties fo:margin="0cm" fo:padding-left="6pt" fo:padding-right="6pt" fo:padding-top="0pt" fo:padding-bottom="0pt" fo:border-left="3pt solid #cccccc" fo:border-right="none" fo:border-top="none" fo:border-bottom="none"/>
</style:style>
<style:style style:name="Cell_Quotation4" style:family="table-cell">
<style:table-cell-properties fo:margin="0cm" fo:padding-left="6pt" fo:padding-right="6pt" fo:padding-top="0pt" fo:padding-bottom="0pt" fo:border-left="3pt solid #cccccc" fo:border-right="none" fo:border-top="none" fo:border-bottom="none"/>
</style:style>
<style:style style:name="Cell_Quotation5" style:family="table-cell">
<style:table-cell-properties fo:margin="0cm" fo:padding-left="6pt" fo:padding-right="6pt" fo:padding-top="0pt" fo:padding-bottom="0pt" fo:border-left="3pt solid #cccccc" fo:border-right="none" fo:border-top="none" fo:border-bottom="none"/>
</style:style>
</office:automatic-styles>';
// Font definitions. May not be present if in template mode, in which case they will be added to styles.xml
var $fonts = array(
"StarSymbol"=>'<style:font-face style:name="StarSymbol" svg:font-family="StarSymbol"/>', // for bullets
"Bitstream Vera Sans Mono"=>'<style:font-face style:name="Bitstream Vera Sans Mono" svg:font-family="\'Bitstream Vera Sans Mono\'" style:font-family-generic="modern" style:font-pitch="fixed"/>', // for source code
);
/**
* @param null $source
*/
public function import($source=NULL) {
$auto_styles_ret = parent::importFromODT($this->automatic, 'office:automatic-styles');
$styles_ret = parent::importFromODTFile(DOKU_INC.'lib/plugins/odt/styles.xml', 'office:styles');
$master_styles_ret = parent::importFromODTFile(DOKU_INC.'lib/plugins/odt/styles.xml', 'office:master-styles');
if (!$auto_styles_ret || !$styles_ret || !$master_styles_ret) {
return false;
}
return true;
}
/**
* @param null $destination
*/
public function export($root_element) {
return parent::exportToODT($root_element);
}
/**
* Return style name for queired basic style $style.
*
* The class simply returns the corresponding style names
* used in styles.xml.
*
* @param string $style
* @return null|string
*/
public function getStyleName($style) {
switch ($style) {
case 'standard': return 'Standard';
case 'body': return 'Text_20_body';
case 'heading1': return 'Heading_20_1';
case 'heading2': return 'Heading_20_2';
case 'heading3': return 'Heading_20_3';
case 'heading4': return 'Heading_20_4';
case 'heading5': return 'Heading_20_5';
case 'list': return 'List_20_1';
case 'list content': return 'List_20_1_Content';
case 'list first': return 'List_20_1_Content_First';
case 'list last': return 'List_20_1_Content_Last';
case 'numbering': return 'Numbering_20_1';
case 'numbering content': return 'Numbering_20_1_Content';
case 'numbering first': return 'Numbering_20_1_Content_First';
case 'numbering last': return 'Numbering_20_1_Content_Last';
case 'table': return 'Table';
case 'table content': return 'Table_20_Contents';
case 'table heading': return 'Table_20_Heading';
case 'table header': return 'tableheader';
case 'table cell': return 'tablecell';
case 'tablealign center': return 'tablealigncenter';
case 'tablealign right': return 'tablealignright';
case 'tablealign left': return 'tablealignleft';
case 'preformatted': return 'Preformatted_20_Text';
case 'source code': return 'Source_20_Code';
case 'source file': return 'Source_20_File';
case 'horizontal line': return 'Horizontal_20_Line';
case 'footnote': return 'Footnote';
case 'footnote anchor': return 'Footnote_20_Anchor';
case 'footnote characters': return 'Footnote_20_Symbol';
case 'emphasis': return 'Emphasis';
case 'strong': return 'Strong_20_Emphasis';
case 'underline': return 'underline';
case 'sub': return 'sub';
case 'sup': return 'sup';
case 'del': return 'del';
case 'media': return 'media';
case 'media left': return 'medialeft';
case 'media right': return 'mediaright';
case 'media center': return 'mediacenter';
case 'legend center': return 'legendcenter';
case 'graphics': return 'Graphics';
case 'monospace': return 'Source_20_Text';
case 'table quotation1': return 'Table_Quotation1';
case 'table quotation2': return 'Table_Quotation2';
case 'table quotation3': return 'Table_Quotation3';
case 'table quotation4': return 'Table_Quotation4';
case 'table quotation5': return 'Table_Quotation5';
case 'cell quotation1': return 'Cell_Quotation1';
case 'cell quotation2': return 'Cell_Quotation2';
case 'cell quotation3': return 'Cell_Quotation3';
case 'cell quotation4': return 'Cell_Quotation4';
case 'cell quotation5': return 'Cell_Quotation5';
case 'first page': return 'pm1';
case 'internet link': return 'Internet_20_link';
case 'visited internet link': return 'Visited_20_Internet_20_Link';
case 'local link': return 'Local_20_link';
case 'visited local link': return 'Visited_20_Local_20_Link';
case 'contents heading': return 'Contents_20_Heading';
}
// Not supported basic style.
return NULL;
}
/**
* @param string $filename
* @return string
*/
function getMissingFonts($filename) {
$value = '';
$existing_styles = io_readFile($filename);
foreach ($this->fonts as $name=>$xml) {
if (strpos($existing_styles, 'style:name="'.$name.'"') === FALSE) {
$value .= $xml;
}
}
return $value;
}
}