/************************************************************************
*
* PresentationStyleConverter.java
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software Foundation.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*
* Copyright: 2002-2008 by Henrik Just
*
* All Rights Reserved.
*
* Version 1.0 (2008-11-22)
*
*/
package writer2latex.xhtml;
import java.util.Enumeration;
import java.util.Hashtable;
import writer2latex.office.OfficeReader;
import writer2latex.office.OfficeStyleFamily;
import writer2latex.office.StyleWithProperties;
//import writer2latex.office.XMLString;
import writer2latex.util.CSVList;
import writer2latex.util.ExportNameCollection;
/**
* This class converts OpenDocument presentation styles to CSS2 styles.
* Presentation styles are special frame styles, used to style the standard
* elements in a presentation (title, subtitle and textbox)
*/
public class PresentationStyleConverter extends FrameStyleConverter {
// Data about outline styles
String sCurrentOutlineStyle = null;
Hashtable outlineStyles = new Hashtable();
ExportNameCollection outlineStyleNames = new ExportNameCollection(true);
/** Create a new PresentationStyleConverter
* @param ofr an OfficeReader
to read style information from
* @param config the configuration to use
* @param converter the main Converter
class
* @param nType the type of xhtml to use
*/
public PresentationStyleConverter(OfficeReader ofr, XhtmlConfig config, Converter converter, int nType) {
super(ofr,config,converter,nType);
// style maps for presentations are currently not supported:
this.styleMap = new XhtmlStyleMap();
}
/** Return a prefix to be used in generated css class names
* @return the prefix
*/
public String getClassNamePrefix() { return "prsnt"; }
/** Get the family of presentation styles
* @return the style family
*/
public OfficeStyleFamily getStyles() {
return ofr.getPresentationStyles();
}
/** Create default tag name to represent a presentation object
* @param style to use
* @return the tag name.
*/
public String getDefaultTagName(StyleWithProperties style) {
return "div";
}
/**
Convert style information for used styles
* @param sIndent a String of spaces to add before each line */ public String getStyleDeclarations(String sIndent) { if (bConvertStyles) { StringBuffer buf = new StringBuffer(); buf.append(super.getStyleDeclarations(sIndent)); Enumeration names = outlineStyleNames.keys(); while (names.hasMoreElements()) { String sDisplayName = (String) names.nextElement(); StyleWithProperties style = (StyleWithProperties) getStyles().getStyleByDisplayName(sDisplayName); if (!style.isAutomatic()) { // Apply style to paragraphs within a list item with this class CSVList props = new CSVList(";"); getFrameSc().cssMargins(style,props,true); getParSc().cssPar(style,props,true); getTextSc().cssTextCommon(style,props,true); if (!props.isEmpty()) { buf.append(sIndent) .append("li.outline") .append(styleNames.getExportName(sDisplayName)) .append(" p {").append(props.toString()).append("}\n"); } } } return buf.toString(); } else { return ""; } } public void enterOutline(String sStyleName) { sCurrentOutlineStyle = sStyleName; if (!outlineStyles.containsKey(sCurrentOutlineStyle)) { String[] sNames = new String[10]; outlineStyles.put(sCurrentOutlineStyle,sNames); StyleWithProperties style1 = ofr.getPresentationStyle(sCurrentOutlineStyle); if (style1!=null) { String sCurrentOutlineStyle1 = sCurrentOutlineStyle; if (style1.isAutomatic()) { sCurrentOutlineStyle1 = style1.getParentName(); } sNames[1] = sCurrentOutlineStyle1; String sBaseName = sCurrentOutlineStyle1.substring(0,sCurrentOutlineStyle1.length()-1); for (int i=2; i<10; i++) { String sName = sBaseName + Integer.toString(i); StyleWithProperties style = ofr.getPresentationStyle(sName); if (style!=null && style.getParentName().equals(sNames[i-1])) { sNames[i] = sName; } else { break; } } sNames[1] = null; } } } public void exitOutline() { sCurrentOutlineStyle = null; } public void applyOutlineStyle(int nLevel, StyleInfo info) { if (2<=nLevel && nLevel<=9 && sCurrentOutlineStyle!=null) { if (outlineStyles.containsKey(sCurrentOutlineStyle)) { info.sClass = "outline"+outlineStyleNames.getExportName(((String[]) outlineStyles.get(sCurrentOutlineStyle))[nLevel]); } } } }