Репозитории ALT
5.1: | 3.2.0.7-alt0.M51.1 |
4.1: | 3.0.0.10-alt1.M41.1 |
4.0: | 2.4.1.7-alt0.M40.1 |
3.0: | 1.1.5-alt1 |
Группа :: Офис
Пакет: openoffice.org
Главная Изменения Спек Патчи Sources Загрузить Gear Bugs and FR Repocop
Патч: 000_ximian_system-db-1.diff
Скачать
Скачать
Index: xmlhelp/source/cxxhelp/provider/makefile.mk
===================================================================
--- xmlhelp/source/cxxhelp/provider/makefile.mk.orig 2003-04-28 18:19:35.000000000 +0200
+++ xmlhelp/source/cxxhelp/provider/makefile.mk 2004-01-08 00:36:53.000000000 +0100
@@ -74,6 +74,9 @@ NO_BSYMBOLIC=TRUE
.INCLUDE: settings.mk
CFLAGS += -DHAVE_EXPAT_H
+.IF "$(SYSTEM_DB)" == "YES"
+CFLAGS += -DSYSTEM_DB -I$(DB_INCLUDES)
+.ENDIF
.IF "$(GUI)"=="WNT"
CFLAGS+=-GR
--- /dev/null 2003-12-04 23:59:45.000000000 +0100
+++ xmlhelp/source/com/sun/star/help/db4/CreateDb.java 2004-01-22 22:48:17.000000000 +0100
@@ -0,0 +1,199 @@
+
+/**
+ * Title: Help Content Provider<p>
+ * Description: <p>
+ * Copyright: Copyright (c) Andreas Bille ( abi )<p>
+ * Company: Sun Microsystems. Inc<p>
+ * @author Andreas Bille ( abi )
+ * @version 1.0
+ */
+package com.sun.star.help;
+
+import java.io.*;
+import com.sleepycat.db.*;
+
+public class CreateDb {
+
+ public CreateDb()
+ {
+ }
+
+
+
+ void iterate( String dbName )
+ {
+ System.out.println( dbName );
+ Db table = null;
+ try
+ {
+ table = new Db( null,0 );
+ }
+ catch( DbException e )
+ {
+ System.out.println( "Error initializing database" );
+ }
+
+ table.set_error_stream( System.err );
+ table.set_errpfx( "HelpAccess" );
+ try
+ {
+ table.open( null, dbName,null,Db.DB_BTREE,Db.DB_RDONLY,0644 );
+ Dbc cursor = table.cursor( null,0 );
+
+ StringDbt key = new StringDbt();
+ StringDbt data = new StringDbt();
+ //
+ boolean first = true;
+ key.set_flags( Db.DB_DBT_MALLOC ); // The cursor must allocate the necessary memory
+ data.set_flags( Db.DB_DBT_MALLOC );
+ String filePrefix = System.getProperty( "com.sun.star.help.Directory" );
+ File outFile = new File( "e:/helpdata/test1/filelist" );
+ try
+ {
+ outFile.createNewFile();
+ }
+ catch( IOException e )
+ {
+ e.printStackTrace();
+ }
+
+ FileWriter outStream = null;
+ try
+ {
+ outStream = new FileWriter( outFile );
+ }
+ catch( IOException e )
+ {
+ e.printStackTrace();
+ }
+
+ while( Db.DB_NOTFOUND != cursor.get( key,data,Db.DB_NEXT ) )
+ {
+ // String keyStr = new String( key.get_data(),0,key.get_size() );
+ // String dataStr = new String( data.get_data(),0,data.get_size() );
+
+ String keyStr = key.getString();
+ String dataStr = data.getString();
+ String testStr1 = data.getFile();
+ String testStr2 = data.getDatabase();
+ String testStr3 = data.getTitle();
+ if( ! testStr3.equals("") )
+ System.out.println( keyStr + " " + testStr1 + " " + testStr2 + " " + testStr3 );
+
+ String fileStr = filePrefix + "49/" + dataStr;
+ File aFile = new File( fileStr );
+ if( aFile.exists() )
+ {
+ System.out.println( keyStr + " " + dataStr );
+ outStream.write( keyStr + " " + dataStr );
+ }
+ if( first )
+ {
+ key.set_flags( Db.DB_DBT_REALLOC );
+ data.set_flags( Db.DB_DBT_REALLOC );
+ first = false;
+ }
+ }
+ }
+ catch( DbRunRecoveryException e )
+ {
+ System.out.println( "Not able to create cursor: " + e.getMessage() );
+ }
+ catch (DbException dbe)
+ {
+ System.err.println("HelpAccess: " + dbe.toString());
+ System.exit(1);
+ }
+ catch (FileNotFoundException fnfe)
+ {
+ System.err.println("HelpAccess: " + fnfe.toString());
+ System.exit(1);
+ }
+ catch( IOException e )
+ {
+ e.printStackTrace();
+ }
+ }
+
+
+
+ public static void CreateDatabase()
+ {
+ String key1 = "1234";
+ String data1 = "dumm/start.xml";
+ String key2 = "4321";
+ String data2 = "blub/embedded.xml";
+ String key3 = "1235";
+ String data3 = "dumm/testpage.xml";
+
+ try
+ {
+ Db table = new Db(null, 0);
+ table.set_error_stream(System.err);
+ table.set_errpfx("AccessExample");
+ table.open( null, "e:/rvp603b/help/helpaccess.db", null, Db.DB_HASH, Db.DB_CREATE, 0644);
+ StringDbt key = new StringDbt(key1);
+ StringDbt data = new StringDbt(data1);
+ try
+ {
+ int err;
+ if ((err = table.put(null, key, data, 0)) == Db.DB_KEYEXIST)
+ {
+ System.out.println("Key " + " already exists.");
+ }
+ }
+ catch (DbException dbe)
+ {
+ System.out.println(dbe.toString());
+ }
+ System.out.println(" inserted first key ");
+
+
+ key = new StringDbt(key2);
+ data = new StringDbt(data2);
+ try
+ {
+ int err;
+ if ((err = table.put(null, key, data, 0)) == Db.DB_KEYEXIST)
+ {
+ System.out.println("Key " + " already exists.");
+ }
+ }
+ catch (DbException dbe)
+ {
+ System.out.println(dbe.toString());
+ }
+ System.out.println(" inserted second key ");
+
+
+ key = new StringDbt(key3);
+ data = new StringDbt(data3);
+ try
+ {
+ int err;
+ if ((err = table.put(null, key, data, 0)) == Db.DB_KEYEXIST)
+ {
+ System.out.println("Key " + " already exists.");
+ }
+ }
+ catch (DbException dbe)
+ {
+ System.out.println(dbe.toString());
+ }
+ System.out.println(" inserted third key ");
+
+
+ table.close(0);
+ }
+ catch (DbException dbe)
+ {
+ System.err.println("AccessExample: " + dbe.toString());
+ System.exit(1);
+ }
+ catch (FileNotFoundException fnfe)
+ {
+ System.err.println("AccessExample: " + fnfe.toString());
+ System.exit(1);
+ }
+ }
+}
--- /dev/null 2003-12-04 23:59:45.000000000 +0100
+++ xmlhelp/source/com/sun/star/help/db4/HelpIndexer.java 2004-01-22 22:48:17.000000000 +0100
@@ -0,0 +1,774 @@
+/**
+ * Title: <p>
+ * Description: <p>
+ * Copyright: Copyright (c) <p>
+ * Company: <p>
+ * @author
+ * @version 1.0
+ */
+package com.sun.star.help;
+
+
+import java.io.*;
+import java.net.URL;
+import java.util.*;
+
+import org.w3c.dom.*;
+import com.sun.xml.tree.*;
+import org.xml.sax.*;
+import javax.xml.parsers.*;
+import com.jclark.xsl.sax.*;
+
+import com.sun.xmlsearch.util.*;
+import com.sun.xmlsearch.xml.qe.*;
+import com.sun.xmlsearch.xml.indexer.*;
+
+import com.sleepycat.db.*;
+import com.sun.star.help.HelpURLStreamHandlerFactory;
+
+public class HelpIndexer {
+
+ private HelpURLStreamHandlerFactory _urlHandler = null;
+ private String _language = null, _module = null, _system = null;
+
+
+ public HelpIndexer( HelpURLStreamHandlerFactory urlHandler,String language, String module, String system )
+ {
+ _urlHandler = urlHandler;
+ _system = system;
+ _language = language;
+ _module = module;
+ }
+
+
+ private final class TagInfo
+ {
+ String _tag,_id;
+
+ public TagInfo( String id,String tag )
+ {
+ _tag = tag;
+ _id = id;
+ }
+
+ public String get_tag()
+ {
+ return _tag;
+ }
+
+ public String get_id()
+ {
+ return _id;
+ }
+ }
+
+
+ private final class DocInfo
+ {
+ private String _url = null,_id = null;
+
+ private ArrayList _helptags = new ArrayList();
+
+
+ public void append( String id,String tag )
+ {
+ _helptags.add( new TagInfo( id,tag ) );
+ }
+
+
+ public String getURL()
+ {
+ return _url;
+ }
+
+ public void setURL( String url )
+ {
+ _url = url;
+ }
+
+ public void setId( String id )
+ {
+ _id = id;
+ }
+
+ public String getId()
+ {
+ return _id;
+ }
+
+ public ArrayList getAppendices()
+ {
+ return _helptags;
+ }
+ }
+
+
+ Hashtable _hashDocInfo = new Hashtable();
+ Hashtable _hashHelptext = new Hashtable();
+
+
+ private void schnitzel()
+ {
+ // Determine the location of the database
+ String installDirectory = HelpDatabases.getInstallDirectory();
+ Db table = null;
+
+ try
+ {
+ table = new Db( null,0 );
+ table.set_error_stream( System.err );
+ table.set_errpfx( "indexing" );
+
+
+ // Create indexDirectory, if not existent
+ String indexDirectory = installDirectory + _language + File.separator + _module + ".idx";
+ File indexDir = new File( indexDirectory );
+ if( indexDir.exists() && indexDir.isFile() )
+ indexDir.delete();
+
+ if( ! indexDir.exists() )
+ indexDir.mkdir();
+
+ indexDir = null;
+
+ // Initialize the indexBuilder
+ XmlIndexBuilder builder = new XmlIndexBuilder( indexDirectory );
+
+ String[] translations = { "vnd.sun.star.help://", "#HLP#" };
+ PrefixTranslator translator = PrefixTranslator.makePrefixTranslator( translations );
+ builder.setPrefixTranslator( translator );
+
+ builder.clearIndex(); // Build index from scratch
+ builder.setTransformLocation( installDirectory + "..\\StyleSheets\\Indexing\\" );
+ builder.init( "index" );
+
+
+ // Determine and read the database
+ String fileName = installDirectory
+ + _language
+ + File.separator
+ + _module
+ + ".db";
+
+ table.open( null, fileName,null,Db.DB_BTREE,Db.DB_RDONLY,0644 );
+ Dbc cursor = table.cursor( null,0 );
+ StringDbt key = new StringDbt();
+ StringDbt data = new StringDbt();
+
+ boolean first = true;
+ key.set_flags( Db.DB_DBT_MALLOC ); // Initially the cursor must allocate the necessary memory
+ data.set_flags( Db.DB_DBT_MALLOC );
+ while( Db.DB_NOTFOUND != cursor.get( key,data,Db.DB_NEXT ) )
+ {
+ try
+ {
+ String keyStr = key.getString();
+ String dataStr = data.getFile();
+ String tagStr = data.getHash();
+
+ DocInfo info = ( DocInfo ) _hashDocInfo.get( dataStr );
+
+ if( info == null )
+ {
+ info = new DocInfo();
+ _hashDocInfo.put( dataStr,info );
+ }
+
+ if( ! tagStr.equals( "" ) )
+ info.append( keyStr,tagStr );
+ else
+ {
+ String url = "vnd.sun.star.help://" + _module + "/" + keyStr + "?Language=" + _language;
+ info.setURL( url );
+ info.setId( keyStr );
+ }
+ }
+ catch( Exception e )
+ {
+ }
+ if( first )
+ {
+ key.set_flags( Db.DB_DBT_REALLOC );
+ data.set_flags( Db.DB_DBT_REALLOC );
+ first = false;
+ }
+ }
+ cursor.close();
+ table.close( 0 );
+
+ System.out.println( "Indexing..." );
+ Enumeration enum = _hashDocInfo.elements();
+ int cut = 0;
+ while( enum.hasMoreElements() && cut < 100000000 )
+ {
+ try
+ {
+ DocInfo info = ( DocInfo ) enum.nextElement();
+ String url = info.getURL();
+ if( url == null )
+ {
+ System.out.println( "<----------------------------------->" );
+ System.out.println( "big error: found helptext without URL" );
+ System.out.println( "<----------------------------------->" );
+ continue;
+ }
+ cut++;
+
+ _urlHandler.setMode( null );
+ byte[] embResolved = getSourceDocument( url );
+// InputSource in = new InputSource( new ByteArrayInputStream( embResolved ) );
+
+ ByteArrayInputStream inbyte = new ByteArrayInputStream(embResolved);
+ InputStreamReader inread;
+ try
+ {
+ inread = new InputStreamReader( inbyte,"UTF8" );
+ }
+ catch( UnsupportedEncodingException e )
+ {
+ inread = new InputStreamReader( inbyte );
+ }
+ InputSource in = new InputSource( inread );
+
+ in.setEncoding( "UTF8" );
+ Document docResolved = null;
+ try
+ {
+ docResolved = XmlDocument.createXmlDocument( in,false );
+ }
+ catch( Exception e )
+ {
+ if( docResolved == null )
+ System.err.println( "Nullpointer" );
+
+ System.err.println( e.getMessage() );
+ }
+
+ String id = info.getId();
+ if( id == null )
+ System.out.println( "Found tag without valid id" );
+ else
+ addKeywords( docResolved,info.getId() );
+
+ Object[] attrList = info.getAppendices().toArray();
+ for( int i = 0; i < attrList.length; ++i )
+ {
+ TagInfo tag = ( TagInfo ) attrList[i];
+ Node node = extractHelptext( docResolved,tag.get_tag() );
+ if( node != null )
+ {
+ String text = dump(node);
+ _hashHelptext.put( tag.get_id(),text );
+ }
+ }
+ _urlHandler.setMode( embResolved );
+
+ int idx = url.indexOf( '?' );
+ if( idx != -1 )
+ url = url.substring( 0,idx );
+ System.out.println( url );
+ builder.indexDocument( new URL( url ),"" );
+ }
+ catch( Exception e )
+ {
+ System.err.println( e.getMessage() );
+ }
+ }
+
+ try
+ {
+ dumpHelptext();
+ _keywords.dump();
+ builder.close();
+ }
+ catch( Exception e )
+ {
+ System.err.println( e.getMessage() );
+ }
+ }
+ catch( DbRunRecoveryException e )
+ {
+ System.out.println( "Not able to create cursor: " + e.getMessage() );
+ System.exit(1);
+ }
+ catch( DbException e )
+ {
+ System.out.println( "Error initializing database" );
+ System.exit(1);
+ }
+ catch (FileNotFoundException fnfe)
+ {
+ System.err.println("HelpAccess: " + fnfe.getMessage() );
+ System.exit(1);
+ }
+ catch( java.lang.Exception e )
+ {
+ System.out.println( "any other exception" + e.getMessage() );
+ }
+ }
+
+
+
+ private final class NodeIterator
+ {
+ private final class StackElement
+ {
+ public boolean _isDone;
+ public Node _node;
+
+ StackElement( Node node )
+ {
+ _isDone = false;
+ _node = node;
+ }
+ }
+
+ private Stack stack = new Stack();
+
+ public NodeIterator( Node node )
+ {
+ stack.push( new StackElement(node) );
+ }
+
+ void change()
+ {
+ ((StackElement)(stack.peek()))._isDone = true;
+ NodeList top = ((StackElement)(stack.peek()))._node.getChildNodes();
+ for( int i = top.getLength()-1; i >= 0; --i )
+ stack.push( new StackElement( top.item(i) ) );
+ }
+
+ public Node next()
+ {
+ if( stack.empty() ) return null;
+ while( ! ((StackElement)(stack.peek()))._isDone ) change();
+ return ((StackElement)stack.pop())._node;
+ }
+ }
+
+
+ /**
+ * Given a dom of the document, the next Help:Helptext following Help:HelpID value="tag" is extracted
+ */
+
+ private Node extractHelptext( Node node,String tag )
+ {
+ boolean found = false;
+ Node test;
+ NodeIterator it = new NodeIterator( node );
+ while( ( test=it.next() ) != null )
+ {
+ if( !found && test.getNodeName().equals("help:help-id" ) && ((Element)test).getAttribute("value").equals(tag) )
+ found = true;
+ if( found && test.getNodeName().equals("help:help-text") )
+ return test;
+ }
+ return null;
+ }
+
+
+ private final class Keywords
+ {
+ private Hashtable _hash = new Hashtable();
+
+ class Data
+ {
+ int pos = 0;
+ String[] _idList = new String[5];
+
+ void append( String id )
+ {
+ if( pos == _idList.length )
+ {
+ String[] buff = _idList;
+ _idList = new String[ pos + 5 ];
+ for( int i = 0; i < buff.length; ++i )
+ _idList[i] = buff[i];
+ buff = null;
+ }
+ _idList[ pos++] = id;
+ }
+
+
+ int getLength()
+ {
+ return pos;
+ }
+
+ String getString()
+ {
+ String ret = new String();
+ for( int i = 0; i < pos; ++i )
+ {
+ ret += ( _idList[i] + ";" );
+ }
+ return ret;
+ }
+ } // end class data
+
+
+ public void insert( String key, String id )
+ {
+ Data data = (Data)_hash.get(key);
+ if( data == null )
+ {
+ data = new Data();
+ _hash.put( key,data );
+ }
+ data.append( id );
+ }
+
+
+ void dump()
+ {
+ Enumeration enum = _hash.keys();
+ int j = 0;
+ String[] list = new String[ _hash.size() ];
+ while( enum.hasMoreElements() )
+ {
+ list[j++] = ( String ) enum.nextElement();
+ }
+
+ Db table;
+ try
+ {
+ table = new Db( null,0 );
+
+ String fileName = HelpDatabases.getInstallDirectory()
+ + _language
+ + File.separator
+ + _module
+ + ".key";
+
+ table.open( null, fileName,null,Db.DB_BTREE,Db.DB_CREATE,0644 );
+
+ for( int i = 0; i < list.length; ++i )
+ {
+ Data data = ( Data ) _hash.get( list[i] );
+ StringDbt key = new StringDbt( list[i] );
+ StringDbt value = new StringDbt( data.getString() );
+ table.put( null,key,value,0);
+ }
+ table.close( 0 );
+ }
+ catch( Exception e )
+ {
+ System.out.println( "error writing keydata" );
+ }
+ }
+
+ }
+
+
+ void dumpHelptext()
+ {
+ Enumeration enum = _hashHelptext.keys();
+ int j = 0;
+ String[] list = new String[ _hashHelptext.size() ];
+ while( enum.hasMoreElements() )
+ {
+ list[j++] = ( String ) enum.nextElement();
+ }
+
+ Db table;
+ try
+ {
+ table = new Db( null,0 );
+
+ String fileName = HelpDatabases.getInstallDirectory()
+ + _language
+ + File.separator
+ + _module
+ + ".ht";
+
+ table.open( null, fileName,null,Db.DB_BTREE,Db.DB_CREATE,0644 );
+
+ for( int i = 0; i < list.length; ++i )
+ {
+ String data = ( String ) _hashHelptext.get( list[i] );
+ StringDbt key = new StringDbt( list[i] );
+ StringDbt value = new StringDbt( data );
+ table.put( null,key,value,0);
+ }
+ table.close( 0 );
+ }
+ catch( Exception e )
+ {
+ System.out.println( "error writing keydata" );
+ }
+ }
+
+
+
+
+ Keywords _keywords = new Keywords();
+
+ private void addKeywords( Node node,String id )
+ {
+ Node test;
+ NodeIterator it = new NodeIterator( node );
+ while( ( test=it.next() ) != null )
+ {
+ if( test.getNodeName().equals( "help:key-word" ) )
+ {
+ Element element = ( Element ) test;
+
+ String isEmbedded = element.getAttribute( "embedded" );
+
+ if( isEmbedded != null && isEmbedded.equals( "false" ) )
+ {
+ String keyword = element.getAttribute( "value" );
+ String getJump = element.getAttribute( "tag" );
+
+ if( ! keyword.equals("") && !id.equals("") )
+ _keywords.insert( keyword,id + "#" + getJump );
+ }
+ }
+ }
+ }
+
+
+
+ /**
+ * Returns a textual representation of
+ * the node
+ */
+
+
+ private String dump( Node node )
+ {
+ String app = new String();
+ if( node.hasChildNodes() )
+ {
+ NodeList list = node.getChildNodes();
+ for( int i = 0; i < list.getLength(); ++ i )
+ app += dump( list.item(i) );
+ }
+ if( node.getNodeType() == Node.ELEMENT_NODE )
+ {
+ /*
+ String start = "<" + node.getNodeName();
+ NamedNodeMap attr = node.getAttributes();
+ for( int j = 0; j < attr.getLength(); ++j )
+ {
+ start += ( " " + ((Attr)attr.item(j)).getName()+"=\"" + ((Attr)attr.item(j)).getValue() + "\"");
+ }
+ start += ">";
+ String end = "</" + node.getNodeName() + ">";
+
+ return start + app + end;
+ */
+ }
+ else if( node.getNodeType() == Node.TEXT_NODE )
+ {
+ return ((Text)node).toString();
+ }
+ return app;
+ }
+
+
+
+ // This is a configurable class, which capsulates the parser initialization stuff and all this things
+
+ public static final class ParseStuff
+ {
+ private final XSLProcessor _processor;
+ private final OutputMethodHandlerImpl _output;
+
+
+ private ParseStuff()
+ {
+ _processor = new XSLProcessorImpl();
+
+ // Determine the parser
+ SAXParserFactory spf = SAXParserFactory.newInstance();
+ spf.setValidating( false );
+ try
+ {
+ _processor.setParser( spf.newSAXParser().getParser() );
+ }
+ catch( java.lang.Exception e )
+ {
+ System.err.println( "<!-- NO HELP AVAILABLE: no parser found -->" );
+ System.exit( 1 );
+ }
+
+ // Determine the OutputMethodHandler
+ _output = new OutputMethodHandlerImpl( _processor );
+ _processor.setOutputMethodHandler( _output );
+ }
+
+ // Loading from a URL
+ public ParseStuff( URL url )
+ {
+ this();
+ try
+ {
+ _processor.loadStylesheet( new InputSource( url.toExternalForm() ) );
+ }
+ catch( SAXException e )
+ {
+ System.err.println( "<!-- Syntactic error in stylesheet -->" );
+ System.err.println( e.getMessage() );
+ System.exit( 1 );
+ }
+ catch( java.io.IOException e )
+ {
+ System.err.println( "<!-- Style sheet not found -->" );
+ System.err.println( e.getMessage() );
+ System.exit( 1 );
+ }
+ System.out.println( "Using stylesheet: " + url.toExternalForm() );
+ }
+
+
+ // Loading from a file
+ public ParseStuff( String styleSheet )
+ {
+ this();
+ try
+ {
+ _processor.loadStylesheet( new InputSource( new FileInputStream( styleSheet ) ) );
+ }
+ catch( SAXException e )
+ {
+ System.err.println( "<!-- Syntactic error in stylesheet -->" );
+ System.err.println( e.getMessage() );
+ System.exit( 1 );
+ }
+ catch( java.io.IOException e )
+ {
+ System.err.println( "<!-- Style sheet not found: -->" );
+ System.exit( 1 );
+ }
+ System.out.println( "Using stylesheet: " + styleSheet );
+ }
+
+
+ public byte[] parse( String url )
+ {
+ InputSource _in = new InputSource( url );
+ _in.setEncoding( "UTF-8" );
+
+
+ HelpOutputStream _out = new HelpOutputStream();
+ try
+ {
+ // OutputStreamDestination _dest = new OutputStreamDestination( _out );
+ HelpProvider.ProviderDestination _dest = new HelpProvider.ProviderDestination( _out,"UTF-8" );
+ synchronized( this )
+ {
+ _output.setDestination( _dest );
+ _processor.parse( _in );
+ _out.flush();
+ }
+ }
+ catch( java.io.IOException e )
+ {
+ System.err.println( "no file corresponding to URL exists: " + url );
+ System.err.println( "no file corresponding to URL exists: " + e.getMessage() );
+ // System.exit( 1 );
+ }
+ catch( SAXException e )
+ {
+ System.err.println( "ill formed xml document: " + e.getMessage() );
+ System.err.println( " url: " + url );
+ // System.exit( 1 );
+ }
+ catch( Exception e )
+ {
+ System.err.println( "any other exception" );
+ System.err.println( e.getMessage() );
+ }
+
+ return _out.getBigBuffer();
+ }
+
+
+ public void setParameter( String key,Object value )
+ {
+ _processor.setParameter( key,value );
+ }
+
+ } // end class ParseStuff
+
+
+
+ /**
+ * Returns the embedding resolved document
+ */
+
+ ParseStuff _stuff = null;
+
+ byte[] getSourceDocument( String url )
+ {
+ // Initialize
+ if( _stuff == null )
+ {
+ String styleSheet = HelpDatabases.getInstallDirectory() + "..\\StyleSheets\\Indexing\\ResEmb.xsl";
+ _stuff = new ParseStuff( styleSheet );
+
+ // Setting the parameters
+ _stuff.setParameter( "Language", _language );
+ _stuff.setParameter( "Database", _module );
+ }
+
+ // and parse
+ return _stuff.parse( url );
+ }
+
+
+
+
+ // Now has to be settled up
+ public static void main( String[] args ) throws Exception
+ {
+ System.setProperty( "XMLSEARCH", HelpDatabases.getInstallDirectory() );
+ if( args.length != 6 )
+ {
+ System.out.println( "Usage example: main -language de -module swriter -system WIN" );
+ System.exit( 1 );
+ }
+
+ String language = null,module = null, system = null;
+
+ for( int i = 0; i < 5; i+=2 )
+ {
+ if( args[i].trim().equals( "-language" ) )
+ language = args[i+1];
+ else if( args[i].trim().equals( "-module" ) )
+ module = args[i+1];
+ else if( args[i].trim().equals( "-system" ) )
+ system = args[i+1];
+ }
+
+ if( language == null || module == null || system == null )
+ {
+ System.out.println( "Usage example: main -language de -module swriter -system WIN" );
+ System.exit( 1 );
+ }
+ else
+ {
+ System.out.println( " Configuring for \"system\" = " + system);
+ System.out.println( " \"module\" = " + module);
+ System.out.println( " \"language\" = " + language);
+ }
+
+ try
+ {
+ String urlmode = HelpDatabases.getURLMode();
+ HelpURLStreamHandlerFactory urlHandler = new HelpURLStreamHandlerFactory( urlmode );
+ URL.setURLStreamHandlerFactory( urlHandler );
+
+ HelpIndexer helpIndexer = new HelpIndexer( urlHandler,language,module,system );
+
+ // helpIndexer.indexDatabase();
+ helpIndexer.schnitzel();
+ }
+ catch( Exception e )
+ {
+ e.printStackTrace();
+ }
+ }
+}
+
--- /dev/null 2003-12-04 23:59:45.000000000 +0100
+++ xmlhelp/source/com/sun/star/help/db4/HelpDatabases.java 2004-01-22 22:48:17.000000000 +0100
@@ -0,0 +1,590 @@
+package com.sun.star.help;
+
+import com.sleepycat.db.*;
+import java.io.*;
+import java.util.*;
+import java.util.jar.*;
+
+
+public final class HelpDatabases
+{
+ // The office installation directory for the help system
+ // Has to be read from the configuration
+ private static String _installDirectory = System.getProperty( "com.sun.star.help.Directory" );
+
+ public static synchronized void setInstallPath( String _dir )
+ {
+ _installDirectory = _dir;
+ }
+
+ // Holds the databases for the different languages;
+ private static final Hashtable _dbHash = new Hashtable();
+
+ // The same for the jar files
+ private static final Hashtable _jarHash = new Hashtable();
+
+
+ public static final class StaticModuleInformation
+ {
+ private String _startId;
+ private String _programSwitch;
+ private String _title;
+ private String _heading;
+ private String _fulltext;
+
+ public StaticModuleInformation( String title,
+ String startId,
+ String programSwitch,
+ String heading,
+ String fulltext )
+ {
+ _title = title;
+ _startId = startId;
+ _programSwitch = programSwitch;
+ _heading = heading;
+ _fulltext = fulltext;
+ }
+
+ public String get_title() { return _title; }
+ public String get_id() { return _startId; }
+ public String get_program() { return _programSwitch; }
+ public String get_heading() { return _heading; }
+ public String get_fulltext() { return _fulltext; }
+ }
+
+
+ public static final Hashtable _modInfo = new Hashtable();
+
+
+
+ public static String getURLMode()
+ {
+ return new String( "with-jars" );
+
+ // return new String( "with-files" );
+ }
+
+
+
+ private static final class DbFilter implements FilenameFilter
+ {
+ public boolean accept( File dir, String name )
+ {
+ if( dir.exists() && ends( name ) )
+ return true;
+ else
+ return false;
+ }
+
+ boolean ends( String name )
+ {
+ int idx = name.lastIndexOf( '.' );
+ if( ( name.charAt( idx + 1 ) == 'd' ||
+ name.charAt( idx + 1 ) == 'D' ) &&
+ ( name.charAt( idx + 2 ) == 'b' ||
+ name.charAt( idx + 2 ) == 'B' ) )
+ {
+ if( name.substring(0,idx).toLowerCase().equals("picture") )
+ return false;
+
+ return true;
+ }
+ else
+ return false;
+ }
+ }
+
+
+ public static String[] getModuleList( String Language )
+ {
+ String dirName = _installDirectory + lang( Language );
+ File dirFile = new File( dirName );
+ if( dirFile.isDirectory() )
+ return dirFile.list( new DbFilter() );
+ else
+ return null;
+ }
+
+ public static String getInstallDirectory()
+ {
+ return _installDirectory;
+ }
+
+
+ public static final HashSet langSet = new HashSet();
+
+
+ public static synchronized String lang( String Language )
+ {
+ String ret = Language;
+ if( ! langSet.contains( ret ) )
+ {
+ if( ! (new File( _installDirectory + ret )).exists() )
+ {
+ int idx;
+ if( ( idx = ret.indexOf( '-' ) ) != -1 || // Only one is true
+ ( idx = ret.indexOf( '_' ) ) != -1 )
+ ret = ret.substring( 0,idx );
+ }
+ langSet.add( ret );
+ }
+
+ return ret;
+ }
+
+
+ public static synchronized StaticModuleInformation getStaticInformationForModule( String Module, String Language )
+ {
+ String key = lang(Language) + File.separator + Module;
+ StaticModuleInformation info = ( StaticModuleInformation ) _modInfo.get( key );
+ if( info == null )
+ {
+ String cfgDat = _installDirectory + key + ".cfg";
+ FileInputStream cfgFile = null;
+ try
+ {
+ cfgFile = new FileInputStream( cfgDat );
+ }
+ catch( FileNotFoundException e )
+ {
+ e.printStackTrace();
+ }
+ try
+ {
+ InputStreamReader input;
+ try
+ {
+ input = new InputStreamReader( cfgFile,"UTF8" );
+ }
+ catch( UnsupportedEncodingException e )
+ {
+ input = new InputStreamReader( cfgFile );
+ }
+
+ String fileContent = new String();
+ char[] buffer = new char[128];
+ while( input.read( buffer,0,128 ) != -1 )
+ {
+ fileContent += new String( buffer );
+ buffer = new char[128];
+ }
+ input.close();
+ cfgFile.close();
+
+ String current = new String();
+ String lang = null,program = null,startid = null,title = null,heading = "",fulltext="";
+ for( int i = 0; i < fileContent.length(); ++i )
+ {
+ char ch = fileContent.charAt( i );
+ if( ch == '\n' || ch == '\r' )
+ {
+ if( current.length() != 0 )
+ {
+ // Something to interpret
+ if( current.startsWith( "Title" ) )
+ {
+ title = current.substring( current.indexOf('=') + 1 );
+ }
+ else if( current.startsWith( "Start" ) )
+ {
+ startid = current.substring( current.indexOf('=') + 1 );
+ }
+ else if( current.startsWith( "Language" ) )
+ {
+ lang = current.substring( current.indexOf('=') + 1 );
+ }
+ else if( current.startsWith( "Program" ) )
+ {
+ program = current.substring( current.indexOf('=') + 1 );
+ }
+ else if( current.startsWith( "Heading" ) )
+ {
+ heading = current.substring( current.indexOf('=') + 1 );
+ }
+ else if( current.startsWith( "FullText" ) )
+ {
+ fulltext = current.substring( current.indexOf('=') + 1 );
+ }
+ }
+ current = new String();
+ }
+ else
+ current += ch;
+ }
+ info = new StaticModuleInformation( title,startid,program,heading,fulltext );
+ _modInfo.put( key,info );
+ }
+ catch( Exception e )
+ {
+ System.err.println( "Corrupted cfg-file: " + cfgDat );
+ e.printStackTrace();
+ }
+ }
+
+ return info;
+ }
+
+
+
+ public static synchronized Db getDatabaseForLanguage( String Database,String Language )
+ {
+ if( Database == null || Language == null )
+ return null;
+ String key = lang(Language) + File.separator + Database; // For example de/swriter
+ Db table = ( Db ) _dbHash.get( key );
+ if( table == null )
+ {
+ try
+ {
+ table = new Db( null,0 );
+
+ String tablePath = _installDirectory + key + ".db";
+ table.open( null, tablePath,null,Db.DB_BTREE,Db.DB_RDONLY,0644 );
+ _dbHash.put( key,table );
+ }
+ catch( DbException e )
+ {
+ System.err.println( "Unsupported language in helpsystem: " + Language );
+ System.err.println( "module: " + Database );
+ System.err.println( e.getMessage() );
+ }
+ catch( FileNotFoundException e )
+ {
+ System.err.println( "Unsupported language in helpsystem: " + Language );
+ System.err.println( "module: " + Database );
+ System.err.println( e.getMessage() );
+ }
+ }
+
+ return table;
+ }
+
+
+ static Hashtable _helptextHash = new Hashtable();
+
+
+ public static synchronized Db getHelptextDbForLanguage( String Database,String Language )
+ {
+ String key = lang( Language ) + File.separator + Database; // For example de/swriter
+ Db table = ( Db ) _helptextHash.get( key );
+ if( table == null )
+ {
+ try
+ {
+ table = new Db( null,0 );
+
+ String tablePath = _installDirectory + key + ".ht";
+ table.open( null, tablePath,null,Db.DB_BTREE,Db.DB_RDONLY,0644 );
+ _dbHash.put( key,table );
+ }
+ catch( DbException e )
+ {
+ System.err.println( "Unsupported language in helpsystem: " + Language );
+ System.err.println( "module: " + Database );
+ System.err.println( e.getMessage() );
+ }
+ catch( FileNotFoundException e )
+ {
+ System.err.println( "Unsupported language in helpsystem: " + Language );
+ System.err.println( "module: " + Database );
+ System.err.println( e.getMessage() );
+ }
+ }
+
+ return table;
+ }
+
+
+
+ public static synchronized JarFile getJarFileForLanguage( String Database,String Language )
+ {
+ if( Language == null || Database == null )
+ return null;
+
+ String key = lang(Language) + File.separator + Database;
+ JarFile jarFile = ( JarFile ) _jarHash.get( key );
+ if( jarFile == null )
+ {
+ try
+ {
+ File file = new File( _installDirectory + key );
+ if( file.exists() )
+ {
+ jarFile = new JarFile( file );
+ _jarHash.put( key,jarFile );
+ }
+ else
+ throw new java.io.IOException();
+ }
+ catch( IOException e )
+ {
+ System.err.println( "Jarfile not found: " + Database + " " + Language );
+ }
+ }
+
+ return jarFile;
+ }
+
+
+ public static InputStream getCssSheet()
+ {
+ try
+ {
+ return new FileInputStream( _installDirectory + "custom.css" );
+ }
+ catch( FileNotFoundException e )
+ {
+ return null;
+ }
+ }
+
+
+ public static InputStream errorFile( String Language )
+ {
+ try
+ {
+ return new FileInputStream( _installDirectory + lang(Language) + File.separator + "err.html" );
+ }
+ catch( IOException e )
+ {
+ String errorFile =
+ " <html><body> "+
+ " The requested document does not exist in the database !! "+
+ " </body></html> ";
+
+ return new ByteArrayInputStream( errorFile.getBytes() );
+ }
+ }
+
+
+
+ public static InputStream popupDocument( HelpURLParameter xPar )
+ {
+// String popupFile =
+// " <help:document xmlns:help=\"http://openoffice.org/2000/help\"> "+
+// " <help:body>" +
+// " <help:popup-cut Id=\""+xPar.get_id()+"\" Eid=\""+xPar.get_eid()+"\"></help:popup-cut> " +
+// 1 " </help:body></help:document> ";
+
+ String popupFile =
+ " <html> "+
+ " <head> "+
+ " <help:css-file-link xmlns:help=\"http://openoffice.org/2000/help\"/> "+
+ " </head> "+
+ " <body> "+
+ " <help:popup-cut Id=\""+xPar.get_id()+"\" Eid=\""+xPar.get_eid()+"\" xmlns:help=\"http://openoffice.org/2000/help\"></help:popup-cut> "+
+ " </body> "+
+ " </html> ";
+
+ System.out.println( popupFile );
+
+ return new ByteArrayInputStream( popupFile.getBytes() );
+ }
+
+
+ private static final Hashtable _keyword = new Hashtable();
+
+
+ public static final class KeywordInfo
+ {
+ int pos = 0;
+ String[] listKey = new String[100];
+ String[][] listId;
+ String[][] listAnchor;
+ String[][] listTitle;
+
+ public String [] getKeywordList()
+ {
+ return listKey;
+ }
+
+ public String[][] getIdList()
+ {
+ return listId;
+ }
+
+
+ public String[][] getAnchorList()
+ {
+ return listAnchor;
+ }
+
+ public String[][] getTitleList()
+ {
+ return listTitle;
+ }
+
+ private void realloc( int length )
+ {
+ String[] buff = listKey;
+ listKey = new String[ length ];
+ int count = ( listKey.length > buff.length ) ? buff.length : listKey.length;
+ for( int i = 0; i < count; ++i )
+ listKey[i] = buff[i];
+ buff = null;
+ }
+
+
+ public String[] getTitleForIndex( int i )
+ {
+ return listTitle[i];
+ }
+
+
+ void insert( String id )
+ {
+ if( pos == listKey.length )
+ realloc( pos + 100 );
+ listKey[ pos++ ] = id;
+ }
+
+
+ public String[] insertId( int index,String ids )
+ {
+ int pos = 0;
+ String[] test = new String[10];
+ while( ids != null && ids.length() != 0 )
+ {
+ int idx = ids.indexOf( ';' );
+ if( pos == test.length )
+ {
+ String[] buff = test;
+ test = new String[ pos+10 ];
+ for( int i = 0; i < buff.length; ++i )
+ test[i] = buff[i];
+ buff = null;
+ }
+
+ test[pos++] = ids.substring(0,idx);
+ ids = ids.substring( 1+idx );
+ }
+
+ String[] buff = test;
+ test = new String[ pos ];
+ for( int i = 0; i < pos; ++i )
+ test[i] = buff[i];
+
+ listId[index] = test;
+ listAnchor[index] = new String[test.length];
+
+ for( int k = 0; k < listId[index].length; ++k )
+ {
+ if( listId[index][k] == null )
+ {
+ listId[index][k] = "";
+ listAnchor[index][k] = "";
+ }
+ else
+ {
+ int idx = listId[index][k].indexOf('#');
+ if( idx != -1 )
+ {
+ listAnchor[index][k] = listId[index][k].substring(1+idx).trim();
+ listId[index][k] = listId[index][k].substring(0,idx).trim();
+ }
+ else
+ listAnchor[index][k] = "";
+ }
+ }
+
+ listTitle[index] = new String[test.length];
+ return test;
+ }
+
+
+
+ public void sort()
+ {
+ realloc( pos );
+ Arrays.sort( listKey );
+ listId = new String[ listKey.length ][];
+ listAnchor = new String[ listKey.length ][];
+ listTitle = new String[ listKey.length ][];
+ }
+ }
+
+
+ public static synchronized KeywordInfo getKeyword( String Database, String Language )
+ {
+ String keyStr = lang(Language) + File.separator + Database;
+ KeywordInfo info = ( KeywordInfo ) _keyword.get( keyStr );
+
+ if( info == null )
+ {
+ try
+ {
+ HashMap internalHash = new HashMap();
+ String fileName = HelpDatabases.getInstallDirectory() + keyStr + ".key";
+ Db table = new Db( null,0 );
+ System.err.println( fileName );
+ table.open( null, fileName,null,Db.DB_BTREE,Db.DB_RDONLY,0644 );
+ Dbc cursor = table.cursor( null,0 );
+ StringDbt key = new StringDbt();
+ StringDbt data = new StringDbt();
+
+ boolean first = true;
+ key.set_flags( Db.DB_DBT_MALLOC ); // Initially the cursor must allocate the necessary memory
+ data.set_flags( Db.DB_DBT_MALLOC );
+ info = new KeywordInfo();
+
+ String keyStri;
+
+ while( Db.DB_NOTFOUND != cursor.get( key,data,Db.DB_NEXT ) )
+ {
+ keyStri = key.getString();
+ info.insert( keyStri );
+ internalHash.put( keyStri,data.getString() );
+ if( first )
+ {
+ key.set_flags( Db.DB_DBT_REALLOC );
+ data.set_flags( Db.DB_DBT_REALLOC );
+ first = false;
+ }
+ }
+
+ info.sort();
+ cursor.close();
+ table.close( 0 );
+
+ String[] keywords = info.getKeywordList();
+ Db table2 = getDatabaseForLanguage( Database,Language );
+ for( int i = 0; i < keywords.length; ++i )
+ {
+ String[] id = info.insertId( i,((String)internalHash.get( keywords[i])) );
+ String[] title = info.getTitleForIndex( i );
+
+ for( int j = 0; j < id.length; ++j )
+ {
+ StringDbt key1 = new StringDbt();
+ key1.setString( id[j] );
+ StringDbt data1 = new StringDbt();
+ try
+ {
+ table2.get( null,key1,data1,0 );
+ title[j] = data1.getTitle();
+ }
+ catch( Exception e )
+ {
+ e.printStackTrace();
+ title[j] = "";
+ }
+ }
+ }
+
+ _keyword.put( keyStr,info );
+ }
+ catch( Exception e )
+ {
+ e.printStackTrace();
+ System.err.println( "any other exception in getKeyword: " + e.getMessage() );
+ }
+ }
+
+ return info;
+ }
+
+} // end class HelpDatabases
+
+
+
+
--- xmlhelp/source/com/sun/star/help/makefile.mk 2004-05-03 22:12:36.000000000 +0200
+++ xmlhelp/source/com/sun/star/help/makefile.mk 2004-05-03 23:29:20.000000000 +0200
@@ -27,7 +27,39 @@
CLASSGENDIR = $(OUT)$/classgen
RDB = $(SOLARBINDIR)$/types.rdb
-JAVAFILES = $(subst,$(CLASSDIR)$/$(PACKAGE)$/, $(subst,.class,.java $(JAVACLASSFILES)))
+
+JAVAFILES = \
+ HelpContentIdentifier.java \
+ HelpProvider.java \
+ HelpContent.java \
+ HelpOutputStream.java \
+ HelpURLStreamHandlerFactory.java \
+ HelpURLStreamHandler.java \
+ HelpURLStreamHandlerWithJars.java \
+ HelpURLConnection.java \
+ HelpURLConnectionWithJars.java \
+ HelpURLParameter.java \
+ HelpResultSetFactory.java \
+ HelpDynamicResultSet.java \
+ HelpResultSetBase.java \
+ HelpResultSet.java \
+ HelpResultSetForRoot.java \
+ HelpTransformer.java \
+ HelpPackager.java \
+ XSLData.java \
+ StringDbt.java
+
+.IF "$(DB_VERSION)" >= "4.1"
+JAVAFILES += \
+ db4$/HelpDatabases.java \
+ db4$/CreateDb.java \
+ db4$/HelpIndexer.java
+.ELSE
+JAVAFILES += \
+ HelpDatabases.java \
+ CreateDb.java \
+ HelpIndexer.java
+.ENDIF
UNIXTEXT= \
$(MISC)$/helpserver.sh