--- src/pprint.c.orig	2004-08-02 16:14:50.000000000 +0900
+++ src/pprint.c	2004-08-18 08:49:24.000000000 +0900
@@ -40,7 +40,7 @@
 static int  TextEndsWithNewline( Lexer *lexer, Node *node, uint mode );
 static int  TextStartsWithWhitespace( Lexer *lexer, Node *node, uint start, uint mode );
 static Bool InsideHead( TidyDocImpl* doc, Node *node );
-static Bool ShouldIndent( TidyDocImpl* doc, Node *node );
+Bool ShouldIndent( TidyDocImpl* doc, Node *node );
 
 #if SUPPORT_ASIAN_ENCODINGS
 /* #431953 - start RJ Wraplen adjusted for smooth international ride */
@@ -704,7 +704,7 @@
     }
 }
 
-static void PPrintChar( TidyDocImpl* doc, uint c, uint mode )
+void PPrintChar( TidyDocImpl* doc, uint c, uint mode )
 {
     tmbchar entity[128];
     ctmbstr p;
@@ -939,7 +939,7 @@
   to UTF-8 is deferred to the WriteChar() routine called
   to flush the line buffer.
 */
-static void PPrintText( TidyDocImpl* doc, uint mode, uint indent,
+void PPrintText( TidyDocImpl* doc, uint mode, uint indent,
                         Node* node  )
 {
     uint start = node->start;
@@ -980,15 +980,13 @@
     }
 }
 
-#if 0
-static void PPrintString( TidyDocImpl* doc, uint indent, ctmbstr str )
+void PPrintString( TidyDocImpl* doc, uint indent, ctmbstr str )
 {
 #pragma unused(indent)
 
     while ( *str != '\0' )
         AddChar( &doc->pprint, *str++ );
 }
-#endif /* 0 */
 
 
 static void PPrintAttrValue( TidyDocImpl* doc, uint indent,
@@ -1384,7 +1382,7 @@
     AddChar( pprint, '>' );
 }
 
-static void PPrintComment( TidyDocImpl* doc, uint indent, Node* node )
+void PPrintComment( TidyDocImpl* doc, uint indent, Node* node )
 {
     TidyPrintImpl* pprint = &doc->pprint;
 
@@ -1471,7 +1469,7 @@
     PCondFlushLine( doc, indent );
 }
 
-static void PPrintPI( TidyDocImpl* doc, uint indent, Node *node )
+void PPrintPI( TidyDocImpl* doc, uint indent, Node *node )
 {
     TidyPrintImpl* pprint = &doc->pprint;
     tchar c;
@@ -1502,7 +1500,7 @@
     PCondFlushLine( doc, indent );
 }
 
-static void PPrintXmlDecl( TidyDocImpl* doc, uint indent, Node *node )
+void PPrintXmlDecl( TidyDocImpl* doc, uint indent, Node *node )
 {
     AttVal* att;
     uint saveWrap;
@@ -1590,7 +1588,7 @@
     WrapOn( doc, saveWrap );
 }
 
-static void PPrintCDATA( TidyDocImpl* doc, uint indent, Node *node )
+void PPrintCDATA( TidyDocImpl* doc, uint indent, Node *node )
 {
     uint saveWrap;
     TidyPrintImpl* pprint = &doc->pprint;
@@ -1609,7 +1607,7 @@
     WrapOn( doc, saveWrap );          /* restore wrapping */
 }
 
-static void PPrintSection( TidyDocImpl* doc, uint indent, Node *node )
+void PPrintSection( TidyDocImpl* doc, uint indent, Node *node )
 {
     TidyPrintImpl* pprint = &doc->pprint;
     Bool wrapSect = cfgBool( doc, TidyWrapSection );
@@ -1825,7 +1823,7 @@
 
 
 
-static Bool ShouldIndent( TidyDocImpl* doc, Node *node )
+Bool ShouldIndent( TidyDocImpl* doc, Node *node )
 {
     uint indentContent = cfg( doc, TidyIndentContent );
     if ( indentContent == no )
