--- src/pprint.c.old	2003-11-08 13:01:16.000000000 +0800
+++ src/pprint.c	2003-11-08 13:03:05.000000000 +0800
@@ -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 */
@@ -706,7 +706,7 @@
     }
 }
 
-static void PPrintChar( TidyDocImpl* doc, uint c, uint mode )
+void PPrintChar( TidyDocImpl* doc, uint c, uint mode )
 {
     tmbchar entity[128];
     ctmbstr p;
@@ -941,7 +941,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;
@@ -982,13 +982,11 @@
     }
 }
 
-#if 0
-static void PPrintString( TidyDocImpl* doc, uint indent, ctmbstr str )
+void PPrintString( TidyDocImpl* doc, uint indent, ctmbstr str )
 {
     while ( *str != '\0' )
         AddChar( &doc->pprint, *str++ );
 }
-#endif /* 0 */
 
 
 static void PPrintAttrValue( TidyDocImpl* doc, uint indent,
@@ -1370,7 +1368,7 @@
     AddChar( pprint, '>' );
 }
 
-static void PPrintComment( TidyDocImpl* doc, uint indent, Node* node )
+void PPrintComment( TidyDocImpl* doc, uint indent, Node* node )
 {
     TidyPrintImpl* pprint = &doc->pprint;
 
@@ -1454,7 +1452,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;
@@ -1485,7 +1483,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;
@@ -1574,7 +1572,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;
@@ -1593,7 +1591,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 );
@@ -1900,7 +1898,7 @@
 
 
 
-static Bool ShouldIndent( TidyDocImpl* doc, Node *node )
+Bool ShouldIndent( TidyDocImpl* doc, Node *node )
 {
     uint indentContent = cfg( doc, TidyIndentContent );
     if ( indentContent == no )
