diff -urN tidycvs\console\tidy.c tidydev4\console\tidy.c
--- tidycvs\console\tidy.c Wed Feb 15 14:15:40 2006
+++ tidydev4\console\tidy.c Sun Feb 19 15:13:40 2006
@@ -14,6 +14,12 @@
*/
#include "tidy.h"
+#if !defined(NO_SETMODE_SUPPORT)
+#if defined(_WIN32) || defined(OS2_OS)
+#include
+#include
+#endif /* defined(_WIN32) || defined(OS2_OS) */
+#endif /* !NO_SETMODE_SUPPORT */
static FILE* errout = NULL; /* set to stderr */
/* static FILE* txtout = NULL; */ /* set to stdout */
@@ -1220,6 +1226,26 @@
continue;
}
+#if !defined(NO_SETMODE_SUPPORT)
+#if defined(_WIN32) || defined(OS2_OS)
+ /* clear of help or version output, so
+ it is safe to set binary, since Tidy
+ internally translates LF'es
+ Note, system resets these on program exit.
+ */
+/* Note, _setmode() does NOT work on Win2K Pro w/ VC++ 6.0 SP3.
+** The code has been left in in case it works w/ other compilers
+** or operating systems. If stdout is in Text mode, be aware that
+** it will garble UTF16 documents. In text mode, when it encounters
+** a single byte of value 10 (0xA), it will insert a single byte
+** value 13 (0xD) just before it. This has the effect of garbling
+** the entire document.
+*/
+ setmode( fileno(stdout), _O_BINARY );
+ setmode( fileno(stderr), _O_BINARY );
+#endif /* WIN32 or OS2_OS */
+#endif /* !NO_SETMODE_SUPPORT */
+
if ( argc > 1 )
{
htmlfil = argv[1];
@@ -1267,9 +1293,11 @@
break;
}
+#if 0 /* chopped code */
if (!tidyOptGetBool(tdoc, TidyQuiet) &&
errout == stderr && !contentErrors)
fprintf(errout, "\n");
+#endif /* #if 0 end chop */
if (contentErrors + contentWarnings > 0 &&
!tidyOptGetBool(tdoc, TidyQuiet))
diff -urN tidycvs\include\platform.h tidydev4\include\platform.h
--- tidycvs\include\platform.h Wed Feb 15 14:15:40 2006
+++ tidydev4\include\platform.h Sat Feb 18 13:46:52 2006
@@ -50,6 +50,14 @@
/* #define SUPPORT_GETPWNAM */
+/* =====================================================
+ Define ADD_INLINE_FIX2 to provide a fix for the
+ following html
+ bold bold and italics italics only
+ Tidy will then convert this to
+ bold bold and italics italics only
+ ====================================================== */
+#define ADD_INLINE_FIX2
/* Enable/disable support for Big5 and Shift_JIS character encodings */
#ifndef SUPPORT_ASIAN_ENCODINGS
diff -urN tidycvs\src\istack.c tidydev4\src\istack.c
--- tidycvs\src\istack.c Sat Feb 18 12:32:44 2006
+++ tidydev4\src\istack.c Sat Feb 18 13:46:52 2006
@@ -288,6 +288,88 @@
return node;
}
+#ifdef ADD_INLINE_FIX2
+/* Bool SwitchInline( TidyDocImpl * doc, Node * element, Node * node )
+ We have two CM_INLINE elements pushed ... the first is closing,
+ but, like the browser, the second should be retained ...
+ Like bold bold and italics italics only
+ This function switches the tag positions on the stack,
+ returning 'yes' if both were found in the expected order.
+*/
+Bool SwitchInline( TidyDocImpl * doc, Node * element, Node * node )
+{
+ Lexer* lexer = doc->lexer;
+ if ( lexer
+ && element
+ && node
+ && (element->tag != NULL)
+ && (node->tag != NULL)
+ && IsPushed( doc, element )
+ && IsPushed( doc, node )
+ && ((lexer->istacksize - lexer->istackbase) >= 2) )
+ {
+ /* we have a chance of succeeding ... */
+ int i;
+ for (i = (lexer->istacksize - lexer->istackbase - 1); i >= 0; --i)
+ {
+ if (lexer->istack[i].tag == element->tag) {
+ /* found the element tag - phew */
+ IStack * istack1 = &lexer->istack[i];
+ IStack * istack2 = 0;
+ --i; /* back one more, and continue */
+ for ( ; i >= 0; --i)
+ {
+ if (lexer->istack[i].tag == node->tag)
+ {
+ /* found the element tag - phew */
+ istack2 = &lexer->istack[i];
+ break;
+ }
+ }
+ if( istack2 )
+ {
+ /* perform the SWAP ... */
+ static IStack _tmp_istack;
+ IStack * istack3 = &_tmp_istack; /* establish a temp */
+ *istack3 = *istack2; /* copy 2nd to temp */
+ *istack2 = *istack1; /* copy 1st to 2nd */
+ *istack1 = *istack3; /* copy temp to 1st */
+ return yes; /* return success */
+ }
+ }
+ }
+ }
+ return no;
+}
+
+/* Bool InlineDup1( TidyDocImpl* doc, Node* node, Node* element )
+ We want to push a specific a specific element on the stack,
+ but it may not be the LAST element, which InlineDup()
+ would handle. return yes, if found and inserted ... */
+Bool InlineDup1( TidyDocImpl* doc, Node* node, Node* element )
+{
+ Lexer* lexer = doc->lexer;
+ int n;
+ if ( element
+ && (element->tag != NULL)
+ && ((n = lexer->istacksize - lexer->istackbase) > 0) )
+ {
+ int i;
+
+ for ( i = n - 1; i >=0; --i ) {
+ if (lexer->istack[i].tag == element->tag) {
+ /* found our element tag - insert it */
+ lexer->insert = &(lexer->istack[i]);
+ lexer->inode = node;
+ return yes; /* return success */
+ }
+ }
+ }
+ return no;
+}
+
+#endif /* #ifdef ADD_INLINE_FIX2 */
+
/*
* local variables:
* mode: c
diff -urN tidycvs\src\lexer.h tidydev4\src\lexer.h
--- tidycvs\src\lexer.h Sat Feb 18 12:32:44 2006
+++ tidydev4\src\lexer.h Sat Feb 18 13:46:52 2006
@@ -622,6 +622,25 @@
void DeferDup( TidyDocImpl* doc );
Node *InsertedToken( TidyDocImpl* doc );
+#ifdef ADD_INLINE_FIX2
+/*
+ We have two CM_INLINE elements pushed ... the first is closing,
+ but, like the browser, the second should be retained ...
+ Like bold bold and italics italics only
+ This function switches the tag positions on the stack,
+ returning 'yes' if both were found in the expected order.
+*/
+Bool SwitchInline( TidyDocImpl * doc, Node * element, Node * node );
+
+/*
+ We want to push a specific a specific element on the stack,
+ but it may not be the LAST element, which InlineDup()
+ would handle.
+*/
+Bool InlineDup1( TidyDocImpl* doc, Node* node, Node* element );
+
+#endif /* #ifdef ADD_INLINE_FIX2 */
+
#ifdef __cplusplus
}
#endif
diff -urN tidycvs\src\parser.c tidydev4\src\parser.c
--- tidycvs\src\parser.c Sat Feb 18 12:32:45 2006
+++ tidydev4\src\parser.c Sat Feb 18 13:46:51 2006
@@ -1513,6 +1513,28 @@
&& nodeHasCM(element, CM_INLINE) )
{
/* allow any inline end tag to end current element */
+#ifdef ADD_INLINE_FIX2
+ /* but, like the browser, retain an earlier inline element ...
+ This is implemented by setting the lexer into a mode
+ where it gets tokens from the inline stack rather than
+ from the input stream. check the scenerio fits ... */
+ if( !nodeIsA(element)
+ && (node->tag != element->tag)
+ && IsPushed( doc, node )
+ && IsPushed( doc, element ) )
+ {
+ /* we have something like bold bold and italic italics */
+ if( SwitchInline( doc, element, node ) )
+ {
+ ReportError(doc, element, node, NON_MATCHING_ENDTAG);
+ UngetToken( doc ); /* put this back */
+ InlineDup1( doc, NULL, element ); /* dupe the , after */
+ if (!(mode & Preformatted))
+ TrimSpaces(doc, element);
+ return; /* close , but will re-open it, after */
+ }
+ }
+#endif /* #ifdef ADD_INLINE_FIX2 */
PopInline( doc, element );
if ( !nodeIsA(element) )
diff -urN tidycvs\src\tidylib.c tidydev4\src\tidylib.c
--- tidycvs\src\tidylib.c Wed Jan 25 18:43:39 2006
+++ tidydev4\src\tidylib.c Sun Feb 19 15:22:01 2006
@@ -953,65 +953,18 @@
return status;
}
-
-
-/* Note, _setmode() does NOT work on Win2K Pro w/ VC++ 6.0 SP3.
-** The code has been left in in case it works w/ other compilers
-** or operating systems. If stdout is in Text mode, be aware that
-** it will garble UTF16 documents. In text mode, when it encounters
-** a single byte of value 10 (0xA), it will insert a single byte
-** value 13 (0xD) just before it. This has the effect of garbling
-** the entire document.
-*/
-
-#if !defined(NO_SETMODE_SUPPORT)
-
-#if defined(_WIN32) || defined(OS2_OS)
-#include
-#include
-#endif
-
-#endif
-
int tidyDocSaveStdout( TidyDocImpl* doc )
{
-#if !defined(NO_SETMODE_SUPPORT)
-
-#if defined(_WIN32) || defined(OS2_OS)
- int oldstdoutmode = -1, oldstderrmode = -1;
-#endif
-
-#endif
int status = 0;
uint outenc = cfg( doc, TidyOutCharEncoding );
uint nl = cfg( doc, TidyNewline );
StreamOut* out = FileOutput( stdout, outenc, nl );
-#if !defined(NO_SETMODE_SUPPORT)
-
-#if defined(_WIN32) || defined(OS2_OS)
- oldstdoutmode = setmode( fileno(stdout), _O_BINARY );
- oldstderrmode = setmode( fileno(stderr), _O_BINARY );
-#endif
-
-#endif
-
- if ( 0 == status )
- status = tidyDocSaveStream( doc, out );
-
- fflush(stdout);
- fflush(stderr);
-
-#if !defined(NO_SETMODE_SUPPORT)
+ fflush(stderr); /* ensure any stderr is output first */
-#if defined(_WIN32) || defined(OS2_OS)
- if ( oldstdoutmode != -1 )
- oldstdoutmode = setmode( fileno(stdout), oldstdoutmode );
- if ( oldstderrmode != -1 )
- oldstderrmode = setmode( fileno(stderr), oldstderrmode );
-#endif
+ status = tidyDocSaveStream( doc, out );
-#endif
+ fflush(stdout); /* flush the stdout html output */
MemFree( out );
return status;
diff -urN tidycvs\src\version.h tidydev4\src\version.h
--- tidycvs\src\version.h Wed Feb 15 14:15:44 2006
+++ tidydev4\src\version.h Wed Feb 15 18:37:20 2006
@@ -11,4 +11,4 @@
*/
-static const char release_date[] = "14 February 2006";
+static const char release_date[] = "14 February 2006 (tidydev4)";
diff -urN tidycvs\temp1410061-2.htm tidydev4\temp1410061-2.htm
--- tidycvs\temp1410061-2.htm Thu Jan 01 01:00:00 1970
+++ tidydev4\temp1410061-2.htm Sat Feb 18 15:53:06 2006
@@ -0,0 +1,12 @@
+
+
+
+1410061 - issue 2 - inline propagation
+
+
+In bold
+
+
+
diff -urN tidycvs\test\input\cfg_1410061-2.txt tidydev4\test\input\cfg_1410061-2.txt
--- tidycvs\test\input\cfg_1410061-2.txt Thu Jan 01 01:00:00 1970
+++ tidydev4\test\input\cfg_1410061-2.txt Sat Feb 18 15:26:55 2006
@@ -0,0 +1 @@
+tidy-mark: no
diff -urN tidycvs\test\input\cfg_1423252.txt tidydev4\test\input\cfg_1423252.txt
--- tidycvs\test\input\cfg_1423252.txt Thu Jan 01 01:00:00 1970
+++ tidydev4\test\input\cfg_1423252.txt Tue Feb 14 15:28:46 2006
@@ -0,0 +1,2 @@
+tidy-mark: no
+
diff -urN tidycvs\test\input\cfg_1426419.txt tidydev4\test\input\cfg_1426419.txt
--- tidycvs\test\input\cfg_1426419.txt Thu Jan 01 01:00:00 1970
+++ tidydev4\test\input\cfg_1426419.txt Sat Feb 18 14:58:58 2006
@@ -0,0 +1 @@
+tidy-mark: no
diff -urN tidycvs\test\input\in_1423252.html tidydev4\test\input\in_1423252.html
--- tidycvs\test\input\in_1423252.html Fri Feb 17 16:08:32 2006
+++ tidydev4\test\input\in_1423252.html Sat Feb 18 14:18:26 2006
@@ -1,3 +1,11 @@
-a
+
+
+
+[1423252] missing text node, and font propagation
+
+
+a
b
-c
+
c
+
+
diff -urN tidycvs\test\input\in_1426419.html tidydev4\test\input\in_1426419.html
--- tidycvs\test\input\in_1426419.html Thu Jan 01 01:00:00 1970
+++ tidydev4\test\input\in_1426419.html Sat Feb 18 15:00:53 2006
@@ -0,0 +1,12 @@
+
+
+
+[1426419] mal-formed inline elements
+
+
+Bold Bold and Italics Italics Only
+Mono Mono and Bold Bold Only
+Italics Italics and Bold Bold Only
+
+
diff -urN tidycvs\test\testcases.txt tidydev4\test\testcases.txt
--- tidycvs\test\testcases.txt Sat Feb 18 12:32:45 2006
+++ tidydev4\test\testcases.txt Sat Feb 18 14:59:42 2006
@@ -187,3 +187,4 @@
1410061-2 1
1415137 1
1423252 1
+1426419 1