diff -urN F:\FGCVS\tidy\build\msvc\tidy.dsp tidycvs6\build\msvc\tidy.dsp --- F:\FGCVS\tidy\build\msvc\tidy.dsp    Thu Apr 17 17:48:03 2003 +++ tidycvs6\build\msvc\tidy.dsp   Mon Sep 25 19:58:44 2006 @@ -42,7 +42,7 @@  # PROP Ignore_Export_Lib 0  # PROP Target_Dir ""  # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MT /Za /W3 /GX /O2 /I "..\..\include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D SUPPORT_UTF16_ENCODINGS=1 /D SUPPORT_ASIAN_ENCODINGS=1 /D SUPPORT_ACCESSIBILITY_CHECKS=1 /D TIDYDLL_EXPORT=__declspec(dllimport) /YX /FD /c +# ADD CPP /nologo /MT /Za /W3 /GX /O2 /I "..\..\include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D SUPPORT_UTF16_ENCODINGS=1 /D SUPPORT_ASIAN_ENCODINGS=1 /D SUPPORT_ACCESSIBILITY_CHECKS=1 /D TIDYDLL_EXPORT=__declspec(dllimport) /D "TIDY_STORE_ORIGINAL_TEXT" /YX /FD /c  # ADD BASE RSC /l 0x409 /d "NDEBUG"  # ADD RSC /l 0x409 /d "NDEBUG"  BSC32=bscmake.exe @@ -66,7 +66,7 @@  # PROP Ignore_Export_Lib 0  # PROP Target_Dir ""  # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /Za /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D SUPPORT_UTF16_ENCODINGS=1 /D SUPPORT_ASIAN_ENCODINGS=1 /D SUPPORT_ACCESSIBILITY_CHECKS=1 /D TIDYDLL_EXPORT=__declspec(dllimport) /YX /FD /GZ /c +# ADD CPP /nologo /MTd /Za /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D SUPPORT_UTF16_ENCODINGS=1 /D SUPPORT_ASIAN_ENCODINGS=1 /D SUPPORT_ACCESSIBILITY_CHECKS=1 /D TIDYDLL_EXPORT=__declspec(dllimport) /D "TIDY_STORE_ORIGINAL_TEXT" /YX /FD /GZ /c  # ADD BASE RSC /l 0x409 /d "_DEBUG"  # ADD RSC /l 0x409 /d "_DEBUG"  BSC32=bscmake.exe diff -urN F:\FGCVS\tidy\build\msvc\tidydll.dsp tidycvs6\build\msvc\tidydll.dsp --- F:\FGCVS\tidy\build\msvc\tidydll.dsp Tue Sep 19 15:45:44 2006 +++ tidycvs6\build\msvc\tidydll.dsp Mon Sep 25 19:58:44 2006 @@ -43,7 +43,7 @@  # PROP Ignore_Export_Lib 0  # PROP Target_Dir ""  # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TIDYDLL_EXPORTS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TIDYDLL_EXPORTS" /D SUPPORT_UTF16_ENCODINGS=1 /D SUPPORT_ASIAN_ENCODINGS=1 /D SUPPORT_ACCESSIBILITY_CHECKS=1 /YX /FD /c +# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TIDYDLL_EXPORTS" /D SUPPORT_UTF16_ENCODINGS=1 /D SUPPORT_ASIAN_ENCODINGS=1 /D SUPPORT_ACCESSIBILITY_CHECKS=1 /D "TIDY_STORE_ORIGINAL_TEXT" /YX /FD /c  # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32  # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32  # ADD BASE RSC /l 0x409 /d "NDEBUG" @@ -137,6 +137,10 @@  # End Source File  # Begin Source File   +SOURCE=..\..\src\iso639.c +# End Source File +# Begin Source File +  SOURCE=..\..\src\istack.c  # End Source File  # Begin Source File @@ -183,7 +187,7 @@    SOURCE=..\..\src\utf8.c  # End Source File -# End Group +# Begin Source File    SOURCE=..\..\src\win32tc.c  # End Source File diff -urN F:\FGCVS\tidy\build\msvc\tidylib.dsp tidycvs6\build\msvc\tidylib.dsp --- F:\FGCVS\tidy\build\msvc\tidylib.dsp Tue Sep 19 15:45:44 2006 +++ tidycvs6\build\msvc\tidylib.dsp Mon Sep 25 19:58:44 2006 @@ -41,7 +41,7 @@  # PROP Intermediate_Dir "Release"  # PROP Target_Dir ""  # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD CPP /nologo /MT /W4 /GX /O2 /I "../../include" /D "NDEBUG" /D "_LIB" /D "WIN32" /D "_MBCS" /D "SUPPORT_UTF16_ENCODINGS" /D "SUPPORT_ASIAN_ENCODINGS" /D "SUPPORT_ACCESSIBILITY_CHECKS" /FD /c +# ADD CPP /nologo /MT /W4 /GX /O2 /I "../../include" /D "NDEBUG" /D "_LIB" /D "WIN32" /D "_MBCS" /D "SUPPORT_UTF16_ENCODINGS" /D "SUPPORT_ASIAN_ENCODINGS" /D "SUPPORT_ACCESSIBILITY_CHECKS" /D "TIDY_STORE_ORIGINAL_TEXT" /FD /c  # SUBTRACT CPP /YX  # ADD BASE RSC /l 0x409 /d "NDEBUG"  # ADD RSC /l 0x409 /d "NDEBUG" @@ -65,7 +65,7 @@  # PROP Intermediate_Dir "Debug"  # PROP Target_Dir ""  # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /Za /W4 /Gm /ZI /Od /I "../../include" /D "_DEBUG" /D "_WIN32" /D "_LIB" /D "WIN32" /D "_MBCS" /D "SUPPORT_UTF16_ENCODINGS" /D "SUPPORT_ASIAN_ENCODINGS" /D "SUPPORT_ACCESSIBILITY_CHECKS" /U "WINDOWS" /FD /GZ /c +# ADD CPP /nologo /MTd /Za /W4 /Gm /ZI /Od /I "../../include" /D "_DEBUG" /D "_WIN32" /D "_LIB" /D "WIN32" /D "_MBCS" /D "SUPPORT_UTF16_ENCODINGS" /D "SUPPORT_ASIAN_ENCODINGS" /D "SUPPORT_ACCESSIBILITY_CHECKS" /D "TIDY_STORE_ORIGINAL_TEXT" /U "WINDOWS" /FD /GZ /c  # SUBTRACT CPP /YX  # ADD BASE RSC /l 0x409 /d "_DEBUG"  # ADD RSC /l 0x409 /d "_DEBUG" @@ -131,6 +131,10 @@  # End Source File  # Begin Source File   +SOURCE=..\..\src\iso639.c +# End Source File +# Begin Source File +  SOURCE=..\..\src\istack.c  # End Source File  # Begin Source File @@ -142,7 +146,7 @@  SOURCE=..\..\src\localize.c  # End Source File  # Begin Source File - +  SOURCE=..\..\src\mappedio.c    !IF  "$(CFG)" == "tidylib - Win32 Release" @@ -173,6 +177,19 @@  # Begin Source File    SOURCE=..\..\src\tags.c +# End Source File +# Begin Source File + +SOURCE=..\..\src\tidydebug.c + +!IF  "$(CFG)" == "tidylib - Win32 Release" + +!ELSEIF  "$(CFG)" == "tidylib - Win32 Debug" + +# ADD CPP /Ze + +!ENDIF +  # End Source File  # Begin Source File   diff -urN F:\FGCVS\tidy\console\tidy.c tidycvs6\console\tidy.c --- F:\FGCVS\tidy\console\tidy.c   Tue Feb 14 12:09:21 2006 +++ tidycvs6\console\tidy.c  Sun Sep 24 13:24:47 2006 @@ -1271,9 +1271,11 @@          errout == stderr && !contentErrors)          fprintf(errout, "\n");   -    if (contentErrors + contentWarnings > 0 && -         !tidyOptGetBool(tdoc, TidyQuiet)) -        tidyErrorSummary(tdoc); +    if ( !tidyOptGetBool(tdoc, TidyQuiet) && +       (contentErrors + contentWarnings + accessWarnings > 0) ) +    { +       tidyErrorSummary(tdoc); +    }        if (!tidyOptGetBool(tdoc, TidyQuiet))          tidyGeneralInfo(tdoc); diff -urN F:\FGCVS\tidy\src\access.c tidycvs6\src\access.c --- F:\FGCVS\tidy\src\access.c     Sat Sep 16 11:39:23 2006 +++ tidycvs6\src\access.c    Mon Sep 25 19:50:46 2006 @@ -43,7 +43,6 @@  #include "attrs.h"  #include "tmbstr.h"   -  /*      The accessibility checks to perform depending on user's desire.   @@ -157,6 +156,61 @@  static void CheckEmbed( TidyDocImpl* doc, Node* node );  static void CheckListUsage( TidyDocImpl* doc, Node* node );   +#ifdef TIDY_STORE_ORIGINAL_TEXT +/***************************************************** +* OriginalIsWhite +* +* See if the ORIGINAL text was ALL WHITE +*****************************************************/ +uint OriginalIsWhite( TidyDocImpl* doc, Node* node, tmbstr srch ) +{ +   uint iswhite = no; +   uint ulen = TY_(tmbstrlen)(srch); +   tmbstr fnd = NULL; +   if (node && node->otext && ulen) +   { +      tmbstr item = node->otext; +      /* fnd = strstr(item, srch); */ +      if ( !fnd ) +      { +         while( *item && (TY_(tmbstrlen)(item) > ulen) ) +         { +            if ( TY_(tmbstrncasecmp)( item, srch, ulen ) == 0 ) +            { +               fnd = item; +               break; +            } +            item++; +         } +      } +      if ( fnd ) +      { +         fnd += TY_(tmbstrlen)(srch); +         if ((*fnd == '"')||(*fnd == '\'')) +         { +            tmbchar chr = *fnd; /* extract the character */ +            fnd++; /* proceed until the end, checking */ +            ulen = 0;   /* start counter of white */ +            while ( *fnd && (*fnd != chr) && +                   TY_(IsWhite)( *fnd )) +            { +               fnd++; +               ulen++; +            } +            if (ulen && ( *fnd == chr ) ) +               iswhite = yes; /* all white space */ +         } +         else +         { +            /* what to do if NO quote, or double quote delimiter? */ +         } +      } +   } +   return iswhite; +} + +#endif /* #ifdef TIDY_STORE_ORIGINAL_TEXT */ +  /*      GetFileExtension takes a path and returns the extension      portion of the path (if any). @@ -682,6 +736,8 @@      Bool HasValidWidthBullet = no;      Bool HasValidWidthHR = no;      Bool HasTriggeredMissingLongDesc = no; +    int width = 0; +    int height = 0;        AttVal* av;                  @@ -746,7 +802,7 @@                  /* Longdesc attribute needed if width attribute is not present. */                  if ( hasValue(av) )                  { -                    int width = atoi( av->value ); +                    width = atoi( av->value );                      if ( width < 30 )                          HasValidWidthBullet = yes;   @@ -765,8 +821,12 @@              else if ( attrIsHEIGHT(av) )              {                  /* Longdesc attribute needed if height attribute not present. */ -                if ( hasValue(av) && atoi(av->value) < 30 ) -                    HasValidHeight = yes; +                if ( hasValue(av) ) +                { +                   height = atoi(av->value); +                   if ( height < 30 ) +                     HasValidHeight = yes; +                }              }                /* @@ -860,12 +920,14 @@              (HasValidWidthBullet == yes)&&              (HasValidHeight == yes))          { +            TY_(ReportAccessError)( doc, node, IMG_MISSING_ALT_BULLET);          }            if ((HasAlt == no)&&              (HasValidWidthHR == yes)&&              (HasValidHeight == yes))          { +            TY_(ReportAccessError)( doc, node, IMG_MISSING_ALT_H_RULE);          }            if (HasAlt == no) @@ -1277,15 +1339,19 @@              if ((word != NULL)&&                  (IsWhitespace (word) == no))              { -                if (TY_(tmbstrcmp) (word, "more") == 0) +                if (TY_(tmbstrcasecmp) (word, "more") == 0)                  {                      HasTriggeredLink = yes; -                } - -                if (TY_(tmbstrcmp) (word, "click here") == 0) +                    TY_(ReportAccessWarning)( doc, node, LINK_TEXT_NOT_MEANINGFUL_MORE); +                } +                else if (TY_(tmbstrcasecmp) (word, "click here") == 0)                  {                      TY_(ReportAccessWarning)( doc, node, LINK_TEXT_NOT_MEANINGFUL_CLICK_HERE);                  } +                else if (TY_(tmbstrcasecmp) (word, "follow this") == 0) +                { +                    TY_(ReportAccessWarning)( doc, node, LINK_TEXT_NOT_MEANINGFUL_FOLLOW_THIS); +                }                    if (HasTriggeredLink == no)                  { @@ -1430,6 +1496,17 @@                          numValidTH++;                  }              } +            else if ( node->content && nodeIsTH( node->content ) ) +            { +               Node * tmp = node->content; +               doc->access.HasTH = yes; +               if ( tmp->content && TY_(nodeIsText)(tmp->content) ) +               { +                   ctmbstr word = textFromOneNode( doc, tmp->content); +                   if ( !IsWhitespace(word) ) +                        numValidTH++; +               } +            }          }                   node = node->next; @@ -1495,7 +1572,6 @@          doc->access.HasInvalidColumnHeader = yes;  }   -  /*****************************************************  * CheckTH  * @@ -1528,7 +1604,18 @@                      (TY_(tmbstrlen)(av->value) == 0))                  {                      HasAbbr = yes; +#ifdef TIDY_STORE_ORIGINAL_TEXT +                    { +                       tmbstr srch = "abbr="; +                       uint iswhite = OriginalIsWhite( doc, node, srch ); +                       if (iswhite) +                          TY_(ReportAccessWarning)( doc, node, TABLE_MAY_REQUIRE_HEADER_ABBR_SPACES); +                       else +                          TY_(ReportAccessWarning)( doc, node, TABLE_MAY_REQUIRE_HEADER_ABBR_NULL); +                    } +#else /* !#ifdef TIDY_STORE_ORIGINAL_TEXT */                      TY_(ReportAccessWarning)( doc, node, TABLE_MAY_REQUIRE_HEADER_ABBR_NULL); +#endif                  }                                   if ((IsWhitespace (av->value) == yes)&& @@ -1660,7 +1747,6 @@      }  }   -  /****************************************************  * CheckTable  * @@ -1703,7 +1789,18 @@                  if ( av->value == NULL || TY_(tmbstrlen)(av->value) == 0 )                  {                      HasSummary = yes; +#ifdef TIDY_STORE_ORIGINAL_TEXT +                    { +                       tmbstr srch = "summary="; +                       uint iswhite = OriginalIsWhite( doc, node, srch ); +                       if (iswhite) +                          TY_(ReportAccessError)( doc, node, TABLE_SUMMARY_INVALID_SPACES ); +                       else +                          TY_(ReportAccessError)( doc, node, TABLE_SUMMARY_INVALID_NULL ); +                    } +#else /* !#ifdef TIDY_STORE_ORIGINAL_TEXT  */                      TY_(ReportAccessError)( doc, node, TABLE_SUMMARY_INVALID_NULL ); +#endif                  }                  else if ( IsWhitespace(av->value) && TY_(tmbstrlen)(av->value) > 0 )                  { @@ -2068,7 +2165,6 @@      }  }   -  /***************************************************************  * CheckInputAttributes  * @@ -2080,6 +2176,8 @@  {      Bool HasAlt = no;      Bool MustHaveAlt = no; +    Bool HasValue = no; +    Bool WithValue = no;      AttVal* av;        /* Checks attributes within the INPUT element */ @@ -2102,6 +2200,15 @@          {              HasAlt = yes;          } + +        if ( attrIsVALUE(av) ) +        { +           HasValue = yes; +           if ( hasValue(av) ) +           { +              WithValue = yes; +           } +        }      }        if ( MustHaveAlt && !HasAlt ) @@ -2109,6 +2216,30 @@          TY_(ReportAccessError)( doc, node, IMG_BUTTON_MISSING_ALT );      }   +    if (Level3_Enabled( doc )) +    { +       if ( HasValue ) +       { +          if ( !WithValue ) +          { +#ifdef TIDY_STORE_ORIGINAL_TEXT +             /* now we can differentiate by checking the ORIGINAL */ +             tmbstr srch = "value="; +             uint iswhite = OriginalIsWhite( doc, node, srch ); +             if (iswhite) +                TY_(ReportAccessWarning)( doc, node, FORM_CONTROL_DEFAULT_TEXT_INVALID_SPACES); +             else +                TY_(ReportAccessWarning)( doc, node, FORM_CONTROL_DEFAULT_TEXT_INVALID_NULL); +#else /* !#ifdef TIDY_STORE_ORIGINAL_TEXT */ +              TY_(ReportAccessError)( doc, node, FORM_CONTROL_DEFAULT_TEXT_INVALID_NULL ); +#endif /* #ifdef TIDY_STORE_ORIGINAL_TEXT */ +          } +       } +       else +       { +           TY_(ReportAccessError)( doc, node, FORM_CONTROL_REQUIRES_DEFAULT_TEXT ); +       } +    }  }     @@ -2128,6 +2259,11 @@        if (Level1_Enabled( doc ))      { +        if ( doc->badAccess & ACC_NOFRAMES_INVALID_LINK ) +        { +           TY_(ReportAccessError)( doc, node, NOFRAMES_INVALID_LINK); +           doc->badAccess &= ~(ACC_NOFRAMES_INVALID_LINK); /* emit only once */ +        }          if (node->content != NULL)          {              temp = node->content; @@ -2863,6 +2999,9 @@      {          Node* DTnode = TY_(FindDocType)(doc);   +        if (DTnode && DTnode->implicit) /* this has been added by tidy, so */ +           DTnode = NULL;  /* the document had NO doctype */ +          /* If the doctype has been added by tidy, DTnode->end will be 0. */          if (DTnode && DTnode->end != 0)          { @@ -3000,8 +3139,11 @@        if ( msgcode )      { -        if ( !nodeIsLI(node->content) ) +       if ( !nodeIsLI(node->content) ) {              TY_(ReportAccessWarning)( doc, node, msgcode ); +       } else if ( node->implicit ) {  /* if a tidy added node */ +            TY_(ReportAccessWarning)( doc, node, LIST_USAGE_INVALID_LI ); +       }      }      else if ( nodeIsLI(node) )      { @@ -3013,10 +3155,90 @@               ( !nodeIsOL(node->parent) && !nodeIsUL(node->parent) ) )          {              TY_(ReportAccessWarning)( doc, node, LIST_USAGE_INVALID_LI ); +        } else if ( node->implicit && node->parent && +            ( nodeIsOL(node->parent) || nodeIsUL(node->parent) ) ) { +           /* if a tidy added LI node, then */ +           if ( nodeIsUL(node->parent) ) +              TY_(ReportAccessWarning)( doc, node, LIST_USAGE_INVALID_UL ); +           else +              TY_(ReportAccessWarning)( doc, node, LIST_USAGE_INVALID_OL ); +          }      }  }   +typedef struct tagFORMORDER { +   uint order; +   uint ordlabel; +   uint ordinput; +   uint ordtext; +} FORMORDER, * PFORMORDER; + +static void CheckFORMOrder(TidyDocImpl* doc, Node* node, PFORMORDER pfo) +{ +   if ( pfo->ordlabel && pfo->ordinput && pfo->ordtext ) +   { +      if ( (pfo->ordlabel < pfo->ordtext) && (pfo->ordtext < pfo->ordinput) ) +      { +         /* some TEXT occurs between LABEL and INPUT */ +         TY_(ReportAccessError)( doc, node, LABEL_NEEDS_REPOSITIONING_BEFORE_INPUT ); +         pfo->ordtext = 0; +      } +      else if ( (pfo->ordinput < pfo->ordtext) && (pfo->ordtext < pfo->ordlabel) ) +      { +         /* some TEXT occurs between INPUT and LABEL */ +         TY_(ReportAccessError)( doc, node, LABEL_NEEDS_REPOSITIONING_AFTER_INPUT ); +         pfo->ordtext = 0; +      } +   } +} + +static void SetFORMOrder(TidyDocImpl* doc, Node* node, PFORMORDER pfo) +{ +   if ( nodeIsLABEL(node) ) +   { +      pfo->ordlabel = pfo->order; +   } +   else if ( nodeIsINPUT( node ) ) +   { +      pfo->ordinput = pfo->order; +   } +   else if ( TY_(nodeIsText)(node) ) +   { +      ctmbstr word = textFromOneNode( doc, node ); +      if ( word != NULL && !IsWhitespace(word) ) +         pfo->ordtext = pfo->order; +   } +} + +/****************************************************** +* CheckFORM +* +* Ensures that text is not between any label and input, +* and not between input and label ... +******************************************************/ +static void CheckFORM( TidyDocImpl* doc, Node* node ) +{ +   if (Level2_Enabled( doc )) +   { +      Node* child; +      static FORMORDER _s_fo; +      PFORMORDER pfo = &_s_fo; +      pfo->order = 0; +      pfo->ordlabel = 0; +      pfo->ordinput = 0; +      pfo->ordtext = 0; +      /* check all children of FORM */ +      for ( child = node->content; child != NULL; child = child->next ) +      { +         pfo->order++; +         SetFORMOrder( doc, child, pfo ); +         CheckFORMOrder( doc, child, pfo ); +      } +   } +} + +  /************************************************************  * InitAccessibilityChecks  * @@ -3263,6 +3485,12 @@      {          CheckListUsage( doc, node );      } +    /* Check 'FORM' */ +    else if ( nodeIsFORM(node) ) +    { +        CheckFORM( doc, node ); +    } +        /* Recursively check all child nodes.      */ @@ -3323,6 +3551,7 @@      /* Cleanup */      FreeAccessibilityChecks( doc );  } +    #endif   diff -urN F:\FGCVS\tidy\src\iso639.c tidycvs6\src\iso639.c --- F:\FGCVS\tidy\src\iso639.c     Thu Jan 01 01:00:00 1970 +++ tidycvs6\src\iso639.c    Mon Sep 25 19:50:34 2006 @@ -0,0 +1,85 @@ + +/* iso639.c -- carry out language check + +  Copyright University of Toronto +  Portions (c) 1998-2006 (W3C) MIT, ERCIM, Keio University +  See tidy.h for the copyright notice. +  +*/ + +#include "tidy-int.h" + +#if SUPPORT_ACCESSIBILITY_CHECKS + +#include "tmbstr.h" + +tmbstr ISO639_2[] = { +"aar", "abk", "ace", "ach", "ada", "ady", "afa", "afh", "afr", "ain", "aka", +"akk", "alb", "ale", "alg", "alt", "amh", "ang", "anp", "apa", "ara", "arc", +"arg", "arm", "arn", "arp", "art", "arw", "asm", "ast", "ath", "aus", "ava", +"ave", "awa", "aym", "aze", "bad", "bai", "bak", "bal", "bam", "ban", "baq", +"bas", "bat", "bej", "bel", "bem", "ben", "ber", "bho", "bih", "bik", "bin", +"bis", "bla", "bnt", "bod", "bos", "bra", "bre", "btk", "bua", "bug", "bul", +"bur", "byn", "cad", "cai", "car", "cat", "cau", "ceb", "cel", "ces", "cha", +"chb", "che", "chg", "chi", "chk", "chm", "chn", "cho", "chp", "chr", "chu", +"chv", "chy", "cmc", "cop", "cor", "cos", "cpe", "cpf", "cpp", "cre", "crh", +"crp", "csb", "cus", "cym", "cze", "dak", "dan", "dar", "day", "del", "den", +"deu", "dgr", "din", "div", "doi", "dra", "dsb", "dua", "dum", "dut", "dyu", +"dzo", "efi", "egy", "eka", "ell", "elx", "eng", "enm", "epo", "est", "eus", +"ewe", "ewo", "fan", "fao", "fas", "fat", "fij", "fil", "fin", "fiu", "fon", +"fra", "fre", "frm", "fro", "frr", "frs", "fry", "ful", "fur", "gaa", "gay", +"gba", "gem", "geo", "ger", "gez", "gil", "gla", "gle", "glg", "glv", "gmh", +"goh", "gon", "gor", "got", "grb", "grc", "gre", "grn", "gsw", "guj", "gwi", +"hai", "hat", "hau", "haw", "heb", "her", "hil", "him", "hin", "hit", "hmn", +"hmo", "hrv", "hsb", "hun", "hup", "hye", "iba", "ibo", "ice", "ido", "iii", +"ijo", "iku", "ile", "ilo", "ina", "inc", "ind", "ine", "inh", "ipk", "ira", +"iro", "isl", "ita", "jav", "jbo", "jpn", "jpr", "jrb", "kaa", "kab", "kac", +"kal", "kam", "kan", "kar", "kas", "kat", "kau", "kaw", "kaz", "kbd", "kha", +"khi", "khm", "kho", "kik", "kin", "kir", "kmb", "kok", "kom", "kon", "kor", +"kos", "kpe", "krc", "krl", "kro", "kru", "kua", "kum", "kur", "kut", "lad", +"lah", "lam", "lao", "lat", "lav", "lez", "lim", "lin", "lit", "lol", "loz", +"ltz", "lua", "lub", "lug", "lui", "lun", "luo", "lus", "mac", "mad", "mag", +"mah", "mai", "mak", "mal", "man", "mao", "map", "mar", "mas", "may", "mdf", +"mdr", "men", "mga", "mic", "min", "mis", "mkd", "mkh", "mlg", "mlt", "mnc", +"mni", "mno", "moh", "mol", "mon", "mos", "mri", "msa", "mul", "mun", "mus", +"mwl", "mwr", "mya", "myn", "myv", "nah", "nai", "nap", "nau", "nav", "nbl", +"nde", "ndo", "nds", "nep", "new", "nia", "nic", "niu", "nld", "nno", "nob", +"nog", "non", "nor", "nqo", "nso", "nub", "nwc", "nya", "nym", "nyn", "nyo", +"nzi", "oci", "oji", "ori", "orm", "osa", "oss", "ota", "oto", "paa", "pag", +"pal", "pam", "pan", "pap", "pau", "peo", "per", "phi", "phn", "pli", "pol", +"pon", "por", "pra", "pro", "pus", "qaa-qtz", "que", "raj", "rap", "rar", "roa", +"roh", "rom", "ron", "rum", "run", "rup", "rus", "sad", "sag", "sah", "sai", +"sal", "sam", "san", "sas", "sat", "scc", "scn", "sco", "scr", "sel", "sem", +"sga", "sgn", "shn", "sid", "sin", "sio", "sit", "sla", "slk", "slo", "slv", +"sma", "sme", "smi", "smj", "smn", "smo", "sms", "sna", "snd", "snk", "sog", +"som", "son", "sot", "spa", "sqi", "srd", "srn", "srp", "srr", "ssa", "ssw", +"suk", "sun", "sus", "sux", "swa", "swe", "syr", "tah", "tai", "tam", "tat", +"tel", "tem", "ter", "tet", "tgk", "tgl", "tha", "tib", "tig", "tir", "tiv", +"tkl", "tlh", "tli", "tmh", "tog", "ton", "tpi", "tsi", "tsn", "tso", "tuk", +"tum", "tup", "tur", "tut", "tvl", "twi", "tyv", "udm", "uga", "uig", "ukr", +"umb", "und", "urd", "uzb", "vai", "ven", "vie", "vol", "vot", "wak", "wal", +"war", "was", "wel", "wen", "wln", "wol", "xal", "xho", "yao", "yap", "yid", +"yor", "ypk", "zap", "zen", "zha", "zho", "znd", "zul", "zun", "zxx", + 0 }; + +tmbstr ISO639_1[] = { +"aa", "ab", "ae", "af", "ak", "am", "an", "ar", "as", "av", "ay", "az", "ba", +"be", "bg", "bh", "bi", "bm", "bn", "bo", "br", "bs", "ca", "ce", "ch", "co", +"cr", "cs", "cu", "cv", "cy", "da", "de", "dv", "dz", "ee", "el", "en", "eo", +"es", "et", "eu", "fa", "ff", "fi", "fj", "fo", "fr", "fy", "ga", "gd", "gl", +"gn", "gu", "gv", "ha", "he", "hi", "ho", "hr", "ht", "hu", "hy", "hz", "ia", +"id", "ie", "ig", "ii", "ik", "io", "is", "it", "iu", "ja", "jv", "ka", "kg", +"ki", "kj", "kk", "kl", "km", "kn", "ko", "kr", "ks", "ku", "kv", "kw", "ky", +"la", "lb", "lg", "li", "ln", "lo", "lt", "lu", "lv", "mg", "mh", "mi", "mk", +"ml", "mn", "mo", "mr", "ms", "mt", "my", "na", "nb", "nd", "ne", "ng", "nl", +"nn", "no", "nr", "nv", "ny", "oc", "oj", "om", "or", "os", "pa", "pi", "pl", +"ps", "pt", "qu", "rm", "rn", "ro", "ru", "rw", "sa", "sc", "sd", "se", "sg", +"si", "sk", "sl", "sm", "sn", "so", "sq", "sr", "ss", "st", "su", "sv", "sw", +"ta", "te", "tg", "th", "ti", "tk", "tl", "tn", "to", "tr", "ts", "tt", "tw", +"ty", "ug", "uk", "ur", "uz", "ve", "vi", "vo", "wa", "wo", "xh", "yi", "yo", +"za", "zh", "zu", + 0 }; + +#endif /* #if SUPPORT_ACCESSIBILITY_CHECKS */ + +/* eof - iso639.c */ diff -urN F:\FGCVS\tidy\src\lexer.c tidycvs6\src\lexer.c --- F:\FGCVS\tidy\src\lexer.c Sat Sep 16 11:39:25 2006 +++ tidycvs6\src\lexer.c     Fri Sep 22 11:21:18 2006 @@ -1648,6 +1648,7 @@      else      {          doctype = NewDocTypeNode(doc); +        doctype->implicit = 1;   /* Tidy added this doctype! */          doctype->element = TY_(tmbstrdup)("html");      }   diff -urN F:\FGCVS\tidy\src\localize.c tidycvs6\src\localize.c --- F:\FGCVS\tidy\src\localize.c   Sat Sep 16 11:39:25 2006 +++ tidycvs6\src\localize.c  Sun Sep 24 14:46:50 2006 @@ -168,6 +168,8 @@    { IMG_ALT_SUSPICIOUS_FILE_SIZE,                  "[1.1.1.3]: suspicious 'alt' text (file size)."                            }, /* Access */    { IMG_ALT_SUSPICIOUS_PLACEHOLDER,                "[1.1.1.4]: suspicious 'alt' text (placeholder)."                          }, /* Access */    { IMG_ALT_SUSPICIOUS_TOO_LONG,                   "[1.1.1.10]: suspicious 'alt' text (too long)."                            }, /* Access */ +  { IMG_MISSING_ALT_BULLET,                        "[1.1.1.11]: missing 'alt' text (bullet)."                           }, /* Access */ +  { IMG_MISSING_ALT_H_RULE,                        "[1.1.1.12]: missing 'alt' text (horizontal rule)."                  }, /* Access */    { IMG_MISSING_LONGDESC_DLINK,                    "[1.1.2.1]: missing 'longdesc' and d-link."                          }, /* Access */    { IMG_MISSING_DLINK,                             "[1.1.2.2]: missing d-link."                                         }, /* Access */    { IMG_MISSING_LONGDESC,                          "[1.1.2.3]: missing 'longdesc'."                                     }, /* Access */ @@ -260,6 +262,8 @@    { SCRIPT_NOT_KEYBOARD_ACCESSIBLE_ON_MOUSE_MOVE,  "[9.3.1.6]: +