diff -urN tidy.old/src/pprint.c tidy-26/src/pprint.c
--- tidy.old/src/pprint.c	2005-08-03 08:58:11.000000000 +0200
+++ tidy-26/src/pprint.c	2006-02-13 17:29:01.000000000 +0100
@@ -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 */
@@ -708,7 +708,7 @@
     }
 }
 
-static void PPrintChar( TidyDocImpl* doc, uint c, uint mode )
+void PPrintChar( TidyDocImpl* doc, uint c, uint mode )
 {
     tmbchar entity[128];
     ctmbstr p;
@@ -943,7 +943,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;
@@ -984,13 +984,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,
@@ -1414,7 +1412,7 @@
     AddChar( pprint, '>' );
 }
 
-static void PPrintComment( TidyDocImpl* doc, uint indent, Node* node )
+void PPrintComment( TidyDocImpl* doc, uint indent, Node* node )
 {
     TidyPrintImpl* pprint = &doc->pprint;
 
@@ -1501,7 +1499,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;
@@ -1532,7 +1530,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;
@@ -1620,7 +1618,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;
@@ -1639,7 +1637,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 );
@@ -1856,7 +1854,7 @@
 
 
 
-static Bool ShouldIndent( TidyDocImpl* doc, Node *node )
+Bool ShouldIndent( TidyDocImpl* doc, Node *node )
 {
     TidyTriState indentContent = cfgAutoBool( doc, TidyIndentContent );
     if ( indentContent == TidyNoState )
