/*
* SmartDoc : Ultimate document format based on XML
* Copyright (C) 1998-2003 ASAMI, Tomoharu (asami@XMLSmartDoc.org)
*
* 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 2 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, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package org.xmlsmartdoc.SmartDoc.javahelp;
import java.util.Locale;
import org.xmlsmartdoc.SmartDoc.AbstractSmartDocGenerator;
import org.xmlsmartdoc.SmartDoc.Anchor;
import org.xmlsmartdoc.SmartDoc.Content;
import org.xmlsmartdoc.SmartDoc.Doc;
import org.xmlsmartdoc.SmartDoc.GeneratorParameter;
import org.xmlsmartdoc.SmartDoc.Indexdef;
import org.xmlsmartdoc.SmartDoc.SmartDocConfig;
import org.xmlsmartdoc.SmartDoc.SmartDocFormatConfig;
import org.xmlsmartdoc.SmartDoc.TOCNode;
import org.xmlsmartdoc.SmartDoc.Title;
import org.xmlsmartdoc.SmartDoc.TitledBlock;
import org.xmlsmartdoc.SmartDoc.UDoc;
import org.xmlsmartdoc.SmartDoc.USmartDoc;
import org.xmlsmartdoc.SmartDoc.html3.HTML3Generator;
import com.AsamiOffice.jaba2.j2fw.generator.GeneratorResult;
import com.AsamiOffice.jaba2.j2fw.generator.IGeneratorParameter;
/**
* JavaHelpGenerator
*
* @since Apr. 26, 1999
* @version Oct. 20, 2003
* @author ASAMI, Tomoharu (asami@XMLSmartDoc.org)
*/
public class JavaHelpGenerator extends AbstractSmartDocGenerator {
protected SmartDocConfig config_;
protected JavaHelpConfig javahelpConfig_;
protected HTML3Generator html3Generator_;
public void init(SmartDocConfig config, SmartDocFormatConfig fconfig) {
super.init(config, fconfig);
config_ = config;
javahelpConfig_ = (JavaHelpConfig)fconfig;
html3Generator_ = javahelpConfig_.getHTML3Generator();
}
// AbstractYaGenerator
public GeneratorResult generate(IGeneratorParameter iparam) {
GeneratorParameter param = (GeneratorParameter)iparam;
GeneratorResult result = html3Generator_.generate(param);
Doc doc = param.doc;
String project = param.project;
String post = UDoc.getFilenamePostString(doc);
_allocMapID(doc, project, param.deploy);
result.addArtifact(
project + post + ".hs",
_generateHelpSet(doc)
);
result.addArtifact(
"Map" + post + ".jhm",
_generateHelpMap(doc)
);
if (javahelpConfig_.makeToc()) {
result.addArtifact(
"TOC" + post + ".xml",
_generateHelpTOC(doc)
);
}
if (javahelpConfig_.makeIndex()) {
result.addArtifact(
"Index" + post + ".xml",
_generateHelpIndex(doc)
);
}
return (result);
}
protected void _allocMapID(Doc doc, String project, String deploy) {
String alloc = USmartDoc.getAlloc(deploy);
String fileID = doc.getFileID(alloc);
String url = project + fileID + ".html";
doc.setProperty("javahelp.mapid", "main");
doc.setProperty("javahelp.target", url);
TOCNode root = doc.getTOC().getTOCRoot();
Indexdef indexdef = doc.getIndexdef();
_allocMapID(root, project, deploy);
_allocMapID(indexdef, project, deploy);
}
protected void _allocMapID(
TOCNode node,
String project,
String alloc
) {
int size = node.getChildCount();
for (int i = 0;i < size;i++) {
TOCNode child = node.getTOCNode(i);
TitledBlock heading = child.getHeading();
String fileID = heading.getFileID(alloc);
String id = _getID(heading);
String url = project + fileID + ".html#" + id;
String mapid = project + fileID + "." + id;
heading.setProperty("javahelp.mapid", mapid);
heading.setProperty("javahelp.target", url);
_allocMapID(child, project, alloc);
}
}
protected void _allocMapID(
Indexdef indexdef,
String project,
String alloc
) {
String[] words = indexdef.getIndexWords();
for (int i = 0;i < words.length;i++) {
String word = words[i];
Anchor def = indexdef.getDefAnchor(word);
if (def != null) {
String fileID = def.getFileID(alloc);
String id = _getID(def);
String url = project + fileID + ".html#" + id;
String mapid = project + fileID + "." + id;
def.setProperty("javahelp.mapid", mapid);
def.setProperty("javahelp.target", url);
}
}
}
protected String _generateHelpSet(Doc doc) {
Locale locale = doc.getDocContext().getLocale();
Title docTitle = doc.getHead().getDocTitle();
String title;
if (docTitle != null) {
title = docTitle.getText();
} else {
title = "";
}
String post = UDoc.getFilenamePostString(doc);
StringBuffer buffer = new StringBuffer();
buffer.append("<?xml version='1.0' encoding='UTF-8' ?>\n");
buffer.append("<!DOCTYPE helpset\n");
buffer.append(" PUBLIC \"-//Sun Microsystems Inc.//DTD JavaHelp HelpSet Version 1.0//EN\"\n");
buffer.append(" \"http://java.sun.com/products/javahelp/helpset_1_0.dtd\">\n");
buffer.append("\n");
buffer.append("<helpset version=\"1.0\"");
if (locale != null) {
buffer.append(" xml:lang=\"");
buffer.append(locale.toString());
buffer.append("\"");
}
buffer.append(">\n");
buffer.append(" <title>");
buffer.append(title);
buffer.append("</title>\n");
buffer.append(" <maps>\n");
buffer.append(" <homeID>");
buffer.append("main");
buffer.append("</homeID>\n");
buffer.append(" <mapref location=\"Map");
buffer.append(post);
buffer.append(".jhm\"/>\n");
buffer.append(" </maps>\n");
buffer.append("\n");
if (javahelpConfig_.makeToc()) {
buffer.append(" <view>\n");
buffer.append(" <name>TOC</name>\n");
buffer.append(" <label>Table of Contents</label>\n");
buffer.append(" <type>javax.help.TOCView</type>\n");
buffer.append(" <data>TOC");
buffer.append(post);
buffer.append(".xml</data>\n");
buffer.append(" </view>\n");
buffer.append("\n");
}
if (javahelpConfig_.makeIndex()) {
buffer.append(" <view>\n");
buffer.append(" <name>Index</name>\n");
buffer.append(" <label>Index</label>\n");
buffer.append(" <type>javax.help.IndexView</type>\n");
buffer.append(" <data>Index");
buffer.append(post);
buffer.append(".xml</data>\n");
buffer.append(" </view>\n");
buffer.append("\n");
}
if (javahelpConfig_.makeSearch()) {
buffer.append(" <view>\n");
buffer.append(" <name>Search</name>\n");
buffer.append(" <label>Search</label>\n");
buffer.append(" <type>javax.help.SearchView</type>\n");
buffer.append(" <data engine=\"com.sun.java.javahelp.search.DefaultSearchEngine\">");
buffer.append(" JavaHelpSearch\n");
buffer.append(" </data>\n");
buffer.append(" </view>\n");
buffer.append("\n");
}
buffer.append("</helpset>\n");
return (new String(buffer));
}
protected String _generateHelpMap(Doc doc) {
TOCNode root = doc.getTOC().getTOCRoot();
Indexdef indexdef = doc.getIndexdef();
StringBuffer buffer = new StringBuffer();
buffer.append("<?xml version='1.0' encoding='UTF-8' ?>\n");
buffer.append("<!DOCTYPE map\n");
buffer.append(" PUBLIC \"-//Sun Microsystems Inc.//DTD JavaHelp Map Version 1.0//EN\"\n");
buffer.append(" \"http://java.sun.com/products/javahelp/map_1_0.dtd\">\n");
buffer.append("\n");
buffer.append("<map version=\"1.0\">\n");
buffer.append(" <mapID target=\"");
buffer.append((String)doc.getProperty("javahelp.mapid"));
buffer.append("\" url=\"");
buffer.append((String)doc.getProperty("javahelp.target"));
buffer.append("\"/>\n");
_makeMap(root, buffer);
_makeMap(indexdef, buffer);
buffer.append("</map>\n");
return (new String(buffer));
}
protected void _makeMap(TOCNode node, StringBuffer buffer) {
int size = node.getChildCount();
for (int i = 0;i < size;i++) {
TOCNode child = node.getTOCNode(i);
TitledBlock heading = child.getHeading();
String mapid = (String)heading.getProperty("javahelp.mapid");
String url = (String)heading.getProperty("javahelp.target");
buffer.append(" <mapID target=\"");
buffer.append(mapid);
buffer.append("\" url=\"");
buffer.append(url);
buffer.append("\"/>\n");
_makeMap(child, buffer);
}
}
protected void _makeMap(Indexdef indexdef, StringBuffer buffer) {
String[] words = indexdef.getIndexWords();
for (int i = 0;i < words.length;i++) {
String word = words[i];
Anchor def = indexdef.getDefAnchor(word);
if (def != null) {
String mapid = (String)def.getProperty("javahelp.mapid");
String url = (String)def.getProperty("javahelp.target");
buffer.append(" <mapID target=\"");
buffer.append(mapid);
buffer.append("\" url=\"");
buffer.append(url);
buffer.append("\"/>\n");
}
}
}
protected String _generateHelpTOC(Doc doc) {
StringBuffer buffer = new StringBuffer();
buffer.append("<?xml version='1.0' encoding='UTF-8' ?>\n");
buffer.append("<!DOCTYPE toc\n");
buffer.append(" PUBLIC \"-//Sun Microsystems Inc.//DTD JavaHelp TOC Version 1.0//EN\"\n");
buffer.append(" \"http://java.sun.com/products/javahelp/toc_1_0.dtd\">\n");
buffer.append("\n");
buffer.append("<toc version=\"1.0\">\n");
buffer.append(" <tocitem text=\"");
buffer.append(doc.getHead().getDocTitle().getText());
buffer.append("\" target=\"");
buffer.append((String)doc.getProperty("javahelp.mapid"));
buffer.append("\">\n");
TOCNode root = doc.getTOC().getTOCRoot();
_makeTOC(root, buffer);
buffer.append(" </tocitem>\n");
buffer.append("</toc>\n");
return (new String(buffer));
}
protected void _makeTOC(TOCNode node, StringBuffer buffer) {
int size = node.getChildCount();
for (int i = 0;i < size;i++) {
TOCNode child = node.getTOCNode(i);
TitledBlock heading = child.getHeading();
buffer.append(" <tocitem text=\"");
buffer.append(child.getHeading().getTitle());
buffer.append("\" target=\"");
buffer.append((String)heading.getProperty("javahelp.mapid"));
buffer.append("\">\n");
_makeTOC(child, buffer);
buffer.append(" </tocitem>\n");
}
}
protected String _generateHelpIndex(Doc doc) {
StringBuffer buffer = new StringBuffer();
buffer.append("<?xml version='1.0' encoding='UTF-8' ?>\n");
buffer.append("<!DOCTYPE index\n");
buffer.append(" PUBLIC \"-//Sun Microsystems Inc.//DTD JavaHelp Index Version 1.0//EN\"\n");
buffer.append(" \"http://java.sun.com/products/javahelp/index_1_0.dtd\">\n");
buffer.append("\n");
buffer.append("<index version=\"1.0\">\n");
_makeIndex(doc.getIndexdef(), buffer);
buffer.append("</index>\n");
return (new String(buffer));
}
protected void _makeIndex(Indexdef indexdef, StringBuffer buffer) {
String[] words = indexdef.getIndexWords();
for (int i = 0;i < words.length;i++) {
String word = words[i];
Anchor def = indexdef.getDefAnchor(word);
if (def != null) {
buffer.append(" <indexitem text=\"");
buffer.append(def.getText());
buffer.append("\" target=\"");
buffer.append((String)def.getProperty("javahelp.mapid"));
buffer.append("\">\n");
buffer.append(" </indexitem>\n");
}
}
}
protected String _getID(Content content) {
return (UDoc.getAbsoluteId(content));
}
}