Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37841097
en ru br
Репозитории 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
www.altlinux.org/Changes

Группа :: Офис
Пакет: 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
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin