From 3bcb074b2e8c7f1052083f967a28d50fb2d66bac Mon Sep 17 00:00:00 2001 From: Jim Derry Date: Mon, 27 Jan 2014 20:27:13 +0800 Subject: [PATCH] =?UTF-8?q?Balthisar=20Tidy=200.7.25=20=20=20-=20Visible?= =?UTF-8?q?=20changes=20=20=20=20=20-=20Built=20for=20Mac=20OS=20X=2010.9?= =?UTF-8?q?=20(now=20minimum=20supported=20OS)=20=20=20=20=20-=20Added=20M?= =?UTF-8?q?ac=20OS=20X=20full-screen=20support=20=20=20=20=20-=20Added=20d?= =?UTF-8?q?eveloper=20signature=20to=20make=20Gatekeeper=20happy=20=20=20?= =?UTF-8?q?=20=20-=20Added=20Retina=20display=20App=20icons=20=20=20=20=20?= =?UTF-8?q?-=20New=20file=20icons=20including=20support=20for=20Retina=20d?= =?UTF-8?q?isplays=20=20=20=20=20-=20Improved=20the=20line=20numbers=20for?= =?UTF-8?q?=20the=20HTML=20and=20Tidy=E2=80=99d=20View=20=20=20=20=20-=20A?= =?UTF-8?q?dded=20and=20changed=20information=20in=20Tidy->About=20=20=20?= =?UTF-8?q?=20=20-=20Default=20document=20window=20is=20larger.=20=20=20?= =?UTF-8?q?=20=20-=20Tweaked=20the=20document=20window=20layout=20and=20ap?= =?UTF-8?q?pearance=20=20=20=20=20-=20Tweaked=20the=20preferences=20window?= =?UTF-8?q?=20=20=20=20=20-=20Adopted=20the=20most=20recent=20version=20of?= =?UTF-8?q?=20W3C=20TidyLib=20(more=20options!)=20=20=20=20=20-=20Cleaned?= =?UTF-8?q?=20up=20remaining=20batch=20mode=20references.=20Will=20add=20i?= =?UTF-8?q?n=20roadmap=20later.=20=20=20=20=20-=20Cleaned=20up=20file=20en?= =?UTF-8?q?coding=20mechanism=20=20=20-=20Invisible=20changes=20=20=20=20?= =?UTF-8?q?=20-=20Significant=20source=20code=20cleanup=20for=20legibility?= =?UTF-8?q?=20=20=20=20=20-=20Some=20refactorization=20=20=20=20=20-=20Som?= =?UTF-8?q?e=20migration=20to=20modern=20Objective-C=20style=20=20=20=20?= =?UTF-8?q?=20-=20Patched=20some=20memory=20leaks=20=20=20=20=20-=20Remove?= =?UTF-8?q?d=20all=20deprecated=20calls=20=20=20=20=20-=20Started=20ivar?= =?UTF-8?q?=20to=20property=20conversion=20=20=20=20=20-=20Eliminated=20al?= =?UTF-8?q?l=20compiler=20warnings=20(except=20for=20TidyLib=20proper)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Balthisar Tidy 0.60 Notes.txt | 39 - ....plist => Balthisar Tidy Signed-Info.plist | 78 +- Balthisar Tidy.xcodeproj/jderry.mode1 | 1324 --- Balthisar Tidy.xcodeproj/project.pbxproj | 1013 +- Balthisar Tidy/Balthisar Tidy-Info.plist | 88 + Balthisar Tidy/Balthisar Tidy-Prefix.pch | 9 + Balthisar Tidy/Balthisar Tidy.entitlements | 5 + Balthisar Tidy/Base.lproj/Batch.xib | 150 + Balthisar Tidy/Base.lproj/Credits.rtf | 21 + Balthisar Tidy/Base.lproj/Localizable.strings | 116 + Balthisar Tidy/Base.lproj/MainMenu.xib | 243 + Balthisar Tidy/Base.lproj/OptionPane.xib | 120 + Balthisar Tidy/Base.lproj/Preferences.xib | 129 + Balthisar Tidy/Base.lproj/TidyDocument.xib | 244 + .../Base.lproj/optionsFullCurrent.txt | 103 + Balthisar Tidy/Base.lproj/optionsInEffect.txt | 105 + .../Base.lproj/optionsTypesExceptions.txt | 12 + .../Classes/App Pieces/AppController.h | 43 + .../Classes/App Pieces/AppController.m | 82 + .../Classes/App Pieces/OptionPaneController.h | 57 + .../Classes/App Pieces/OptionPaneController.m | 334 + .../Classes/App Pieces/PreferenceController.h | 56 + .../Classes/App Pieces/PreferenceController.m | 186 + .../Classes/App Pieces/TidyDocument.h | 57 + .../Classes/App Pieces/TidyDocument.m | 609 ++ .../Classes/JSDTidy/JSDTidyDocument.h | 310 + .../Classes/JSDTidy/JSDTidyDocument.m | 1366 +++ .../Classes/JSDTidy/JSDTidyDocument.md | 51 + .../Classes/Support Pieces/JSDTableColumn.h | 66 + .../Classes/Support Pieces/JSDTableColumn.m | 174 + .../Support Pieces/NSTextView+JSDExtensions.h | 55 + .../Support Pieces/NSTextView+JSDExtensions.m | 351 + .../Support Pieces/NoodleLineNumberMarker.h | 49 + .../Support Pieces/NoodleLineNumberMarker.m | 102 + .../Support Pieces/NoodleLineNumberView.h | 67 + .../Support Pieces/NoodleLineNumberView.m | 589 ++ .../Classes}/Support Pieces/TreeNode.h | 8 +- .../Classes}/Support Pieces/TreeNode.m | 20 +- .../AppIcon.appiconset/Contents.json | 68 + .../AppIcon.appiconset/app_icon_0016.png | Bin 0 -> 748 bytes .../AppIcon.appiconset/app_icon_0032-1.png | Bin 0 -> 1994 bytes .../AppIcon.appiconset/app_icon_0032.png | Bin 0 -> 1994 bytes .../AppIcon.appiconset/app_icon_0064.png | Bin 0 -> 7040 bytes .../AppIcon.appiconset/app_icon_0128.png | Bin 0 -> 25406 bytes .../AppIcon.appiconset/app_icon_0256-1.png | Bin 0 -> 95559 bytes .../AppIcon.appiconset/app_icon_0256.png | Bin 0 -> 95559 bytes .../AppIcon.appiconset/app_icon_0512-1.png | Bin 0 -> 361905 bytes .../AppIcon.appiconset/app_icon_0512.png | Bin 0 -> 361905 bytes .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 1281406 bytes Balthisar Tidy/Images.xcassets/HTML.icns | Bin 0 -> 1869024 bytes .../HTML.iconset/icon_128x128.png | Bin 0 -> 22366 bytes .../HTML.iconset/icon_128x128@2x.png | Bin 0 -> 78960 bytes .../HTML.iconset/icon_16x16.png | Bin 0 -> 775 bytes .../HTML.iconset/icon_16x16@2x.png | Bin 0 -> 2304 bytes .../HTML.iconset/icon_256x256.png | Bin 0 -> 78960 bytes .../HTML.iconset/icon_256x256@2x.png | Bin 0 -> 279930 bytes .../HTML.iconset/icon_32x32.png | Bin 0 -> 2304 bytes .../HTML.iconset/icon_32x32@2x.png | Bin 0 -> 6713 bytes .../HTML.iconset/icon_512x512.png | Bin 0 -> 279930 bytes .../HTML.iconset/icon_512x512@2x.png | Bin 0 -> 962919 bytes Balthisar Tidy/Images.xcassets/PHP.icns | Bin 0 -> 1864524 bytes .../PHP.iconset/icon_128x128.png | Bin 0 -> 22169 bytes .../PHP.iconset/icon_128x128@2x.png | Bin 0 -> 78656 bytes .../PHP.iconset/icon_16x16.png | Bin 0 -> 772 bytes .../PHP.iconset/icon_16x16@2x.png | Bin 0 -> 2289 bytes .../PHP.iconset/icon_256x256.png | Bin 0 -> 78656 bytes .../PHP.iconset/icon_256x256@2x.png | Bin 0 -> 279183 bytes .../PHP.iconset/icon_32x32.png | Bin 0 -> 2289 bytes .../PHP.iconset/icon_32x32@2x.png | Bin 0 -> 6639 bytes .../PHP.iconset/icon_512x512.png | Bin 0 -> 279183 bytes .../PHP.iconset/icon_512x512@2x.png | Bin 0 -> 962411 bytes Balthisar Tidy/main.m | 14 + Balthisar Tidy/tidylib5-src/Makefile | 37 + Balthisar Tidy/tidylib5-src/README.html | 44 + Balthisar Tidy/tidylib5-src/README.md | 38 + .../tidylib5-src}/console/tab2space.c | 31 +- Balthisar Tidy/tidylib5-src/console/tidy.c | 1346 +++ .../tidylib5-src/experimental/TidyNodeIter.c | 47 + .../tidylib5-src/experimental/TidyNodeIter.h | 51 + .../tidylib5-src/experimental/httpio.c | 224 + .../tidylib5-src/experimental/httpio.h | 48 + .../tidylib5-src/htmldoc/api/annotated.html | 90 + .../tidylib5-src/htmldoc/api/annotated.js | 12 + .../tidylib5-src/htmldoc/api/bc_s.png | Bin 0 -> 677 bytes .../tidylib5-src/htmldoc/api/bdwn.png | Bin 0 -> 147 bytes .../tidylib5-src/htmldoc/api/buffio_8h.html | 550 + .../tidylib5-src/htmldoc/api/buffio_8h.js | 20 + .../htmldoc/api/buffio_8h_source.html | 198 + .../tidylib5-src/htmldoc/api/classes.html | 89 + .../tidylib5-src/htmldoc/api/closed.png | Bin 0 -> 126 bytes .../tidylib5-src/htmldoc/api/deprecated.html | 93 + .../tidylib5-src/htmldoc/api/doxygen.css | 1012 ++ .../tidylib5-src/htmldoc/api/doxygen.png | Bin 0 -> 3942 bytes .../tidylib5-src/htmldoc/api/files.html | 85 + .../tidylib5-src/htmldoc/api/files.js | 7 + .../tidylib5-src/htmldoc/api/ftv2blank.png | Bin 0 -> 82 bytes .../tidylib5-src/htmldoc/api/ftv2doc.png | Bin 0 -> 762 bytes .../htmldoc/api/ftv2folderclosed.png | Bin 0 -> 598 bytes .../htmldoc/api/ftv2folderopen.png | Bin 0 -> 590 bytes .../tidylib5-src/htmldoc/api/ftv2lastnode.png | Bin 0 -> 82 bytes .../tidylib5-src/htmldoc/api/ftv2link.png | Bin 0 -> 762 bytes .../htmldoc/api/ftv2mlastnode.png | Bin 0 -> 221 bytes .../tidylib5-src/htmldoc/api/ftv2mnode.png | Bin 0 -> 221 bytes .../tidylib5-src/htmldoc/api/ftv2node.png | Bin 0 -> 82 bytes .../htmldoc/api/ftv2plastnode.png | Bin 0 -> 215 bytes .../tidylib5-src/htmldoc/api/ftv2pnode.png | Bin 0 -> 215 bytes .../tidylib5-src/htmldoc/api/ftv2splitbar.png | Bin 0 -> 249 bytes .../tidylib5-src/htmldoc/api/ftv2vertline.png | Bin 0 -> 82 bytes .../tidylib5-src/htmldoc/api/functions.html | 119 + .../htmldoc/api/functions_func.html | 86 + .../htmldoc/api/functions_vars.html | 110 + .../tidylib5-src/htmldoc/api/globals.html | 425 + .../htmldoc/api/globals_defs.html | 80 + .../htmldoc/api/globals_func.html | 376 + .../htmldoc/api/globals_type.html | 119 + .../htmldoc/api/group__AttrGet.html | 93 + .../htmldoc/api/group__AttrGet.js | 5 + .../api/group__AttrGetAttributeName.html | 177 + .../api/group__AttrGetAttributeName.js | 48 + .../api/group__AttrIsAttributeName.html | 177 + .../htmldoc/api/group__AttrIsAttributeName.js | 48 + .../htmldoc/api/group__Attribute.html | 97 + .../htmldoc/api/group__Attribute.js | 7 + .../htmldoc/api/group__Basic.html | 609 ++ .../tidylib5-src/htmldoc/api/group__Basic.js | 27 + .../htmldoc/api/group__Clean.html | 124 + .../tidylib5-src/htmldoc/api/group__Clean.js | 5 + .../htmldoc/api/group__Configuration.html | 1020 ++ .../htmldoc/api/group__Configuration.js | 41 + .../tidylib5-src/htmldoc/api/group__IO.html | 517 + .../tidylib5-src/htmldoc/api/group__IO.js | 23 + .../htmldoc/api/group__Memory.html | 270 + .../tidylib5-src/htmldoc/api/group__Memory.js | 15 + .../htmldoc/api/group__NodeAsk.html | 113 + .../htmldoc/api/group__NodeAsk.js | 15 + .../htmldoc/api/group__NodeIsElementName.html | 247 + .../htmldoc/api/group__NodeIsElementName.js | 83 + .../htmldoc/api/group__Opaque.html | 102 + .../tidylib5-src/htmldoc/api/group__Opaque.js | 11 + .../htmldoc/api/group__Parse.html | 223 + .../tidylib5-src/htmldoc/api/group__Parse.js | 8 + .../tidylib5-src/htmldoc/api/group__Save.html | 229 + .../tidylib5-src/htmldoc/api/group__Save.js | 8 + .../tidylib5-src/htmldoc/api/group__Tree.html | 147 + .../tidylib5-src/htmldoc/api/group__Tree.js | 15 + .../tidylib5-src/htmldoc/api/index.html | 91 + .../tidylib5-src/htmldoc/api/jquery.js | 111 + .../tidylib5-src/htmldoc/api/modules.html | 102 + .../tidylib5-src/htmldoc/api/modules.js | 15 + .../tidylib5-src/htmldoc/api/nav_f.png | Bin 0 -> 159 bytes .../tidylib5-src/htmldoc/api/nav_h.png | Bin 0 -> 97 bytes .../tidylib5-src/htmldoc/api/navtree.css | 127 + .../tidylib5-src/htmldoc/api/navtree.js | 380 + .../tidylib5-src/htmldoc/api/navtreeindex.js | 41 + .../tidylib5-src/htmldoc/api/open.png | Bin 0 -> 118 bytes .../tidylib5-src/htmldoc/api/pages.html | 83 + .../htmldoc/api/platform_8h_source.html | 716 ++ .../tidylib5-src/htmldoc/api/resize.js | 81 + .../htmldoc/api/structTidyAttr.html | 87 + .../htmldoc/api/structTidyDoc.html | 87 + .../htmldoc/api/structTidyNode.html | 87 + .../htmldoc/api/structTidyOption.html | 87 + .../htmldoc/api/struct__TidyAllocator.html | 101 + .../htmldoc/api/struct__TidyAllocator.js | 4 + .../api/struct__TidyAllocatorVtbl.html | 203 + .../htmldoc/api/struct__TidyAllocatorVtbl.js | 9 + .../htmldoc/api/struct__TidyBuffer.html | 169 + .../htmldoc/api/struct__TidyBuffer.js | 8 + .../htmldoc/api/struct__TidyInputSource.html | 154 + .../htmldoc/api/struct__TidyInputSource.js | 7 + .../htmldoc/api/struct__TidyOutputSink.html | 124 + .../htmldoc/api/struct__TidyOutputSink.js | 5 + .../tidylib5-src/htmldoc/api/tab_a.png | Bin 0 -> 140 bytes .../tidylib5-src/htmldoc/api/tab_b.png | Bin 0 -> 178 bytes .../tidylib5-src/htmldoc/api/tab_h.png | Bin 0 -> 192 bytes .../tidylib5-src/htmldoc/api/tab_s.png | Bin 0 -> 189 bytes .../tidylib5-src/htmldoc/api/tabs.css | 59 + .../tidylib5-src/htmldoc/api/tidy_8h.html | 641 ++ .../tidylib5-src/htmldoc/api/tidy_8h.js | 307 + .../htmldoc/api/tidy_8h_source.html | 1177 +++ .../htmldoc/api/tidyenum_8h_source.html | 835 ++ .../tidylib5-src/htmldoc/doxygen.cfg | 1757 ++++ .../tidylib5-src/htmldoc/quickref-html.xsl | 240 + Balthisar Tidy/tidylib5-src/htmldoc/tidy1.xsl | 447 + Balthisar Tidy/tidylib5-src/include/buffio.h | 112 + .../tidylib5-src}/include/platform.h | 234 +- Balthisar Tidy/tidylib5-src/include/tidy.h | 1091 ++ .../tidylib5-src}/include/tidyenum.h | 434 +- Balthisar Tidy/tidylib5-src/index.html | 638 ++ Balthisar Tidy/tidylib5-src/license.html | 50 + Balthisar Tidy/tidylib5-src/quickref.html | 2467 +++++ .../tidylib5-src}/src/access.c | 1416 +-- .../tidylib5-src}/src/access.h | 22 +- Balthisar Tidy/tidylib5-src/src/alloc.c | 101 + .../tidylib5-src}/src/attrask.c | 110 +- Balthisar Tidy/tidylib5-src/src/attrdict.c | 8835 +++++++++++++++++ Balthisar Tidy/tidylib5-src/src/attrdict.h | 148 + .../tidylib5-src}/src/attrget.c | 111 +- Balthisar Tidy/tidylib5-src/src/attrs.c | 2028 ++++ .../tidylib5-src}/src/attrs.h | 589 +- Balthisar Tidy/tidylib5-src/src/buffio.c | 226 + Balthisar Tidy/tidylib5-src/src/charsets.c | 1031 ++ Balthisar Tidy/tidylib5-src/src/charsets.h | 13 + Balthisar Tidy/tidylib5-src/src/clean.c | 2668 +++++ Balthisar Tidy/tidylib5-src/src/clean.h | 82 + Balthisar Tidy/tidylib5-src/src/config.c | 1746 ++++ Balthisar Tidy/tidylib5-src/src/config.h | 147 + .../tidylib5-src}/src/entities.c | 83 +- Balthisar Tidy/tidylib5-src/src/entities.h | 18 + Balthisar Tidy/tidylib5-src/src/fileio.c | 100 + Balthisar Tidy/tidylib5-src/src/fileio.h | 42 + .../tidylib5-src}/src/forward.h | 20 +- Balthisar Tidy/tidylib5-src/src/gdoc.c | 174 + Balthisar Tidy/tidylib5-src/src/gdoc.h | 19 + Balthisar Tidy/tidylib5-src/src/iconvtc.c | 104 + Balthisar Tidy/tidylib5-src/src/iconvtc.h | 14 + Balthisar Tidy/tidylib5-src/src/istack.c | 367 + .../tidylib5-src}/src/lexer.c | 2753 ++--- .../tidylib5-src}/src/lexer.h | 436 +- Balthisar Tidy/tidylib5-src/src/localize.c | 1931 ++++ Balthisar Tidy/tidylib5-src/src/mappedio.c | 328 + Balthisar Tidy/tidylib5-src/src/mappedio.h | 15 + Balthisar Tidy/tidylib5-src/src/message.h | 201 + Balthisar Tidy/tidylib5-src/src/parser.c | 4411 ++++++++ Balthisar Tidy/tidylib5-src/src/parser.h | 70 + .../tidylib5-src}/src/pprint.c | 1329 +-- .../tidylib5-src}/src/pprint.h | 48 +- .../tidylib5-src}/src/streamio.c | 642 +- .../tidylib5-src}/src/streamio.h | 156 +- Balthisar Tidy/tidylib5-src/src/tagask.c | 280 + Balthisar Tidy/tidylib5-src/src/tags.c | 894 ++ .../tidylib5-src}/src/tags.h | 163 +- .../tidylib5-src}/src/tidy-int.h | 66 +- Balthisar Tidy/tidylib5-src/src/tidylib.c | 1752 ++++ Balthisar Tidy/tidylib5-src/src/tmbstr.c | 300 + Balthisar Tidy/tidylib5-src/src/tmbstr.h | 86 + .../tidylib5-src}/src/utf8.c | 66 +- Balthisar Tidy/tidylib5-src/src/utf8.h | 46 + Balthisar Tidy/tidylib5-src/src/version.h | 1 + Balthisar Tidy/tidylib5-src/src/win32tc.c | 794 ++ Balthisar Tidy/tidylib5-src/src/win32tc.h | 18 + .../tidylib5-src/test/accessTest/1-1-1-1.html | 9 + .../test/accessTest/1-1-1-10.html | 9 + .../tidylib5-src/test/accessTest/1-1-1-2.html | 9 + .../tidylib5-src/test/accessTest/1-1-1-3.html | 9 + .../tidylib5-src/test/accessTest/1-1-1-4.html | 9 + .../test/accessTest/1-1-10-1.html | 9 + .../test/accessTest/1-1-12-1.html | 23 + .../tidylib5-src/test/accessTest/1-1-2-1.html | 9 + .../tidylib5-src/test/accessTest/1-1-2-2.html | 9 + .../tidylib5-src/test/accessTest/1-1-2-3.html | 10 + .../tidylib5-src/test/accessTest/1-1-3-1.html | 11 + .../tidylib5-src/test/accessTest/1-1-4-1.html | 9 + .../tidylib5-src/test/accessTest/1-1-5-1.html | 9 + .../tidylib5-src/test/accessTest/1-1-6-1.html | 9 + .../tidylib5-src/test/accessTest/1-1-6-2.html | 9 + .../tidylib5-src/test/accessTest/1-1-6-3.html | 9 + .../tidylib5-src/test/accessTest/1-1-6-4.html | 9 + .../tidylib5-src/test/accessTest/1-1-6-5.html | 9 + .../tidylib5-src/test/accessTest/1-1-6-6.html | 9 + .../tidylib5-src/test/accessTest/1-1-8-1.html | 10 + .../tidylib5-src/test/accessTest/1-1-9-1.html | 15 + .../tidylib5-src/test/accessTest/1-2-1-1.html | 11 + .../tidylib5-src/test/accessTest/1-4-1-1.html | 9 + .../tidylib5-src/test/accessTest/1-5-1-1.html | 15 + .../test/accessTest/10-1-1-1.html | 9 + .../test/accessTest/10-1-1-2.html | 9 + .../test/accessTest/11-2-1-1.html | 10 + .../test/accessTest/11-2-1-10.html | 11 + .../test/accessTest/11-2-1-2.html | 9 + .../test/accessTest/11-2-1-3.html | 11 + .../test/accessTest/11-2-1-4.html | 11 + .../test/accessTest/11-2-1-5.html | 9 + .../test/accessTest/11-2-1-6.html | 9 + .../test/accessTest/11-2-1-7.html | 9 + .../test/accessTest/11-2-1-8.html | 9 + .../test/accessTest/11-2-1-9.html | 9 + .../test/accessTest/12-1-1-1.html | 10 + .../test/accessTest/12-1-1-2.html | 10 + .../test/accessTest/12-1-1-3.html | 10 + .../test/accessTest/12-4-1-1.html | 12 + .../test/accessTest/12-4-1-2.html | 12 + .../test/accessTest/12-4-1-3.html | 12 + .../test/accessTest/13-1-1-1.html | 11 + .../test/accessTest/13-1-1-2.html | 9 + .../test/accessTest/13-1-1-3.html | 10 + .../test/accessTest/13-1-1-4.html | 9 + .../test/accessTest/13-10-1-1.html | 23 + .../test/accessTest/13-2-1-1.html | 9 + .../test/accessTest/13-2-1-3.html | 9 + .../tidylib5-src/test/accessTest/2-1-1-1.html | 9 + .../tidylib5-src/test/accessTest/2-1-1-2.html | 9 + .../tidylib5-src/test/accessTest/2-1-1-3.html | 9 + .../tidylib5-src/test/accessTest/2-1-1-4.html | 9 + .../tidylib5-src/test/accessTest/2-1-1-5.html | 11 + .../tidylib5-src/test/accessTest/2-2-1-1.html | 8 + .../tidylib5-src/test/accessTest/2-2-1-2.html | 8 + .../tidylib5-src/test/accessTest/2-2-1-3.html | 8 + .../tidylib5-src/test/accessTest/2-2-1-4.html | 8 + .../tidylib5-src/test/accessTest/3-2-1-1.html | 8 + .../tidylib5-src/test/accessTest/3-3-1-1.html | 9 + .../tidylib5-src/test/accessTest/3-5-1-1.html | 10 + .../tidylib5-src/test/accessTest/3-5-2-1.html | 9 + .../tidylib5-src/test/accessTest/3-5-2-2.html | 9 + .../tidylib5-src/test/accessTest/3-5-2-3.html | 9 + .../tidylib5-src/test/accessTest/3-6-1-1.html | 15 + .../tidylib5-src/test/accessTest/3-6-1-2.html | 15 + .../tidylib5-src/test/accessTest/3-6-1-4.html | 10 + .../tidylib5-src/test/accessTest/4-1-1-1.html | 12 + .../tidylib5-src/test/accessTest/4-3-1-1.html | 9 + .../tidylib5-src/test/accessTest/4-3-1-2.html | 8 + .../tidylib5-src/test/accessTest/5-1-2-1.html | 26 + .../tidylib5-src/test/accessTest/5-1-2-2.html | 26 + .../tidylib5-src/test/accessTest/5-1-2-3.html | 23 + .../tidylib5-src/test/accessTest/5-2-1-1.html | 35 + .../tidylib5-src/test/accessTest/5-2-1-2.html | 26 + .../tidylib5-src/test/accessTest/5-3-1-1.html | 15 + .../tidylib5-src/test/accessTest/5-4-1-1.html | 19 + .../tidylib5-src/test/accessTest/5-5-1-1.html | 15 + .../tidylib5-src/test/accessTest/5-5-1-2.html | 15 + .../tidylib5-src/test/accessTest/5-5-1-3.html | 15 + .../tidylib5-src/test/accessTest/5-5-1-6.html | 15 + .../tidylib5-src/test/accessTest/5-5-2-1.html | 15 + .../tidylib5-src/test/accessTest/5-6-1-1.html | 18 + .../tidylib5-src/test/accessTest/5-6-1-2.html | 18 + .../tidylib5-src/test/accessTest/5-6-1-3.html | 18 + .../tidylib5-src/test/accessTest/6-1-1-1.html | 9 + .../tidylib5-src/test/accessTest/6-1-1-2.html | 13 + .../tidylib5-src/test/accessTest/6-1-1-3.html | 11 + .../tidylib5-src/test/accessTest/6-2-1-1.html | 10 + .../tidylib5-src/test/accessTest/6-2-2-1.html | 9 + .../tidylib5-src/test/accessTest/6-2-2-2.html | 9 + .../tidylib5-src/test/accessTest/6-2-2-3.html | 11 + .../tidylib5-src/test/accessTest/6-3-1-1.html | 11 + .../tidylib5-src/test/accessTest/6-3-1-2.html | 9 + .../tidylib5-src/test/accessTest/6-3-1-3.html | 11 + .../tidylib5-src/test/accessTest/6-3-1-4.html | 11 + .../tidylib5-src/test/accessTest/6-5-1-1.html | 11 + .../tidylib5-src/test/accessTest/6-5-1-2.html | 14 + .../tidylib5-src/test/accessTest/6-5-1-3.html | 12 + .../tidylib5-src/test/accessTest/6-5-1-4.html | 13 + .../tidylib5-src/test/accessTest/7-1-1-1.html | 11 + .../tidylib5-src/test/accessTest/7-1-1-2.html | 11 + .../tidylib5-src/test/accessTest/7-1-1-3.html | 11 + .../tidylib5-src/test/accessTest/7-1-1-4.html | 11 + .../tidylib5-src/test/accessTest/7-1-1-5.html | 11 + .../tidylib5-src/test/accessTest/7-2-1-1.html | 9 + .../tidylib5-src/test/accessTest/7-4-1-1.html | 9 + .../tidylib5-src/test/accessTest/7-5-1-1.html | 9 + .../tidylib5-src/test/accessTest/8-1-1-1.html | 9 + .../tidylib5-src/test/accessTest/8-1-1-2.html | 9 + .../tidylib5-src/test/accessTest/8-1-1-3.html | 9 + .../tidylib5-src/test/accessTest/8-1-1-4.html | 9 + .../tidylib5-src/test/accessTest/9-1-1-1.html | 12 + .../tidylib5-src/test/accessTest/9-3-1-1.html | 9 + .../tidylib5-src/test/accessTest/9-3-1-2.html | 9 + .../tidylib5-src/test/accessTest/9-3-1-3.html | 9 + .../tidylib5-src/test/accessTest/9-3-1-4.html | 9 + .../tidylib5-src/test/accessTest/9-3-1-5.html | 9 + .../tidylib5-src/test/accessTest/9-3-1-6.html | 9 + .../test/accessTest/cfg_default.txt | 2 + .../tidylib5-src/test/accesscases.txt | 119 + Balthisar Tidy/tidylib5-src/test/acctest.cmd | 61 + Balthisar Tidy/tidylib5-src/test/alltest.cmd | 14 + Balthisar Tidy/tidylib5-src/test/alltest1.cmd | 75 + .../tidylib5-src/test/input/cfg_1003994.txt | 1 + .../tidylib5-src/test/input/cfg_1004008.txt | 1 + .../tidylib5-src/test/input/cfg_1004512.txt | 8 + .../tidylib5-src/test/input/cfg_1030944.txt | 4 + .../tidylib5-src/test/input/cfg_1055398.txt | 2 + .../tidylib5-src/test/input/cfg_1067112.txt | 25 + .../tidylib5-src/test/input/cfg_1068087.txt | 7 + .../tidylib5-src/test/input/cfg_1078345.txt | 2 + .../tidylib5-src/test/input/cfg_1207443.txt | 2 + .../tidylib5-src/test/input/cfg_1210752.txt | 2 + .../tidylib5-src/test/input/cfg_1241723.txt | 6 + .../tidylib5-src/test/input/cfg_1266647.txt | 3 + .../tidylib5-src/test/input/cfg_1286278.txt | 3 + .../tidylib5-src/test/input/cfg_1359292.txt | 25 + .../tidylib5-src/test/input/cfg_1365706.txt | 4 + .../tidylib5-src/test/input/cfg_1407266.txt | 1 + .../tidylib5-src/test/input/cfg_1408034.txt | 1 + .../tidylib5-src/test/input/cfg_1410061-1.txt | 2 + .../tidylib5-src/test/input/cfg_1410061-2.txt | 1 + .../tidylib5-src/test/input/cfg_1410061.txt | 2 + .../tidylib5-src/test/input/cfg_1423252.txt | 1 + .../tidylib5-src/test/input/cfg_1448730.txt | 2 + .../tidylib5-src/test/input/cfg_1452744.txt | 2 + .../tidylib5-src/test/input/cfg_1510101.txt | 4 + .../tidylib5-src/test/input/cfg_1573338.txt | 6 + .../tidylib5-src/test/input/cfg_1590220-1.txt | 1 + .../tidylib5-src/test/input/cfg_1590220-2.txt | 1 + .../tidylib5-src/test/input/cfg_1652223.txt | 2 + .../tidylib5-src/test/input/cfg_1720953.txt | 1 + .../tidylib5-src/test/input/cfg_1986717-1.txt | 2 + .../tidylib5-src/test/input/cfg_1986717-2.txt | 2 + .../tidylib5-src/test/input/cfg_1986717-3.txt | 2 + .../tidylib5-src/test/input/cfg_2046048.txt | 1 + .../tidylib5-src/test/input/cfg_2085175.txt | 6 + .../tidylib5-src/test/input/cfg_2705873-1.txt | 1 + .../tidylib5-src/test/input/cfg_2705873-2.txt | 1 + .../tidylib5-src/test/input/cfg_2709860.txt | 1 + .../tidylib5-src/test/input/cfg_427812.txt | 2 + .../tidylib5-src/test/input/cfg_427821.txt | 2 + .../tidylib5-src/test/input/cfg_427825.txt | 3 + .../tidylib5-src/test/input/cfg_427826.txt | 10 + .../tidylib5-src/test/input/cfg_427835.txt | 2 + .../tidylib5-src/test/input/cfg_427837.txt | 5 + .../tidylib5-src/test/input/cfg_427839.txt | 3 + .../tidylib5-src/test/input/cfg_427845.txt | 2 + .../tidylib5-src/test/input/cfg_431716.txt | 2 + .../tidylib5-src/test/input/cfg_431721.txt | 11 + .../tidylib5-src/test/input/cfg_431736.txt | 2 + .../tidylib5-src/test/input/cfg_431889.txt | 3 + .../tidylib5-src/test/input/cfg_431895.txt | 4 + .../tidylib5-src/test/input/cfg_431956.txt | 3 + .../tidylib5-src/test/input/cfg_431958.txt | 4 + .../tidylib5-src/test/input/cfg_432677.txt | 2 + .../tidylib5-src/test/input/cfg_433012.txt | 4 + .../tidylib5-src/test/input/cfg_433604.txt | 2 + .../tidylib5-src/test/input/cfg_433607.txt | 2 + .../tidylib5-src/test/input/cfg_433670.txt | 2 + .../tidylib5-src/test/input/cfg_433856.txt | 2 + .../tidylib5-src/test/input/cfg_434100.txt | 2 + .../tidylib5-src/test/input/cfg_434940.txt | 2 + .../tidylib5-src/test/input/cfg_438954.txt | 2 + .../tidylib5-src/test/input/cfg_444394.txt | 11 + .../tidylib5-src/test/input/cfg_449348.txt | 1 + .../tidylib5-src/test/input/cfg_463066.txt | 3 + .../tidylib5-src/test/input/cfg_470663.txt | 3 + .../tidylib5-src/test/input/cfg_473490.txt | 11 + .../tidylib5-src/test/input/cfg_480406.txt | 3 + .../tidylib5-src/test/input/cfg_480701.txt | 3 + .../tidylib5-src/test/input/cfg_480843.txt | 2 + .../tidylib5-src/test/input/cfg_500236.txt | 5 + .../tidylib5-src/test/input/cfg_503436.txt | 2 + .../tidylib5-src/test/input/cfg_508936.txt | 19 + .../tidylib5-src/test/input/cfg_511243.txt | 2 + .../tidylib5-src/test/input/cfg_514348.txt | 4 + .../tidylib5-src/test/input/cfg_517550.txt | 2 + .../tidylib5-src/test/input/cfg_531964.txt | 2 + .../tidylib5-src/test/input/cfg_532535.txt | 2 + .../tidylib5-src/test/input/cfg_533233.txt | 2 + .../tidylib5-src/test/input/cfg_537604.txt | 3 + .../tidylib5-src/test/input/cfg_540045.txt | 11 + .../tidylib5-src/test/input/cfg_540571.txt | 5 + .../tidylib5-src/test/input/cfg_542029.txt | 3 + .../tidylib5-src/test/input/cfg_543262.txt | 5 + .../tidylib5-src/test/input/cfg_545772.txt | 2 + .../tidylib5-src/test/input/cfg_570027.txt | 4 + .../tidylib5-src/test/input/cfg_578216.txt | 2 + .../tidylib5-src/test/input/cfg_586555.txt | 25 + .../tidylib5-src/test/input/cfg_590716.txt | 2 + .../tidylib5-src/test/input/cfg_616744.txt | 6 + .../tidylib5-src/test/input/cfg_634889.txt | 10 + .../tidylib5-src/test/input/cfg_640473.txt | 14 + .../tidylib5-src/test/input/cfg_640474.txt | 5 + .../tidylib5-src/test/input/cfg_646946.txt | 4 + .../tidylib5-src/test/input/cfg_647255.txt | 5 + .../tidylib5-src/test/input/cfg_647900.txt | 9 + .../tidylib5-src/test/input/cfg_649812.txt | 5 + .../tidylib5-src/test/input/cfg_656889.txt | 5 + .../tidylib5-src/test/input/cfg_658230.txt | 3 + .../tidylib5-src/test/input/cfg_660397.txt | 4 + .../tidylib5-src/test/input/cfg_661606.txt | 7 + .../tidylib5-src/test/input/cfg_676156.txt | 1 + .../tidylib5-src/test/input/cfg_678268.txt | 9 + .../tidylib5-src/test/input/cfg_688746.txt | 1 + .../tidylib5-src/test/input/cfg_695408.txt | 7 + .../tidylib5-src/test/input/cfg_795643-1.txt | 1 + .../tidylib5-src/test/input/cfg_795643-2.txt | 1 + .../tidylib5-src/test/input/cfg_default.txt | 10 + .../tidylib5-src/test/input/in_1002509.html | 25 + .../tidylib5-src/test/input/in_1003361.html | 12 + .../tidylib5-src/test/input/in_1003994.xml | 10 + .../tidylib5-src/test/input/in_1004008.xml | 3 + .../tidylib5-src/test/input/in_1004051.html | 9 + .../tidylib5-src/test/input/in_1004512.html | 9 + .../tidylib5-src/test/input/in_1014993.html | 12 + .../tidylib5-src/test/input/in_1015959.html | 12 + .../tidylib5-src/test/input/in_1027888.html | 42 + .../tidylib5-src/test/input/in_1030944.xml | 1 + .../tidylib5-src/test/input/in_1050673.html | 3 + .../tidylib5-src/test/input/in_1052758.html | 14 + .../tidylib5-src/test/input/in_1053626.html | 11 + .../tidylib5-src/test/input/in_1055304.html | 11 + .../tidylib5-src/test/input/in_1055398.html | 11 + .../tidylib5-src/test/input/in_1056023.html | 2 + .../tidylib5-src/test/input/in_1056910.html | 14 + .../tidylib5-src/test/input/in_1062345.html | 7 + .../tidylib5-src/test/input/in_1062511.html | 8 + .../tidylib5-src/test/input/in_1062661.html | 7 + .../tidylib5-src/test/input/in_1063256.html | 9 + .../tidylib5-src/test/input/in_1067112.html | 471 + .../tidylib5-src/test/input/in_1068087.html | 8 + .../tidylib5-src/test/input/in_1069549.html | 12 + .../tidylib5-src/test/input/in_1069553.html | 12 + .../tidylib5-src/test/input/in_1072528.html | 1 + .../tidylib5-src/test/input/in_1078345.html | 22 + .../tidylib5-src/test/input/in_1079820.html | 49 + .../tidylib5-src/test/input/in_1086083.html | 19 + .../tidylib5-src/test/input/in_1090318.html | 13 + .../tidylib5-src/test/input/in_1098012.html | 11 + .../tidylib5-src/test/input/in_1107622.html | 12 + .../tidylib5-src/test/input/in_1115094.html | 9 + .../tidylib5-src/test/input/in_1117013.html | 11 + .../tidylib5-src/test/input/in_1145571.html | 11 + .../tidylib5-src/test/input/in_1145572.html | 10 + .../tidylib5-src/test/input/in_1168193.html | 52 + .../tidylib5-src/test/input/in_1183751.html | 104 + .../tidylib5-src/test/input/in_1198501.html | 21 + .../tidylib5-src/test/input/in_1207443.html | 32 + .../tidylib5-src/test/input/in_1210752.html | 1 + .../tidylib5-src/test/input/in_1231279.html | 12 + .../tidylib5-src/test/input/in_1235296.html | 10 + .../tidylib5-src/test/input/in_1241723.html | 22 + .../tidylib5-src/test/input/in_1263391.html | 30 + .../tidylib5-src/test/input/in_1266647.html | 2 + .../tidylib5-src/test/input/in_1282835.html | 33 + .../tidylib5-src/test/input/in_1286029.html | 15 + .../tidylib5-src/test/input/in_1286278.html | 35 + .../tidylib5-src/test/input/in_1316258.html | 31 + .../tidylib5-src/test/input/in_1316307-2.html | 15 + .../tidylib5-src/test/input/in_1316307.html | 31 + .../tidylib5-src/test/input/in_1326520.html | 26 + .../tidylib5-src/test/input/in_1331849.html | 51 + .../tidylib5-src/test/input/in_1333579.html | 9 + .../tidylib5-src/test/input/in_1359292.html | 19 + .../tidylib5-src/test/input/in_1365706.xml | 24 + .../tidylib5-src/test/input/in_1398397.html | 4 + .../tidylib5-src/test/input/in_1407266.html | 4 + .../tidylib5-src/test/input/in_1408034.html | 1 + .../tidylib5-src/test/input/in_1410061-1.html | 11 + .../tidylib5-src/test/input/in_1410061-2.html | 12 + .../tidylib5-src/test/input/in_1410061.html | 8 + .../tidylib5-src/test/input/in_1415137.html | 4 + .../tidylib5-src/test/input/in_1423252.html | 11 + .../tidylib5-src/test/input/in_1426419.html | 12 + .../tidylib5-src/test/input/in_1436578.html | 11 + .../tidylib5-src/test/input/in_1445570.html | 10 + .../tidylib5-src/test/input/in_1448730.xml | 5 + .../tidylib5-src/test/input/in_1452744.html | 10 + .../tidylib5-src/test/input/in_1503897.html | 13 + .../tidylib5-src/test/input/in_1510101.xml | 11 + .../tidylib5-src/test/input/in_1573338.xml | 3 + .../tidylib5-src/test/input/in_1586158.html | 9 + .../tidylib5-src/test/input/in_1590220-1.html | 21 + .../tidylib5-src/test/input/in_1590220-2.html | 17 + .../tidylib5-src/test/input/in_1603538-1.html | 8 + .../tidylib5-src/test/input/in_1603538-2.html | 16 + .../tidylib5-src/test/input/in_1610888-1.html | 25 + .../tidylib5-src/test/input/in_1610888-2.html | 25 + .../tidylib5-src/test/input/in_1632218.html | 11 + .../tidylib5-src/test/input/in_1632470.html | 9 + .../tidylib5-src/test/input/in_1638062.html | 10 + .../tidylib5-src/test/input/in_1652223.html | 9 + .../tidylib5-src/test/input/in_1674502.html | 9 + .../tidylib5-src/test/input/in_1707836.html | 14 + .../tidylib5-src/test/input/in_1715153.html | 12 + .../tidylib5-src/test/input/in_1720953.html | 11 + .../tidylib5-src/test/input/in_1773932.html | 13 + .../tidylib5-src/test/input/in_1986717-1.html | 12 + .../tidylib5-src/test/input/in_1986717-2.html | 12 + .../tidylib5-src/test/input/in_1986717-3.html | 9 + .../tidylib5-src/test/input/in_2046048.html | 20 + .../tidylib5-src/test/input/in_2085175.html | 10 + .../tidylib5-src/test/input/in_2359929.html | 10 + .../tidylib5-src/test/input/in_2705873-1.html | 13 + .../tidylib5-src/test/input/in_2705873-2.html | 14 + .../tidylib5-src/test/input/in_2709860.html | 16 + .../tidylib5-src/test/input/in_426885.html | 15 + .../tidylib5-src/test/input/in_427633.html | 11 + .../tidylib5-src/test/input/in_427662.html | 10 + .../tidylib5-src/test/input/in_427664.html | 9 + .../tidylib5-src/test/input/in_427671.html | 15 + .../tidylib5-src/test/input/in_427672.html | 9 + .../tidylib5-src/test/input/in_427675.html | 10 + .../tidylib5-src/test/input/in_427676.html | 8 + .../tidylib5-src/test/input/in_427677.html | 10 + .../tidylib5-src/test/input/in_427810.html | 13 + .../tidylib5-src/test/input/in_427811.html | 16 + .../tidylib5-src/test/input/in_427812.xhtml | 15 + .../tidylib5-src/test/input/in_427813.html | 8 + .../tidylib5-src/test/input/in_427816.html | 8 + .../tidylib5-src/test/input/in_427818.html | 10 + .../tidylib5-src/test/input/in_427819.html | 17 + .../tidylib5-src/test/input/in_427820.html | 14 + .../tidylib5-src/test/input/in_427821.html | 13 + .../tidylib5-src/test/input/in_427822.html | 10 + .../tidylib5-src/test/input/in_427823.html | 18 + .../tidylib5-src/test/input/in_427825.html | 9 + .../tidylib5-src/test/input/in_427826.html | 46 + .../tidylib5-src/test/input/in_427827.html | 9 + .../tidylib5-src/test/input/in_427830.html | 10 + .../tidylib5-src/test/input/in_427833.html | 12 + .../tidylib5-src/test/input/in_427834.html | 10 + .../tidylib5-src/test/input/in_427835.html | 12 + .../tidylib5-src/test/input/in_427836.html | 5 + .../tidylib5-src/test/input/in_427837.xml | 4 + .../tidylib5-src/test/input/in_427838.html | 20 + .../tidylib5-src/test/input/in_427839.html | 9 + .../tidylib5-src/test/input/in_427840.html | 8 + .../tidylib5-src/test/input/in_427841.html | 31 + .../tidylib5-src/test/input/in_427845.html | 9 + .../tidylib5-src/test/input/in_427846.html | 13 + .../tidylib5-src/test/input/in_431716.html | 377 + .../tidylib5-src/test/input/in_431721.html | 211 + .../tidylib5-src/test/input/in_431731.html | 9 + .../tidylib5-src/test/input/in_431736.html | 9 + .../tidylib5-src/test/input/in_431739.html | 9 + .../tidylib5-src/test/input/in_431874.html | 6 + .../tidylib5-src/test/input/in_431889.html | 38 + .../tidylib5-src/test/input/in_431895.html | 36 + .../tidylib5-src/test/input/in_431898.html | 13 + .../tidylib5-src/test/input/in_431956.xml | 8 + .../tidylib5-src/test/input/in_431958.html | 13 + .../tidylib5-src/test/input/in_431964.html | 13 + .../tidylib5-src/test/input/in_431965.xhtml | 12 + .../tidylib5-src/test/input/in_432677.html | 14 + .../tidylib5-src/test/input/in_433012.html | 804 ++ .../tidylib5-src/test/input/in_433021.html | 18 + .../tidylib5-src/test/input/in_433040.html | 9 + .../tidylib5-src/test/input/in_433359.html | 14 + .../tidylib5-src/test/input/in_433360.html | 9 + .../tidylib5-src/test/input/in_433604.xml | 4 + .../tidylib5-src/test/input/in_433607.xml | 3 + .../tidylib5-src/test/input/in_433656.html | 10 + .../tidylib5-src/test/input/in_433666.html | 12 + .../tidylib5-src/test/input/in_433670.xml | 4 + .../tidylib5-src/test/input/in_433672.html | 12 + .../tidylib5-src/test/input/in_433856.html | 14 + .../tidylib5-src/test/input/in_434047.html | 13 + .../tidylib5-src/test/input/in_434100.html | 13 + .../tidylib5-src/test/input/in_434940.html | 9 + .../tidylib5-src/test/input/in_435903.html | 19 + .../tidylib5-src/test/input/in_435917.html | 12 + .../tidylib5-src/test/input/in_435919.html | 8 + .../tidylib5-src/test/input/in_435920.html | 13 + .../tidylib5-src/test/input/in_435922.html | 10 + .../tidylib5-src/test/input/in_435923.html | 10 + .../tidylib5-src/test/input/in_437468.html | 9 + .../tidylib5-src/test/input/in_438650.html | 9 + .../tidylib5-src/test/input/in_438658.html | 8 + .../tidylib5-src/test/input/in_438954.html | 9 + .../tidylib5-src/test/input/in_438956.html | 8 + .../tidylib5-src/test/input/in_441508.html | 10 + .../tidylib5-src/test/input/in_441568.html | 16 + .../tidylib5-src/test/input/in_441740.xhtml | 28 + .../tidylib5-src/test/input/in_443362.html | 31 + .../tidylib5-src/test/input/in_443381.xhtml | 10 + .../tidylib5-src/test/input/in_443576.html | 12 + .../tidylib5-src/test/input/in_443678.html | 19 + .../tidylib5-src/test/input/in_444394.html | 149 + .../tidylib5-src/test/input/in_445074.html | 19 + .../tidylib5-src/test/input/in_445394.html | 8 + .../tidylib5-src/test/input/in_445557.html | 22 + .../tidylib5-src/test/input/in_446019.xhtml | 12 + .../tidylib5-src/test/input/in_449348.html | 14 + .../tidylib5-src/test/input/in_450389.html | 82 + .../tidylib5-src/test/input/in_456596.html | 8 + .../tidylib5-src/test/input/in_463066.html | 552 + .../tidylib5-src/test/input/in_467863.html | 8 + .../tidylib5-src/test/input/in_467865.html | 9 + .../tidylib5-src/test/input/in_470663.html | 37 + .../tidylib5-src/test/input/in_470688.html | 10 + .../tidylib5-src/test/input/in_471264.html | 11 + .../tidylib5-src/test/input/in_473490.html | 11 + .../tidylib5-src/test/input/in_480406.xml | 4 + .../tidylib5-src/test/input/in_480701.xml | 15 + .../tidylib5-src/test/input/in_480843.xhtml | 10 + .../tidylib5-src/test/input/in_487204.html | 12 + .../tidylib5-src/test/input/in_487283.html | 22 + .../tidylib5-src/test/input/in_500236.xml | 10 + .../tidylib5-src/test/input/in_501230.xhtml | 12 + .../tidylib5-src/test/input/in_501669.html | 15 + .../tidylib5-src/test/input/in_503436.xml | 8 + .../tidylib5-src/test/input/in_504206.html | 154 + .../tidylib5-src/test/input/in_505770.html | 34 + .../tidylib5-src/test/input/in_508936.html | 11 + .../tidylib5-src/test/input/in_511243.xhtml | 14 + .../tidylib5-src/test/input/in_511679.html | 6 + .../tidylib5-src/test/input/in_514348.html | 25 + .../tidylib5-src/test/input/in_514893.html | 19 + .../tidylib5-src/test/input/in_516370.xhtml | 13 + .../tidylib5-src/test/input/in_517550.xhtml | 12 + .../tidylib5-src/test/input/in_525081.html | 12 + .../tidylib5-src/test/input/in_531964.xhtml | 11 + .../tidylib5-src/test/input/in_532535.html | 13 + .../tidylib5-src/test/input/in_533105.html | 20 + .../tidylib5-src/test/input/in_533233.html | 23 + .../tidylib5-src/test/input/in_537604.xml | 6 + .../tidylib5-src/test/input/in_539369.html | 22 + .../tidylib5-src/test/input/in_539369a.html | 21 + .../tidylib5-src/test/input/in_540045.xhtml | 13 + .../tidylib5-src/test/input/in_540296.html | 13 + .../tidylib5-src/test/input/in_540555.html | 5 + .../tidylib5-src/test/input/in_540571.html | 15 + .../tidylib5-src/test/input/in_542029.html | 9 + .../tidylib5-src/test/input/in_543262.html | 14 + .../tidylib5-src/test/input/in_545067.html | 3 + .../tidylib5-src/test/input/in_545772.html | 14 + .../tidylib5-src/test/input/in_552861.html | 12 + .../tidylib5-src/test/input/in_553468.xhtml | 11 + .../tidylib5-src/test/input/in_566542.html | 8 + .../tidylib5-src/test/input/in_570027.html | 34 + .../tidylib5-src/test/input/in_578216.html | 27 + .../tidylib5-src/test/input/in_586555.html | 19 + .../tidylib5-src/test/input/in_586562.html | 12 + .../tidylib5-src/test/input/in_588061.html | 428 + .../tidylib5-src/test/input/in_590716.html | 802 ++ .../tidylib5-src/test/input/in_593705.html | 15 + .../tidylib5-src/test/input/in_598860.html | 9 + .../tidylib5-src/test/input/in_603128.html | 10 + .../tidylib5-src/test/input/in_609058.html | 53 + .../tidylib5-src/test/input/in_616744.xml | 12 + .../tidylib5-src/test/input/in_620531.html | 3 + .../tidylib5-src/test/input/in_629885.html | 11 + .../tidylib5-src/test/input/in_634889.html | 9 + .../tidylib5-src/test/input/in_640473.html | 9 + .../tidylib5-src/test/input/in_640474.xml | 4 + .../tidylib5-src/test/input/in_646946.xml | 6 + .../tidylib5-src/test/input/in_647255.html | Bin 0 -> 524 bytes .../tidylib5-src/test/input/in_647900.html | 35 + .../tidylib5-src/test/input/in_649812.html | Bin 0 -> 1088 bytes .../tidylib5-src/test/input/in_655338.html | 8 + .../tidylib5-src/test/input/in_656889.html | 12 + .../tidylib5-src/test/input/in_658230.html | 1144 +++ .../tidylib5-src/test/input/in_660397.html | 239 + .../tidylib5-src/test/input/in_661606.html | 15 + .../tidylib5-src/test/input/in_663548.html | 22 + .../tidylib5-src/test/input/in_671087.html | 14 + .../tidylib5-src/test/input/in_676156.html | 5 + .../tidylib5-src/test/input/in_676205.html | 10 + .../tidylib5-src/test/input/in_676205.xhtml | 13 + .../tidylib5-src/test/input/in_678268.html | 14 + .../tidylib5-src/test/input/in_679135.html | 25 + .../tidylib5-src/test/input/in_680664.xhtml | 17 + .../tidylib5-src/test/input/in_688746.html | 12 + .../tidylib5-src/test/input/in_695408.html | 14 + .../tidylib5-src/test/input/in_696799.html | 12 + .../tidylib5-src/test/input/in_706260.html | 14 + .../tidylib5-src/test/input/in_765852.html | 3 + .../tidylib5-src/test/input/in_795643-1.html | 1 + .../tidylib5-src/test/input/in_795643-2.html | 1 + .../tidylib5-src/test/input/in_836462-2.html | 21 + .../tidylib5-src/test/input/in_836462-3.html | 9 + .../tidylib5-src/test/input/in_836462.html | 21 + .../tidylib5-src/test/input/in_837023.html | 12 + .../tidylib5-src/test/input/in_978947.html | 22 + .../tidylib5-src/test/input/in_996484.html | 40 + Balthisar Tidy/tidylib5-src/test/onetest.cmd | 103 + Balthisar Tidy/tidylib5-src/test/onetesta.cmd | 68 + .../tidylib5-src/test/output/out_427820.html | 16 + .../tidylib5-src/test/output/out_427826.html | 59 + .../tidylib5-src/test/output/out_431721.html | 54 + .../tidylib5-src/test/output/out_480701.html | 14 + .../tidylib5-src/test/output/out_533233.html | 37 + .../tidylib5-src/test/output/out_540571.html | 22 + .../tidylib5-src/test/testaccess.sh | 21 + .../tidylib5-src/test/testaccessone.sh | 76 + Balthisar Tidy/tidylib5-src/test/testall.sh | 35 + .../tidylib5-src/test/testcases.txt | 227 + Balthisar Tidy/tidylib5-src/test/testone.sh | 73 + Balthisar Tidy/tidylib5-src/test/testxml.sh | 27 + Balthisar Tidy/tidylib5-src/test/xmlcases.txt | 27 + Balthisar Tidy/tidylib5-src/test/xmltest.cmd | 11 + Balthisar Tidy/tidylib5-src/tidy.css | 329 + Classes/App Pieces/AppController.h | 24 - Classes/App Pieces/AppController.m | 70 - Classes/App Pieces/BatchController.h | 32 - Classes/App Pieces/BatchController.m | 136 - Classes/App Pieces/OptionPaneController.h | 44 - Classes/App Pieces/OptionPaneController.m | 239 - Classes/App Pieces/PreferenceController.h | 36 - Classes/App Pieces/PreferenceController.m | 146 - Classes/App Pieces/TidyDocument.h | 37 - Classes/App Pieces/TidyDocument.m | 398 - Classes/JSDTidy/JSDTidy.h | 197 - Classes/JSDTidy/JSDTidy.m | 883 -- Classes/JSDTidy/JSDTidy.rtf | 107 - Classes/Support Pieces/JSDTableColumn.h | 28 - Classes/Support Pieces/JSDTableColumn.m | 121 - Classes/Support Pieces/JSDTableView.h | 22 - Classes/Support Pieces/JSDTableView.m | 42 - Classes/Support Pieces/JSDTextView.h | 90 - Classes/Support Pieces/JSDTextView.m | 504 - .../Balthisar Tidy Class Diagrams.dia | Bin 0 -> 1428 bytes .../Balthisar Tidy Operation Logic.txt | 69 + Documentation/TidyOptions.xlsx | Bin 0 -> 42127 bytes English.lproj/Batch.nib/classes.nib | 13 - English.lproj/Batch.nib/info.nib | 16 - English.lproj/Batch.nib/keyedobjects.nib | Bin 7071 -> 0 bytes English.lproj/Batch~.nib/classes.nib | 13 - English.lproj/Batch~.nib/info.nib | 16 - English.lproj/Batch~.nib/keyedobjects.nib | Bin 6821 -> 0 bytes English.lproj/InfoPlist.strings | Bin 510 -> 0 bytes English.lproj/Localizable.strings | Bin 30666 -> 0 bytes English.lproj/MainMenu.nib/classes.nib | 34 - English.lproj/MainMenu.nib/info.nib | 18 - English.lproj/MainMenu.nib/keyedobjects.nib | Bin 14121 -> 0 bytes English.lproj/OptionPane.nib/classes.nib | 26 - English.lproj/OptionPane.nib/info.nib | 21 - English.lproj/OptionPane.nib/keyedobjects.nib | Bin 5484 -> 0 bytes English.lproj/OptionPane~.nib/classes.nib | 25 - English.lproj/OptionPane~.nib/info.nib | 21 - .../OptionPane~.nib/keyedobjects.nib | Bin 5407 -> 0 bytes English.lproj/Preferences.nib/classes.nib | 51 - English.lproj/Preferences.nib/info.nib | 18 - .../Preferences.nib/keyedobjects.nib | Bin 10225 -> 0 bytes English.lproj/Preferences~.nib/classes.nib | 20 - English.lproj/Preferences~.nib/info.nib | 16 - .../Preferences~.nib/keyedobjects.nib | Bin 7621 -> 0 bytes English.lproj/TidyDocument.nib/classes.nib | 35 - English.lproj/TidyDocument.nib/info.nib | 18 - .../TidyDocument.nib/keyedobjects.nib | Bin 7443 -> 0 bytes English.lproj/TidyDocument~.nib/classes.nib | 35 - English.lproj/TidyDocument~.nib/info.nib | 18 - .../TidyDocument~.nib/keyedobjects.nib | Bin 7323 -> 0 bytes English.lproj/optionsInEffect.txt | 80 - English.lproj/optionsTypesExceptions.txt | 12 - Graphics, Included/iconbroom.icns | Bin 53684 -> 0 bytes Graphics, Included/iconhtm.icns | Bin 63206 -> 0 bytes Graphics, Included/iconhtml.icns | Bin 61994 -> 0 bytes Graphics, Included/iconphp.icns | Bin 61932 -> 0 bytes README.md | 90 + README.rtf | 43 - main.m | 14 - tidylib-src/console/tidy.c | 731 -- tidylib-src/include/buffio.h | 98 - tidylib-src/include/fileio.h | 38 - tidylib-src/include/tidy.h | 923 -- tidylib-src/src/alloc.c | 89 - tidylib-src/src/attrs.c | 1513 --- tidylib-src/src/buffio.c | 192 - tidylib-src/src/clean.c | 2410 ----- tidylib-src/src/clean.h | 82 - tidylib-src/src/config.c | 1554 --- tidylib-src/src/config.h | 184 - tidylib-src/src/entities.h | 26 - tidylib-src/src/fileio.c | 87 - tidylib-src/src/istack.c | 287 - tidylib-src/src/localize.c | 1232 --- tidylib-src/src/message.h | 218 - tidylib-src/src/parser.c | 3782 ------- tidylib-src/src/parser.h | 82 - tidylib-src/src/tagask.c | 274 - tidylib-src/src/tags.c | 828 -- tidylib-src/src/tidylib.c | 1459 --- tidylib-src/src/tmbstr.c | 250 - tidylib-src/src/tmbstr.h | 69 - tidylib-src/src/utf8.h | 52 - 851 files changed, 75180 insertions(+), 26327 deletions(-) delete mode 100644 Balthisar Tidy 0.60 Notes.txt rename Balthisar Tidy.plist => Balthisar Tidy Signed-Info.plist (55%) delete mode 100644 Balthisar Tidy.xcodeproj/jderry.mode1 create mode 100644 Balthisar Tidy/Balthisar Tidy-Info.plist create mode 100644 Balthisar Tidy/Balthisar Tidy-Prefix.pch create mode 100644 Balthisar Tidy/Balthisar Tidy.entitlements create mode 100755 Balthisar Tidy/Base.lproj/Batch.xib create mode 100644 Balthisar Tidy/Base.lproj/Credits.rtf create mode 100755 Balthisar Tidy/Base.lproj/Localizable.strings create mode 100755 Balthisar Tidy/Base.lproj/MainMenu.xib create mode 100755 Balthisar Tidy/Base.lproj/OptionPane.xib create mode 100755 Balthisar Tidy/Base.lproj/Preferences.xib create mode 100755 Balthisar Tidy/Base.lproj/TidyDocument.xib create mode 100644 Balthisar Tidy/Base.lproj/optionsFullCurrent.txt create mode 100755 Balthisar Tidy/Base.lproj/optionsInEffect.txt create mode 100755 Balthisar Tidy/Base.lproj/optionsTypesExceptions.txt create mode 100644 Balthisar Tidy/Classes/App Pieces/AppController.h create mode 100644 Balthisar Tidy/Classes/App Pieces/AppController.m create mode 100644 Balthisar Tidy/Classes/App Pieces/OptionPaneController.h create mode 100644 Balthisar Tidy/Classes/App Pieces/OptionPaneController.m create mode 100644 Balthisar Tidy/Classes/App Pieces/PreferenceController.h create mode 100644 Balthisar Tidy/Classes/App Pieces/PreferenceController.m create mode 100644 Balthisar Tidy/Classes/App Pieces/TidyDocument.h create mode 100644 Balthisar Tidy/Classes/App Pieces/TidyDocument.m create mode 100644 Balthisar Tidy/Classes/JSDTidy/JSDTidyDocument.h create mode 100644 Balthisar Tidy/Classes/JSDTidy/JSDTidyDocument.m create mode 100644 Balthisar Tidy/Classes/JSDTidy/JSDTidyDocument.md create mode 100644 Balthisar Tidy/Classes/Support Pieces/JSDTableColumn.h create mode 100644 Balthisar Tidy/Classes/Support Pieces/JSDTableColumn.m create mode 100644 Balthisar Tidy/Classes/Support Pieces/NSTextView+JSDExtensions.h create mode 100644 Balthisar Tidy/Classes/Support Pieces/NSTextView+JSDExtensions.m create mode 100755 Balthisar Tidy/Classes/Support Pieces/NoodleLineNumberMarker.h create mode 100755 Balthisar Tidy/Classes/Support Pieces/NoodleLineNumberMarker.m create mode 100755 Balthisar Tidy/Classes/Support Pieces/NoodleLineNumberView.h create mode 100755 Balthisar Tidy/Classes/Support Pieces/NoodleLineNumberView.m rename {Classes => Balthisar Tidy/Classes}/Support Pieces/TreeNode.h (90%) rename {Classes => Balthisar Tidy/Classes}/Support Pieces/TreeNode.m (92%) create mode 100644 Balthisar Tidy/Images.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Balthisar Tidy/Images.xcassets/AppIcon.appiconset/app_icon_0016.png create mode 100644 Balthisar Tidy/Images.xcassets/AppIcon.appiconset/app_icon_0032-1.png create mode 100644 Balthisar Tidy/Images.xcassets/AppIcon.appiconset/app_icon_0032.png create mode 100644 Balthisar Tidy/Images.xcassets/AppIcon.appiconset/app_icon_0064.png create mode 100644 Balthisar Tidy/Images.xcassets/AppIcon.appiconset/app_icon_0128.png create mode 100644 Balthisar Tidy/Images.xcassets/AppIcon.appiconset/app_icon_0256-1.png create mode 100644 Balthisar Tidy/Images.xcassets/AppIcon.appiconset/app_icon_0256.png create mode 100644 Balthisar Tidy/Images.xcassets/AppIcon.appiconset/app_icon_0512-1.png create mode 100644 Balthisar Tidy/Images.xcassets/AppIcon.appiconset/app_icon_0512.png create mode 100644 Balthisar Tidy/Images.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 Balthisar Tidy/Images.xcassets/HTML.icns create mode 100644 Balthisar Tidy/Images.xcassets/HTML.iconset/icon_128x128.png create mode 100644 Balthisar Tidy/Images.xcassets/HTML.iconset/icon_128x128@2x.png create mode 100644 Balthisar Tidy/Images.xcassets/HTML.iconset/icon_16x16.png create mode 100644 Balthisar Tidy/Images.xcassets/HTML.iconset/icon_16x16@2x.png create mode 100644 Balthisar Tidy/Images.xcassets/HTML.iconset/icon_256x256.png create mode 100644 Balthisar Tidy/Images.xcassets/HTML.iconset/icon_256x256@2x.png create mode 100644 Balthisar Tidy/Images.xcassets/HTML.iconset/icon_32x32.png create mode 100644 Balthisar Tidy/Images.xcassets/HTML.iconset/icon_32x32@2x.png create mode 100644 Balthisar Tidy/Images.xcassets/HTML.iconset/icon_512x512.png create mode 100644 Balthisar Tidy/Images.xcassets/HTML.iconset/icon_512x512@2x.png create mode 100644 Balthisar Tidy/Images.xcassets/PHP.icns create mode 100644 Balthisar Tidy/Images.xcassets/PHP.iconset/icon_128x128.png create mode 100644 Balthisar Tidy/Images.xcassets/PHP.iconset/icon_128x128@2x.png create mode 100644 Balthisar Tidy/Images.xcassets/PHP.iconset/icon_16x16.png create mode 100644 Balthisar Tidy/Images.xcassets/PHP.iconset/icon_16x16@2x.png create mode 100644 Balthisar Tidy/Images.xcassets/PHP.iconset/icon_256x256.png create mode 100644 Balthisar Tidy/Images.xcassets/PHP.iconset/icon_256x256@2x.png create mode 100644 Balthisar Tidy/Images.xcassets/PHP.iconset/icon_32x32.png create mode 100644 Balthisar Tidy/Images.xcassets/PHP.iconset/icon_32x32@2x.png create mode 100644 Balthisar Tidy/Images.xcassets/PHP.iconset/icon_512x512.png create mode 100644 Balthisar Tidy/Images.xcassets/PHP.iconset/icon_512x512@2x.png create mode 100644 Balthisar Tidy/main.m create mode 100755 Balthisar Tidy/tidylib5-src/Makefile create mode 100755 Balthisar Tidy/tidylib5-src/README.html create mode 100755 Balthisar Tidy/tidylib5-src/README.md rename {tidylib-src => Balthisar Tidy/tidylib5-src}/console/tab2space.c (93%) mode change 100644 => 100755 create mode 100755 Balthisar Tidy/tidylib5-src/console/tidy.c create mode 100755 Balthisar Tidy/tidylib5-src/experimental/TidyNodeIter.c create mode 100755 Balthisar Tidy/tidylib5-src/experimental/TidyNodeIter.h create mode 100755 Balthisar Tidy/tidylib5-src/experimental/httpio.c create mode 100755 Balthisar Tidy/tidylib5-src/experimental/httpio.h create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/annotated.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/annotated.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/bc_s.png create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/bdwn.png create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/buffio_8h.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/buffio_8h.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/buffio_8h_source.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/classes.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/closed.png create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/deprecated.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/doxygen.css create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/doxygen.png create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/files.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/files.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/ftv2blank.png create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/ftv2doc.png create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/ftv2folderclosed.png create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/ftv2folderopen.png create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/ftv2lastnode.png create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/ftv2link.png create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/ftv2mlastnode.png create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/ftv2mnode.png create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/ftv2node.png create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/ftv2plastnode.png create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/ftv2pnode.png create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/ftv2splitbar.png create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/ftv2vertline.png create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/functions.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/functions_func.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/functions_vars.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/globals.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/globals_defs.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/globals_func.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/globals_type.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__AttrGet.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__AttrGet.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__AttrGetAttributeName.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__AttrGetAttributeName.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__AttrIsAttributeName.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__AttrIsAttributeName.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__Attribute.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__Attribute.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__Basic.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__Basic.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__Clean.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__Clean.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__Configuration.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__Configuration.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__IO.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__IO.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__Memory.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__Memory.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__NodeAsk.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__NodeAsk.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__NodeIsElementName.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__NodeIsElementName.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__Opaque.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__Opaque.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__Parse.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__Parse.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__Save.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__Save.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__Tree.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/group__Tree.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/index.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/jquery.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/modules.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/modules.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/nav_f.png create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/nav_h.png create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/navtree.css create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/navtree.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/navtreeindex.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/open.png create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/pages.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/platform_8h_source.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/resize.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/structTidyAttr.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/structTidyDoc.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/structTidyNode.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/structTidyOption.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/struct__TidyAllocator.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/struct__TidyAllocator.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/struct__TidyAllocatorVtbl.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/struct__TidyAllocatorVtbl.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/struct__TidyBuffer.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/struct__TidyBuffer.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/struct__TidyInputSource.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/struct__TidyInputSource.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/struct__TidyOutputSink.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/struct__TidyOutputSink.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/tab_a.png create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/tab_b.png create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/tab_h.png create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/tab_s.png create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/tabs.css create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/tidy_8h.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/tidy_8h.js create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/tidy_8h_source.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/api/tidyenum_8h_source.html create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/doxygen.cfg create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/quickref-html.xsl create mode 100755 Balthisar Tidy/tidylib5-src/htmldoc/tidy1.xsl create mode 100755 Balthisar Tidy/tidylib5-src/include/buffio.h rename {tidylib-src => Balthisar Tidy/tidylib5-src}/include/platform.h (71%) mode change 100644 => 100755 create mode 100755 Balthisar Tidy/tidylib5-src/include/tidy.h rename {tidylib-src => Balthisar Tidy/tidylib5-src}/include/tidyenum.h (68%) mode change 100644 => 100755 create mode 100755 Balthisar Tidy/tidylib5-src/index.html create mode 100755 Balthisar Tidy/tidylib5-src/license.html create mode 100755 Balthisar Tidy/tidylib5-src/quickref.html rename {tidylib-src => Balthisar Tidy/tidylib5-src}/src/access.c (63%) mode change 100644 => 100755 rename {tidylib-src => Balthisar Tidy/tidylib5-src}/src/access.h (95%) mode change 100644 => 100755 create mode 100755 Balthisar Tidy/tidylib5-src/src/alloc.c rename {tidylib-src => Balthisar Tidy/tidylib5-src}/src/attrask.c (50%) mode change 100644 => 100755 create mode 100755 Balthisar Tidy/tidylib5-src/src/attrdict.c create mode 100755 Balthisar Tidy/tidylib5-src/src/attrdict.h rename {tidylib-src => Balthisar Tidy/tidylib5-src}/src/attrget.c (54%) mode change 100644 => 100755 create mode 100755 Balthisar Tidy/tidylib5-src/src/attrs.c rename {tidylib-src => Balthisar Tidy/tidylib5-src}/src/attrs.h (58%) mode change 100644 => 100755 create mode 100755 Balthisar Tidy/tidylib5-src/src/buffio.c create mode 100755 Balthisar Tidy/tidylib5-src/src/charsets.c create mode 100755 Balthisar Tidy/tidylib5-src/src/charsets.h create mode 100755 Balthisar Tidy/tidylib5-src/src/clean.c create mode 100755 Balthisar Tidy/tidylib5-src/src/clean.h create mode 100755 Balthisar Tidy/tidylib5-src/src/config.c create mode 100755 Balthisar Tidy/tidylib5-src/src/config.h rename {tidylib-src => Balthisar Tidy/tidylib5-src}/src/entities.c (89%) mode change 100644 => 100755 create mode 100755 Balthisar Tidy/tidylib5-src/src/entities.h create mode 100755 Balthisar Tidy/tidylib5-src/src/fileio.c create mode 100755 Balthisar Tidy/tidylib5-src/src/fileio.h rename {tidylib-src => Balthisar Tidy/tidylib5-src}/src/forward.h (54%) mode change 100644 => 100755 create mode 100755 Balthisar Tidy/tidylib5-src/src/gdoc.c create mode 100755 Balthisar Tidy/tidylib5-src/src/gdoc.h create mode 100755 Balthisar Tidy/tidylib5-src/src/iconvtc.c create mode 100755 Balthisar Tidy/tidylib5-src/src/iconvtc.h create mode 100755 Balthisar Tidy/tidylib5-src/src/istack.c rename {tidylib-src => Balthisar Tidy/tidylib5-src}/src/lexer.c (51%) mode change 100644 => 100755 rename {tidylib-src => Balthisar Tidy/tidylib5-src}/src/lexer.h (52%) mode change 100644 => 100755 create mode 100755 Balthisar Tidy/tidylib5-src/src/localize.c create mode 100755 Balthisar Tidy/tidylib5-src/src/mappedio.c create mode 100755 Balthisar Tidy/tidylib5-src/src/mappedio.h create mode 100755 Balthisar Tidy/tidylib5-src/src/message.h create mode 100755 Balthisar Tidy/tidylib5-src/src/parser.c create mode 100755 Balthisar Tidy/tidylib5-src/src/parser.h rename {tidylib-src => Balthisar Tidy/tidylib5-src}/src/pprint.c (55%) mode change 100644 => 100755 rename {tidylib-src => Balthisar Tidy/tidylib5-src}/src/pprint.h (57%) mode change 100644 => 100755 rename {tidylib-src => Balthisar Tidy/tidylib5-src}/src/streamio.c (64%) mode change 100644 => 100755 rename {tidylib-src => Balthisar Tidy/tidylib5-src}/src/streamio.h (52%) mode change 100644 => 100755 create mode 100755 Balthisar Tidy/tidylib5-src/src/tagask.c create mode 100755 Balthisar Tidy/tidylib5-src/src/tags.c rename {tidylib-src => Balthisar Tidy/tidylib5-src}/src/tags.h (71%) mode change 100644 => 100755 rename {tidylib-src => Balthisar Tidy/tidylib5-src}/src/tidy-int.h (62%) mode change 100644 => 100755 create mode 100755 Balthisar Tidy/tidylib5-src/src/tidylib.c create mode 100755 Balthisar Tidy/tidylib5-src/src/tmbstr.c create mode 100755 Balthisar Tidy/tidylib5-src/src/tmbstr.h rename {tidylib-src => Balthisar Tidy/tidylib5-src}/src/utf8.c (90%) mode change 100644 => 100755 create mode 100755 Balthisar Tidy/tidylib5-src/src/utf8.h create mode 100755 Balthisar Tidy/tidylib5-src/src/version.h create mode 100755 Balthisar Tidy/tidylib5-src/src/win32tc.c create mode 100755 Balthisar Tidy/tidylib5-src/src/win32tc.h create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/1-1-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/1-1-1-10.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/1-1-1-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/1-1-1-3.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/1-1-1-4.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/1-1-10-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/1-1-12-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/1-1-2-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/1-1-2-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/1-1-2-3.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/1-1-3-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/1-1-4-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/1-1-5-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/1-1-6-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/1-1-6-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/1-1-6-3.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/1-1-6-4.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/1-1-6-5.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/1-1-6-6.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/1-1-8-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/1-1-9-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/1-2-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/1-4-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/1-5-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/10-1-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/10-1-1-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/11-2-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/11-2-1-10.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/11-2-1-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/11-2-1-3.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/11-2-1-4.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/11-2-1-5.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/11-2-1-6.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/11-2-1-7.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/11-2-1-8.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/11-2-1-9.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/12-1-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/12-1-1-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/12-1-1-3.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/12-4-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/12-4-1-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/12-4-1-3.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/13-1-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/13-1-1-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/13-1-1-3.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/13-1-1-4.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/13-10-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/13-2-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/13-2-1-3.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/2-1-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/2-1-1-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/2-1-1-3.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/2-1-1-4.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/2-1-1-5.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/2-2-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/2-2-1-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/2-2-1-3.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/2-2-1-4.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/3-2-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/3-3-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/3-5-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/3-5-2-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/3-5-2-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/3-5-2-3.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/3-6-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/3-6-1-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/3-6-1-4.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/4-1-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/4-3-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/4-3-1-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/5-1-2-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/5-1-2-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/5-1-2-3.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/5-2-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/5-2-1-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/5-3-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/5-4-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/5-5-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/5-5-1-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/5-5-1-3.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/5-5-1-6.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/5-5-2-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/5-6-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/5-6-1-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/5-6-1-3.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/6-1-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/6-1-1-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/6-1-1-3.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/6-2-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/6-2-2-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/6-2-2-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/6-2-2-3.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/6-3-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/6-3-1-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/6-3-1-3.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/6-3-1-4.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/6-5-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/6-5-1-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/6-5-1-3.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/6-5-1-4.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/7-1-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/7-1-1-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/7-1-1-3.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/7-1-1-4.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/7-1-1-5.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/7-2-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/7-4-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/7-5-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/8-1-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/8-1-1-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/8-1-1-3.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/8-1-1-4.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/9-1-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/9-3-1-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/9-3-1-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/9-3-1-3.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/9-3-1-4.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/9-3-1-5.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/9-3-1-6.html create mode 100755 Balthisar Tidy/tidylib5-src/test/accessTest/cfg_default.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/accesscases.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/acctest.cmd create mode 100755 Balthisar Tidy/tidylib5-src/test/alltest.cmd create mode 100755 Balthisar Tidy/tidylib5-src/test/alltest1.cmd create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1003994.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1004008.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1004512.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1030944.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1055398.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1067112.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1068087.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1078345.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1207443.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1210752.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1241723.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1266647.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1286278.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1359292.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1365706.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1407266.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1408034.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1410061-1.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1410061-2.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1410061.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1423252.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1448730.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1452744.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1510101.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1573338.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1590220-1.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1590220-2.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1652223.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1720953.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1986717-1.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1986717-2.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_1986717-3.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_2046048.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_2085175.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_2705873-1.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_2705873-2.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_2709860.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_427812.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_427821.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_427825.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_427826.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_427835.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_427837.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_427839.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_427845.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_431716.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_431721.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_431736.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_431889.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_431895.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_431956.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_431958.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_432677.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_433012.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_433604.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_433607.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_433670.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_433856.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_434100.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_434940.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_438954.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_444394.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_449348.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_463066.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_470663.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_473490.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_480406.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_480701.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_480843.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_500236.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_503436.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_508936.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_511243.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_514348.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_517550.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_531964.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_532535.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_533233.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_537604.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_540045.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_540571.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_542029.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_543262.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_545772.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_570027.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_578216.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_586555.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_590716.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_616744.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_634889.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_640473.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_640474.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_646946.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_647255.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_647900.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_649812.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_656889.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_658230.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_660397.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_661606.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_676156.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_678268.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_688746.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_695408.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_795643-1.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_795643-2.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/cfg_default.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1002509.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1003361.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1003994.xml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1004008.xml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1004051.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1004512.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1014993.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1015959.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1027888.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1030944.xml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1050673.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1052758.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1053626.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1055304.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1055398.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1056023.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1056910.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1062345.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1062511.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1062661.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1063256.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1067112.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1068087.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1069549.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1069553.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1072528.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1078345.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1079820.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1086083.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1090318.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1098012.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1107622.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1115094.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1117013.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1145571.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1145572.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1168193.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1183751.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1198501.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1207443.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1210752.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1231279.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1235296.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1241723.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1263391.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1266647.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1282835.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1286029.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1286278.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1316258.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1316307-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1316307.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1326520.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1331849.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1333579.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1359292.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1365706.xml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1398397.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1407266.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1408034.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1410061-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1410061-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1410061.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1415137.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1423252.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1426419.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1436578.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1445570.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1448730.xml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1452744.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1503897.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1510101.xml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1573338.xml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1586158.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1590220-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1590220-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1603538-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1603538-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1610888-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1610888-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1632218.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1632470.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1638062.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1652223.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1674502.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1707836.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1715153.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1720953.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1773932.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1986717-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1986717-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_1986717-3.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_2046048.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_2085175.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_2359929.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_2705873-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_2705873-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_2709860.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_426885.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427633.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427662.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427664.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427671.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427672.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427675.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427676.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427677.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427810.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427811.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427812.xhtml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427813.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427816.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427818.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427819.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427820.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427821.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427822.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427823.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427825.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427826.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427827.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427830.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427833.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427834.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427835.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427836.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427837.xml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427838.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427839.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427840.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427841.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427845.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_427846.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_431716.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_431721.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_431731.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_431736.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_431739.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_431874.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_431889.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_431895.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_431898.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_431956.xml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_431958.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_431964.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_431965.xhtml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_432677.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_433012.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_433021.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_433040.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_433359.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_433360.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_433604.xml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_433607.xml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_433656.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_433666.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_433670.xml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_433672.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_433856.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_434047.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_434100.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_434940.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_435903.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_435917.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_435919.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_435920.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_435922.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_435923.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_437468.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_438650.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_438658.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_438954.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_438956.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_441508.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_441568.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_441740.xhtml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_443362.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_443381.xhtml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_443576.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_443678.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_444394.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_445074.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_445394.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_445557.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_446019.xhtml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_449348.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_450389.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_456596.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_463066.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_467863.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_467865.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_470663.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_470688.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_471264.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_473490.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_480406.xml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_480701.xml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_480843.xhtml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_487204.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_487283.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_500236.xml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_501230.xhtml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_501669.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_503436.xml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_504206.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_505770.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_508936.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_511243.xhtml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_511679.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_514348.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_514893.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_516370.xhtml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_517550.xhtml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_525081.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_531964.xhtml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_532535.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_533105.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_533233.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_537604.xml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_539369.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_539369a.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_540045.xhtml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_540296.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_540555.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_540571.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_542029.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_543262.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_545067.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_545772.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_552861.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_553468.xhtml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_566542.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_570027.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_578216.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_586555.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_586562.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_588061.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_590716.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_593705.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_598860.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_603128.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_609058.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_616744.xml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_620531.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_629885.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_634889.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_640473.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_640474.xml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_646946.xml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_647255.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_647900.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_649812.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_655338.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_656889.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_658230.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_660397.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_661606.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_663548.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_671087.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_676156.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_676205.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_676205.xhtml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_678268.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_679135.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_680664.xhtml create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_688746.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_695408.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_696799.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_706260.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_765852.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_795643-1.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_795643-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_836462-2.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_836462-3.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_836462.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_837023.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_978947.html create mode 100755 Balthisar Tidy/tidylib5-src/test/input/in_996484.html create mode 100755 Balthisar Tidy/tidylib5-src/test/onetest.cmd create mode 100755 Balthisar Tidy/tidylib5-src/test/onetesta.cmd create mode 100755 Balthisar Tidy/tidylib5-src/test/output/out_427820.html create mode 100755 Balthisar Tidy/tidylib5-src/test/output/out_427826.html create mode 100755 Balthisar Tidy/tidylib5-src/test/output/out_431721.html create mode 100755 Balthisar Tidy/tidylib5-src/test/output/out_480701.html create mode 100755 Balthisar Tidy/tidylib5-src/test/output/out_533233.html create mode 100755 Balthisar Tidy/tidylib5-src/test/output/out_540571.html create mode 100755 Balthisar Tidy/tidylib5-src/test/testaccess.sh create mode 100755 Balthisar Tidy/tidylib5-src/test/testaccessone.sh create mode 100755 Balthisar Tidy/tidylib5-src/test/testall.sh create mode 100755 Balthisar Tidy/tidylib5-src/test/testcases.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/testone.sh create mode 100755 Balthisar Tidy/tidylib5-src/test/testxml.sh create mode 100755 Balthisar Tidy/tidylib5-src/test/xmlcases.txt create mode 100755 Balthisar Tidy/tidylib5-src/test/xmltest.cmd create mode 100755 Balthisar Tidy/tidylib5-src/tidy.css delete mode 100644 Classes/App Pieces/AppController.h delete mode 100644 Classes/App Pieces/AppController.m delete mode 100644 Classes/App Pieces/BatchController.h delete mode 100644 Classes/App Pieces/BatchController.m delete mode 100644 Classes/App Pieces/OptionPaneController.h delete mode 100644 Classes/App Pieces/OptionPaneController.m delete mode 100644 Classes/App Pieces/PreferenceController.h delete mode 100644 Classes/App Pieces/PreferenceController.m delete mode 100644 Classes/App Pieces/TidyDocument.h delete mode 100644 Classes/App Pieces/TidyDocument.m delete mode 100644 Classes/JSDTidy/JSDTidy.h delete mode 100644 Classes/JSDTidy/JSDTidy.m delete mode 100644 Classes/JSDTidy/JSDTidy.rtf delete mode 100644 Classes/Support Pieces/JSDTableColumn.h delete mode 100644 Classes/Support Pieces/JSDTableColumn.m delete mode 100644 Classes/Support Pieces/JSDTableView.h delete mode 100644 Classes/Support Pieces/JSDTableView.m delete mode 100644 Classes/Support Pieces/JSDTextView.h delete mode 100644 Classes/Support Pieces/JSDTextView.m create mode 100644 Documentation/Balthisar Tidy Class Diagrams.dia create mode 100644 Documentation/Balthisar Tidy Operation Logic.txt create mode 100644 Documentation/TidyOptions.xlsx delete mode 100644 English.lproj/Batch.nib/classes.nib delete mode 100644 English.lproj/Batch.nib/info.nib delete mode 100644 English.lproj/Batch.nib/keyedobjects.nib delete mode 100644 English.lproj/Batch~.nib/classes.nib delete mode 100644 English.lproj/Batch~.nib/info.nib delete mode 100644 English.lproj/Batch~.nib/keyedobjects.nib delete mode 100644 English.lproj/InfoPlist.strings delete mode 100644 English.lproj/Localizable.strings delete mode 100644 English.lproj/MainMenu.nib/classes.nib delete mode 100644 English.lproj/MainMenu.nib/info.nib delete mode 100644 English.lproj/MainMenu.nib/keyedobjects.nib delete mode 100644 English.lproj/OptionPane.nib/classes.nib delete mode 100644 English.lproj/OptionPane.nib/info.nib delete mode 100644 English.lproj/OptionPane.nib/keyedobjects.nib delete mode 100644 English.lproj/OptionPane~.nib/classes.nib delete mode 100644 English.lproj/OptionPane~.nib/info.nib delete mode 100644 English.lproj/OptionPane~.nib/keyedobjects.nib delete mode 100644 English.lproj/Preferences.nib/classes.nib delete mode 100644 English.lproj/Preferences.nib/info.nib delete mode 100644 English.lproj/Preferences.nib/keyedobjects.nib delete mode 100644 English.lproj/Preferences~.nib/classes.nib delete mode 100644 English.lproj/Preferences~.nib/info.nib delete mode 100644 English.lproj/Preferences~.nib/keyedobjects.nib delete mode 100644 English.lproj/TidyDocument.nib/classes.nib delete mode 100644 English.lproj/TidyDocument.nib/info.nib delete mode 100644 English.lproj/TidyDocument.nib/keyedobjects.nib delete mode 100644 English.lproj/TidyDocument~.nib/classes.nib delete mode 100644 English.lproj/TidyDocument~.nib/info.nib delete mode 100644 English.lproj/TidyDocument~.nib/keyedobjects.nib delete mode 100644 English.lproj/optionsInEffect.txt delete mode 100644 English.lproj/optionsTypesExceptions.txt delete mode 100644 Graphics, Included/iconbroom.icns delete mode 100644 Graphics, Included/iconhtm.icns delete mode 100644 Graphics, Included/iconhtml.icns delete mode 100644 Graphics, Included/iconphp.icns create mode 100644 README.md delete mode 100644 README.rtf delete mode 100644 main.m delete mode 100644 tidylib-src/console/tidy.c delete mode 100644 tidylib-src/include/buffio.h delete mode 100644 tidylib-src/include/fileio.h delete mode 100644 tidylib-src/include/tidy.h delete mode 100644 tidylib-src/src/alloc.c delete mode 100644 tidylib-src/src/attrs.c delete mode 100644 tidylib-src/src/buffio.c delete mode 100644 tidylib-src/src/clean.c delete mode 100644 tidylib-src/src/clean.h delete mode 100644 tidylib-src/src/config.c delete mode 100644 tidylib-src/src/config.h delete mode 100644 tidylib-src/src/entities.h delete mode 100644 tidylib-src/src/fileio.c delete mode 100644 tidylib-src/src/istack.c delete mode 100644 tidylib-src/src/localize.c delete mode 100644 tidylib-src/src/message.h delete mode 100644 tidylib-src/src/parser.c delete mode 100644 tidylib-src/src/parser.h delete mode 100644 tidylib-src/src/tagask.c delete mode 100644 tidylib-src/src/tags.c delete mode 100644 tidylib-src/src/tidylib.c delete mode 100644 tidylib-src/src/tmbstr.c delete mode 100644 tidylib-src/src/tmbstr.h delete mode 100644 tidylib-src/src/utf8.h diff --git a/Balthisar Tidy 0.60 Notes.txt b/Balthisar Tidy 0.60 Notes.txt deleted file mode 100644 index d3689f3a..00000000 --- a/Balthisar Tidy 0.60 Notes.txt +++ /dev/null @@ -1,39 +0,0 @@ -Version 0.60 - Universal Binary -19-November-2007 - - -CHANGES: --------- -* I've hidden the Batch Mode window, since I've not implemented it yet anyway. -* I've added a text to the Batch button in the preferences window to indicate - that it doesn't really do anything yet. -* Upgrade the project file from "Project Builder" to "XCode 3.0." Yeah, - Balthisar Tidy really *is* that old, and yeah, I really *have* neglected it - for that much time. -* Compiled as a Universal Binary. - - -KNOWN ISSUES: -------------- -* I've not tested this extensively, so for guaranteed quality, stick with - the previous version 0.50. It's PPC only, but c'mon, it's small and runs - at virtually native speeds being that it's a pure Cocoa application. -* For some reason, typing into a blank source box will crash Balthisar Tidy. - You can still paste text into it, though. Honestly, because I've not gotten - batch mode working or written a service for Balthisar Tidy, pasting in the - old and copying the Tidy'd version is my personal preference. I'll consider - fixing this as time permits, because it's nice being able to type a single - word and having a full formed document appear! -* For some reason, Save As… for newly created documents (such as those pasted- - in) doesn't seem to do anything. If you open a document into Tidy, though, - it will Save As… okay. -* For some reason, Balthisar Tidy doesn't respect UTF-8 and maybe other text - encodings when opening a file. It does swell when you paste into the Tidy - source box, though. Honestly I don't know if this is new bad behavior or - if it's like this in version 0.50. I've learned a lot about file encodings - since then, so I'll get around to fixing it. In any case, if you use numeric - entities for all but the 7-bit ASCII set, you won't be affected. Personally, - I like UTF-8's ability to use my native Mac character set, and be assured that - the characters work on all platforms' browsers. - - diff --git a/Balthisar Tidy.plist b/Balthisar Tidy Signed-Info.plist similarity index 55% rename from Balthisar Tidy.plist rename to Balthisar Tidy Signed-Info.plist index 6d2a8f45..f6351a40 100644 --- a/Balthisar Tidy.plist +++ b/Balthisar Tidy Signed-Info.plist @@ -3,44 +3,31 @@ CFBundleDevelopmentRegion - English + en CFBundleDocumentTypes CFBundleTypeExtensions html - HTML + htm CFBundleTypeIconFile - iconhtml - CFBundleTypeName - HTML File - CFBundleTypeOSTypes + HTML + CFBundleTypeMIMETypes - TEXT + text/html + CFBundleTypeName + HTML FIle CFBundleTypeRole Editor - NSDocumentClass - TidyDocument - - - CFBundleTypeExtensions + LSItemContentTypes - htm - HTM + public.html - CFBundleTypeIconFile - iconhtm - CFBundleTypeName - HTM File (DOS extension) - CFBundleTypeOSTypes - - TEXT - - CFBundleTypeRole - Editor + LSTypeIsPackage + 0 NSDocumentClass TidyDocument @@ -48,46 +35,51 @@ CFBundleTypeExtensions php - PHP CFBundleTypeIconFile - iconphp - CFBundleTypeName - PHP File (PHP HTML File) - CFBundleTypeOSTypes + PHP + CFBundleTypeMIMETypes - TEXT + text/html + CFBundleTypeName + PHP File CFBundleTypeRole Editor + LSItemContentTypes + + public.php-script + + LSTypeIsPackage + 0 NSDocumentClass TidyDocument CFBundleExecutable - Balthisar Tidy - CFBundleGetInfoString - Balthisar Tidy - CFBundleHelpBookFolder - Balthisar Tidy Help - CFBundleHelpBookName - Balthisar Tidy Help + ${EXECUTABLE_NAME} CFBundleIconFile - iconbroom + CFBundleIdentifier - com.balthisar.balthisartidy + com.balthisar.${PRODUCT_NAME:rfc1034identifier} CFBundleInfoDictionaryVersion 6.0 CFBundleName - Balthisar Tidy + ${PRODUCT_NAME} CFBundlePackageType APPL CFBundleShortVersionString - 0.6 + 0.7 CFBundleSignature - WWS2 + ???? CFBundleVersion - 0.6 + 0.7.249 + LSApplicationCategoryType + public.app-category.developer-tools + LSMinimumSystemVersion + ${MACOSX_DEPLOYMENT_TARGET} + NSHumanReadableCopyright + Copyright © 2013 James S. Derry. All rights reserved. NSMainNibFile MainMenu NSPrincipalClass diff --git a/Balthisar Tidy.xcodeproj/jderry.mode1 b/Balthisar Tidy.xcodeproj/jderry.mode1 deleted file mode 100644 index 19e430b1..00000000 --- a/Balthisar Tidy.xcodeproj/jderry.mode1 +++ /dev/null @@ -1,1324 +0,0 @@ - - - - - ActivePerspectiveName - Project - AllowedModules - - - BundleLoadPath - - MaxInstances - n - Module - PBXSmartGroupTreeModule - Name - Groups and Files Outline View - - - BundleLoadPath - - MaxInstances - n - Module - PBXNavigatorGroup - Name - Editor - - - BundleLoadPath - - MaxInstances - n - Module - XCTaskListModule - Name - Task List - - - BundleLoadPath - - MaxInstances - n - Module - XCDetailModule - Name - File and Smart Group Detail Viewer - - - BundleLoadPath - - MaxInstances - 1 - Module - PBXBuildResultsModule - Name - Detailed Build Results Viewer - - - BundleLoadPath - - MaxInstances - 1 - Module - PBXProjectFindModule - Name - Project Batch Find Tool - - - BundleLoadPath - - MaxInstances - n - Module - PBXRunSessionModule - Name - Run Log - - - BundleLoadPath - - MaxInstances - n - Module - PBXBookmarksModule - Name - Bookmarks Tool - - - BundleLoadPath - - MaxInstances - n - Module - PBXClassBrowserModule - Name - Class Browser - - - BundleLoadPath - - MaxInstances - n - Module - PBXCVSModule - Name - Source Code Control Tool - - - BundleLoadPath - - MaxInstances - n - Module - PBXDebugBreakpointsModule - Name - Debug Breakpoints Tool - - - BundleLoadPath - - MaxInstances - n - Module - XCDockableInspector - Name - Inspector - - - BundleLoadPath - - MaxInstances - n - Module - PBXOpenQuicklyModule - Name - Open Quickly Tool - - - BundleLoadPath - - MaxInstances - 1 - Module - PBXDebugSessionModule - Name - Debugger - - - BundleLoadPath - - MaxInstances - 1 - Module - PBXDebugCLIModule - Name - Debug Console - - - Description - DefaultDescriptionKey - DockingSystemVisible - - Extension - mode1 - FavBarConfig - - PBXProjectModuleGUID - D012CD3D0CF2403E00194990 - XCBarModuleItemNames - - XCBarModuleItems - - - FirstTimeWindowDisplayed - - Identifier - com.apple.perspectives.project.mode1 - MajorVersion - 31 - MinorVersion - 1 - Name - Default - Notifications - - OpenEditors - - PerspectiveWidths - - -1 - -1 - - Perspectives - - - ChosenToolbarItems - - active-target-popup - active-buildstyle-popup - action - NSToolbarFlexibleSpaceItem - buildOrClean - build-and-runOrDebug - com.apple.ide.PBXToolbarStopButton - get-info - toggle-editor - NSToolbarFlexibleSpaceItem - com.apple.pbx.toolbar.searchfield - - ControllerClassBaseName - - IconName - WindowOfProjectWithEditor - Identifier - perspective.project - IsVertical - - Layout - - - BecomeActive - - ContentConfiguration - - PBXBottomSmartGroupGIDs - - 1C37FBAC04509CD000000102 - 1C37FAAC04509CD000000102 - 1C08E77C0454961000C914BD - 1C37FABC05509CD000000102 - 1C37FABC05539CD112110102 - E2644B35053B69B200211256 - 1C37FABC04509CD000100104 - 1CC0EA4004350EF90044410B - 1CC0EA4004350EF90041110B - - PBXProjectModuleGUID - 1CE0B1FE06471DED0097A5F4 - PBXProjectModuleLabel - Files - PBXProjectStructureProvided - yes - PBXSmartGroupTreeModuleColumnData - - PBXSmartGroupTreeModuleColumnWidthsKey - - 186 - - PBXSmartGroupTreeModuleColumnsKey_v4 - - MainColumn - - - PBXSmartGroupTreeModuleOutlineStateKey_v7 - - PBXSmartGroupTreeModuleOutlineStateExpansionKey - - 2A37F4AAFDCFA73011CA2CEA - 1C37FABC05509CD000000102 - - PBXSmartGroupTreeModuleOutlineStateSelectionKey - - - 0 - - - PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 0}, {186, 794}} - - PBXTopSmartGroupGIDs - - XCIncludePerspectivesSwitch - - XCSharingToken - com.apple.Xcode.GFSharingToken - - GeometryConfiguration - - Frame - {{0, 0}, {203, 812}} - GroupTreeTableConfiguration - - MainColumn - 186 - - RubberWindowFrame - 58 257 1088 853 0 0 1920 1178 - - Module - PBXSmartGroupTreeModule - Proportion - 203pt - - - Dock - - - ContentConfiguration - - PBXProjectModuleGUID - 1CE0B20306471E060097A5F4 - PBXProjectModuleLabel - MyNewFile14.java - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 1CE0B20406471E060097A5F4 - PBXProjectModuleLabel - MyNewFile14.java - - SplitCount - 1 - - StatusBarVisibility - - - GeometryConfiguration - - Frame - {{0, 0}, {880, 0}} - RubberWindowFrame - 58 257 1088 853 0 0 1920 1178 - - Module - PBXNavigatorGroup - Proportion - 0pt - - - ContentConfiguration - - PBXProjectModuleGUID - 1CE0B20506471E060097A5F4 - PBXProjectModuleLabel - Detail - - GeometryConfiguration - - Frame - {{0, 5}, {880, 807}} - RubberWindowFrame - 58 257 1088 853 0 0 1920 1178 - - Module - XCDetailModule - Proportion - 807pt - - - Proportion - 880pt - - - Name - Project - ServiceClasses - - XCModuleDock - PBXSmartGroupTreeModule - XCModuleDock - PBXNavigatorGroup - XCDetailModule - - TableOfContents - - D012CD3B0CF2403E00194990 - 1CE0B1FE06471DED0097A5F4 - D012CD3C0CF2403E00194990 - 1CE0B20306471E060097A5F4 - 1CE0B20506471E060097A5F4 - - ToolbarConfiguration - xcode.toolbar.config.default - - - ControllerClassBaseName - - IconName - WindowOfProject - Identifier - perspective.morph - IsVertical - 0 - Layout - - - BecomeActive - 1 - ContentConfiguration - - PBXBottomSmartGroupGIDs - - 1C37FBAC04509CD000000102 - 1C37FAAC04509CD000000102 - 1C08E77C0454961000C914BD - 1C37FABC05509CD000000102 - 1C37FABC05539CD112110102 - E2644B35053B69B200211256 - 1C37FABC04509CD000100104 - 1CC0EA4004350EF90044410B - 1CC0EA4004350EF90041110B - - PBXProjectModuleGUID - 11E0B1FE06471DED0097A5F4 - PBXProjectModuleLabel - Files - PBXProjectStructureProvided - yes - PBXSmartGroupTreeModuleColumnData - - PBXSmartGroupTreeModuleColumnWidthsKey - - 186 - - PBXSmartGroupTreeModuleColumnsKey_v4 - - MainColumn - - - PBXSmartGroupTreeModuleOutlineStateKey_v7 - - PBXSmartGroupTreeModuleOutlineStateExpansionKey - - 29B97314FDCFA39411CA2CEA - 1C37FABC05509CD000000102 - - PBXSmartGroupTreeModuleOutlineStateSelectionKey - - - 0 - - - PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 0}, {186, 337}} - - PBXTopSmartGroupGIDs - - XCIncludePerspectivesSwitch - 1 - XCSharingToken - com.apple.Xcode.GFSharingToken - - GeometryConfiguration - - Frame - {{0, 0}, {203, 355}} - GroupTreeTableConfiguration - - MainColumn - 186 - - RubberWindowFrame - 373 269 690 397 0 0 1440 878 - - Module - PBXSmartGroupTreeModule - Proportion - 100% - - - Name - Morph - PreferredWidth - 300 - ServiceClasses - - XCModuleDock - PBXSmartGroupTreeModule - - TableOfContents - - 11E0B1FE06471DED0097A5F4 - - ToolbarConfiguration - xcode.toolbar.config.default.short - - - PerspectivesBarVisible - - ShelfIsVisible - - SourceDescription - file at '/Xcode2.5/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec' - StatusbarIsVisible - - TimeStamp - 0.0 - ToolbarDisplayMode - 1 - ToolbarIsVisible - - ToolbarSizeMode - 1 - Type - Perspectives - UpdateMessage - The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'? - WindowJustification - 5 - WindowOrderList - - /Users/jderry/_Documents/Development/Balthisar Tidy 0.5/Balthisar Tidy 0.5 XCode2.5/Balthisar Tidy.xcodeproj - - WindowString - 58 257 1088 853 0 0 1920 1178 - WindowTools - - - Identifier - windowTool.build - Layout - - - Dock - - - ContentConfiguration - - PBXProjectModuleGUID - 1CD0528F0623707200166675 - PBXProjectModuleLabel - <No Editor> - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 1CD052900623707200166675 - - SplitCount - 1 - - StatusBarVisibility - 1 - - GeometryConfiguration - - Frame - {{0, 0}, {500, 215}} - RubberWindowFrame - 192 257 500 500 0 0 1280 1002 - - Module - PBXNavigatorGroup - Proportion - 218pt - - - BecomeActive - 1 - ContentConfiguration - - PBXProjectModuleGUID - XCMainBuildResultsModuleGUID - PBXProjectModuleLabel - Build - - GeometryConfiguration - - Frame - {{0, 222}, {500, 236}} - RubberWindowFrame - 192 257 500 500 0 0 1280 1002 - - Module - PBXBuildResultsModule - Proportion - 236pt - - - Proportion - 458pt - - - Name - Build Results - ServiceClasses - - PBXBuildResultsModule - - StatusbarIsVisible - 1 - TableOfContents - - 1C78EAA5065D492600B07095 - 1C78EAA6065D492600B07095 - 1CD0528F0623707200166675 - XCMainBuildResultsModuleGUID - - ToolbarConfiguration - xcode.toolbar.config.build - WindowString - 192 257 500 500 0 0 1280 1002 - - - Identifier - windowTool.debugger - Layout - - - Dock - - - ContentConfiguration - - Debugger - - HorizontalSplitView - - _collapsingFrameDimension - 0.0 - _indexOfCollapsedView - 0 - _percentageOfCollapsedView - 0.0 - isCollapsed - yes - sizes - - {{0, 0}, {317, 164}} - {{317, 0}, {377, 164}} - - - VerticalSplitView - - _collapsingFrameDimension - 0.0 - _indexOfCollapsedView - 0 - _percentageOfCollapsedView - 0.0 - isCollapsed - yes - sizes - - {{0, 0}, {694, 164}} - {{0, 164}, {694, 216}} - - - - LauncherConfigVersion - 8 - PBXProjectModuleGUID - 1C162984064C10D400B95A72 - PBXProjectModuleLabel - Debug - GLUTExamples (Underwater) - - GeometryConfiguration - - DebugConsoleDrawerSize - {100, 120} - DebugConsoleVisible - None - DebugConsoleWindowFrame - {{200, 200}, {500, 300}} - DebugSTDIOWindowFrame - {{200, 200}, {500, 300}} - Frame - {{0, 0}, {694, 380}} - RubberWindowFrame - 321 238 694 422 0 0 1440 878 - - Module - PBXDebugSessionModule - Proportion - 100% - - - Proportion - 100% - - - Name - Debugger - ServiceClasses - - PBXDebugSessionModule - - StatusbarIsVisible - 1 - TableOfContents - - 1CD10A99069EF8BA00B06720 - 1C0AD2AB069F1E9B00FABCE6 - 1C162984064C10D400B95A72 - 1C0AD2AC069F1E9B00FABCE6 - - ToolbarConfiguration - xcode.toolbar.config.debug - WindowString - 321 238 694 422 0 0 1440 878 - WindowToolGUID - 1CD10A99069EF8BA00B06720 - WindowToolIsVisible - 0 - - - Identifier - windowTool.find - Layout - - - Dock - - - Dock - - - ContentConfiguration - - PBXProjectModuleGUID - 1CDD528C0622207200134675 - PBXProjectModuleLabel - <No Editor> - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 1CD0528D0623707200166675 - - SplitCount - 1 - - StatusBarVisibility - 1 - - GeometryConfiguration - - Frame - {{0, 0}, {781, 167}} - RubberWindowFrame - 62 385 781 470 0 0 1440 878 - - Module - PBXNavigatorGroup - Proportion - 781pt - - - Proportion - 50% - - - BecomeActive - 1 - ContentConfiguration - - PBXProjectModuleGUID - 1CD0528E0623707200166675 - PBXProjectModuleLabel - Project Find - - GeometryConfiguration - - Frame - {{8, 0}, {773, 254}} - RubberWindowFrame - 62 385 781 470 0 0 1440 878 - - Module - PBXProjectFindModule - Proportion - 50% - - - Proportion - 428pt - - - Name - Project Find - ServiceClasses - - PBXProjectFindModule - - StatusbarIsVisible - 1 - TableOfContents - - 1C530D57069F1CE1000CFCEE - 1C530D58069F1CE1000CFCEE - 1C530D59069F1CE1000CFCEE - 1CDD528C0622207200134675 - 1C530D5A069F1CE1000CFCEE - 1CE0B1FE06471DED0097A5F4 - 1CD0528E0623707200166675 - - WindowString - 62 385 781 470 0 0 1440 878 - WindowToolGUID - 1C530D57069F1CE1000CFCEE - WindowToolIsVisible - 0 - - - Identifier - MENUSEPARATOR - - - Identifier - windowTool.debuggerConsole - Layout - - - Dock - - - BecomeActive - 1 - ContentConfiguration - - PBXProjectModuleGUID - 1C78EAAC065D492600B07095 - PBXProjectModuleLabel - Debugger Console - - GeometryConfiguration - - Frame - {{0, 0}, {440, 358}} - RubberWindowFrame - 650 41 440 400 0 0 1280 1002 - - Module - PBXDebugCLIModule - Proportion - 358pt - - - Proportion - 358pt - - - Name - Debugger Console - ServiceClasses - - PBXDebugCLIModule - - StatusbarIsVisible - 1 - TableOfContents - - 1C78EAAD065D492600B07095 - 1C78EAAE065D492600B07095 - 1C78EAAC065D492600B07095 - - WindowString - 650 41 440 400 0 0 1280 1002 - - - Identifier - windowTool.run - Layout - - - Dock - - - ContentConfiguration - - LauncherConfigVersion - 3 - PBXProjectModuleGUID - 1CD0528B0623707200166675 - PBXProjectModuleLabel - Run - Runner - - HorizontalSplitView - - _collapsingFrameDimension - 0.0 - _indexOfCollapsedView - 0 - _percentageOfCollapsedView - 0.0 - isCollapsed - yes - sizes - - {{0, 0}, {493, 167}} - {{0, 176}, {493, 267}} - - - VerticalSplitView - - _collapsingFrameDimension - 0.0 - _indexOfCollapsedView - 0 - _percentageOfCollapsedView - 0.0 - isCollapsed - yes - sizes - - {{0, 0}, {405, 443}} - {{414, 0}, {514, 443}} - - - - - GeometryConfiguration - - Frame - {{0, 0}, {460, 159}} - RubberWindowFrame - 316 696 459 200 0 0 1280 1002 - - Module - PBXRunSessionModule - Proportion - 159pt - - - Proportion - 159pt - - - Name - Run Log - ServiceClasses - - PBXRunSessionModule - - StatusbarIsVisible - 1 - TableOfContents - - 1C0AD2B3069F1EA900FABCE6 - 1C0AD2B4069F1EA900FABCE6 - 1CD0528B0623707200166675 - 1C0AD2B5069F1EA900FABCE6 - - ToolbarConfiguration - xcode.toolbar.config.run - WindowString - 316 696 459 200 0 0 1280 1002 - WindowToolGUID - 1C0AD2B3069F1EA900FABCE6 - WindowToolIsVisible - 0 - - - Identifier - windowTool.scm - Layout - - - Dock - - - ContentConfiguration - - PBXProjectModuleGUID - 1C78EAB2065D492600B07095 - PBXProjectModuleLabel - <No Editor> - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 1C78EAB3065D492600B07095 - - SplitCount - 1 - - StatusBarVisibility - 1 - - GeometryConfiguration - - Frame - {{0, 0}, {452, 0}} - RubberWindowFrame - 743 379 452 308 0 0 1280 1002 - - Module - PBXNavigatorGroup - Proportion - 0pt - - - BecomeActive - 1 - ContentConfiguration - - PBXProjectModuleGUID - 1CD052920623707200166675 - PBXProjectModuleLabel - SCM - - GeometryConfiguration - - ConsoleFrame - {{0, 259}, {452, 0}} - Frame - {{0, 7}, {452, 259}} - RubberWindowFrame - 743 379 452 308 0 0 1280 1002 - TableConfiguration - - Status - 30 - FileName - 199 - Path - 197.09500122070312 - - TableFrame - {{0, 0}, {452, 250}} - - Module - PBXCVSModule - Proportion - 262pt - - - Proportion - 266pt - - - Name - SCM - ServiceClasses - - PBXCVSModule - - StatusbarIsVisible - 1 - TableOfContents - - 1C78EAB4065D492600B07095 - 1C78EAB5065D492600B07095 - 1C78EAB2065D492600B07095 - 1CD052920623707200166675 - - ToolbarConfiguration - xcode.toolbar.config.scm - WindowString - 743 379 452 308 0 0 1280 1002 - - - Identifier - windowTool.breakpoints - IsVertical - 0 - Layout - - - Dock - - - BecomeActive - 1 - ContentConfiguration - - PBXBottomSmartGroupGIDs - - 1C77FABC04509CD000000102 - - PBXProjectModuleGUID - 1CE0B1FE06471DED0097A5F4 - PBXProjectModuleLabel - Files - PBXProjectStructureProvided - no - PBXSmartGroupTreeModuleColumnData - - PBXSmartGroupTreeModuleColumnWidthsKey - - 168 - - PBXSmartGroupTreeModuleColumnsKey_v4 - - MainColumn - - - PBXSmartGroupTreeModuleOutlineStateKey_v7 - - PBXSmartGroupTreeModuleOutlineStateExpansionKey - - 1C77FABC04509CD000000102 - - PBXSmartGroupTreeModuleOutlineStateSelectionKey - - - 0 - - - PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 0}, {168, 350}} - - PBXTopSmartGroupGIDs - - XCIncludePerspectivesSwitch - 0 - - GeometryConfiguration - - Frame - {{0, 0}, {185, 368}} - GroupTreeTableConfiguration - - MainColumn - 168 - - RubberWindowFrame - 315 424 744 409 0 0 1440 878 - - Module - PBXSmartGroupTreeModule - Proportion - 185pt - - - ContentConfiguration - - PBXProjectModuleGUID - 1CA1AED706398EBD00589147 - PBXProjectModuleLabel - Detail - - GeometryConfiguration - - Frame - {{190, 0}, {554, 368}} - RubberWindowFrame - 315 424 744 409 0 0 1440 878 - - Module - XCDetailModule - Proportion - 554pt - - - Proportion - 368pt - - - MajorVersion - 2 - MinorVersion - 0 - Name - Breakpoints - ServiceClasses - - PBXSmartGroupTreeModule - XCDetailModule - - StatusbarIsVisible - 1 - TableOfContents - - 1CDDB66807F98D9800BB5817 - 1CDDB66907F98D9800BB5817 - 1CE0B1FE06471DED0097A5F4 - 1CA1AED706398EBD00589147 - - ToolbarConfiguration - xcode.toolbar.config.breakpoints - WindowString - 315 424 744 409 0 0 1440 878 - WindowToolGUID - 1CDDB66807F98D9800BB5817 - WindowToolIsVisible - 1 - - - Identifier - windowTool.debugAnimator - Layout - - - Dock - - - Module - PBXNavigatorGroup - Proportion - 100% - - - Proportion - 100% - - - Name - Debug Visualizer - ServiceClasses - - PBXNavigatorGroup - - StatusbarIsVisible - 1 - ToolbarConfiguration - xcode.toolbar.config.debugAnimator - WindowString - 100 100 700 500 0 0 1280 1002 - - - Identifier - windowTool.bookmarks - Layout - - - Dock - - - Module - PBXBookmarksModule - Proportion - 100% - - - Proportion - 100% - - - Name - Bookmarks - ServiceClasses - - PBXBookmarksModule - - StatusbarIsVisible - 0 - WindowString - 538 42 401 187 0 0 1280 1002 - - - Identifier - windowTool.classBrowser - Layout - - - Dock - - - BecomeActive - 1 - ContentConfiguration - - OptionsSetName - Hierarchy, all classes - PBXProjectModuleGUID - 1CA6456E063B45B4001379D8 - PBXProjectModuleLabel - Class Browser - NSObject - - GeometryConfiguration - - ClassesFrame - {{0, 0}, {374, 96}} - ClassesTreeTableConfiguration - - PBXClassNameColumnIdentifier - 208 - PBXClassBookColumnIdentifier - 22 - - Frame - {{0, 0}, {630, 331}} - MembersFrame - {{0, 105}, {374, 395}} - MembersTreeTableConfiguration - - PBXMemberTypeIconColumnIdentifier - 22 - PBXMemberNameColumnIdentifier - 216 - PBXMemberTypeColumnIdentifier - 97 - PBXMemberBookColumnIdentifier - 22 - - PBXModuleWindowStatusBarHidden2 - 1 - RubberWindowFrame - 385 179 630 352 0 0 1440 878 - - Module - PBXClassBrowserModule - Proportion - 332pt - - - Proportion - 332pt - - - Name - Class Browser - ServiceClasses - - PBXClassBrowserModule - - StatusbarIsVisible - 0 - TableOfContents - - 1C0AD2AF069F1E9B00FABCE6 - 1C0AD2B0069F1E9B00FABCE6 - 1CA6456E063B45B4001379D8 - - ToolbarConfiguration - xcode.toolbar.config.classbrowser - WindowString - 385 179 630 352 0 0 1440 878 - WindowToolGUID - 1C0AD2AF069F1E9B00FABCE6 - WindowToolIsVisible - 0 - - - - diff --git a/Balthisar Tidy.xcodeproj/project.pbxproj b/Balthisar Tidy.xcodeproj/project.pbxproj index 551be385..176e60a4 100644 --- a/Balthisar Tidy.xcodeproj/project.pbxproj +++ b/Balthisar Tidy.xcodeproj/project.pbxproj @@ -3,735 +3,702 @@ archiveVersion = 1; classes = { }; - objectVersion = 44; + objectVersion = 46; objects = { /* Begin PBXBuildFile section */ - D0B3C52E0CF257E800633C82 /* buffio.h in Headers */ = {isa = PBXBuildFile; fileRef = F5CCB42B0364D26D01A80165 /* buffio.h */; }; - D0B3C52F0CF257E800633C82 /* fileio.h in Headers */ = {isa = PBXBuildFile; fileRef = F5CCB42C0364D26D01A80165 /* fileio.h */; }; - D0B3C5300CF257E800633C82 /* platform.h in Headers */ = {isa = PBXBuildFile; fileRef = F5CCB42D0364D26D01A80165 /* platform.h */; }; - D0B3C5310CF257E800633C82 /* tidy.h in Headers */ = {isa = PBXBuildFile; fileRef = F5CCB42E0364D26D01A80165 /* tidy.h */; }; - D0B3C5320CF257E800633C82 /* tidyenum.h in Headers */ = {isa = PBXBuildFile; fileRef = F5CCB42F0364D26D01A80165 /* tidyenum.h */; }; - D0B3C5330CF257E800633C82 /* access.h in Headers */ = {isa = PBXBuildFile; fileRef = F5CCB4320364D26D01A80165 /* access.h */; }; - D0B3C5340CF257E800633C82 /* attrs.h in Headers */ = {isa = PBXBuildFile; fileRef = F5CCB4370364D26D01A80165 /* attrs.h */; }; - D0B3C5350CF257E800633C82 /* clean.h in Headers */ = {isa = PBXBuildFile; fileRef = F5CCB43A0364D26D01A80165 /* clean.h */; }; - D0B3C5360CF257E800633C82 /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = F5CCB43C0364D26D01A80165 /* config.h */; }; - D0B3C5370CF257E800633C82 /* entities.h in Headers */ = {isa = PBXBuildFile; fileRef = F5CCB43E0364D26D01A80165 /* entities.h */; }; - D0B3C5380CF257E800633C82 /* forward.h in Headers */ = {isa = PBXBuildFile; fileRef = F5CCB4400364D26D01A80165 /* forward.h */; }; - D0B3C5390CF257E800633C82 /* lexer.h in Headers */ = {isa = PBXBuildFile; fileRef = F5CCB4430364D26D01A80165 /* lexer.h */; }; - D0B3C53A0CF257E800633C82 /* message.h in Headers */ = {isa = PBXBuildFile; fileRef = F5CCB4450364D26D01A80165 /* message.h */; }; - D0B3C53B0CF257E800633C82 /* parser.h in Headers */ = {isa = PBXBuildFile; fileRef = F5CCB4470364D26D01A80165 /* parser.h */; }; - D0B3C53C0CF257E800633C82 /* pprint.h in Headers */ = {isa = PBXBuildFile; fileRef = F5CCB4490364D26D01A80165 /* pprint.h */; }; - D0B3C53D0CF257E800633C82 /* streamio.h in Headers */ = {isa = PBXBuildFile; fileRef = F5CCB44B0364D26D01A80165 /* streamio.h */; }; - D0B3C53E0CF257E800633C82 /* tags.h in Headers */ = {isa = PBXBuildFile; fileRef = F5CCB44E0364D26D01A80165 /* tags.h */; }; - D0B3C53F0CF257E800633C82 /* tidy-int.h in Headers */ = {isa = PBXBuildFile; fileRef = F5CCB44F0364D26D01A80165 /* tidy-int.h */; }; - D0B3C5400CF257E800633C82 /* tmbstr.h in Headers */ = {isa = PBXBuildFile; fileRef = F5CCB4520364D26D01A80165 /* tmbstr.h */; }; - D0B3C5410CF257E800633C82 /* utf8.h in Headers */ = {isa = PBXBuildFile; fileRef = F5CCB4540364D26D01A80165 /* utf8.h */; }; - D0B3C5420CF257E800633C82 /* AppController.h in Headers */ = {isa = PBXBuildFile; fileRef = F5BD14FD0368BA4E01A80166 /* AppController.h */; }; - D0B3C5430CF257E800633C82 /* PreferenceController.h in Headers */ = {isa = PBXBuildFile; fileRef = F5FE7E90037595DC01A80165 /* PreferenceController.h */; }; - D0B3C5440CF257E800633C82 /* BatchController.h in Headers */ = {isa = PBXBuildFile; fileRef = F5FE7E94037595EB01A80165 /* BatchController.h */; }; - D0B3C5450CF257E800633C82 /* TreeNode.h in Headers */ = {isa = PBXBuildFile; fileRef = F5CEFEC3037B441A01A80166 /* TreeNode.h */; }; - D0B3C5460CF257E800633C82 /* JSDTidy.h in Headers */ = {isa = PBXBuildFile; fileRef = F5E425A8039A983701A80165 /* JSDTidy.h */; }; - D0B3C5470CF257E800633C82 /* TidyDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = F53C0C1303DC802601A80166 /* TidyDocument.h */; }; - D0B3C5480CF257E800633C82 /* JSDTableColumn.h in Headers */ = {isa = PBXBuildFile; fileRef = F53C160B03DCDE6401A80166 /* JSDTableColumn.h */; }; - D0B3C5490CF257E800633C82 /* OptionPaneController.h in Headers */ = {isa = PBXBuildFile; fileRef = F589D0C803ED90EB01A80165 /* OptionPaneController.h */; }; - D0B3C54A0CF257E800633C82 /* JSDTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = F554CD9D03F5990701A80165 /* JSDTableView.h */; }; - D0B3C54B0CF257E800633C82 /* JSDTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = F5D1F42404095DB101A80165 /* JSDTextView.h */; }; - D0B3C54D0CF257E800633C82 /* MainMenu.nib in Resources */ = {isa = PBXBuildFile; fileRef = 2A37F4B6FDCFA73011CA2CEA /* MainMenu.nib */; }; - D0B3C54E0CF257E800633C82 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165FFE840EACC02AAC07 /* InfoPlist.strings */; }; - D0B3C54F0CF257E800633C82 /* Batch.nib in Resources */ = {isa = PBXBuildFile; fileRef = F5D1B574036AF40C01A80165 /* Batch.nib */; }; - D0B3C5500CF257E800633C82 /* Preferences.nib in Resources */ = {isa = PBXBuildFile; fileRef = F5D1B577036AF44801A80165 /* Preferences.nib */; }; - D0B3C5510CF257E800633C82 /* iconbroom.icns in Resources */ = {isa = PBXBuildFile; fileRef = F5BBA03E0371F6C401A80165 /* iconbroom.icns */; }; - D0B3C5520CF257E800633C82 /* iconhtm.icns in Resources */ = {isa = PBXBuildFile; fileRef = F5BBA03F0371F6C401A80165 /* iconhtm.icns */; }; - D0B3C5530CF257E800633C82 /* iconhtml.icns in Resources */ = {isa = PBXBuildFile; fileRef = F5BBA0400371F6C401A80165 /* iconhtml.icns */; }; - D0B3C5540CF257E800633C82 /* iconphp.icns in Resources */ = {isa = PBXBuildFile; fileRef = F5BBA0410371F6C401A80165 /* iconphp.icns */; }; - D0B3C5550CF257E800633C82 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = F56A531C0378639001A80165 /* Localizable.strings */; }; - D0B3C5560CF257E800633C82 /* TidyDocument.nib in Resources */ = {isa = PBXBuildFile; fileRef = F53C0C0E03DC7F9401A80166 /* TidyDocument.nib */; }; - D0B3C5570CF257E800633C82 /* optionsInEffect.txt in Resources */ = {isa = PBXBuildFile; fileRef = F54086D703E47DAE01A80165 /* optionsInEffect.txt */; }; - D0B3C5580CF257E800633C82 /* OptionPane.nib in Resources */ = {isa = PBXBuildFile; fileRef = F56B449C03EB3B8E01A80165 /* OptionPane.nib */; }; - D0B3C5590CF257E800633C82 /* optionsTypesExceptions.txt in Resources */ = {isa = PBXBuildFile; fileRef = F589D0DC03EDB68501A80165 /* optionsTypesExceptions.txt */; }; - D0B3C55B0CF257E800633C82 /* access.c in Sources */ = {isa = PBXBuildFile; fileRef = F5CCB4310364D26D01A80165 /* access.c */; }; - D0B3C55C0CF257E800633C82 /* alloc.c in Sources */ = {isa = PBXBuildFile; fileRef = F5CCB4330364D26D01A80165 /* alloc.c */; }; - D0B3C55D0CF257E800633C82 /* attrask.c in Sources */ = {isa = PBXBuildFile; fileRef = F5CCB4340364D26D01A80165 /* attrask.c */; }; - D0B3C55E0CF257E800633C82 /* attrget.c in Sources */ = {isa = PBXBuildFile; fileRef = F5CCB4350364D26D01A80165 /* attrget.c */; }; - D0B3C55F0CF257E800633C82 /* attrs.c in Sources */ = {isa = PBXBuildFile; fileRef = F5CCB4360364D26D01A80165 /* attrs.c */; }; - D0B3C5600CF257E800633C82 /* buffio.c in Sources */ = {isa = PBXBuildFile; fileRef = F5CCB4380364D26D01A80165 /* buffio.c */; }; - D0B3C5610CF257E800633C82 /* clean.c in Sources */ = {isa = PBXBuildFile; fileRef = F5CCB4390364D26D01A80165 /* clean.c */; }; - D0B3C5620CF257E800633C82 /* config.c in Sources */ = {isa = PBXBuildFile; fileRef = F5CCB43B0364D26D01A80165 /* config.c */; }; - D0B3C5630CF257E800633C82 /* entities.c in Sources */ = {isa = PBXBuildFile; fileRef = F5CCB43D0364D26D01A80165 /* entities.c */; }; - D0B3C5640CF257E800633C82 /* fileio.c in Sources */ = {isa = PBXBuildFile; fileRef = F5CCB43F0364D26D01A80165 /* fileio.c */; }; - D0B3C5650CF257E800633C82 /* istack.c in Sources */ = {isa = PBXBuildFile; fileRef = F5CCB4410364D26D01A80165 /* istack.c */; }; - D0B3C5660CF257E800633C82 /* lexer.c in Sources */ = {isa = PBXBuildFile; fileRef = F5CCB4420364D26D01A80165 /* lexer.c */; }; - D0B3C5670CF257E800633C82 /* localize.c in Sources */ = {isa = PBXBuildFile; fileRef = F5CCB4440364D26D01A80165 /* localize.c */; }; - D0B3C5680CF257E800633C82 /* parser.c in Sources */ = {isa = PBXBuildFile; fileRef = F5CCB4460364D26D01A80165 /* parser.c */; }; - D0B3C5690CF257E800633C82 /* pprint.c in Sources */ = {isa = PBXBuildFile; fileRef = F5CCB4480364D26D01A80165 /* pprint.c */; }; - D0B3C56A0CF257E800633C82 /* streamio.c in Sources */ = {isa = PBXBuildFile; fileRef = F5CCB44A0364D26D01A80165 /* streamio.c */; }; - D0B3C56B0CF257E800633C82 /* tagask.c in Sources */ = {isa = PBXBuildFile; fileRef = F5CCB44C0364D26D01A80165 /* tagask.c */; }; - D0B3C56C0CF257E800633C82 /* tags.c in Sources */ = {isa = PBXBuildFile; fileRef = F5CCB44D0364D26D01A80165 /* tags.c */; }; - D0B3C56D0CF257E800633C82 /* tidylib.c in Sources */ = {isa = PBXBuildFile; fileRef = F5CCB4500364D26D01A80165 /* tidylib.c */; }; - D0B3C56E0CF257E800633C82 /* tmbstr.c in Sources */ = {isa = PBXBuildFile; fileRef = F5CCB4510364D26D01A80165 /* tmbstr.c */; }; - D0B3C56F0CF257E800633C82 /* utf8.c in Sources */ = {isa = PBXBuildFile; fileRef = F5CCB4530364D26D01A80165 /* utf8.c */; }; - D0B3C5700CF257E800633C82 /* AppController.m in Sources */ = {isa = PBXBuildFile; fileRef = F5BD14FE0368BA4E01A80166 /* AppController.m */; }; - D0B3C5710CF257E800633C82 /* PreferenceController.m in Sources */ = {isa = PBXBuildFile; fileRef = F5FE7E91037595DC01A80165 /* PreferenceController.m */; }; - D0B3C5720CF257E800633C82 /* BatchController.m in Sources */ = {isa = PBXBuildFile; fileRef = F5FE7E95037595EB01A80165 /* BatchController.m */; }; - D0B3C5730CF257E800633C82 /* TreeNode.m in Sources */ = {isa = PBXBuildFile; fileRef = F5CEFEC4037B441A01A80166 /* TreeNode.m */; }; - D0B3C5740CF257E800633C82 /* JSDTidy.m in Sources */ = {isa = PBXBuildFile; fileRef = F5E425A9039A983701A80165 /* JSDTidy.m */; }; - D0B3C5750CF257E800633C82 /* TidyDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = F53C0C1403DC802601A80166 /* TidyDocument.m */; }; - D0B3C5760CF257E800633C82 /* JSDTableColumn.m in Sources */ = {isa = PBXBuildFile; fileRef = F53C160C03DCDE6401A80166 /* JSDTableColumn.m */; }; - D0B3C5770CF257E800633C82 /* OptionPaneController.m in Sources */ = {isa = PBXBuildFile; fileRef = F589D0C903ED90EB01A80165 /* OptionPaneController.m */; }; - D0B3C5780CF257E800633C82 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A37F4B0FDCFA73011CA2CEA /* main.m */; }; - D0B3C5790CF257E800633C82 /* JSDTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = F554CD9E03F5990701A80165 /* JSDTableView.m */; }; - D0B3C57A0CF257E800633C82 /* JSDTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = F5D1F42504095DB101A80165 /* JSDTextView.m */; }; - D0B3C57C0CF257E800633C82 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A7FEA54F5311CA2CBB /* Cocoa.framework */; }; - D0B3C5860CF258A800633C82 /* Balthisar Tidy.plist in Resources */ = {isa = PBXBuildFile; fileRef = D0B3C5850CF258A800633C82 /* Balthisar Tidy.plist */; }; + D0107935183C738F00120B57 /* Batch.xib in Resources */ = {isa = PBXBuildFile; fileRef = D07AF4781836581E00913067 /* Batch.xib */; }; + D0107937183C738F00120B57 /* OptionPane.xib in Resources */ = {isa = PBXBuildFile; fileRef = D07AF47A1836581E00913067 /* OptionPane.xib */; }; + D0107938183C738F00120B57 /* Preferences.xib in Resources */ = {isa = PBXBuildFile; fileRef = D07AF47C1836581E00913067 /* Preferences.xib */; }; + D0107939183C738F00120B57 /* TidyDocument.xib in Resources */ = {isa = PBXBuildFile; fileRef = D07AF47E1836581E00913067 /* TidyDocument.xib */; }; + D0120B57183CCAB3003CA182 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = D0120B55183CCAB3003CA182 /* Localizable.strings */; }; + D016A92A182FD80700712C60 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D016A929182FD80700712C60 /* Cocoa.framework */; }; + D016A936182FD80700712C60 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = D016A935182FD80700712C60 /* main.m */; }; + D016A945182FD80700712C60 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D016A944182FD80700712C60 /* Images.xcassets */; }; + D01AED8518476F6B001300E3 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = D01AED8318476F6B001300E3 /* Credits.rtf */; }; + D02B30CA184EC4FF00A60556 /* HTML.icns in Resources */ = {isa = PBXBuildFile; fileRef = D02B30C9184EC4FF00A60556 /* HTML.icns */; }; + D02B30CE184ED25100A60556 /* PHP.icns in Resources */ = {isa = PBXBuildFile; fileRef = D02B30CC184ED25100A60556 /* PHP.icns */; }; + D04B0510183F158800C0F70F /* NoodleLineNumberView.m in Sources */ = {isa = PBXBuildFile; fileRef = D04B050F183F158800C0F70F /* NoodleLineNumberView.m */; }; + D04B0513183F15F500C0F70F /* NoodleLineNumberMarker.m in Sources */ = {isa = PBXBuildFile; fileRef = D04B0512183F15F500C0F70F /* NoodleLineNumberMarker.m */; }; + D07AF495183658D300913067 /* AppController.m in Sources */ = {isa = PBXBuildFile; fileRef = D07AF48C183658D300913067 /* AppController.m */; }; + D07AF497183658D300913067 /* OptionPaneController.m in Sources */ = {isa = PBXBuildFile; fileRef = D07AF490183658D300913067 /* OptionPaneController.m */; }; + D07AF498183658D300913067 /* PreferenceController.m in Sources */ = {isa = PBXBuildFile; fileRef = D07AF492183658D300913067 /* PreferenceController.m */; }; + D07AF499183658D300913067 /* TidyDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = D07AF494183658D300913067 /* TidyDocument.m */; }; + D07AF49F1836593A00913067 /* JSDTidyDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = D07AF49E1836593A00913067 /* JSDTidyDocument.m */; }; + D09D8D5C1846209200AFB4FA /* access.c in Sources */ = {isa = PBXBuildFile; fileRef = D09D8D2A1846209200AFB4FA /* access.c */; }; + D09D8D5D1846209200AFB4FA /* alloc.c in Sources */ = {isa = PBXBuildFile; fileRef = D09D8D2C1846209200AFB4FA /* alloc.c */; }; + D09D8D5E1846209200AFB4FA /* attrask.c in Sources */ = {isa = PBXBuildFile; fileRef = D09D8D2D1846209200AFB4FA /* attrask.c */; }; + D09D8D5F1846209200AFB4FA /* attrdict.c in Sources */ = {isa = PBXBuildFile; fileRef = D09D8D2E1846209200AFB4FA /* attrdict.c */; }; + D09D8D601846209200AFB4FA /* attrget.c in Sources */ = {isa = PBXBuildFile; fileRef = D09D8D301846209200AFB4FA /* attrget.c */; }; + D09D8D611846209200AFB4FA /* attrs.c in Sources */ = {isa = PBXBuildFile; fileRef = D09D8D311846209200AFB4FA /* attrs.c */; }; + D09D8D621846209200AFB4FA /* buffio.c in Sources */ = {isa = PBXBuildFile; fileRef = D09D8D331846209200AFB4FA /* buffio.c */; }; + D09D8D631846209200AFB4FA /* charsets.c in Sources */ = {isa = PBXBuildFile; fileRef = D09D8D341846209200AFB4FA /* charsets.c */; }; + D09D8D641846209200AFB4FA /* clean.c in Sources */ = {isa = PBXBuildFile; fileRef = D09D8D361846209200AFB4FA /* clean.c */; }; + D09D8D651846209200AFB4FA /* config.c in Sources */ = {isa = PBXBuildFile; fileRef = D09D8D381846209200AFB4FA /* config.c */; }; + D09D8D661846209200AFB4FA /* entities.c in Sources */ = {isa = PBXBuildFile; fileRef = D09D8D3A1846209200AFB4FA /* entities.c */; }; + D09D8D671846209200AFB4FA /* fileio.c in Sources */ = {isa = PBXBuildFile; fileRef = D09D8D3C1846209200AFB4FA /* fileio.c */; }; + D09D8D681846209200AFB4FA /* gdoc.c in Sources */ = {isa = PBXBuildFile; fileRef = D09D8D3F1846209200AFB4FA /* gdoc.c */; }; + D09D8D691846209200AFB4FA /* iconvtc.c in Sources */ = {isa = PBXBuildFile; fileRef = D09D8D411846209200AFB4FA /* iconvtc.c */; }; + D09D8D6A1846209200AFB4FA /* istack.c in Sources */ = {isa = PBXBuildFile; fileRef = D09D8D431846209200AFB4FA /* istack.c */; }; + D09D8D6B1846209200AFB4FA /* lexer.c in Sources */ = {isa = PBXBuildFile; fileRef = D09D8D441846209200AFB4FA /* lexer.c */; }; + D09D8D6C1846209200AFB4FA /* localize.c in Sources */ = {isa = PBXBuildFile; fileRef = D09D8D461846209200AFB4FA /* localize.c */; }; + D09D8D6D1846209200AFB4FA /* mappedio.c in Sources */ = {isa = PBXBuildFile; fileRef = D09D8D471846209200AFB4FA /* mappedio.c */; }; + D09D8D6E1846209200AFB4FA /* parser.c in Sources */ = {isa = PBXBuildFile; fileRef = D09D8D4A1846209200AFB4FA /* parser.c */; }; + D09D8D6F1846209200AFB4FA /* pprint.c in Sources */ = {isa = PBXBuildFile; fileRef = D09D8D4C1846209200AFB4FA /* pprint.c */; }; + D09D8D701846209200AFB4FA /* streamio.c in Sources */ = {isa = PBXBuildFile; fileRef = D09D8D4E1846209200AFB4FA /* streamio.c */; }; + D09D8D711846209200AFB4FA /* tagask.c in Sources */ = {isa = PBXBuildFile; fileRef = D09D8D501846209200AFB4FA /* tagask.c */; }; + D09D8D721846209200AFB4FA /* tags.c in Sources */ = {isa = PBXBuildFile; fileRef = D09D8D511846209200AFB4FA /* tags.c */; }; + D09D8D731846209200AFB4FA /* tidylib.c in Sources */ = {isa = PBXBuildFile; fileRef = D09D8D541846209200AFB4FA /* tidylib.c */; }; + D09D8D741846209200AFB4FA /* tmbstr.c in Sources */ = {isa = PBXBuildFile; fileRef = D09D8D551846209200AFB4FA /* tmbstr.c */; }; + D09D8D751846209200AFB4FA /* utf8.c in Sources */ = {isa = PBXBuildFile; fileRef = D09D8D571846209200AFB4FA /* utf8.c */; }; + D09D8D761846209200AFB4FA /* win32tc.c in Sources */ = {isa = PBXBuildFile; fileRef = D09D8D5A1846209200AFB4FA /* win32tc.c */; }; + D0A4E1D6183A556300999979 /* optionsInEffect.txt in Resources */ = {isa = PBXBuildFile; fileRef = D0A4E1D2183A556300999979 /* optionsInEffect.txt */; }; + D0A4E1D7183A556300999979 /* optionsTypesExceptions.txt in Resources */ = {isa = PBXBuildFile; fileRef = D0A4E1D4183A556300999979 /* optionsTypesExceptions.txt */; }; + D0BE6EDB183DEB7A00029BF0 /* NSTextView+JSDExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = D0BE6EDA183DEB7A00029BF0 /* NSTextView+JSDExtensions.m */; }; + D0D3BEB8183C87C500692225 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = D0D3BEB6183C87C500692225 /* MainMenu.xib */; }; + D0D3BEC2183C897800692225 /* JSDTableColumn.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D3BEBB183C897800692225 /* JSDTableColumn.m */; }; + D0D3BEC5183C897800692225 /* TreeNode.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D3BEC1183C897800692225 /* TreeNode.m */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 089C1660FE840EACC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; - 1058C7A7FEA54F5311CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; - 2A37F4B0FDCFA73011CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 2A37F4B7FDCFA73011CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/MainMenu.nib; sourceTree = ""; }; - 2A37F4C4FDCFA73011CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; - 2A37F4C5FDCFA73011CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; - D0B3C5810CF257E800633C82 /* Balthisar Tidy.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Balthisar Tidy.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - D0B3C5850CF258A800633C82 /* Balthisar Tidy.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Balthisar Tidy.plist"; sourceTree = ""; }; - F53BB0B703EE056301A80165 /* README.rtf */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; path = README.rtf; sourceTree = ""; }; - F53C0C0F03DC7F9401A80166 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/TidyDocument.nib; sourceTree = ""; }; - F53C0C1303DC802601A80166 /* TidyDocument.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TidyDocument.h; path = "Classes/App Pieces/TidyDocument.h"; sourceTree = SOURCE_ROOT; }; - F53C0C1403DC802601A80166 /* TidyDocument.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = TidyDocument.m; path = "Classes/App Pieces/TidyDocument.m"; sourceTree = SOURCE_ROOT; }; - F53C160B03DCDE6401A80166 /* JSDTableColumn.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JSDTableColumn.h; path = "Classes/Support Pieces/JSDTableColumn.h"; sourceTree = SOURCE_ROOT; }; - F53C160C03DCDE6401A80166 /* JSDTableColumn.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = JSDTableColumn.m; path = "Classes/Support Pieces/JSDTableColumn.m"; sourceTree = SOURCE_ROOT; }; - F54086D803E47DAE01A80165 /* English */ = {isa = PBXFileReference; lastKnownFileType = text; name = English; path = English.lproj/optionsInEffect.txt; sourceTree = ""; }; - F554CD9D03F5990701A80165 /* JSDTableView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JSDTableView.h; path = "Classes/Support Pieces/JSDTableView.h"; sourceTree = SOURCE_ROOT; }; - F554CD9E03F5990701A80165 /* JSDTableView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = JSDTableView.m; path = "Classes/Support Pieces/JSDTableView.m"; sourceTree = SOURCE_ROOT; }; - F56A531D0378639001A80165 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/Localizable.strings; sourceTree = ""; }; - F56B449D03EB3B8E01A80165 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/OptionPane.nib; sourceTree = ""; }; - F589D0C803ED90EB01A80165 /* OptionPaneController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = OptionPaneController.h; path = "Classes/App Pieces/OptionPaneController.h"; sourceTree = SOURCE_ROOT; }; - F589D0C903ED90EB01A80165 /* OptionPaneController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = OptionPaneController.m; path = "Classes/App Pieces/OptionPaneController.m"; sourceTree = SOURCE_ROOT; }; - F589D0DD03EDB68501A80165 /* English */ = {isa = PBXFileReference; lastKnownFileType = text; name = English; path = English.lproj/optionsTypesExceptions.txt; sourceTree = ""; }; - F5BBA03E0371F6C401A80165 /* iconbroom.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = iconbroom.icns; path = "Graphics, Included/iconbroom.icns"; sourceTree = ""; }; - F5BBA03F0371F6C401A80165 /* iconhtm.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = iconhtm.icns; path = "Graphics, Included/iconhtm.icns"; sourceTree = ""; }; - F5BBA0400371F6C401A80165 /* iconhtml.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = iconhtml.icns; path = "Graphics, Included/iconhtml.icns"; sourceTree = ""; }; - F5BBA0410371F6C401A80165 /* iconphp.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = iconphp.icns; path = "Graphics, Included/iconphp.icns"; sourceTree = ""; }; - F5BD14FD0368BA4E01A80166 /* AppController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppController.h; path = "Classes/App Pieces/AppController.h"; sourceTree = SOURCE_ROOT; }; - F5BD14FE0368BA4E01A80166 /* AppController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = AppController.m; path = "Classes/App Pieces/AppController.m"; sourceTree = SOURCE_ROOT; }; - F5CCB4280364D26D01A80165 /* tab2space.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = tab2space.c; sourceTree = ""; }; - F5CCB4290364D26D01A80165 /* tidy.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = tidy.c; sourceTree = ""; }; - F5CCB42B0364D26D01A80165 /* buffio.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = buffio.h; sourceTree = ""; }; - F5CCB42C0364D26D01A80165 /* fileio.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = fileio.h; sourceTree = ""; }; - F5CCB42D0364D26D01A80165 /* platform.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = platform.h; sourceTree = ""; }; - F5CCB42E0364D26D01A80165 /* tidy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tidy.h; sourceTree = ""; }; - F5CCB42F0364D26D01A80165 /* tidyenum.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tidyenum.h; sourceTree = ""; }; - F5CCB4310364D26D01A80165 /* access.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = access.c; sourceTree = ""; }; - F5CCB4320364D26D01A80165 /* access.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = access.h; sourceTree = ""; }; - F5CCB4330364D26D01A80165 /* alloc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = alloc.c; sourceTree = ""; }; - F5CCB4340364D26D01A80165 /* attrask.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = attrask.c; sourceTree = ""; }; - F5CCB4350364D26D01A80165 /* attrget.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = attrget.c; sourceTree = ""; }; - F5CCB4360364D26D01A80165 /* attrs.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = attrs.c; sourceTree = ""; }; - F5CCB4370364D26D01A80165 /* attrs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = attrs.h; sourceTree = ""; }; - F5CCB4380364D26D01A80165 /* buffio.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = buffio.c; sourceTree = ""; }; - F5CCB4390364D26D01A80165 /* clean.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = clean.c; sourceTree = ""; }; - F5CCB43A0364D26D01A80165 /* clean.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = clean.h; sourceTree = ""; }; - F5CCB43B0364D26D01A80165 /* config.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = config.c; sourceTree = ""; }; - F5CCB43C0364D26D01A80165 /* config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; - F5CCB43D0364D26D01A80165 /* entities.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = entities.c; sourceTree = ""; }; - F5CCB43E0364D26D01A80165 /* entities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = entities.h; sourceTree = ""; }; - F5CCB43F0364D26D01A80165 /* fileio.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = fileio.c; sourceTree = ""; }; - F5CCB4400364D26D01A80165 /* forward.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = forward.h; sourceTree = ""; }; - F5CCB4410364D26D01A80165 /* istack.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = istack.c; sourceTree = ""; }; - F5CCB4420364D26D01A80165 /* lexer.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = lexer.c; sourceTree = ""; }; - F5CCB4430364D26D01A80165 /* lexer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = lexer.h; sourceTree = ""; }; - F5CCB4440364D26D01A80165 /* localize.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = localize.c; sourceTree = ""; }; - F5CCB4450364D26D01A80165 /* message.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = message.h; sourceTree = ""; }; - F5CCB4460364D26D01A80165 /* parser.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = parser.c; sourceTree = ""; }; - F5CCB4470364D26D01A80165 /* parser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = parser.h; sourceTree = ""; }; - F5CCB4480364D26D01A80165 /* pprint.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = pprint.c; sourceTree = ""; }; - F5CCB4490364D26D01A80165 /* pprint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pprint.h; sourceTree = ""; }; - F5CCB44A0364D26D01A80165 /* streamio.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = streamio.c; sourceTree = ""; }; - F5CCB44B0364D26D01A80165 /* streamio.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = streamio.h; sourceTree = ""; }; - F5CCB44C0364D26D01A80165 /* tagask.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = tagask.c; sourceTree = ""; }; - F5CCB44D0364D26D01A80165 /* tags.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = tags.c; sourceTree = ""; }; - F5CCB44E0364D26D01A80165 /* tags.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tags.h; sourceTree = ""; }; - F5CCB44F0364D26D01A80165 /* tidy-int.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "tidy-int.h"; sourceTree = ""; }; - F5CCB4500364D26D01A80165 /* tidylib.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = tidylib.c; sourceTree = ""; }; - F5CCB4510364D26D01A80165 /* tmbstr.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = tmbstr.c; sourceTree = ""; }; - F5CCB4520364D26D01A80165 /* tmbstr.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tmbstr.h; sourceTree = ""; }; - F5CCB4530364D26D01A80165 /* utf8.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = utf8.c; sourceTree = ""; }; - F5CCB4540364D26D01A80165 /* utf8.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = utf8.h; sourceTree = ""; }; - F5CEFEC3037B441A01A80166 /* TreeNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TreeNode.h; path = "Classes/Support Pieces/TreeNode.h"; sourceTree = SOURCE_ROOT; }; - F5CEFEC4037B441A01A80166 /* TreeNode.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = TreeNode.m; path = "Classes/Support Pieces/TreeNode.m"; sourceTree = SOURCE_ROOT; }; - F5D1B575036AF40C01A80165 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/Batch.nib; sourceTree = ""; }; - F5D1B578036AF44801A80165 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/Preferences.nib; sourceTree = ""; }; - F5D1F42404095DB101A80165 /* JSDTextView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JSDTextView.h; path = "Classes/Support Pieces/JSDTextView.h"; sourceTree = SOURCE_ROOT; }; - F5D1F42504095DB101A80165 /* JSDTextView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = JSDTextView.m; path = "Classes/Support Pieces/JSDTextView.m"; sourceTree = SOURCE_ROOT; }; - F5DCE620041BD59401A80165 /* JSDTidy.rtf */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = JSDTidy.rtf; path = Classes/JSDTidy/JSDTidy.rtf; sourceTree = SOURCE_ROOT; }; - F5E425A8039A983701A80165 /* JSDTidy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JSDTidy.h; path = Classes/JSDTidy/JSDTidy.h; sourceTree = SOURCE_ROOT; }; - F5E425A9039A983701A80165 /* JSDTidy.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = JSDTidy.m; path = Classes/JSDTidy/JSDTidy.m; sourceTree = SOURCE_ROOT; }; - F5FE7E90037595DC01A80165 /* PreferenceController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PreferenceController.h; path = "Classes/App Pieces/PreferenceController.h"; sourceTree = SOURCE_ROOT; }; - F5FE7E91037595DC01A80165 /* PreferenceController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = PreferenceController.m; path = "Classes/App Pieces/PreferenceController.m"; sourceTree = SOURCE_ROOT; }; - F5FE7E94037595EB01A80165 /* BatchController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = BatchController.h; path = "Classes/App Pieces/BatchController.h"; sourceTree = SOURCE_ROOT; }; - F5FE7E95037595EB01A80165 /* BatchController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = BatchController.m; path = "Classes/App Pieces/BatchController.m"; sourceTree = SOURCE_ROOT; }; + D0120B56183CCAB3003CA182 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = "balthisar tidy/Base.lproj/Localizable.strings"; sourceTree = SOURCE_ROOT; }; + D013B516184F18A100F30654 /* Balthisar Tidy Signed-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Balthisar Tidy Signed-Info.plist"; path = "/Users/jderry/Dropbox/Development/Balthisar Tidy/Balthisar Tidy Signed-Info.plist"; sourceTree = ""; }; + D016A926182FD80700712C60 /* Balthisar Tidy.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Balthisar Tidy.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + D016A929182FD80700712C60 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + D016A92C182FD80700712C60 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; + D016A92D182FD80700712C60 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + D016A92E182FD80700712C60 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + D016A931182FD80700712C60 /* Balthisar Tidy-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Balthisar Tidy-Info.plist"; sourceTree = ""; }; + D016A935182FD80700712C60 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + D016A937182FD80700712C60 /* Balthisar Tidy-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Balthisar Tidy-Prefix.pch"; sourceTree = ""; }; + D016A944182FD80700712C60 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + D016A94B182FD80700712C60 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; + D01AED8418476F6B001300E3 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = Base; path = Base.lproj/Credits.rtf; sourceTree = ""; }; + D026169E1836F48A002ABD72 /* Balthisar Tidy.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = "Balthisar Tidy.entitlements"; sourceTree = ""; }; + D02B30C9184EC4FF00A60556 /* HTML.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = HTML.icns; path = "balthisar tidy/Images.xcassets/HTML.icns"; sourceTree = SOURCE_ROOT; }; + D02B30CC184ED25100A60556 /* PHP.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = PHP.icns; path = "balthisar tidy/Images.xcassets/PHP.icns"; sourceTree = SOURCE_ROOT; }; + D04B050E183F158800C0F70F /* NoodleLineNumberView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NoodleLineNumberView.h; path = "balthisar tidy/Classes/Support Pieces/NoodleLineNumberView.h"; sourceTree = SOURCE_ROOT; }; + D04B050F183F158800C0F70F /* NoodleLineNumberView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NoodleLineNumberView.m; path = "balthisar tidy/Classes/Support Pieces/NoodleLineNumberView.m"; sourceTree = SOURCE_ROOT; }; + D04B0511183F15F500C0F70F /* NoodleLineNumberMarker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NoodleLineNumberMarker.h; path = "balthisar tidy/Classes/Support Pieces/NoodleLineNumberMarker.h"; sourceTree = SOURCE_ROOT; }; + D04B0512183F15F500C0F70F /* NoodleLineNumberMarker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NoodleLineNumberMarker.m; path = "balthisar tidy/Classes/Support Pieces/NoodleLineNumberMarker.m"; sourceTree = SOURCE_ROOT; }; + D07AF4791836581E00913067 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/Batch.xib; sourceTree = ""; }; + D07AF47B1836581E00913067 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/OptionPane.xib; sourceTree = ""; }; + D07AF47D1836581E00913067 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/Preferences.xib; sourceTree = ""; }; + D07AF47F1836581E00913067 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/TidyDocument.xib; sourceTree = ""; }; + D07AF48B183658D300913067 /* AppController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppController.h; sourceTree = ""; }; + D07AF48C183658D300913067 /* AppController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppController.m; sourceTree = ""; }; + D07AF48F183658D300913067 /* OptionPaneController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OptionPaneController.h; sourceTree = ""; }; + D07AF490183658D300913067 /* OptionPaneController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OptionPaneController.m; sourceTree = ""; }; + D07AF491183658D300913067 /* PreferenceController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PreferenceController.h; sourceTree = ""; }; + D07AF492183658D300913067 /* PreferenceController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PreferenceController.m; sourceTree = ""; }; + D07AF493183658D300913067 /* TidyDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TidyDocument.h; sourceTree = ""; }; + D07AF494183658D300913067 /* TidyDocument.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TidyDocument.m; sourceTree = ""; }; + D07AF49D1836593900913067 /* JSDTidyDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JSDTidyDocument.h; path = Classes/JSDTidy/JSDTidyDocument.h; sourceTree = ""; }; + D07AF49E1836593A00913067 /* JSDTidyDocument.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = JSDTidyDocument.m; path = Classes/JSDTidy/JSDTidyDocument.m; sourceTree = ""; }; + D09D8D261846208500AFB4FA /* buffio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = buffio.h; path = "tidylib5-src/include/buffio.h"; sourceTree = ""; }; + D09D8D271846208500AFB4FA /* platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = platform.h; path = "tidylib5-src/include/platform.h"; sourceTree = ""; }; + D09D8D281846208500AFB4FA /* tidy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tidy.h; path = "tidylib5-src/include/tidy.h"; sourceTree = ""; }; + D09D8D291846208500AFB4FA /* tidyenum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tidyenum.h; path = "tidylib5-src/include/tidyenum.h"; sourceTree = ""; }; + D09D8D2A1846209200AFB4FA /* access.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = access.c; path = "tidylib5-src/src/access.c"; sourceTree = ""; }; + D09D8D2B1846209200AFB4FA /* access.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = access.h; path = "tidylib5-src/src/access.h"; sourceTree = ""; }; + D09D8D2C1846209200AFB4FA /* alloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = alloc.c; path = "tidylib5-src/src/alloc.c"; sourceTree = ""; }; + D09D8D2D1846209200AFB4FA /* attrask.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = attrask.c; path = "tidylib5-src/src/attrask.c"; sourceTree = ""; }; + D09D8D2E1846209200AFB4FA /* attrdict.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = attrdict.c; path = "tidylib5-src/src/attrdict.c"; sourceTree = ""; }; + D09D8D2F1846209200AFB4FA /* attrdict.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = attrdict.h; path = "tidylib5-src/src/attrdict.h"; sourceTree = ""; }; + D09D8D301846209200AFB4FA /* attrget.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = attrget.c; path = "tidylib5-src/src/attrget.c"; sourceTree = ""; }; + D09D8D311846209200AFB4FA /* attrs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = attrs.c; path = "tidylib5-src/src/attrs.c"; sourceTree = ""; }; + D09D8D321846209200AFB4FA /* attrs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = attrs.h; path = "tidylib5-src/src/attrs.h"; sourceTree = ""; }; + D09D8D331846209200AFB4FA /* buffio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = buffio.c; path = "tidylib5-src/src/buffio.c"; sourceTree = ""; }; + D09D8D341846209200AFB4FA /* charsets.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = charsets.c; path = "tidylib5-src/src/charsets.c"; sourceTree = ""; }; + D09D8D351846209200AFB4FA /* charsets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = charsets.h; path = "tidylib5-src/src/charsets.h"; sourceTree = ""; }; + D09D8D361846209200AFB4FA /* clean.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = clean.c; path = "tidylib5-src/src/clean.c"; sourceTree = ""; }; + D09D8D371846209200AFB4FA /* clean.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = clean.h; path = "tidylib5-src/src/clean.h"; sourceTree = ""; }; + D09D8D381846209200AFB4FA /* config.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = config.c; path = "tidylib5-src/src/config.c"; sourceTree = ""; }; + D09D8D391846209200AFB4FA /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = config.h; path = "tidylib5-src/src/config.h"; sourceTree = ""; }; + D09D8D3A1846209200AFB4FA /* entities.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = entities.c; path = "tidylib5-src/src/entities.c"; sourceTree = ""; }; + D09D8D3B1846209200AFB4FA /* entities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = entities.h; path = "tidylib5-src/src/entities.h"; sourceTree = ""; }; + D09D8D3C1846209200AFB4FA /* fileio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = fileio.c; path = "tidylib5-src/src/fileio.c"; sourceTree = ""; }; + D09D8D3D1846209200AFB4FA /* fileio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fileio.h; path = "tidylib5-src/src/fileio.h"; sourceTree = ""; }; + D09D8D3E1846209200AFB4FA /* forward.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = forward.h; path = "tidylib5-src/src/forward.h"; sourceTree = ""; }; + D09D8D3F1846209200AFB4FA /* gdoc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = gdoc.c; path = "tidylib5-src/src/gdoc.c"; sourceTree = ""; }; + D09D8D401846209200AFB4FA /* gdoc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gdoc.h; path = "tidylib5-src/src/gdoc.h"; sourceTree = ""; }; + D09D8D411846209200AFB4FA /* iconvtc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = iconvtc.c; path = "tidylib5-src/src/iconvtc.c"; sourceTree = ""; }; + D09D8D421846209200AFB4FA /* iconvtc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = iconvtc.h; path = "tidylib5-src/src/iconvtc.h"; sourceTree = ""; }; + D09D8D431846209200AFB4FA /* istack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = istack.c; path = "tidylib5-src/src/istack.c"; sourceTree = ""; }; + D09D8D441846209200AFB4FA /* lexer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lexer.c; path = "tidylib5-src/src/lexer.c"; sourceTree = ""; }; + D09D8D451846209200AFB4FA /* lexer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lexer.h; path = "tidylib5-src/src/lexer.h"; sourceTree = ""; }; + D09D8D461846209200AFB4FA /* localize.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = localize.c; path = "tidylib5-src/src/localize.c"; sourceTree = ""; }; + D09D8D471846209200AFB4FA /* mappedio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mappedio.c; path = "tidylib5-src/src/mappedio.c"; sourceTree = ""; }; + D09D8D481846209200AFB4FA /* mappedio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mappedio.h; path = "tidylib5-src/src/mappedio.h"; sourceTree = ""; }; + D09D8D491846209200AFB4FA /* message.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = message.h; path = "tidylib5-src/src/message.h"; sourceTree = ""; }; + D09D8D4A1846209200AFB4FA /* parser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = parser.c; path = "tidylib5-src/src/parser.c"; sourceTree = ""; }; + D09D8D4B1846209200AFB4FA /* parser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = parser.h; path = "tidylib5-src/src/parser.h"; sourceTree = ""; }; + D09D8D4C1846209200AFB4FA /* pprint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pprint.c; path = "tidylib5-src/src/pprint.c"; sourceTree = ""; }; + D09D8D4D1846209200AFB4FA /* pprint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pprint.h; path = "tidylib5-src/src/pprint.h"; sourceTree = ""; }; + D09D8D4E1846209200AFB4FA /* streamio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = streamio.c; path = "tidylib5-src/src/streamio.c"; sourceTree = ""; }; + D09D8D4F1846209200AFB4FA /* streamio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = streamio.h; path = "tidylib5-src/src/streamio.h"; sourceTree = ""; }; + D09D8D501846209200AFB4FA /* tagask.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tagask.c; path = "tidylib5-src/src/tagask.c"; sourceTree = ""; }; + D09D8D511846209200AFB4FA /* tags.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tags.c; path = "tidylib5-src/src/tags.c"; sourceTree = ""; }; + D09D8D521846209200AFB4FA /* tags.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tags.h; path = "tidylib5-src/src/tags.h"; sourceTree = ""; }; + D09D8D531846209200AFB4FA /* tidy-int.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "tidy-int.h"; path = "tidylib5-src/src/tidy-int.h"; sourceTree = ""; }; + D09D8D541846209200AFB4FA /* tidylib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tidylib.c; path = "tidylib5-src/src/tidylib.c"; sourceTree = ""; }; + D09D8D551846209200AFB4FA /* tmbstr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tmbstr.c; path = "tidylib5-src/src/tmbstr.c"; sourceTree = ""; }; + D09D8D561846209200AFB4FA /* tmbstr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tmbstr.h; path = "tidylib5-src/src/tmbstr.h"; sourceTree = ""; }; + D09D8D571846209200AFB4FA /* utf8.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = utf8.c; path = "tidylib5-src/src/utf8.c"; sourceTree = ""; }; + D09D8D581846209200AFB4FA /* utf8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = utf8.h; path = "tidylib5-src/src/utf8.h"; sourceTree = ""; }; + D09D8D591846209200AFB4FA /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = version.h; path = "tidylib5-src/src/version.h"; sourceTree = ""; }; + D09D8D5A1846209200AFB4FA /* win32tc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = win32tc.c; path = "tidylib5-src/src/win32tc.c"; sourceTree = ""; }; + D09D8D5B1846209200AFB4FA /* win32tc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = win32tc.h; path = "tidylib5-src/src/win32tc.h"; sourceTree = ""; }; + D0A4E1D3183A556300999979 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text; name = Base; path = "balthisar tidy/Base.lproj/optionsInEffect.txt"; sourceTree = SOURCE_ROOT; }; + D0A4E1D5183A556300999979 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text; name = Base; path = "balthisar tidy/Base.lproj/optionsTypesExceptions.txt"; sourceTree = SOURCE_ROOT; }; + D0BE6ED9183DEB7A00029BF0 /* NSTextView+JSDExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSTextView+JSDExtensions.h"; path = "balthisar tidy/Classes/Support Pieces/NSTextView+JSDExtensions.h"; sourceTree = SOURCE_ROOT; }; + D0BE6EDA183DEB7A00029BF0 /* NSTextView+JSDExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSTextView+JSDExtensions.m"; path = "balthisar tidy/Classes/Support Pieces/NSTextView+JSDExtensions.m"; sourceTree = SOURCE_ROOT; }; + D0D3BEB7183C87C500692225 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = "balthisar tidy/Base.lproj/MainMenu.xib"; sourceTree = SOURCE_ROOT; }; + D0D3BEBA183C897800692225 /* JSDTableColumn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JSDTableColumn.h; path = "../balthisar tidy/Classes/Support Pieces/JSDTableColumn.h"; sourceTree = ""; }; + D0D3BEBB183C897800692225 /* JSDTableColumn.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = JSDTableColumn.m; path = "../balthisar tidy/Classes/Support Pieces/JSDTableColumn.m"; sourceTree = ""; }; + D0D3BEC0183C897800692225 /* TreeNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TreeNode.h; path = "../balthisar tidy/Classes/Support Pieces/TreeNode.h"; sourceTree = ""; }; + D0D3BEC1183C897800692225 /* TreeNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TreeNode.m; path = "../balthisar tidy/Classes/Support Pieces/TreeNode.m"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - D0B3C57B0CF257E800633C82 /* Frameworks */ = { + D016A923182FD80700712C60 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D0B3C57C0CF257E800633C82 /* Cocoa.framework in Frameworks */, + D016A92A182FD80700712C60 /* Cocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1058C7A6FEA54F5311CA2CBB /* Linked Frameworks */ = { + D016A91D182FD80700712C60 = { isa = PBXGroup; children = ( - 1058C7A7FEA54F5311CA2CBB /* Cocoa.framework */, + D016A92F182FD80700712C60 /* Balthisar Tidy */, + D016A928182FD80700712C60 /* Frameworks */, + D016A927182FD80700712C60 /* Products */, ); - name = "Linked Frameworks"; sourceTree = ""; }; - 1058C7A8FEA54F5311CA2CBB /* Other Frameworks */ = { + D016A927182FD80700712C60 /* Products */ = { isa = PBXGroup; children = ( - 2A37F4C5FDCFA73011CA2CEA /* Foundation.framework */, - 2A37F4C4FDCFA73011CA2CEA /* AppKit.framework */, - ); - name = "Other Frameworks"; - sourceTree = ""; - }; - 19C28FB0FE9D524F11CA2CBB /* Products */ = { - isa = PBXGroup; - children = ( - D0B3C5810CF257E800633C82 /* Balthisar Tidy.app */, + D016A926182FD80700712C60 /* Balthisar Tidy.app */, ); name = Products; sourceTree = ""; }; - 2A37F4AAFDCFA73011CA2CEA /* Balthisar Tidy */ = { + D016A928182FD80700712C60 /* Frameworks */ = { isa = PBXGroup; children = ( - F53BB0B703EE056301A80165 /* README.rtf */, - 2A37F4ABFDCFA73011CA2CEA /* Classes */, - 2A37F4AFFDCFA73011CA2CEA /* Other Sources */, - 2A37F4B8FDCFA73011CA2CEA /* Resources */, - 2A37F4C3FDCFA73011CA2CEA /* Frameworks */, - 19C28FB0FE9D524F11CA2CBB /* Products */, + D016A929182FD80700712C60 /* Cocoa.framework */, + D016A94B182FD80700712C60 /* XCTest.framework */, + D016A92B182FD80700712C60 /* Other Frameworks */, ); - name = "Balthisar Tidy"; + name = Frameworks; sourceTree = ""; }; - 2A37F4ABFDCFA73011CA2CEA /* Classes */ = { + D016A92B182FD80700712C60 /* Other Frameworks */ = { isa = PBXGroup; children = ( - F56B449503EB35EE01A80165 /* App Pieces */, - F56B449603EB360C01A80165 /* Support Pieces */, - F56B449703EB363401A80165 /* JSDTidy */, + D016A92C182FD80700712C60 /* AppKit.framework */, + D016A92D182FD80700712C60 /* CoreData.framework */, + D016A92E182FD80700712C60 /* Foundation.framework */, ); - path = Classes; - sourceTree = SOURCE_ROOT; - }; - 2A37F4AFFDCFA73011CA2CEA /* Other Sources */ = { - isa = PBXGroup; - children = ( - F5CCB4250364D26D01A80165 /* tidylib-src */, - 2A37F4B0FDCFA73011CA2CEA /* main.m */, - ); - name = "Other Sources"; + name = "Other Frameworks"; sourceTree = ""; }; - 2A37F4B8FDCFA73011CA2CEA /* Resources */ = { + D016A92F182FD80700712C60 /* Balthisar Tidy */ = { isa = PBXGroup; children = ( - D0B3C5850CF258A800633C82 /* Balthisar Tidy.plist */, - F56A531C0378639001A80165 /* Localizable.strings */, - F54086D703E47DAE01A80165 /* optionsInEffect.txt */, - F589D0DC03EDB68501A80165 /* optionsTypesExceptions.txt */, - F57707310371F19101A80165 /* icons */, - 2A37F4B6FDCFA73011CA2CEA /* MainMenu.nib */, - F5D1B574036AF40C01A80165 /* Batch.nib */, - F5D1B577036AF44801A80165 /* Preferences.nib */, - F56B449C03EB3B8E01A80165 /* OptionPane.nib */, - 089C165FFE840EACC02AAC07 /* InfoPlist.strings */, - F53C0C0E03DC7F9401A80166 /* TidyDocument.nib */, - ); - name = Resources; - sourceTree = ""; + D026169F1836F927002ABD72 /* Classes */, + D07AF49A183658F100913067 /* Base.lproj */, + D016A935182FD80700712C60 /* main.m */, + D026169E1836F48A002ABD72 /* Balthisar Tidy.entitlements */, + D016A931182FD80700712C60 /* Balthisar Tidy-Info.plist */, + D013B516184F18A100F30654 /* Balthisar Tidy Signed-Info.plist */, + D016A937182FD80700712C60 /* Balthisar Tidy-Prefix.pch */, + D016A944182FD80700712C60 /* Images.xcassets */, + D02B30CC184ED25100A60556 /* PHP.icns */, + D02B30C9184EC4FF00A60556 /* HTML.icns */, + D09D8D1F18461FD000AFB4FA /* tidylib-source */, + ); + path = "Balthisar Tidy"; + sourceTree = SOURCE_ROOT; }; - 2A37F4C3FDCFA73011CA2CEA /* Frameworks */ = { + D026169F1836F927002ABD72 /* Classes */ = { isa = PBXGroup; children = ( - 1058C7A6FEA54F5311CA2CBB /* Linked Frameworks */, - 1058C7A8FEA54F5311CA2CBB /* Other Frameworks */, + D07AF48A183658D300913067 /* App Pieces */, + D07AF49B1836591400913067 /* JSDTidy */, + D07AF49C1836592300913067 /* Support Pieces */, ); - name = Frameworks; + name = Classes; sourceTree = ""; }; - F56B449503EB35EE01A80165 /* App Pieces */ = { + D07AF48A183658D300913067 /* App Pieces */ = { isa = PBXGroup; children = ( - F5BD14FD0368BA4E01A80166 /* AppController.h */, - F5BD14FE0368BA4E01A80166 /* AppController.m */, - F5FE7E94037595EB01A80165 /* BatchController.h */, - F5FE7E95037595EB01A80165 /* BatchController.m */, - F5FE7E90037595DC01A80165 /* PreferenceController.h */, - F5FE7E91037595DC01A80165 /* PreferenceController.m */, - F53C0C1303DC802601A80166 /* TidyDocument.h */, - F53C0C1403DC802601A80166 /* TidyDocument.m */, - F589D0C803ED90EB01A80165 /* OptionPaneController.h */, - F589D0C903ED90EB01A80165 /* OptionPaneController.m */, + D07AF48B183658D300913067 /* AppController.h */, + D07AF48C183658D300913067 /* AppController.m */, + D07AF48F183658D300913067 /* OptionPaneController.h */, + D07AF490183658D300913067 /* OptionPaneController.m */, + D07AF491183658D300913067 /* PreferenceController.h */, + D07AF492183658D300913067 /* PreferenceController.m */, + D07AF493183658D300913067 /* TidyDocument.h */, + D07AF494183658D300913067 /* TidyDocument.m */, ); name = "App Pieces"; path = "Classes/App Pieces"; - sourceTree = SOURCE_ROOT; + sourceTree = ""; }; - F56B449603EB360C01A80165 /* Support Pieces */ = { + D07AF49A183658F100913067 /* Base.lproj */ = { isa = PBXGroup; children = ( - F554CD9D03F5990701A80165 /* JSDTableView.h */, - F554CD9E03F5990701A80165 /* JSDTableView.m */, - F53C160B03DCDE6401A80166 /* JSDTableColumn.h */, - F53C160C03DCDE6401A80166 /* JSDTableColumn.m */, - F5CEFEC3037B441A01A80166 /* TreeNode.h */, - F5CEFEC4037B441A01A80166 /* TreeNode.m */, - F5D1F42404095DB101A80165 /* JSDTextView.h */, - F5D1F42504095DB101A80165 /* JSDTextView.m */, - ); - name = "Support Pieces"; - path = "Classes/Support Pieces"; - sourceTree = SOURCE_ROOT; + D0120B55183CCAB3003CA182 /* Localizable.strings */, + D0A4E1D2183A556300999979 /* optionsInEffect.txt */, + D0A4E1D4183A556300999979 /* optionsTypesExceptions.txt */, + D07AF4781836581E00913067 /* Batch.xib */, + D0D3BEB6183C87C500692225 /* MainMenu.xib */, + D07AF47A1836581E00913067 /* OptionPane.xib */, + D07AF47C1836581E00913067 /* Preferences.xib */, + D07AF47E1836581E00913067 /* TidyDocument.xib */, + D01AED8318476F6B001300E3 /* Credits.rtf */, + ); + name = Base.lproj; + sourceTree = ""; }; - F56B449703EB363401A80165 /* JSDTidy */ = { + D07AF49B1836591400913067 /* JSDTidy */ = { isa = PBXGroup; children = ( - F5DCE620041BD59401A80165 /* JSDTidy.rtf */, - F5E425A8039A983701A80165 /* JSDTidy.h */, - F5E425A9039A983701A80165 /* JSDTidy.m */, + D07AF49D1836593900913067 /* JSDTidyDocument.h */, + D07AF49E1836593A00913067 /* JSDTidyDocument.m */, ); name = JSDTidy; - path = Classes/JSDTidy; - sourceTree = SOURCE_ROOT; - }; - F57707310371F19101A80165 /* icons */ = { - isa = PBXGroup; - children = ( - F5BBA03E0371F6C401A80165 /* iconbroom.icns */, - F5BBA03F0371F6C401A80165 /* iconhtm.icns */, - F5BBA0400371F6C401A80165 /* iconhtml.icns */, - F5BBA0410371F6C401A80165 /* iconphp.icns */, - ); - name = icons; sourceTree = ""; }; - F5CCB4250364D26D01A80165 /* tidylib-src */ = { + D07AF49C1836592300913067 /* Support Pieces */ = { isa = PBXGroup; children = ( - F5CCB4270364D26D01A80165 /* console */, - F5CCB42A0364D26D01A80165 /* include */, - F5CCB4300364D26D01A80165 /* src */, + D0D3BEBA183C897800692225 /* JSDTableColumn.h */, + D0D3BEBB183C897800692225 /* JSDTableColumn.m */, + D0D3BEC0183C897800692225 /* TreeNode.h */, + D0D3BEC1183C897800692225 /* TreeNode.m */, + D04B0511183F15F500C0F70F /* NoodleLineNumberMarker.h */, + D04B0512183F15F500C0F70F /* NoodleLineNumberMarker.m */, + D04B050E183F158800C0F70F /* NoodleLineNumberView.h */, + D04B050F183F158800C0F70F /* NoodleLineNumberView.m */, + D0BE6ED9183DEB7A00029BF0 /* NSTextView+JSDExtensions.h */, + D0BE6EDA183DEB7A00029BF0 /* NSTextView+JSDExtensions.m */, ); - path = "tidylib-src"; + name = "Support Pieces"; sourceTree = ""; }; - F5CCB4270364D26D01A80165 /* console */ = { + D09D8D1F18461FD000AFB4FA /* tidylib-source */ = { isa = PBXGroup; children = ( - F5CCB4280364D26D01A80165 /* tab2space.c */, - F5CCB4290364D26D01A80165 /* tidy.c */, + D09D8D241846206C00AFB4FA /* include */, + D09D8D251846207400AFB4FA /* src */, ); - path = console; + name = "tidylib-source"; sourceTree = ""; }; - F5CCB42A0364D26D01A80165 /* include */ = { + D09D8D241846206C00AFB4FA /* include */ = { isa = PBXGroup; children = ( - F5CCB42B0364D26D01A80165 /* buffio.h */, - F5CCB42C0364D26D01A80165 /* fileio.h */, - F5CCB42D0364D26D01A80165 /* platform.h */, - F5CCB42E0364D26D01A80165 /* tidy.h */, - F5CCB42F0364D26D01A80165 /* tidyenum.h */, + D09D8D261846208500AFB4FA /* buffio.h */, + D09D8D271846208500AFB4FA /* platform.h */, + D09D8D281846208500AFB4FA /* tidy.h */, + D09D8D291846208500AFB4FA /* tidyenum.h */, ); - path = include; + name = include; sourceTree = ""; }; - F5CCB4300364D26D01A80165 /* src */ = { + D09D8D251846207400AFB4FA /* src */ = { isa = PBXGroup; children = ( - F5CCB4310364D26D01A80165 /* access.c */, - F5CCB4320364D26D01A80165 /* access.h */, - F5CCB4330364D26D01A80165 /* alloc.c */, - F5CCB4340364D26D01A80165 /* attrask.c */, - F5CCB4350364D26D01A80165 /* attrget.c */, - F5CCB4360364D26D01A80165 /* attrs.c */, - F5CCB4370364D26D01A80165 /* attrs.h */, - F5CCB4380364D26D01A80165 /* buffio.c */, - F5CCB4390364D26D01A80165 /* clean.c */, - F5CCB43A0364D26D01A80165 /* clean.h */, - F5CCB43B0364D26D01A80165 /* config.c */, - F5CCB43C0364D26D01A80165 /* config.h */, - F5CCB43D0364D26D01A80165 /* entities.c */, - F5CCB43E0364D26D01A80165 /* entities.h */, - F5CCB43F0364D26D01A80165 /* fileio.c */, - F5CCB4400364D26D01A80165 /* forward.h */, - F5CCB4410364D26D01A80165 /* istack.c */, - F5CCB4420364D26D01A80165 /* lexer.c */, - F5CCB4430364D26D01A80165 /* lexer.h */, - F5CCB4440364D26D01A80165 /* localize.c */, - F5CCB4450364D26D01A80165 /* message.h */, - F5CCB4460364D26D01A80165 /* parser.c */, - F5CCB4470364D26D01A80165 /* parser.h */, - F5CCB4480364D26D01A80165 /* pprint.c */, - F5CCB4490364D26D01A80165 /* pprint.h */, - F5CCB44A0364D26D01A80165 /* streamio.c */, - F5CCB44B0364D26D01A80165 /* streamio.h */, - F5CCB44C0364D26D01A80165 /* tagask.c */, - F5CCB44D0364D26D01A80165 /* tags.c */, - F5CCB44E0364D26D01A80165 /* tags.h */, - F5CCB44F0364D26D01A80165 /* tidy-int.h */, - F5CCB4500364D26D01A80165 /* tidylib.c */, - F5CCB4510364D26D01A80165 /* tmbstr.c */, - F5CCB4520364D26D01A80165 /* tmbstr.h */, - F5CCB4530364D26D01A80165 /* utf8.c */, - F5CCB4540364D26D01A80165 /* utf8.h */, - ); - path = src; + D09D8D2A1846209200AFB4FA /* access.c */, + D09D8D2B1846209200AFB4FA /* access.h */, + D09D8D2C1846209200AFB4FA /* alloc.c */, + D09D8D2D1846209200AFB4FA /* attrask.c */, + D09D8D2E1846209200AFB4FA /* attrdict.c */, + D09D8D2F1846209200AFB4FA /* attrdict.h */, + D09D8D301846209200AFB4FA /* attrget.c */, + D09D8D311846209200AFB4FA /* attrs.c */, + D09D8D321846209200AFB4FA /* attrs.h */, + D09D8D331846209200AFB4FA /* buffio.c */, + D09D8D341846209200AFB4FA /* charsets.c */, + D09D8D351846209200AFB4FA /* charsets.h */, + D09D8D361846209200AFB4FA /* clean.c */, + D09D8D371846209200AFB4FA /* clean.h */, + D09D8D381846209200AFB4FA /* config.c */, + D09D8D391846209200AFB4FA /* config.h */, + D09D8D3A1846209200AFB4FA /* entities.c */, + D09D8D3B1846209200AFB4FA /* entities.h */, + D09D8D3C1846209200AFB4FA /* fileio.c */, + D09D8D3D1846209200AFB4FA /* fileio.h */, + D09D8D3E1846209200AFB4FA /* forward.h */, + D09D8D3F1846209200AFB4FA /* gdoc.c */, + D09D8D401846209200AFB4FA /* gdoc.h */, + D09D8D411846209200AFB4FA /* iconvtc.c */, + D09D8D421846209200AFB4FA /* iconvtc.h */, + D09D8D431846209200AFB4FA /* istack.c */, + D09D8D441846209200AFB4FA /* lexer.c */, + D09D8D451846209200AFB4FA /* lexer.h */, + D09D8D461846209200AFB4FA /* localize.c */, + D09D8D471846209200AFB4FA /* mappedio.c */, + D09D8D481846209200AFB4FA /* mappedio.h */, + D09D8D491846209200AFB4FA /* message.h */, + D09D8D4A1846209200AFB4FA /* parser.c */, + D09D8D4B1846209200AFB4FA /* parser.h */, + D09D8D4C1846209200AFB4FA /* pprint.c */, + D09D8D4D1846209200AFB4FA /* pprint.h */, + D09D8D4E1846209200AFB4FA /* streamio.c */, + D09D8D4F1846209200AFB4FA /* streamio.h */, + D09D8D501846209200AFB4FA /* tagask.c */, + D09D8D511846209200AFB4FA /* tags.c */, + D09D8D521846209200AFB4FA /* tags.h */, + D09D8D531846209200AFB4FA /* tidy-int.h */, + D09D8D541846209200AFB4FA /* tidylib.c */, + D09D8D551846209200AFB4FA /* tmbstr.c */, + D09D8D561846209200AFB4FA /* tmbstr.h */, + D09D8D571846209200AFB4FA /* utf8.c */, + D09D8D581846209200AFB4FA /* utf8.h */, + D09D8D591846209200AFB4FA /* version.h */, + D09D8D5A1846209200AFB4FA /* win32tc.c */, + D09D8D5B1846209200AFB4FA /* win32tc.h */, + ); + name = src; sourceTree = ""; }; /* End PBXGroup section */ -/* Begin PBXHeadersBuildPhase section */ - D0B3C52D0CF257E800633C82 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D0B3C52E0CF257E800633C82 /* buffio.h in Headers */, - D0B3C52F0CF257E800633C82 /* fileio.h in Headers */, - D0B3C5300CF257E800633C82 /* platform.h in Headers */, - D0B3C5310CF257E800633C82 /* tidy.h in Headers */, - D0B3C5320CF257E800633C82 /* tidyenum.h in Headers */, - D0B3C5330CF257E800633C82 /* access.h in Headers */, - D0B3C5340CF257E800633C82 /* attrs.h in Headers */, - D0B3C5350CF257E800633C82 /* clean.h in Headers */, - D0B3C5360CF257E800633C82 /* config.h in Headers */, - D0B3C5370CF257E800633C82 /* entities.h in Headers */, - D0B3C5380CF257E800633C82 /* forward.h in Headers */, - D0B3C5390CF257E800633C82 /* lexer.h in Headers */, - D0B3C53A0CF257E800633C82 /* message.h in Headers */, - D0B3C53B0CF257E800633C82 /* parser.h in Headers */, - D0B3C53C0CF257E800633C82 /* pprint.h in Headers */, - D0B3C53D0CF257E800633C82 /* streamio.h in Headers */, - D0B3C53E0CF257E800633C82 /* tags.h in Headers */, - D0B3C53F0CF257E800633C82 /* tidy-int.h in Headers */, - D0B3C5400CF257E800633C82 /* tmbstr.h in Headers */, - D0B3C5410CF257E800633C82 /* utf8.h in Headers */, - D0B3C5420CF257E800633C82 /* AppController.h in Headers */, - D0B3C5430CF257E800633C82 /* PreferenceController.h in Headers */, - D0B3C5440CF257E800633C82 /* BatchController.h in Headers */, - D0B3C5450CF257E800633C82 /* TreeNode.h in Headers */, - D0B3C5460CF257E800633C82 /* JSDTidy.h in Headers */, - D0B3C5470CF257E800633C82 /* TidyDocument.h in Headers */, - D0B3C5480CF257E800633C82 /* JSDTableColumn.h in Headers */, - D0B3C5490CF257E800633C82 /* OptionPaneController.h in Headers */, - D0B3C54A0CF257E800633C82 /* JSDTableView.h in Headers */, - D0B3C54B0CF257E800633C82 /* JSDTextView.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - /* Begin PBXNativeTarget section */ - D0B3C52C0CF257E800633C82 /* Balthisar Tidy */ = { + D016A925182FD80700712C60 /* Balthisar Tidy */ = { isa = PBXNativeTarget; - buildConfigurationList = D0B3C57D0CF257E800633C82 /* Build configuration list for PBXNativeTarget "Balthisar Tidy" */; + buildConfigurationList = D016A95A182FD80700712C60 /* Build configuration list for PBXNativeTarget "Balthisar Tidy" */; buildPhases = ( - D0B3C52D0CF257E800633C82 /* Headers */, - D0B3C54C0CF257E800633C82 /* Resources */, - D0B3C55A0CF257E800633C82 /* Sources */, - D0B3C57B0CF257E800633C82 /* Frameworks */, + D016A922182FD80700712C60 /* Sources */, + D016A923182FD80700712C60 /* Frameworks */, + D016A924182FD80700712C60 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Balthisar Tidy"; - productInstallPath = "$(HOME)/Applications"; productName = "Balthisar Tidy"; - productReference = D0B3C5810CF257E800633C82 /* Balthisar Tidy.app */; + productReference = D016A926182FD80700712C60 /* Balthisar Tidy.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 2A37F4A9FDCFA73011CA2CEA /* Project object */ = { + D016A91E182FD80700712C60 /* Project object */ = { isa = PBXProject; - buildConfigurationList = D012CD420CF2403E00194990 /* Build configuration list for PBXProject "Balthisar Tidy" */; - compatibilityVersion = "Xcode 3.0"; + attributes = { + LastUpgradeCheck = 0500; + ORGANIZATIONNAME = "Jim Derry"; + TargetAttributes = { + D016A925182FD80700712C60 = { + DevelopmentTeam = 9PN2JXXG7Y; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 0; + }; + }; + }; + }; + }; + buildConfigurationList = D016A921182FD80700712C60 /* Build configuration list for PBXProject "Balthisar Tidy" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; hasScannedForEncodings = 0; - mainGroup = 2A37F4AAFDCFA73011CA2CEA /* Balthisar Tidy */; + knownRegions = ( + en, + Base, + ); + mainGroup = D016A91D182FD80700712C60; + productRefGroup = D016A927182FD80700712C60 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - D0B3C52C0CF257E800633C82 /* Balthisar Tidy */, + D016A925182FD80700712C60 /* Balthisar Tidy */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - D0B3C54C0CF257E800633C82 /* Resources */ = { + D016A924182FD80700712C60 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - D0B3C54D0CF257E800633C82 /* MainMenu.nib in Resources */, - D0B3C54E0CF257E800633C82 /* InfoPlist.strings in Resources */, - D0B3C54F0CF257E800633C82 /* Batch.nib in Resources */, - D0B3C5500CF257E800633C82 /* Preferences.nib in Resources */, - D0B3C5510CF257E800633C82 /* iconbroom.icns in Resources */, - D0B3C5520CF257E800633C82 /* iconhtm.icns in Resources */, - D0B3C5530CF257E800633C82 /* iconhtml.icns in Resources */, - D0B3C5540CF257E800633C82 /* iconphp.icns in Resources */, - D0B3C5550CF257E800633C82 /* Localizable.strings in Resources */, - D0B3C5560CF257E800633C82 /* TidyDocument.nib in Resources */, - D0B3C5570CF257E800633C82 /* optionsInEffect.txt in Resources */, - D0B3C5580CF257E800633C82 /* OptionPane.nib in Resources */, - D0B3C5590CF257E800633C82 /* optionsTypesExceptions.txt in Resources */, - D0B3C5860CF258A800633C82 /* Balthisar Tidy.plist in Resources */, + D02B30CA184EC4FF00A60556 /* HTML.icns in Resources */, + D0107935183C738F00120B57 /* Batch.xib in Resources */, + D0107937183C738F00120B57 /* OptionPane.xib in Resources */, + D0107938183C738F00120B57 /* Preferences.xib in Resources */, + D02B30CE184ED25100A60556 /* PHP.icns in Resources */, + D0107939183C738F00120B57 /* TidyDocument.xib in Resources */, + D016A945182FD80700712C60 /* Images.xcassets in Resources */, + D0120B57183CCAB3003CA182 /* Localizable.strings in Resources */, + D0A4E1D6183A556300999979 /* optionsInEffect.txt in Resources */, + D0A4E1D7183A556300999979 /* optionsTypesExceptions.txt in Resources */, + D01AED8518476F6B001300E3 /* Credits.rtf in Resources */, + D0D3BEB8183C87C500692225 /* MainMenu.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - D0B3C55A0CF257E800633C82 /* Sources */ = { + D016A922182FD80700712C60 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D0B3C55B0CF257E800633C82 /* access.c in Sources */, - D0B3C55C0CF257E800633C82 /* alloc.c in Sources */, - D0B3C55D0CF257E800633C82 /* attrask.c in Sources */, - D0B3C55E0CF257E800633C82 /* attrget.c in Sources */, - D0B3C55F0CF257E800633C82 /* attrs.c in Sources */, - D0B3C5600CF257E800633C82 /* buffio.c in Sources */, - D0B3C5610CF257E800633C82 /* clean.c in Sources */, - D0B3C5620CF257E800633C82 /* config.c in Sources */, - D0B3C5630CF257E800633C82 /* entities.c in Sources */, - D0B3C5640CF257E800633C82 /* fileio.c in Sources */, - D0B3C5650CF257E800633C82 /* istack.c in Sources */, - D0B3C5660CF257E800633C82 /* lexer.c in Sources */, - D0B3C5670CF257E800633C82 /* localize.c in Sources */, - D0B3C5680CF257E800633C82 /* parser.c in Sources */, - D0B3C5690CF257E800633C82 /* pprint.c in Sources */, - D0B3C56A0CF257E800633C82 /* streamio.c in Sources */, - D0B3C56B0CF257E800633C82 /* tagask.c in Sources */, - D0B3C56C0CF257E800633C82 /* tags.c in Sources */, - D0B3C56D0CF257E800633C82 /* tidylib.c in Sources */, - D0B3C56E0CF257E800633C82 /* tmbstr.c in Sources */, - D0B3C56F0CF257E800633C82 /* utf8.c in Sources */, - D0B3C5700CF257E800633C82 /* AppController.m in Sources */, - D0B3C5710CF257E800633C82 /* PreferenceController.m in Sources */, - D0B3C5720CF257E800633C82 /* BatchController.m in Sources */, - D0B3C5730CF257E800633C82 /* TreeNode.m in Sources */, - D0B3C5740CF257E800633C82 /* JSDTidy.m in Sources */, - D0B3C5750CF257E800633C82 /* TidyDocument.m in Sources */, - D0B3C5760CF257E800633C82 /* JSDTableColumn.m in Sources */, - D0B3C5770CF257E800633C82 /* OptionPaneController.m in Sources */, - D0B3C5780CF257E800633C82 /* main.m in Sources */, - D0B3C5790CF257E800633C82 /* JSDTableView.m in Sources */, - D0B3C57A0CF257E800633C82 /* JSDTextView.m in Sources */, + D09D8D631846209200AFB4FA /* charsets.c in Sources */, + D09D8D601846209200AFB4FA /* attrget.c in Sources */, + D07AF49F1836593A00913067 /* JSDTidyDocument.m in Sources */, + D09D8D5D1846209200AFB4FA /* alloc.c in Sources */, + D09D8D761846209200AFB4FA /* win32tc.c in Sources */, + D07AF499183658D300913067 /* TidyDocument.m in Sources */, + D04B0513183F15F500C0F70F /* NoodleLineNumberMarker.m in Sources */, + D09D8D641846209200AFB4FA /* clean.c in Sources */, + D09D8D661846209200AFB4FA /* entities.c in Sources */, + D09D8D741846209200AFB4FA /* tmbstr.c in Sources */, + D09D8D6B1846209200AFB4FA /* lexer.c in Sources */, + D0D3BEC2183C897800692225 /* JSDTableColumn.m in Sources */, + D016A936182FD80700712C60 /* main.m in Sources */, + D04B0510183F158800C0F70F /* NoodleLineNumberView.m in Sources */, + D09D8D5E1846209200AFB4FA /* attrask.c in Sources */, + D09D8D6A1846209200AFB4FA /* istack.c in Sources */, + D09D8D691846209200AFB4FA /* iconvtc.c in Sources */, + D09D8D721846209200AFB4FA /* tags.c in Sources */, + D07AF495183658D300913067 /* AppController.m in Sources */, + D09D8D6D1846209200AFB4FA /* mappedio.c in Sources */, + D07AF498183658D300913067 /* PreferenceController.m in Sources */, + D09D8D5F1846209200AFB4FA /* attrdict.c in Sources */, + D09D8D681846209200AFB4FA /* gdoc.c in Sources */, + D09D8D611846209200AFB4FA /* attrs.c in Sources */, + D09D8D621846209200AFB4FA /* buffio.c in Sources */, + D09D8D6F1846209200AFB4FA /* pprint.c in Sources */, + D09D8D671846209200AFB4FA /* fileio.c in Sources */, + D09D8D6C1846209200AFB4FA /* localize.c in Sources */, + D09D8D6E1846209200AFB4FA /* parser.c in Sources */, + D09D8D751846209200AFB4FA /* utf8.c in Sources */, + D0BE6EDB183DEB7A00029BF0 /* NSTextView+JSDExtensions.m in Sources */, + D07AF497183658D300913067 /* OptionPaneController.m in Sources */, + D09D8D5C1846209200AFB4FA /* access.c in Sources */, + D09D8D711846209200AFB4FA /* tagask.c in Sources */, + D0D3BEC5183C897800692225 /* TreeNode.m in Sources */, + D09D8D651846209200AFB4FA /* config.c in Sources */, + D09D8D701846209200AFB4FA /* streamio.c in Sources */, + D09D8D731846209200AFB4FA /* tidylib.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ - 089C165FFE840EACC02AAC07 /* InfoPlist.strings */ = { + D0120B55183CCAB3003CA182 /* Localizable.strings */ = { isa = PBXVariantGroup; children = ( - 089C1660FE840EACC02AAC07 /* English */, + D0120B56183CCAB3003CA182 /* Base */, ); - name = InfoPlist.strings; + name = Localizable.strings; sourceTree = ""; }; - 2A37F4B6FDCFA73011CA2CEA /* MainMenu.nib */ = { + D01AED8318476F6B001300E3 /* Credits.rtf */ = { isa = PBXVariantGroup; children = ( - 2A37F4B7FDCFA73011CA2CEA /* English */, + D01AED8418476F6B001300E3 /* Base */, ); - name = MainMenu.nib; + name = Credits.rtf; sourceTree = ""; }; - F53C0C0E03DC7F9401A80166 /* TidyDocument.nib */ = { + D07AF4781836581E00913067 /* Batch.xib */ = { isa = PBXVariantGroup; children = ( - F53C0C0F03DC7F9401A80166 /* English */, + D07AF4791836581E00913067 /* Base */, ); - name = TidyDocument.nib; + name = Batch.xib; sourceTree = ""; }; - F54086D703E47DAE01A80165 /* optionsInEffect.txt */ = { + D07AF47A1836581E00913067 /* OptionPane.xib */ = { isa = PBXVariantGroup; children = ( - F54086D803E47DAE01A80165 /* English */, + D07AF47B1836581E00913067 /* Base */, ); - name = optionsInEffect.txt; + name = OptionPane.xib; sourceTree = ""; }; - F56A531C0378639001A80165 /* Localizable.strings */ = { + D07AF47C1836581E00913067 /* Preferences.xib */ = { isa = PBXVariantGroup; children = ( - F56A531D0378639001A80165 /* English */, + D07AF47D1836581E00913067 /* Base */, ); - name = Localizable.strings; + name = Preferences.xib; sourceTree = ""; }; - F56B449C03EB3B8E01A80165 /* OptionPane.nib */ = { + D07AF47E1836581E00913067 /* TidyDocument.xib */ = { isa = PBXVariantGroup; children = ( - F56B449D03EB3B8E01A80165 /* English */, + D07AF47F1836581E00913067 /* Base */, ); - name = OptionPane.nib; + name = TidyDocument.xib; sourceTree = ""; }; - F589D0DC03EDB68501A80165 /* optionsTypesExceptions.txt */ = { + D0A4E1D2183A556300999979 /* optionsInEffect.txt */ = { isa = PBXVariantGroup; children = ( - F589D0DD03EDB68501A80165 /* English */, + D0A4E1D3183A556300999979 /* Base */, ); - name = optionsTypesExceptions.txt; + name = optionsInEffect.txt; sourceTree = ""; }; - F5D1B574036AF40C01A80165 /* Batch.nib */ = { + D0A4E1D4183A556300999979 /* optionsTypesExceptions.txt */ = { isa = PBXVariantGroup; children = ( - F5D1B575036AF40C01A80165 /* English */, + D0A4E1D5183A556300999979 /* Base */, ); - name = Batch.nib; + name = optionsTypesExceptions.txt; sourceTree = ""; }; - F5D1B577036AF44801A80165 /* Preferences.nib */ = { + D0D3BEB6183C87C500692225 /* MainMenu.xib */ = { isa = PBXVariantGroup; children = ( - F5D1B578036AF44801A80165 /* English */, + D0D3BEB7183C87C500692225 /* Base */, ); - name = Preferences.nib; + name = MainMenu.xib; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - D012CD430CF2403E00194990 /* Development */ = { + D016A958182FD80700712C60 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = ( - ppc64, - ppc7400, - ppc970, - i386, - x86_64, - ppc, + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = NO; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", ); - SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk"; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.9; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; }; - name = Development; + name = Debug; }; - D012CD440CF2403E00194990 /* Deployment */ = { + D016A959182FD80700712C60 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = ( - ppc64, - ppc7400, - ppc970, - i386, - x86_64, - ppc, - ); - SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk"; - VALID_ARCHS = "ppc64 ppc7400 ppc970 i386 x86_64 ppc"; + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = NO; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.9; + ONLY_ACTIVE_ARCH = NO; + SDKROOT = macosx; }; - name = Deployment; + name = Release; }; - D0B3C57E0CF257E800633C82 /* Development */ = { + D016A95B182FD80700712C60 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = ( - i386, - ppc, - ); - COPY_PHASE_STRIP = NO; - FRAMEWORK_SEARCH_PATHS = ""; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_GENERATE_DEBUGGING_SYMBOLS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - HEADER_SEARCH_PATHS = ""; - INFOPLIST_FILE = "Balthisar Tidy.plist"; - INSTALL_PATH = "$(HOME)/Applications"; - LIBRARY_SEARCH_PATHS = ""; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "Balthisar Tidy"; - SECTORDER_FLAGS = ""; - WARNING_CFLAGS = ( - "-Wmost", - "-Wno-four-char-constants", - "-Wno-unknown-pragmas", - ); + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = ""; + COMBINE_HIDPI_IMAGES = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Balthisar Tidy/Balthisar Tidy-Prefix.pch"; + INFOPLIST_FILE = "Balthisar Tidy/Balthisar Tidy-Info.plist"; + MACOSX_DEPLOYMENT_TARGET = 10.9; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = ""; WRAPPER_EXTENSION = app; - ZERO_LINK = YES; }; - name = Development; + name = Debug; }; - D0B3C57F0CF257E800633C82 /* Deployment */ = { + D016A95C182FD80700712C60 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = ( - i386, - ppc, - ); - COPY_PHASE_STRIP = YES; - FRAMEWORK_SEARCH_PATHS = ""; - GCC_ENABLE_FIX_AND_CONTINUE = NO; - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - HEADER_SEARCH_PATHS = ""; - INFOPLIST_FILE = "Balthisar Tidy.plist"; - INSTALL_PATH = "$(HOME)/Applications"; - LIBRARY_SEARCH_PATHS = ""; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "Balthisar Tidy"; - SECTORDER_FLAGS = ""; - WARNING_CFLAGS = ( - "-Wmost", - "-Wno-four-char-constants", - "-Wno-unknown-pragmas", - ); + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = ""; + COMBINE_HIDPI_IMAGES = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Balthisar Tidy/Balthisar Tidy-Prefix.pch"; + INFOPLIST_FILE = "Balthisar Tidy/Balthisar Tidy-Info.plist"; + MACOSX_DEPLOYMENT_TARGET = 10.9; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = ""; WRAPPER_EXTENSION = app; - ZERO_LINK = NO; }; - name = Deployment; + name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - D012CD420CF2403E00194990 /* Build configuration list for PBXProject "Balthisar Tidy" */ = { + D016A921182FD80700712C60 /* Build configuration list for PBXProject "Balthisar Tidy" */ = { isa = XCConfigurationList; buildConfigurations = ( - D012CD430CF2403E00194990 /* Development */, - D012CD440CF2403E00194990 /* Deployment */, + D016A958182FD80700712C60 /* Debug */, + D016A959182FD80700712C60 /* Release */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Development; + defaultConfigurationName = Release; }; - D0B3C57D0CF257E800633C82 /* Build configuration list for PBXNativeTarget "Balthisar Tidy" */ = { + D016A95A182FD80700712C60 /* Build configuration list for PBXNativeTarget "Balthisar Tidy" */ = { isa = XCConfigurationList; buildConfigurations = ( - D0B3C57E0CF257E800633C82 /* Development */, - D0B3C57F0CF257E800633C82 /* Deployment */, + D016A95B182FD80700712C60 /* Debug */, + D016A95C182FD80700712C60 /* Release */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Development; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = 2A37F4A9FDCFA73011CA2CEA /* Project object */; + rootObject = D016A91E182FD80700712C60 /* Project object */; } diff --git a/Balthisar Tidy/Balthisar Tidy-Info.plist b/Balthisar Tidy/Balthisar Tidy-Info.plist new file mode 100644 index 00000000..fc3fb1b8 --- /dev/null +++ b/Balthisar Tidy/Balthisar Tidy-Info.plist @@ -0,0 +1,88 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDocumentTypes + + + CFBundleTypeExtensions + + html + htm + + CFBundleTypeIconFile + HTML + CFBundleTypeMIMETypes + + text/html + + CFBundleTypeName + HTML FIle + CFBundleTypeRole + Editor + LSItemContentTypes + + public.html + + LSTypeIsPackage + 0 + NSDocumentClass + TidyDocument + + + CFBundleTypeExtensions + + php + + CFBundleTypeIconFile + PHP + CFBundleTypeMIMETypes + + text/html + + CFBundleTypeName + PHP File + CFBundleTypeRole + Editor + LSItemContentTypes + + public.php-script + + LSTypeIsPackage + 0 + NSDocumentClass + TidyDocument + + + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.balthisar.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 0.725 + CFBundleSignature + ???? + CFBundleVersion + 0.7.250 + LSApplicationCategoryType + public.app-category.developer-tools + LSMinimumSystemVersion + ${MACOSX_DEPLOYMENT_TARGET} + NSHumanReadableCopyright + Copyright © 2013 James S. Derry. All rights reserved. + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/Balthisar Tidy/Balthisar Tidy-Prefix.pch b/Balthisar Tidy/Balthisar Tidy-Prefix.pch new file mode 100644 index 00000000..35d76409 --- /dev/null +++ b/Balthisar Tidy/Balthisar Tidy-Prefix.pch @@ -0,0 +1,9 @@ +// +// Prefix header +// +// The contents of this file are implicitly included at the beginning of every source file. +// + +#ifdef __OBJC__ + #import +#endif diff --git a/Balthisar Tidy/Balthisar Tidy.entitlements b/Balthisar Tidy/Balthisar Tidy.entitlements new file mode 100644 index 00000000..0c67376e --- /dev/null +++ b/Balthisar Tidy/Balthisar Tidy.entitlements @@ -0,0 +1,5 @@ + + + + + diff --git a/Balthisar Tidy/Base.lproj/Batch.xib b/Balthisar Tidy/Base.lproj/Batch.xib new file mode 100755 index 00000000..57a5313e --- /dev/null +++ b/Balthisar Tidy/Base.lproj/Batch.xib @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DISABLED + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Balthisar Tidy/Base.lproj/Credits.rtf b/Balthisar Tidy/Base.lproj/Credits.rtf new file mode 100644 index 00000000..22757e35 --- /dev/null +++ b/Balthisar Tidy/Base.lproj/Credits.rtf @@ -0,0 +1,21 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1265 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;\red83\green83\blue83;} +\paperw12240\paperh15840\margl1440\margr1440\vieww9000\viewh8400\viewkind0 +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\qc + +\f0\fs28 \cf2 Sweep away your poor HTML clutter. +\fs36 \ + +\fs24 \cf0 \ + +\b Thanks to +\b0 \ +TidyLib by Dave Raggett +\i et al +\i0 \ +\'a92002-2013 World Wide Web Consortium\ +\ +NoodleLineNumberView by Paul Kim\ +\'a92012 Noodlesoft, LLC\ +} \ No newline at end of file diff --git a/Balthisar Tidy/Base.lproj/Localizable.strings b/Balthisar Tidy/Base.lproj/Localizable.strings new file mode 100755 index 00000000..f06589d2 --- /dev/null +++ b/Balthisar Tidy/Base.lproj/Localizable.strings @@ -0,0 +1,116 @@ +"WarnSaveDisabled" = "You must use “Save As…†to save this document."; +"WarnSaveDisabledExplain" = "Direct saving of documents is currently disabled in Preferences in order to prevent inadvertent overwriting of original documents. After you’ve done a “Save As…,†this warning will no longer appear, since it will no longer apply."; + +"WarnSaveOverwrite" = "The original document will be replaced with the Tidy’d document."; +"WarnSaveOverwriteExplain" = "You are seeing this message because you’ve set the option in Preferences. Once you’ve saved or saved-as one time, though, this warning will no longer appear, since it will no longer apply."; + +"continue save" = "Save"; +"do not save" = "Don't Save"; +"cancel" = "Cancel"; + +"Info:" = "Information"; +"Warning:" = "Warning"; +"Config:" = "Configuration"; +"Access:" = "Access"; +"Error:" = "Error"; +"Document:" = "Document"; +"Panic:" = "PANIC!"; + +"N/A" = " "; + +"line" = "Line"; +"column" = "Column"; + +"accessibility-check" = "accessibility-check: This option specifies what level of accessibility checking, if any, that Tidy should do. Level 0 is equivalent to Tidy Classic's accessibility checking. For more information on Tidy's accessibility checking, visit the Adaptive Technology Resource Centre at the University of Toronto."; +"add-xml-decl" = "add-xml-decl: This option specifies if Tidy should add the XML declaration when outputting XML or XHTML. Note that if the input already includes an declaration then this option will be ignored. If the encoding for the output is different from 'ascii', one of the utf encodings or 'raw', the declaration is always added as required by the XML standard."; +"add-xml-space" = "add-xml-space: This option specifies if Tidy should add xml:space='preserve' to elements such as
, 
+
+
+

HTML Tidy for HTML5 (experimental)

+

This repo is an experimental fork of the code from + tidy.sourceforge.net. +This source code in this version supports processing of HTML5 documents. +The changes for HTML5 support started from a + patch developed by Björn Höhrmann.

+ +

For more information, see + w3c.github.com/tidy-html5 + +

Building the tidy command-line tool

+

For Linux/BSD/OSX platforms, you can build and install the +tidy command-line tool from the source code using the +following steps.

+ +
    +
  1. make -C build/gmake/
  2. +
  3. make install -C build/gmake/
  4. +
+ +

Note that you will either need to run make install as root, +or with sudo make install.

+ +

Building the libtidy shared library

+

For Linux/BSD/OSX platforms, you can build and install the +tidylib shared library (for use in building other +applications) from the source code using the following steps.

+ +
    +
  1. sh build/gnuauto/setup.sh && ./configure && make
  2. +
  3. make install
  4. +
+ +

Note that you will either need to run make install as root, +or with sudo make install.

diff --git a/Balthisar Tidy/tidylib5-src/README.md b/Balthisar Tidy/tidylib5-src/README.md new file mode 100755 index 00000000..0805fc70 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/README.md @@ -0,0 +1,38 @@ +# HTML Tidy for HTML5 (experimental) + +This repo is an experimental fork of the code from [tidy.sourceforge.net][1]. +This source code in this version supports processing of HTML5 documents. The +changes for HTML5 support started from a [patch developed by Björn Höhrmann][2]. + + [1]: http://tidy.sourceforge.net + + [2]: http://lists.w3.org/Archives/Public/www-archive/2011Nov/0007.html + +For more information, see [w3c.github.com/tidy-html5][3] + + [3]: http://w3c.github.com/tidy-html5/ + +## Building the tidy command-line tool + +For Linux/BSD/OSX platforms, you can build and install the `tidy` command-line +tool from the source code using the following steps. + + 1. `make -C build/gmake/` + + 2. `make install -C build/gmake/` + +Note that you will either need to run `make install` as root, or with `sudo make +install`. + +## Building the libtidy shared library + +For Linux/BSD/OSX platforms, you can build and install the `tidylib` shared +library (for use in building other applications) from the source code using the +following steps. + + 1. sh build/gnuauto/setup.sh && ./configure && make + + 2. make install + +Note that you will either need to run `make install` as root, or with `sudo make +install`. diff --git a/tidylib-src/console/tab2space.c b/Balthisar Tidy/tidylib5-src/console/tab2space.c old mode 100644 new mode 100755 similarity index 93% rename from tidylib-src/console/tab2space.c rename to Balthisar Tidy/tidylib5-src/console/tab2space.c index 413f5227..2cdc4348 --- a/tidylib-src/console/tab2space.c +++ b/Balthisar Tidy/tidylib5-src/console/tab2space.c @@ -27,9 +27,9 @@ typedef struct FILE *fp; } Stream; -int tabsize = TABSIZE; -int endline = DOS_CRLF; -Bool tabs = false; +static int tabsize = TABSIZE; +static int endline = DOS_CRLF; +static Bool tabs = false; /* Memory allocation functions vary from one environment to @@ -70,10 +70,10 @@ void *MemRealloc(void *old, size_t size) void MemFree(void *p) { free(p); - p = null; + p = NULL; } -Stream *NewStream(FILE *fp) +static Stream *NewStream(FILE *fp) { Stream *in; @@ -84,7 +84,7 @@ Stream *NewStream(FILE *fp) return in; } -void FreeStream(Stream *in) +static void FreeStream(Stream *in) { if (in->buf) MemFree(in->buf); @@ -92,7 +92,7 @@ void FreeStream(Stream *in) MemFree(in); } -void AddByte(Stream *in, uint c) +static void AddByte(Stream *in, uint c) { if (in->size + 1 >= in->length) { @@ -120,9 +120,9 @@ void AddByte(Stream *in, uint c) pushback is allowed with UngetChar(c, in). Returns EndOfStream if there's nothing more to read. */ -int ReadChar(Stream *in) +static int ReadChar(Stream *in) { - uint c; + int c; if (in->pushed) { @@ -203,7 +203,7 @@ int ReadChar(Stream *in) return c; } -Stream *ReadFile(FILE *fin) +static Stream *ReadFile(FILE *fin) { int c; Stream *in = NewStream(fin); @@ -214,7 +214,7 @@ Stream *ReadFile(FILE *fin) return in; } -void WriteFile(Stream *in, FILE *fout) +static void WriteFile(Stream *in, FILE *fout) { int i, c; char *p; @@ -245,7 +245,7 @@ void WriteFile(Stream *in, FILE *fout) } } -void HelpText(FILE *errout, char *prog) +static void HelpText(FILE *errout, char *prog) { fprintf(errout, "%s: [options] [infile [outfile]] ...\n", prog); fprintf(errout, "Utility to expand tabs and ensure consistent line endings\n"); @@ -261,9 +261,10 @@ void HelpText(FILE *errout, char *prog) int main(int argc, char **argv) { - char *infile, *outfile, *prog; + char const *infile, *outfile; + char *prog; FILE *fin, *fout; - Stream *in = null; + Stream *in = NULL; prog = argv[0]; @@ -314,7 +315,7 @@ int main(int argc, char **argv) if (argc > 2) { outfile = argv[2]; - fout = null; + fout = NULL; --argc; ++argv; } diff --git a/Balthisar Tidy/tidylib5-src/console/tidy.c b/Balthisar Tidy/tidylib5-src/console/tidy.c new file mode 100755 index 00000000..b1376a8e --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/console/tidy.c @@ -0,0 +1,1346 @@ +/* + tidy.c - HTML TidyLib command line driver + + Copyright (c) 1998-2008 World Wide Web Consortium + (Massachusetts Institute of Technology, European Research + Consortium for Informatics and Mathematics, Keio University). + All Rights Reserved. + +*/ + +#include "tidy.h" + +static FILE* errout = NULL; /* set to stderr */ +/* static FILE* txtout = NULL; */ /* set to stdout */ + +static Bool samefile( ctmbstr filename1, ctmbstr filename2 ) +{ +#if FILENAMES_CASE_SENSITIVE + return ( strcmp( filename1, filename2 ) == 0 ); +#else + return ( strcasecmp( filename1, filename2 ) == 0 ); +#endif +} + +static void outOfMemory(void) +{ + fprintf(stderr,"Out of memory. Bailing out."); + exit(1); +} + +static const char *cutToWhiteSpace(const char *s, uint offset, char *sbuf) +{ + if (!s) + { + sbuf[0] = '\0'; + return NULL; + } + else if (strlen(s) <= offset) + { + strcpy(sbuf,s); + sbuf[offset] = '\0'; + return NULL; + } + else + { + uint j, l, n; + j = offset; + while(j && s[j] != ' ') + --j; + l = j; + n = j+1; + /* no white space */ + if (j==0) + { + l = offset; + n = offset; + } + strncpy(sbuf,s,l); + sbuf[l] = '\0'; + return s+n; + } +} + +static void print2Columns( const char* fmt, uint l1, uint l2, + const char *c1, const char *c2 ) +{ + const char *pc1=c1, *pc2=c2; + char *c1buf = (char *)malloc(l1+1); + char *c2buf = (char *)malloc(l2+1); + if (!c1buf) outOfMemory(); + if (!c2buf) outOfMemory(); + + do + { + pc1 = cutToWhiteSpace(pc1, l1, c1buf); + pc2 = cutToWhiteSpace(pc2, l2, c2buf); + printf(fmt, + c1buf[0]!='\0'?c1buf:"", + c2buf[0]!='\0'?c2buf:""); + } while (pc1 || pc2); + free(c1buf); + free(c2buf); +} + +static void print3Columns( const char* fmt, uint l1, uint l2, uint l3, + const char *c1, const char *c2, const char *c3 ) +{ + const char *pc1=c1, *pc2=c2, *pc3=c3; + char *c1buf = (char *)malloc(l1+1); + char *c2buf = (char *)malloc(l2+1); + char *c3buf = (char *)malloc(l3+1); + if (!c1buf) outOfMemory(); + if (!c2buf) outOfMemory(); + if (!c3buf) outOfMemory(); + + do + { + pc1 = cutToWhiteSpace(pc1, l1, c1buf); + pc2 = cutToWhiteSpace(pc2, l2, c2buf); + pc3 = cutToWhiteSpace(pc3, l3, c3buf); + printf(fmt, + c1buf[0]!='\0'?c1buf:"", + c2buf[0]!='\0'?c2buf:"", + c3buf[0]!='\0'?c3buf:""); + } while (pc1 || pc2 || pc3); + free(c1buf); + free(c2buf); + free(c3buf); +} + +static const char helpfmt[] = " %-19.19s %-58.58s\n"; +static const char helpul[] + = "-----------------------------------------------------------------"; +static const char fmt[] = "%-27.27s %-9.9s %-40.40s\n"; +static const char valfmt[] = "%-27.27s %-9.9s %-1.1s%-39.39s\n"; +static const char ul[] + = "================================================================="; + +typedef enum +{ + CmdOptFileManip, + CmdOptCatFIRST = CmdOptFileManip, + CmdOptProcDir, + CmdOptCharEnc, + CmdOptMisc, + CmdOptCatLAST +} CmdOptCategory; + +static const struct { + ctmbstr mnemonic; + ctmbstr name; +} cmdopt_catname[] = { + { "file-manip", "File manipulation" }, + { "process-directives", "Processing directives" }, + { "char-encoding", "Character encodings" }, + { "misc", "Miscellaneous" } +}; + +typedef struct { + ctmbstr name1; /**< Name */ + ctmbstr desc; /**< Description */ + ctmbstr eqconfig; /**< Equivalent configuration option */ + CmdOptCategory cat; /**< Category */ + ctmbstr name2; /**< Name */ + ctmbstr name3; /**< Name */ +} CmdOptDesc; + +static const CmdOptDesc cmdopt_defs[] = { + { "-output ", + "write output to the specified ", + "output-file: ", CmdOptFileManip, "-o " }, + { "-config ", + "set configuration options from the specified ", + NULL, CmdOptFileManip }, + { "-file ", + "write errors and warnings to the specified ", + "error-file: ", CmdOptFileManip, "-f " }, + { "-modify", + "modify the original input files", + "write-back: yes", CmdOptFileManip, "-m" }, + { "-indent", + "indent element content", + "indent: auto", CmdOptProcDir, "-i" }, + { "-wrap ", + "wrap text at the specified " + ". 0 is assumed if is missing. " + "When this option is omitted, the default of the configuration option " + "\"wrap\" applies.", + "wrap: ", CmdOptProcDir, "-w " }, + { "-upper", + "force tags to upper case", + "uppercase-tags: yes", CmdOptProcDir, "-u" }, + { "-clean", + "replace FONT, NOBR and CENTER tags by CSS", + "clean: yes", CmdOptProcDir, "-c" }, + { "-bare", + "strip out smart quotes and em dashes, etc.", + "bare: yes", CmdOptProcDir, "-b" }, + { "-gdoc", + "produce clean version of html exported by google docs", + "gdoc: yes", CmdOptProcDir, "-g" }, + { "-numeric", + "output numeric rather than named entities", + "numeric-entities: yes", CmdOptProcDir, "-n" }, + { "-errors", + "show only errors and warnings", + "markup: no", CmdOptProcDir, "-e" }, + { "-quiet", + "suppress nonessential output", + "quiet: yes", CmdOptProcDir, "-q" }, + { "-omit", + "omit optional start tags and end tags", + "omit-optional-tags: yes", CmdOptProcDir }, + { "-xml", + "specify the input is well formed XML", + "input-xml: yes", CmdOptProcDir }, + { "-asxml", + "convert HTML to well formed XHTML", + "output-xhtml: yes", CmdOptProcDir, "-asxhtml" }, + { "-ashtml", + "force XHTML to well formed HTML", + "output-html: yes", CmdOptProcDir }, +#if SUPPORT_ACCESSIBILITY_CHECKS + { "-access ", + "do additional accessibility checks ( = 0, 1, 2, 3)" + ". 0 is assumed if is missing.", + "accessibility-check: ", CmdOptProcDir }, +#endif + { "-raw", + "output values above 127 without conversion to entities", + NULL, CmdOptCharEnc }, + { "-ascii", + "use ISO-8859-1 for input, US-ASCII for output", + NULL, CmdOptCharEnc }, + { "-latin0", + "use ISO-8859-15 for input, US-ASCII for output", + NULL, CmdOptCharEnc }, + { "-latin1", + "use ISO-8859-1 for both input and output", + NULL, CmdOptCharEnc }, +#ifndef NO_NATIVE_ISO2022_SUPPORT + { "-iso2022", + "use ISO-2022 for both input and output", + NULL, CmdOptCharEnc }, +#endif + { "-utf8", + "use UTF-8 for both input and output", + NULL, CmdOptCharEnc }, + { "-mac", + "use MacRoman for input, US-ASCII for output", + NULL, CmdOptCharEnc }, + { "-win1252", + "use Windows-1252 for input, US-ASCII for output", + NULL, CmdOptCharEnc }, + { "-ibm858", + "use IBM-858 (CP850+Euro) for input, US-ASCII for output", + NULL, CmdOptCharEnc }, +#if SUPPORT_UTF16_ENCODINGS + { "-utf16le", + "use UTF-16LE for both input and output", + NULL, CmdOptCharEnc }, + { "-utf16be", + "use UTF-16BE for both input and output", + NULL, CmdOptCharEnc }, + { "-utf16", + "use UTF-16 for both input and output", + NULL, CmdOptCharEnc }, +#endif +#if SUPPORT_ASIAN_ENCODINGS /* #431953 - RJ */ + { "-big5", + "use Big5 for both input and output", + NULL, CmdOptCharEnc }, + { "-shiftjis", + "use Shift_JIS for both input and output", + NULL, CmdOptCharEnc }, + { "-language ", + "set the two-letter language code (for future use)", + "language: ", CmdOptCharEnc }, +#endif + { "-version", + "show the version of Tidy", + NULL, CmdOptMisc, "-v" }, + { "-help", + "list the command line options", + NULL, CmdOptMisc, "-h", "-?" }, + { "-xml-help", + "list the command line options in XML format", + NULL, CmdOptMisc }, + { "-help-config", + "list all configuration options", + NULL, CmdOptMisc }, + { "-xml-config", + "list all configuration options in XML format", + NULL, CmdOptMisc }, + { "-show-config", + "list the current configuration settings", + NULL, CmdOptMisc }, + { NULL, NULL, NULL, CmdOptMisc } +}; + +static tmbstr get_option_names( const CmdOptDesc* pos ) +{ + tmbstr name; + uint len = strlen(pos->name1); + if (pos->name2) + len += 2+strlen(pos->name2); + if (pos->name3) + len += 2+strlen(pos->name3); + + name = (tmbstr)malloc(len+1); + if (!name) outOfMemory(); + strcpy(name, pos->name1); + if (pos->name2) + { + strcat(name, ", "); + strcat(name, pos->name2); + } + if (pos->name3) + { + strcat(name, ", "); + strcat(name, pos->name3); + } + return name; +} + +static tmbstr get_escaped_name( ctmbstr name ) +{ + tmbstr escpName; + char aux[2]; + uint len = 0; + ctmbstr c; + for(c=name; *c!='\0'; ++c) + switch(*c) + { + case '<': + case '>': + len += 4; + break; + case '"': + len += 6; + break; + default: + len += 1; + break; + } + + escpName = (tmbstr)malloc(len+1); + if (!escpName) outOfMemory(); + escpName[0] = '\0'; + + aux[1] = '\0'; + for(c=name; *c!='\0'; ++c) + switch(*c) + { + case '<': + strcat(escpName, "<"); + break; + case '>': + strcat(escpName, ">"); + break; + case '"': + strcat(escpName, """); + break; + default: + aux[0] = *c; + strcat(escpName, aux); + break; + } + + return escpName; +} + +static void print_help_option( void ) +{ + CmdOptCategory cat = CmdOptCatFIRST; + const CmdOptDesc* pos = cmdopt_defs; + + for( cat=CmdOptCatFIRST; cat!=CmdOptCatLAST; ++cat) + { + size_t len = strlen(cmdopt_catname[cat].name); + printf("%s\n", cmdopt_catname[cat].name ); + printf("%*.*s\n", (int)len, (int)len, helpul ); + for( pos=cmdopt_defs; pos->name1; ++pos) + { + tmbstr name; + if (pos->cat != cat) + continue; + name = get_option_names( pos ); + print2Columns( helpfmt, 19, 58, name, pos->desc ); + free(name); + } + printf("\n"); + } +} + +static void print_xml_help_option_element( ctmbstr element, ctmbstr name ) +{ + tmbstr escpName; + if (!name) + return; + printf(" <%s>%s\n", element, escpName = get_escaped_name(name), + element); + free(escpName); +} + +static void print_xml_help_option( void ) +{ + const CmdOptDesc* pos = cmdopt_defs; + + for( pos=cmdopt_defs; pos->name1; ++pos) + { + printf(" \n"); + } +} + +static void xml_help( void ) +{ + printf( "\n" + "\n", tidyReleaseDate()); + print_xml_help_option(); + printf( "\n" ); +} + +static void help( ctmbstr prog ) +{ + printf( "%s [option...] [file...] [option...] [file...]\n", prog ); + printf( "Utility to clean up and pretty print HTML/XHTML/XML\n"); + printf( "\n"); + + printf( "This is an HTML5-aware experimental fork of HTML Tidy.\n"); + printf( "%s\n", tidyReleaseDate() ); + printf( "\n"); + +#ifdef PLATFORM_NAME + printf( "Options for HTML Tidy for %s:\n", PLATFORM_NAME ); +#else + printf( "Options for HTML Tidy:\n"); +#endif + printf( "\n"); + + print_help_option(); + + printf( "Use --optionX valueX for any configuration option \"optionX\" with argument\n" + "\"valueX\". For a list of the configuration options, use \"-help-config\" or refer\n" + "to the man page.\n\n"); + + printf( "Input/Output default to stdin/stdout respectively.\n"); + printf( "\n"); + printf( "Single letter options apart from -f may be combined\n"); + printf( "as in: tidy -f errs.txt -imu foo.html\n"); + printf( "\n"); + printf( "For more information on this HTML5-aware experimental fork of Tidy,\n" ); + printf( "see http://w3c.github.com/tidy-html5/\n" ); + printf( "\n"); + printf( "For more information on HTML, see the following:\n" ); + printf( "\n"); + printf( " HTML: Edition for Web Authors (the latest HTML specification)\n"); + printf( " http://dev.w3.org/html5/spec-author-view\n" ); + printf( "\n"); + printf( " HTML: The Markup Language (an HTML language reference)\n" ); + printf( " http://dev.w3.org/html5/markup/\n" ); + printf( "\n"); + printf( "File bug reports at https://github.com/w3c/tidy-html5/issues/\n" ); + printf( "or send questions and comments to html-tidy@w3.org\n" ); + printf( "\n"); + printf( "Validate your HTML documents using the W3C Nu Markup Validator:\n" ); + printf( "\n"); + printf( " http://validator.w3.org/nu/" ); + printf( "\n"); +} + +static Bool isAutoBool( TidyOption topt ) +{ + TidyIterator pos; + ctmbstr def; + + if ( tidyOptGetType( topt ) != TidyInteger) + return no; + + pos = tidyOptGetPickList( topt ); + while ( pos ) + { + def = tidyOptGetNextPick( topt, &pos ); + if (0==strcmp(def,"yes")) + return yes; + } + return no; +} + +static +ctmbstr ConfigCategoryName( TidyConfigCategory id ) +{ + switch( id ) + { + case TidyMarkup: + return "markup"; + case TidyDiagnostics: + return "diagnostics"; + case TidyPrettyPrint: + return "print"; + case TidyEncoding: + return "encoding"; + case TidyMiscellaneous: + return "misc"; + } + fprintf(stderr, "Fatal error: impossible value for id='%d'.\n", (int)id); + assert(0); + abort(); +} + +/* Description of an option */ +typedef struct { + ctmbstr name; /**< Name */ + ctmbstr cat; /**< Category */ + ctmbstr type; /**< "String, ... */ + ctmbstr vals; /**< Potential values. If NULL, use an external function */ + ctmbstr def; /**< default */ + tmbchar tempdefs[80]; /**< storage for default such as integer */ + Bool haveVals; /**< if yes, vals is valid */ +} OptionDesc; + +typedef void (*OptionFunc)( TidyDoc, TidyOption, OptionDesc * ); + + +/* Create description "d" related to "opt" */ +static +void GetOption( TidyDoc tdoc, TidyOption topt, OptionDesc *d ) +{ + TidyOptionId optId = tidyOptGetId( topt ); + TidyOptionType optTyp = tidyOptGetType( topt ); + + d->name = tidyOptGetName( topt ); + d->cat = ConfigCategoryName( tidyOptGetCategory( topt ) ); + d->vals = NULL; + d->def = NULL; + d->haveVals = yes; + + /* Handle special cases first. + */ + switch ( optId ) + { + case TidyDuplicateAttrs: + case TidySortAttributes: + case TidyNewline: + case TidyAccessibilityCheckLevel: + d->type = "enum"; + d->vals = NULL; + d->def = + optId==TidyNewline ? + "Platform dependent" + :tidyOptGetCurrPick( tdoc, optId ); + break; + + case TidyDoctype: + d->type = "DocType"; + d->vals = NULL; + { + ctmbstr sdef = NULL; + sdef = tidyOptGetCurrPick( tdoc, TidyDoctypeMode ); + if ( !sdef || *sdef == '*' ) + sdef = tidyOptGetValue( tdoc, TidyDoctype ); + d->def = sdef; + } + break; + + case TidyInlineTags: + case TidyBlockTags: + case TidyEmptyTags: + case TidyPreTags: + d->type = "Tag names"; + d->vals = "tagX, tagY, ..."; + d->def = NULL; + break; + + case TidyCharEncoding: + case TidyInCharEncoding: + case TidyOutCharEncoding: + d->type = "Encoding"; + d->def = tidyOptGetEncName( tdoc, optId ); + if (!d->def) + d->def = "?"; + d->vals = NULL; + break; + + /* General case will handle remaining */ + default: + switch ( optTyp ) + { + case TidyBoolean: + d->type = "Boolean"; + d->vals = "y/n, yes/no, t/f, true/false, 1/0"; + d->def = tidyOptGetCurrPick( tdoc, optId ); + break; + + case TidyInteger: + if (isAutoBool(topt)) + { + d->type = "AutoBool"; + d->vals = "auto, y/n, yes/no, t/f, true/false, 1/0"; + d->def = tidyOptGetCurrPick( tdoc, optId ); + } + else + { + uint idef; + d->type = "Integer"; + if ( optId == TidyWrapLen ) + d->vals = "0 (no wrapping), 1, 2, ..."; + else + d->vals = "0, 1, 2, ..."; + + idef = tidyOptGetInt( tdoc, optId ); + sprintf(d->tempdefs, "%u", idef); + d->def = d->tempdefs; + } + break; + + case TidyString: + d->type = "String"; + d->vals = NULL; + d->haveVals = no; + d->def = tidyOptGetValue( tdoc, optId ); + break; + } + } +} + +/* Array holding all options. Contains a trailing sentinel. */ +typedef struct { + TidyOption topt[N_TIDY_OPTIONS]; +} AllOption_t; + +static +int cmpOpt(const void* e1_, const void *e2_) +{ + const TidyOption* e1 = (const TidyOption*)e1_; + const TidyOption* e2 = (const TidyOption*)e2_; + return strcmp(tidyOptGetName(*e1), tidyOptGetName(*e2)); +} + +static +void getSortedOption( TidyDoc tdoc, AllOption_t *tOption ) +{ + TidyIterator pos = tidyGetOptionList( tdoc ); + uint i = 0; + + while ( pos ) + { + TidyOption topt = tidyGetNextOption( tdoc, &pos ); + tOption->topt[i] = topt; + ++i; + } + tOption->topt[i] = NULL; /* sentinel */ + + qsort(tOption->topt, + /* Do not sort the sentinel: hence `-1' */ + sizeof(tOption->topt)/sizeof(tOption->topt[0])-1, + sizeof(tOption->topt[0]), + cmpOpt); +} + +static void ForEachSortedOption( TidyDoc tdoc, OptionFunc OptionPrint ) +{ + AllOption_t tOption; + const TidyOption *topt; + + getSortedOption( tdoc, &tOption ); + for( topt = tOption.topt; *topt; ++topt) + { + OptionDesc d; + + GetOption( tdoc, *topt, &d ); + (*OptionPrint)( tdoc, *topt, &d ); + } +} + +static void ForEachOption( TidyDoc tdoc, OptionFunc OptionPrint ) +{ + TidyIterator pos = tidyGetOptionList( tdoc ); + + while ( pos ) + { + TidyOption topt = tidyGetNextOption( tdoc, &pos ); + OptionDesc d; + + GetOption( tdoc, topt, &d ); + (*OptionPrint)( tdoc, topt, &d ); + } +} + +static +void PrintAllowedValuesFromPick( TidyOption topt ) +{ + TidyIterator pos = tidyOptGetPickList( topt ); + Bool first = yes; + ctmbstr def; + while ( pos ) + { + if (first) + first = no; + else + printf(", "); + def = tidyOptGetNextPick( topt, &pos ); + printf("%s", def); + } +} + +static +void PrintAllowedValues( TidyOption topt, const OptionDesc *d ) +{ + if (d->vals) + printf( "%s", d->vals ); + else + PrintAllowedValuesFromPick( topt ); +} + +static +void printXMLDescription( TidyDoc tdoc, TidyOption topt ) +{ + ctmbstr doc = tidyOptGetDoc( tdoc, topt ); + + if (doc) + printf(" %s\n", doc); + else + { + printf(" \n"); + fprintf(stderr, "Warning: option `%s' is not documented.\n", + tidyOptGetName( topt )); + } +} + +static +void printXMLCrossRef( TidyDoc tdoc, TidyOption topt ) +{ + TidyOption optLinked; + TidyIterator pos = tidyOptGetDocLinksList(tdoc, topt); + while( pos ) + { + optLinked = tidyOptGetNextDocLinks(tdoc, &pos ); + printf(" %s\n",tidyOptGetName(optLinked)); + } +} + +static +void printXMLOption( TidyDoc tdoc, TidyOption topt, OptionDesc *d ) +{ + if ( tidyOptIsReadOnly(topt) ) + return; + + printf( " \n" ); +} + +static void XMLoptionhelp( TidyDoc tdoc ) +{ + printf( "\n" + "\n", tidyReleaseDate()); + ForEachOption( tdoc, printXMLOption ); + printf( "\n" ); +} + +static +tmbstr GetAllowedValuesFromPick( TidyOption topt ) +{ + TidyIterator pos; + Bool first; + ctmbstr def; + uint len = 0; + tmbstr val; + + pos = tidyOptGetPickList( topt ); + first = yes; + while ( pos ) + { + if (first) + first = no; + else + len += 2; + def = tidyOptGetNextPick( topt, &pos ); + len += strlen(def); + } + val = (tmbstr)malloc(len+1); + if (!val) outOfMemory(); + val[0] = '\0'; + pos = tidyOptGetPickList( topt ); + first = yes; + while ( pos ) + { + if (first) + first = no; + else + strcat(val, ", "); + def = tidyOptGetNextPick( topt, &pos ); + strcat(val, def); + } + return val; +} + +static +tmbstr GetAllowedValues( TidyOption topt, const OptionDesc *d ) +{ + if (d->vals) + { + tmbstr val = (tmbstr)malloc(1+strlen(d->vals)); + if (!val) outOfMemory(); + strcpy(val, d->vals); + return val; + } + else + return GetAllowedValuesFromPick( topt ); +} + +static +void printOption( TidyDoc ARG_UNUSED(tdoc), TidyOption topt, + OptionDesc *d ) +{ + if ( tidyOptIsReadOnly(topt) ) + return; + + if ( *d->name || *d->type ) + { + ctmbstr pval = d->vals; + tmbstr val = NULL; + if (!d->haveVals) + { + pval = "-"; + } + else if (pval == NULL) + { + val = GetAllowedValues( topt, d); + pval = val; + } + print3Columns( fmt, 27, 9, 40, d->name, d->type, pval ); + if (val) + free(val); + } +} + +static void optionhelp( TidyDoc tdoc ) +{ + printf( "\nHTML Tidy Configuration Settings\n\n" ); + printf( "Within a file, use the form:\n\n" ); + printf( "wrap: 72\n" ); + printf( "indent: no\n\n" ); + printf( "When specified on the command line, use the form:\n\n" ); + printf( "--wrap 72 --indent no\n\n"); + + printf( fmt, "Name", "Type", "Allowable values" ); + printf( fmt, ul, ul, ul ); + + ForEachSortedOption( tdoc, printOption ); +} + +static +void printOptionValues( TidyDoc ARG_UNUSED(tdoc), TidyOption topt, + OptionDesc *d ) +{ + TidyOptionId optId = tidyOptGetId( topt ); + ctmbstr ro = tidyOptIsReadOnly( topt ) ? "*" : "" ; + + switch ( optId ) + { + case TidyInlineTags: + case TidyBlockTags: + case TidyEmptyTags: + case TidyPreTags: + { + TidyIterator pos = tidyOptGetDeclTagList( tdoc ); + while ( pos ) + { + d->def = tidyOptGetNextDeclTag(tdoc, optId, &pos); + if ( pos ) + { + if ( *d->name ) + printf( valfmt, d->name, d->type, ro, d->def ); + else + printf( fmt, d->name, d->type, d->def ); + d->name = ""; + d->type = ""; + } + } + } + break; + case TidyNewline: + d->def = tidyOptGetCurrPick( tdoc, optId ); + break; + default: + break; + } + + /* fix for http://tidy.sf.net/bug/873921 */ + if ( *d->name || *d->type || (d->def && *d->def) ) + { + if ( ! d->def ) + d->def = ""; + if ( *d->name ) + printf( valfmt, d->name, d->type, ro, d->def ); + else + printf( fmt, d->name, d->type, d->def ); + } +} + +static void optionvalues( TidyDoc tdoc ) +{ + printf( "\nConfiguration File Settings:\n\n" ); + printf( fmt, "Name", "Type", "Current Value" ); + printf( fmt, ul, ul, ul ); + + ForEachSortedOption( tdoc, printOptionValues ); + + printf( "\n\nValues marked with an *asterisk are calculated \n" + "internally by HTML Tidy\n\n" ); +} + +static void version( void ) +{ +#ifdef PLATFORM_NAME + printf( "HTML Tidy for HTML5 (experimental) for %s %s\n", + PLATFORM_NAME, tidyReleaseDate() ); +#else + printf( "HTML Tidy for HTML5 (experimental) %s\n", tidyReleaseDate() ); +#endif +} + +static void unknownOption( uint c ) +{ + fprintf( errout, "HTML Tidy: unknown option: %c\n", (char)c ); +} + +int main( int argc, char** argv ) +{ + ctmbstr prog = argv[0]; + ctmbstr cfgfil = NULL, errfil = NULL, htmlfil = NULL; + TidyDoc tdoc = tidyCreate(); + int status = 0; + + uint contentErrors = 0; + uint contentWarnings = 0; + uint accessWarnings = 0; + + errout = stderr; /* initialize to stderr */ + status = 0; + +#ifdef TIDY_CONFIG_FILE + if ( tidyFileExists( tdoc, TIDY_CONFIG_FILE) ) + { + status = tidyLoadConfig( tdoc, TIDY_CONFIG_FILE ); + if ( status != 0 ) + fprintf(errout, "Loading config file \"%s\" failed, err = %d\n", TIDY_CONFIG_FILE, status); + } +#endif /* TIDY_CONFIG_FILE */ + + /* look for env var "HTML_TIDY" */ + /* then for ~/.tidyrc (on platforms defining $HOME) */ + + if ( (cfgfil = getenv("HTML_TIDY")) != NULL ) + { + status = tidyLoadConfig( tdoc, cfgfil ); + if ( status != 0 ) + fprintf(errout, "Loading config file \"%s\" failed, err = %d\n", cfgfil, status); + } +#ifdef TIDY_USER_CONFIG_FILE + else if ( tidyFileExists( tdoc, TIDY_USER_CONFIG_FILE) ) + { + status = tidyLoadConfig( tdoc, TIDY_USER_CONFIG_FILE ); + if ( status != 0 ) + fprintf(errout, "Loading config file \"%s\" failed, err = %d\n", TIDY_USER_CONFIG_FILE, status); + } +#endif /* TIDY_USER_CONFIG_FILE */ + + /* read command line */ + while ( argc > 0 ) + { + if (argc > 1 && argv[1][0] == '-') + { + /* support -foo and --foo */ + ctmbstr arg = argv[1] + 1; + + if ( strcasecmp(arg, "xml") == 0) + tidyOptSetBool( tdoc, TidyXmlTags, yes ); + + else if ( strcasecmp(arg, "asxml") == 0 || + strcasecmp(arg, "asxhtml") == 0 ) + { + tidyOptSetBool( tdoc, TidyXhtmlOut, yes ); + } + else if ( strcasecmp(arg, "ashtml") == 0 ) + tidyOptSetBool( tdoc, TidyHtmlOut, yes ); + + else if ( strcasecmp(arg, "indent") == 0 ) + { + tidyOptSetInt( tdoc, TidyIndentContent, TidyAutoState ); + if ( tidyOptGetInt(tdoc, TidyIndentSpaces) == 0 ) + tidyOptResetToDefault( tdoc, TidyIndentSpaces ); + } + else if ( strcasecmp(arg, "omit") == 0 ) + tidyOptSetBool( tdoc, TidyOmitOptionalTags, yes ); + + else if ( strcasecmp(arg, "upper") == 0 ) + tidyOptSetBool( tdoc, TidyUpperCaseTags, yes ); + + else if ( strcasecmp(arg, "clean") == 0 ) + tidyOptSetBool( tdoc, TidyMakeClean, yes ); + + else if ( strcasecmp(arg, "gdoc") == 0 ) + tidyOptSetBool( tdoc, TidyGDocClean, yes ); + + else if ( strcasecmp(arg, "bare") == 0 ) + tidyOptSetBool( tdoc, TidyMakeBare, yes ); + + else if ( strcasecmp(arg, "raw") == 0 || + strcasecmp(arg, "ascii") == 0 || + strcasecmp(arg, "latin0") == 0 || + strcasecmp(arg, "latin1") == 0 || + strcasecmp(arg, "utf8") == 0 || +#ifndef NO_NATIVE_ISO2022_SUPPORT + strcasecmp(arg, "iso2022") == 0 || +#endif +#if SUPPORT_UTF16_ENCODINGS + strcasecmp(arg, "utf16le") == 0 || + strcasecmp(arg, "utf16be") == 0 || + strcasecmp(arg, "utf16") == 0 || +#endif +#if SUPPORT_ASIAN_ENCODINGS + strcasecmp(arg, "shiftjis") == 0 || + strcasecmp(arg, "big5") == 0 || +#endif + strcasecmp(arg, "mac") == 0 || + strcasecmp(arg, "win1252") == 0 || + strcasecmp(arg, "ibm858") == 0 ) + { + tidySetCharEncoding( tdoc, arg ); + } + else if ( strcasecmp(arg, "numeric") == 0 ) + tidyOptSetBool( tdoc, TidyNumEntities, yes ); + + else if ( strcasecmp(arg, "modify") == 0 || + strcasecmp(arg, "change") == 0 || /* obsolete */ + strcasecmp(arg, "update") == 0 ) /* obsolete */ + { + tidyOptSetBool( tdoc, TidyWriteBack, yes ); + } + else if ( strcasecmp(arg, "errors") == 0 ) + tidyOptSetBool( tdoc, TidyShowMarkup, no ); + + else if ( strcasecmp(arg, "quiet") == 0 ) + tidyOptSetBool( tdoc, TidyQuiet, yes ); + + else if ( strcasecmp(arg, "help") == 0 || + strcasecmp(arg, "h") == 0 || *arg == '?' ) + { + help( prog ); + tidyRelease( tdoc ); + return 0; /* success */ + } + else if ( strcasecmp(arg, "xml-help") == 0) + { + xml_help( ); + tidyRelease( tdoc ); + return 0; /* success */ + } + else if ( strcasecmp(arg, "help-config") == 0 ) + { + optionhelp( tdoc ); + tidyRelease( tdoc ); + return 0; /* success */ + } + else if ( strcasecmp(arg, "xml-config") == 0 ) + { + XMLoptionhelp( tdoc ); + tidyRelease( tdoc ); + return 0; /* success */ + } + else if ( strcasecmp(arg, "show-config") == 0 ) + { + optionvalues( tdoc ); + tidyRelease( tdoc ); + return 0; /* success */ + } + else if ( strcasecmp(arg, "config") == 0 ) + { + if ( argc >= 3 ) + { + ctmbstr post; + + tidyLoadConfig( tdoc, argv[2] ); + + /* Set new error output stream if setting changed */ + post = tidyOptGetValue( tdoc, TidyErrFile ); + if ( post && (!errfil || !samefile(errfil, post)) ) + { + errfil = post; + errout = tidySetErrorFile( tdoc, post ); + } + + --argc; + ++argv; + } + } + +#if SUPPORT_ASIAN_ENCODINGS + else if ( strcasecmp(arg, "language") == 0 || + strcasecmp(arg, "lang") == 0 ) + { + if ( argc >= 3 ) + { + tidyOptSetValue( tdoc, TidyLanguage, argv[2] ); + --argc; + ++argv; + } + } +#endif + + else if ( strcasecmp(arg, "output") == 0 || + strcasecmp(arg, "-output-file") == 0 || + strcasecmp(arg, "o") == 0 ) + { + if ( argc >= 3 ) + { + tidyOptSetValue( tdoc, TidyOutFile, argv[2] ); + --argc; + ++argv; + } + } + else if ( strcasecmp(arg, "file") == 0 || + strcasecmp(arg, "-file") == 0 || + strcasecmp(arg, "f") == 0 ) + { + if ( argc >= 3 ) + { + errfil = argv[2]; + errout = tidySetErrorFile( tdoc, errfil ); + --argc; + ++argv; + } + } + else if ( strcasecmp(arg, "wrap") == 0 || + strcasecmp(arg, "-wrap") == 0 || + strcasecmp(arg, "w") == 0 ) + { + if ( argc >= 3 ) + { + uint wraplen = 0; + int nfields = sscanf( argv[2], "%u", &wraplen ); + tidyOptSetInt( tdoc, TidyWrapLen, wraplen ); + if (nfields > 0) + { + --argc; + ++argv; + } + } + } + else if ( strcasecmp(arg, "version") == 0 || + strcasecmp(arg, "-version") == 0 || + strcasecmp(arg, "v") == 0 ) + { + version(); + tidyRelease( tdoc ); + return 0; /* success */ + + } + else if ( strncmp(argv[1], "--", 2 ) == 0) + { + if ( tidyOptParseValue(tdoc, argv[1]+2, argv[2]) ) + { + /* Set new error output stream if setting changed */ + ctmbstr post = tidyOptGetValue( tdoc, TidyErrFile ); + if ( post && (!errfil || !samefile(errfil, post)) ) + { + errfil = post; + errout = tidySetErrorFile( tdoc, post ); + } + + ++argv; + --argc; + } + } + +#if SUPPORT_ACCESSIBILITY_CHECKS + else if ( strcasecmp(arg, "access") == 0 ) + { + if ( argc >= 3 ) + { + uint acclvl = 0; + int nfields = sscanf( argv[2], "%u", &acclvl ); + tidyOptSetInt( tdoc, TidyAccessibilityCheckLevel, acclvl ); + if (nfields > 0) + { + --argc; + ++argv; + } + } + } +#endif + + else + { + uint c; + ctmbstr s = argv[1]; + + while ( (c = *++s) != '\0' ) + { + switch ( c ) + { + case 'i': + tidyOptSetInt( tdoc, TidyIndentContent, TidyAutoState ); + if ( tidyOptGetInt(tdoc, TidyIndentSpaces) == 0 ) + tidyOptResetToDefault( tdoc, TidyIndentSpaces ); + break; + + /* Usurp -o for output file. Anyone hiding end tags? + case 'o': + tidyOptSetBool( tdoc, TidyHideEndTags, yes ); + break; + */ + + case 'u': + tidyOptSetBool( tdoc, TidyUpperCaseTags, yes ); + break; + + case 'c': + tidyOptSetBool( tdoc, TidyMakeClean, yes ); + break; + + case 'g': + tidyOptSetBool( tdoc, TidyGDocClean, yes ); + break; + + case 'b': + tidyOptSetBool( tdoc, TidyMakeBare, yes ); + break; + + case 'n': + tidyOptSetBool( tdoc, TidyNumEntities, yes ); + break; + + case 'm': + tidyOptSetBool( tdoc, TidyWriteBack, yes ); + break; + + case 'e': + tidyOptSetBool( tdoc, TidyShowMarkup, no ); + break; + + case 'q': + tidyOptSetBool( tdoc, TidyQuiet, yes ); + break; + + default: + unknownOption( c ); + break; + } + } + } + + --argc; + ++argv; + continue; + } + + if ( argc > 1 ) + { + htmlfil = argv[1]; + if ( tidyOptGetBool(tdoc, TidyEmacs) ) + tidyOptSetValue( tdoc, TidyEmacsFile, htmlfil ); + status = tidyParseFile( tdoc, htmlfil ); + } + else + { + htmlfil = "stdin"; + status = tidyParseStdin( tdoc ); + } + + if ( status >= 0 ) + status = tidyCleanAndRepair( tdoc ); + + if ( status >= 0 ) + status = tidyRunDiagnostics( tdoc ); + + if ( status > 1 ) /* If errors, do we want to force output? */ + status = ( tidyOptGetBool(tdoc, TidyForceOutput) ? status : -1 ); + + if ( status >= 0 && tidyOptGetBool(tdoc, TidyShowMarkup) ) + { + if ( tidyOptGetBool(tdoc, TidyWriteBack) && argc > 1 ) + status = tidySaveFile( tdoc, htmlfil ); + else + { + ctmbstr outfil = tidyOptGetValue( tdoc, TidyOutFile ); + if ( outfil ) + status = tidySaveFile( tdoc, outfil ); + else + status = tidySaveStdout( tdoc ); + } + } + + contentErrors += tidyErrorCount( tdoc ); + contentWarnings += tidyWarningCount( tdoc ); + accessWarnings += tidyAccessWarningCount( tdoc ); + + --argc; + ++argv; + + if ( argc <= 1 ) + break; + } + + if (!tidyOptGetBool(tdoc, TidyQuiet) && + errout == stderr && !contentErrors) + fprintf(errout, "\n"); + + if (contentErrors + contentWarnings > 0 && + !tidyOptGetBool(tdoc, TidyQuiet)) + tidyErrorSummary(tdoc); + + if (!tidyOptGetBool(tdoc, TidyQuiet)) + tidyGeneralInfo(tdoc); + + /* called to free hash tables etc. */ + tidyRelease( tdoc ); + + /* return status can be used by scripts */ + if ( contentErrors > 0 ) + return 2; + + if ( contentWarnings > 0 ) + return 1; + + /* 0 signifies all is ok */ + return 0; +} + +/* + * local variables: + * mode: c + * indent-tabs-mode: nil + * c-basic-offset: 4 + * eval: (c-set-offset 'substatement-open 0) + * end: + */ diff --git a/Balthisar Tidy/tidylib5-src/experimental/TidyNodeIter.c b/Balthisar Tidy/tidylib5-src/experimental/TidyNodeIter.c new file mode 100755 index 00000000..f010d0cb --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/experimental/TidyNodeIter.c @@ -0,0 +1,47 @@ +#include "platform.h" +#include "tidy-int.h" + +#include "TidyNodeIter.h" + +TidyNodeIter *newTidyNodeIter( Node *pStart ) +{ + TidyNodeIter *pThis = NULL; + if (NULL != (pThis = MemAlloc( sizeof( TidyNodeIter )))) + { + ClearMemory( pThis, sizeof( TidyNodeIter )); + pThis->pTop = pStart; + } + return pThis; +} + +Node *nextTidyNode( TidyNodeIter *pThis ) +{ + if (NULL == pThis->pCurrent) + { + // just starting out, initialize + pThis->pCurrent = pThis->pTop->content; + } + else if (NULL != pThis->pCurrent->content) + { + // the next element, if any, is my first-born child + pThis->pCurrent = pThis->pCurrent->content; + } + else + { + // no children, I guess my next younger brother inherits the throne. + while ( NULL == pThis->pCurrent->next + && pThis->pTop != pThis->pCurrent->parent ) + { + // no siblings, do any of my ancestors have younger sibs? + pThis->pCurrent = pThis->pCurrent->parent; + } + pThis->pCurrent = pThis->pCurrent->next; + } + return pThis->pCurrent; +} + +void setCurrentNode( TidyNodeIter *pThis, Node *newCurr ) +{ + if (NULL != newCurr) + pThis->pCurrent = newCurr; +} diff --git a/Balthisar Tidy/tidylib5-src/experimental/TidyNodeIter.h b/Balthisar Tidy/tidylib5-src/experimental/TidyNodeIter.h new file mode 100755 index 00000000..e949e3f1 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/experimental/TidyNodeIter.h @@ -0,0 +1,51 @@ +/* TidyNodeIter + + (c) 1998-2003 (W3C) MIT, ERCIM, Keio University + See tidy.h for the copyright notice. + + These files contain utility routines to perform in-order traversals of the + Tidy document tree, beginning at an arbitrary node. + + A traversal of the tree can be performed in a manner similar to the following: + + Node *testNode; + TidyNodeIter *iter = newTidyNodeIter( FindBody( tdoc )); + for (testNode = nextTidyNode( &iter ); + NULL != testNode; + testNode = nextTidyNode( &iter )) + { + } + + TODO: Add a prevTidyNode() function. +*/ + +#include "lexer.h" + +typedef struct _TidyNodeIter +{ + Node *pTop, *pCurrent; +} TidyNodeIter; + +TidyNodeIter *newTidyNodeIter( Node *pStart ); + +/* + nextTidyNode( TidyNodeIter *pIter ) + + if pCurrent is NULL, this function initializes it to match pTop, and + returns that value, otherwise it advances to the next node in order, + and returns that value. When pTop == pCurrent, the function returns NULL + to indicate that the entire tree has been visited. +*/ +Node *nextTidyNode( TidyNodeIter *pIter ); + +/* + setCurrentNode( TidyNodeIter *pThis, Node *newCurr ) + + Resets pCurrent to match the passed value; useful if you need to back up + to an unaltered point in the tree, or to skip a section. The next call to + nextTidyNode() will return the node which follows newCurr in order. + + Minimal error checking is performed; unexpected results _will_ occur if + newCurr is not a descendant node of pTop. +*/ +void setCurrentNode( TidyNodeIter *pThis, Node *newCurr ); diff --git a/Balthisar Tidy/tidylib5-src/experimental/httpio.c b/Balthisar Tidy/tidylib5-src/experimental/httpio.c new file mode 100755 index 00000000..cda92702 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/experimental/httpio.c @@ -0,0 +1,224 @@ +#include "tmbstr.h" + +#include "httpio.h" + +int +makeConnection ( HTTPInputSource *pHttp ) +{ + struct sockaddr_in sock; + struct hostent *pHost; + + /* Get internet address of the host. */ + if (!(pHost = gethostbyname ( pHttp->pHostName ))) + { + return -1; + } + /* Copy the address of the host to socket description. */ + memcpy (&sock.sin_addr, pHost->h_addr, pHost->h_length); + + /* Set port and protocol */ + sock.sin_family = AF_INET; + sock.sin_port = htons( pHttp->nPort ); + + /* Make an internet socket, stream type. */ + if ((pHttp->s = socket (AF_INET, SOCK_STREAM, 0)) == -1) + return -1; + + /* Connect the socket to the remote host. */ + if (connect (pHttp->s, (struct sockaddr *) &sock, sizeof( sock ))) + { + if (errno == ECONNREFUSED) + return ECONNREFUSED; + else + return -1; + } + return 0; +} + + +int parseURL( HTTPInputSource *pHttp, tmbstr url ) +{ + int i, j = 0; + ctmbstr pStr; + + pStr = tmbsubstr( url, "://" ); + + /* If protocol is there, but not http, bail out, else assume http. */ + if (NULL != pStr) + { + if (tmbstrncasecmp( url, "http://", 7 )) + return -1; + } + + if (NULL != pStr) + j = pStr - url + 3; + for (i = j; url[i] && url[i] != ':' && url[i] != '/'; i++) {} + if (i == j) + return -1; + + /* Get the hostname. */ + pHttp->pHostName = tmbstrndup (&url[j], i - j ); + + if (url[i] == ':') + { + /* We have a colon delimiting the hostname. It should mean that + a port number is following it */ + pHttp->nPort = 0; + if (isdigit( url[++i] )) /* A port number */ + { + for (; url[i] && url[i] != '/'; i++) + { + if (isdigit( url[i] )) + pHttp->nPort = 10 * pHttp->nPort + (url[i] - '0'); + else + return -1; + } + if (!pHttp->nPort) + return -1; + } + else /* or just a misformed port number */ + return -1; + } + else + /* Assume default port. */ + pHttp->nPort = 80; + + /* skip past the delimiting slash (we'll add it later ) */ + while (url[i] && url[i] == '/') + i++; + pHttp->pResource = tmbstrdup (url + i ); + return 0; +} + + +int fillBuffer( HTTPInputSource *in ) +{ + if (0 < in->s) + { + in->nBufSize = recv( in->s, in->buffer, sizeof( in->buffer ), 0); + in->nextBytePos = 0; + if (in->nBufSize < sizeof( in->buffer )) + in->buffer[in->nBufSize] = '\0'; + } + else + in->nBufSize = 0; + return in->nBufSize; +} + + +int openURL( HTTPInputSource *in, tmbstr pUrl ) +{ + int rc = -1; +#ifdef WIN32 + WSADATA wsaData; + + rc = WSAStartup( 514, &wsaData ); +#endif + + in->tis.getByte = (TidyGetByteFunc) HTTPGetByte; + in->tis.ungetByte = (TidyUngetByteFunc) HTTPUngetByte; + in->tis.eof = (TidyEOFFunc) HTTPIsEOF; + in->tis.sourceData = (uint) in; + in->nextBytePos = in->nextUnGotBytePos = in->nBufSize = 0; + parseURL( in, pUrl ); + if (0 == (rc = makeConnection( in ))) + { + char ch, lastCh = '\0'; + int blanks = 0; + + char *getCmd = MemAlloc( 48 + strlen( in->pResource )); + sprintf( getCmd, "GET /%s HTTP/1.0\r\nAccept: text/html\r\n\r\n", in->pResource ); + send( in->s, getCmd, strlen( getCmd ), 0 ); + MemFree( getCmd ); + + /* skip past the header information */ + while ( in->nextBytePos >= in->nBufSize + && 0 < (rc = fillBuffer( in ))) + { + if (1 < blanks) + break; + for (; in->nextBytePos < sizeof( in->buffer ) + && 0 != in->buffer[ in->nextBytePos ]; + in->nextBytePos++ ) + { + ch = in->buffer[ in->nextBytePos ]; + if (ch == '\r' || ch == '\n') + { + if (ch == lastCh) + { + /* Two carriage returns or two newlines in a row, + that's good enough */ + blanks++; + } + if (lastCh == '\r' || lastCh == '\n') + { + blanks++; + } + } + else + blanks = 0; + lastCh = ch; + if (1 < blanks) + { + /* end of header, scan to first non-white and return */ + while ('\0' != ch && isspace( ch )) + ch = in->buffer[ ++in->nextBytePos ]; + break; + } + } + } + } + return rc; +} + + +void closeURL( HTTPInputSource *source ) +{ + if (0 < source->s) + closesocket( source->s ); + source->s = -1; + source->tis.sourceData = 0; +#ifdef WIN32 + WSACleanup(); +#endif +} + + +int HTTPGetByte( HTTPInputSource *source ) +{ + if (source->nextUnGotBytePos) + return source->unGetBuffer[ --source->nextUnGotBytePos ]; + if (0 != source->nBufSize && source->nextBytePos >= source->nBufSize) + { + fillBuffer( source ); + } + if (0 == source->nBufSize) + return EndOfStream; + return source->buffer[ source->nextBytePos++ ]; +} + +void HTTPUngetByte( HTTPInputSource *source, uint byteValue ) +{ + if (source->nextUnGotBytePos < 16 ) /* Only you can prevent buffer overflows */ + source->unGetBuffer[ source->nextUnGotBytePos++ ] = (char) byteValue; +} + +Bool HTTPIsEOF( HTTPInputSource *source ) +{ + if (source->nextUnGotBytePos) + /* pending ungot bytes, not done */ + return no; + + if ( 0 != source->nBufSize + && source->nextBytePos >= source->nBufSize) + /* We've consumed the existing buffer, get another */ + fillBuffer( source ); + + if (source->nextBytePos < source->nBufSize) + /* we have stuff in the buffer, must not be done. */ + return no; + + /* Nothing in the buffer, and the last receive failed, must be done. */ + return yes; +} + diff --git a/Balthisar Tidy/tidylib5-src/experimental/httpio.h b/Balthisar Tidy/tidylib5-src/experimental/httpio.h new file mode 100755 index 00000000..ac8b052f --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/experimental/httpio.h @@ -0,0 +1,48 @@ +#ifndef __HTTPIO_H__ +#define __HTTPIO_H__ + +#include "platform.h" +#include "tidy.h" + +#ifdef WIN32 +# include +# define ECONNREFUSED WSAECONNREFUSED +#else +# include +# include +# include +#ifndef __BEOS__ +# include +#endif +#endif /* WIN32 */ + +TIDY_STRUCT +typedef struct _HTTPInputSource +{ + TidyInputSource tis; // This declaration must be first and must not be changed! + + tmbstr pHostName; + tmbstr pResource; + unsigned short nPort, nextBytePos, nextUnGotBytePos, nBufSize; + SOCKET s; + char buffer[1024]; + char unGetBuffer[16]; + +} HTTPInputSource; + +/* get next byte from input source */ +int HTTPGetByte( HTTPInputSource *source ); + +/* unget byte back to input source */ +void HTTPUngetByte( HTTPInputSource *source, uint byteValue ); + +/* check if input source at end */ +Bool HTTPIsEOF( HTTPInputSource *source ); + +int parseURL( HTTPInputSource* source, tmbstr pUrl ); + +int openURL( HTTPInputSource* source, tmbstr pUrl ); + +void closeURL( HTTPInputSource *source ); + +#endif \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/annotated.html b/Balthisar Tidy/tidylib5-src/htmldoc/api/annotated.html new file mode 100755 index 00000000..65c9bf09 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/annotated.html @@ -0,0 +1,90 @@ + + + + + +HTML Tidy: Data Structures + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
Data Structures
+
+
+
Here are the data structures with brief descriptions:
+ + + + + + + + + +
_TidyAllocator
_TidyAllocatorVtbl
_TidyBuffer
_TidyInputSource
_TidyOutputSink
TidyAttr
TidyDoc
TidyNode
TidyOption
+
+
+ + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/annotated.js b/Balthisar Tidy/tidylib5-src/htmldoc/api/annotated.js new file mode 100755 index 00000000..19e529ec --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/annotated.js @@ -0,0 +1,12 @@ +var annotated = +[ + [ "_TidyAllocator", "struct__TidyAllocator.html", "struct__TidyAllocator" ], + [ "_TidyAllocatorVtbl", "struct__TidyAllocatorVtbl.html", "struct__TidyAllocatorVtbl" ], + [ "_TidyBuffer", "struct__TidyBuffer.html", "struct__TidyBuffer" ], + [ "_TidyInputSource", "struct__TidyInputSource.html", "struct__TidyInputSource" ], + [ "_TidyOutputSink", "struct__TidyOutputSink.html", "struct__TidyOutputSink" ], + [ "TidyAttr", "structTidyAttr.html", null ], + [ "TidyDoc", "structTidyDoc.html", null ], + [ "TidyNode", "structTidyNode.html", null ], + [ "TidyOption", "structTidyOption.html", null ] +]; \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/bc_s.png b/Balthisar Tidy/tidylib5-src/htmldoc/api/bc_s.png new file mode 100755 index 0000000000000000000000000000000000000000..e4018628b5b45cb4301037485a29d7d74ac22138 GIT binary patch literal 677 zcmV;W0$TlvP)X?0Pv5h+5!wElpi=&YL!gfY!djl#UDdPKy97F|A-deTa@qo3BWh1YQIvzmHR^g zFjV4I6pLB7_*vEZk^%p7c7Bh>0`4r^X#gpJE_Vz9fSHKqclcZaV^k3gX%h+1`u||O zZ+BY?7(R=ayr^kXE=E0Dw=$Ud3VJ?9^Cz@hP?388Cw5>9TloOJ>^KczCgj zns2=|0!a|)Yq3{hjL{xyy7|Tk0N}Pe+g9PUTL!4{#;eUhrNd@!_T<>Vu+35c)h>sq ztgb?(6W3oFLz#%?OMEV@{j#4LuDvjVGZ~6hpQT8li5b0yjvK8c4efl+vSz5)P6 zle78)00_Iv5)&E~hnOdcd}L}i+MU>k+Q8#@KjqJJN`gRj(~)RmNrck9ht@LelPtVO zwp(J;k!T=gC#%o(13-^E+g@aqc()pf{+j|0w)AH*Mq$54UjLv#jV$RYpz3Vjg$$=u z>yjfBQOhL=^@+#4#$l|{~}HZ-?1Yy{lI*$N}*YDC`<{+;>_#gMXZdz4NI00000 LNkvXXu0mjfx86dR literal 0 HcmV?d00001 diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/bdwn.png b/Balthisar Tidy/tidylib5-src/htmldoc/api/bdwn.png new file mode 100755 index 0000000000000000000000000000000000000000..d0b575b75bb17ca8be0ea11f5b89e6f515e42f02 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb2suf81S&@r>)`W zoMpOVbHi*4U$GNDGr3ztRD>1Hemtw)^_}lW#_Q$jl{Yp22Ssn!U$}NQL!}(gxzoGk v8BZ+U-rgwm=aTL8S&KLwd@nXUI$9eScU_ug?HiF!pe+oZu6{1-oD!M + + + + +HTML Tidy: buffio.h File Reference + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
buffio.h File Reference
+
+
+ +

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + +

+Data Structures

struct  _TidyBuffer

+Functions

void TIDY_CALL tidyBufInit (TidyBuffer *buf)
void TIDY_CALL tidyBufInitWithAllocator (TidyBuffer *buf, TidyAllocator *allocator)
void TIDY_CALL tidyBufAlloc (TidyBuffer *buf, uint allocSize)
void TIDY_CALL tidyBufAllocWithAllocator (TidyBuffer *buf, TidyAllocator *allocator, uint allocSize)
void TIDY_CALL tidyBufCheckAlloc (TidyBuffer *buf, uint allocSize, uint chunkSize)
void TIDY_CALL tidyBufFree (TidyBuffer *buf)
void TIDY_CALL tidyBufClear (TidyBuffer *buf)
void TIDY_CALL tidyBufAttach (TidyBuffer *buf, byte *bp, uint size)
void TIDY_CALL tidyBufDetach (TidyBuffer *buf)
void TIDY_CALL tidyBufAppend (TidyBuffer *buf, void *vp, uint size)
void TIDY_CALL tidyBufPutByte (TidyBuffer *buf, byte bv)
int TIDY_CALL tidyBufPopByte (TidyBuffer *buf)
int TIDY_CALL tidyBufGetByte (TidyBuffer *buf)
Bool TIDY_CALL tidyBufEndOfInput (TidyBuffer *buf)
void TIDY_CALL tidyBufUngetByte (TidyBuffer *buf, byte bv)
void TIDY_CALL tidyInitInputBuffer (TidyInputSource *inp, TidyBuffer *buf)
void TIDY_CALL tidyInitOutputBuffer (TidyOutputSink *outp, TidyBuffer *buf)
+

Detailed Description

+
    +
  • Treat buffer as an I/O stream.
  • +
+

(c) 1998-2007 (W3C) MIT, ERCIM, Keio University See tidy.h for the copyright notice.

+

CVS Info :

+
Author:
arnaud02
+
Date:
2007/01/23 11:17:45
+
Revision:
1.9
+

Requires buffer to automatically grow as bytes are added. Must keep track of current read and write points.

+

Function Documentation

+ +
+
+ + + + + + + + +
void TIDY_CALL tidyBufInit (TidyBufferbuf)
+
+
+

Initialize data structure using the default allocator

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void TIDY_CALL tidyBufInitWithAllocator (TidyBufferbuf,
TidyAllocatorallocator 
)
+
+
+

Initialize data structure using the given custom allocator

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void TIDY_CALL tidyBufAlloc (TidyBufferbuf,
uint allocSize 
)
+
+
+

Free current buffer, allocate given amount, reset input pointer, use the default allocator

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void TIDY_CALL tidyBufAllocWithAllocator (TidyBufferbuf,
TidyAllocatorallocator,
uint allocSize 
)
+
+
+

Free current buffer, allocate given amount, reset input pointer, use the given custom allocator

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void TIDY_CALL tidyBufCheckAlloc (TidyBufferbuf,
uint allocSize,
uint chunkSize 
)
+
+
+

Expand buffer to given size. Chunk size is minimum growth. Pass 0 for default of 256 bytes.

+ +
+
+ +
+
+ + + + + + + + +
void TIDY_CALL tidyBufFree (TidyBufferbuf)
+
+
+

Free current contents and zero out

+ +
+
+ +
+
+ + + + + + + + +
void TIDY_CALL tidyBufClear (TidyBufferbuf)
+
+
+

Set buffer bytes to 0

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void TIDY_CALL tidyBufAttach (TidyBufferbuf,
byte * bp,
uint size 
)
+
+
+

Attach to existing buffer

+ +
+
+ +
+
+ + + + + + + + +
void TIDY_CALL tidyBufDetach (TidyBufferbuf)
+
+
+

Detach from buffer. Caller must free.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void TIDY_CALL tidyBufAppend (TidyBufferbuf,
void * vp,
uint size 
)
+
+
+

Append bytes to buffer. Expand if necessary.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void TIDY_CALL tidyBufPutByte (TidyBufferbuf,
byte bv 
)
+
+
+

Append one byte to buffer. Expand if necessary.

+ +
+
+ +
+
+ + + + + + + + +
int TIDY_CALL tidyBufPopByte (TidyBufferbuf)
+
+
+

Get byte from end of buffer

+ +
+
+ +
+
+ + + + + + + + +
int TIDY_CALL tidyBufGetByte (TidyBufferbuf)
+
+
+

Get byte from front of buffer. Increment input offset.

+ +
+
+ +
+
+ + + + + + + + +
Bool TIDY_CALL tidyBufEndOfInput (TidyBufferbuf)
+
+
+

At end of buffer?

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void TIDY_CALL tidyBufUngetByte (TidyBufferbuf,
byte bv 
)
+
+
+

Put a byte back into the buffer. Decrement input offset.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void TIDY_CALL tidyInitInputBuffer (TidyInputSourceinp,
TidyBufferbuf 
)
+
+
+

Initialize a buffer input source

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void TIDY_CALL tidyInitOutputBuffer (TidyOutputSinkoutp,
TidyBufferbuf 
)
+
+
+

Initialize a buffer output sink

+ +
+
+
+
+ + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/buffio_8h.js b/Balthisar Tidy/tidylib5-src/htmldoc/api/buffio_8h.js new file mode 100755 index 00000000..05674230 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/buffio_8h.js @@ -0,0 +1,20 @@ +var buffio_8h = +[ + [ "tidyBufInit", "buffio_8h.html#a3cf251a96f69f05495744af6c9d0339b", null ], + [ "tidyBufInitWithAllocator", "buffio_8h.html#aff43ddd9fc78532617d88db55b164f5e", null ], + [ "tidyBufAlloc", "buffio_8h.html#a896654bd99113bfe5e86b924836aacc3", null ], + [ "tidyBufAllocWithAllocator", "buffio_8h.html#a57c832b4ddbc19a329a5ab9936eb5826", null ], + [ "tidyBufCheckAlloc", "buffio_8h.html#a7a66ba1f574955d1fc1de57476e849f2", null ], + [ "tidyBufFree", "buffio_8h.html#a65aae9ae4b499e62038700f4792849fc", null ], + [ "tidyBufClear", "buffio_8h.html#aa94e59f613a495b17e90c1c4778c3911", null ], + [ "tidyBufAttach", "buffio_8h.html#ac5909e78d98583cb245dd2004469bb93", null ], + [ "tidyBufDetach", "buffio_8h.html#a8da2bf473b14e6bdd5cd40fc47c29903", null ], + [ "tidyBufAppend", "buffio_8h.html#ad59b32f81789b634758274f34be4d25b", null ], + [ "tidyBufPutByte", "buffio_8h.html#af48af586ada5ff264501fe9ef4c67dd1", null ], + [ "tidyBufPopByte", "buffio_8h.html#af8b1e8fbe3c29d08250794d7e4925ea6", null ], + [ "tidyBufGetByte", "buffio_8h.html#a5a2e0c47b4b14b5beb17ac982fa21eeb", null ], + [ "tidyBufEndOfInput", "buffio_8h.html#a7e7d8e58623c8bde00d66141edb2cae0", null ], + [ "tidyBufUngetByte", "buffio_8h.html#a1d1f2039b769381d418ac1187b50b292", null ], + [ "tidyInitInputBuffer", "buffio_8h.html#a73da3182aea89939af1d98504a3b2df0", null ], + [ "tidyInitOutputBuffer", "buffio_8h.html#a882a92590a9e6ecce16d5b8e8db19fbb", null ] +]; \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/buffio_8h_source.html b/Balthisar Tidy/tidylib5-src/htmldoc/api/buffio_8h_source.html new file mode 100755 index 00000000..4d0d5437 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/buffio_8h_source.html @@ -0,0 +1,198 @@ + + + + + +HTML Tidy: buffio.h Source File + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
buffio.h
+
+
+Go to the documentation of this file.
00001 #ifndef __TIDY_BUFFIO_H__
+00002 #define __TIDY_BUFFIO_H__
+00003 
+00004 /** @file buffio.h - Treat buffer as an I/O stream.
+00005 
+00006   (c) 1998-2007 (W3C) MIT, ERCIM, Keio University
+00007   See tidy.h for the copyright notice.
+00008 
+00009   CVS Info :
+00010 
+00011     $Author: arnaud02 $ 
+00012     $Date: 2007/01/23 11:17:45 $ 
+00013     $Revision: 1.9 $ 
+00014 
+00015   Requires buffer to automatically grow as bytes are added.
+00016   Must keep track of current read and write points.
+00017 
+00018 */
+00019 
+00020 #include "platform.h"
+00021 #include "tidy.h"
+00022 
+00023 #ifdef __cplusplus
+00024 extern "C" {
+00025 #endif
+00026 
+00027 /** TidyBuffer - A chunk of memory */
+00028 TIDY_STRUCT
+00029 struct _TidyBuffer 
+00030 {
+00031     TidyAllocator* allocator;  /**< Memory allocator */
+00032     byte* bp;           /**< Pointer to bytes */
+00033     uint  size;         /**< # bytes currently in use */
+00034     uint  allocated;    /**< # bytes allocated */ 
+00035     uint  next;         /**< Offset of current input position */
+00036 };
+00037 
+00038 /** Initialize data structure using the default allocator */
+00039 TIDY_EXPORT void TIDY_CALL tidyBufInit( TidyBuffer* buf );
+00040 
+00041 /** Initialize data structure using the given custom allocator */
+00042 TIDY_EXPORT void TIDY_CALL tidyBufInitWithAllocator( TidyBuffer* buf, TidyAllocator* allocator );
+00043 
+00044 /** Free current buffer, allocate given amount, reset input pointer,
+00045     use the default allocator */
+00046 TIDY_EXPORT void TIDY_CALL tidyBufAlloc( TidyBuffer* buf, uint allocSize );
+00047 
+00048 /** Free current buffer, allocate given amount, reset input pointer,
+00049     use the given custom allocator */
+00050 TIDY_EXPORT void TIDY_CALL tidyBufAllocWithAllocator( TidyBuffer* buf,
+00051                                                       TidyAllocator* allocator,
+00052                                                       uint allocSize );
+00053 
+00054 /** Expand buffer to given size. 
+00055 **  Chunk size is minimum growth. Pass 0 for default of 256 bytes.
+00056 */
+00057 TIDY_EXPORT void TIDY_CALL tidyBufCheckAlloc( TidyBuffer* buf,
+00058                                               uint allocSize, uint chunkSize );
+00059 
+00060 /** Free current contents and zero out */
+00061 TIDY_EXPORT void TIDY_CALL tidyBufFree( TidyBuffer* buf );
+00062 
+00063 /** Set buffer bytes to 0 */
+00064 TIDY_EXPORT void TIDY_CALL tidyBufClear( TidyBuffer* buf );
+00065 
+00066 /** Attach to existing buffer */
+00067 TIDY_EXPORT void TIDY_CALL tidyBufAttach( TidyBuffer* buf, byte* bp, uint size );
+00068 
+00069 /** Detach from buffer.  Caller must free. */
+00070 TIDY_EXPORT void TIDY_CALL tidyBufDetach( TidyBuffer* buf );
+00071 
+00072 
+00073 /** Append bytes to buffer.  Expand if necessary. */
+00074 TIDY_EXPORT void TIDY_CALL tidyBufAppend( TidyBuffer* buf, void* vp, uint size );
+00075 
+00076 /** Append one byte to buffer.  Expand if necessary. */
+00077 TIDY_EXPORT void TIDY_CALL tidyBufPutByte( TidyBuffer* buf, byte bv );
+00078 
+00079 /** Get byte from end of buffer */
+00080 TIDY_EXPORT int TIDY_CALL  tidyBufPopByte( TidyBuffer* buf );
+00081 
+00082 
+00083 /** Get byte from front of buffer.  Increment input offset. */
+00084 TIDY_EXPORT int TIDY_CALL  tidyBufGetByte( TidyBuffer* buf );
+00085 
+00086 /** At end of buffer? */
+00087 TIDY_EXPORT Bool TIDY_CALL tidyBufEndOfInput( TidyBuffer* buf );
+00088 
+00089 /** Put a byte back into the buffer.  Decrement input offset. */
+00090 TIDY_EXPORT void TIDY_CALL tidyBufUngetByte( TidyBuffer* buf, byte bv );
+00091 
+00092 
+00093 /**************
+00094    TIDY
+00095 **************/
+00096 
+00097 /* Forward declarations
+00098 */
+00099 
+00100 /** Initialize a buffer input source */
+00101 TIDY_EXPORT void TIDY_CALL tidyInitInputBuffer( TidyInputSource* inp, TidyBuffer* buf );
+00102 
+00103 /** Initialize a buffer output sink */
+00104 TIDY_EXPORT void TIDY_CALL tidyInitOutputBuffer( TidyOutputSink* outp, TidyBuffer* buf );
+00105 
+00106 #ifdef __cplusplus
+00107 }
+00108 #endif
+00109 #endif /* __TIDY_BUFFIO_H__ */
+00110 
+00111 /*
+00112  * local variables:
+00113  * mode: c
+00114  * indent-tabs-mode: nil
+00115  * c-basic-offset: 4
+00116  * eval: (c-set-offset 'substatement-open 0)
+00117  * end:
+00118  */
+
+
+ + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/classes.html b/Balthisar Tidy/tidylib5-src/htmldoc/api/classes.html new file mode 100755 index 00000000..a7218137 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/classes.html @@ -0,0 +1,89 @@ + + + + + +HTML Tidy: Data Structure Index + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
Data Structure Index
+
+
+
T | _
+ + + + + +
  T  
+
TidyDoc   
  _  
+
_TidyAllocatorVtbl   _TidyOutputSink   
TidyNode   _TidyBuffer   
TidyAttr   TidyOption   _TidyAllocator   _TidyInputSource   
+
T | _
+
+
+ + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/closed.png b/Balthisar Tidy/tidylib5-src/htmldoc/api/closed.png new file mode 100755 index 0000000000000000000000000000000000000000..b7d4bd9fef2272c74b94762c9e2496177017775e GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VuAVNAAr*{o?>h22DDp4|bgj*t z)u^AqcA-V@guRYpb17F<&b?_~8HV>~XqWvB;^$!VVSTy0!eQcJp_yD7TIQA>7dijs YXf6~H5cs^Q6KEiVr>mdKI;Vst0NsWqGynhq literal 0 HcmV?d00001 diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/deprecated.html b/Balthisar Tidy/tidylib5-src/htmldoc/api/deprecated.html new file mode 100755 index 00000000..5f6aa0c4 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/deprecated.html @@ -0,0 +1,93 @@ + + + + + +HTML Tidy: Deprecated List + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
Deprecated List
+
+
+
+
Group AttrGetAttributeName
+

The functions tidyAttrGet{AttributeName} are deprecated and should be replaced by tidyAttrGetById. For instance, tidyAttrGetID( TidyNode tnod ) can be replaced by tidyAttrGetById( TidyNode tnod, TidyAttr_ID ). This avoids a potential name clash with tidyAttrGetId for case-insensitive languages.

+

+
+
Group AttrIsAttributeName
+

The functions tidyAttrIs{AttributeName} are deprecated and should be replaced by tidyAttrGetId.

+

+
+
Group NodeIsElementName
+

The functions tidyNodeIs{ElementName} are deprecated and should be replaced by tidyNodeGetId.

+

+
+
+
+
+ + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/doxygen.css b/Balthisar Tidy/tidylib5-src/htmldoc/api/doxygen.css new file mode 100755 index 00000000..c151fde3 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/doxygen.css @@ -0,0 +1,1012 @@ +/* The standard CSS for doxygen */ + +body, table, div, p, dl { + font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif; + font-size: 13px; + line-height: 1.3; +} + +/* @group Heading Levels */ + +h1 { + font-size: 150%; +} + +.title { + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2 { + font-size: 120%; +} + +h3 { + font-size: 100%; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd, p.starttd { + margin-top: 2px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +.fragment { + font-family: monospace, fixed; + font-size: 105%; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; +} + +div.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 8px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memItemLeft, .memItemRight, .memTemplParams { + border-top: 1px solid #C4CFE5; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; +} + +.memname { + white-space: nowrap; + font-weight: bold; + margin-left: 6px; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 8px; + border-top-left-radius: 8px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 8px; + -moz-border-radius-topleft: 8px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 8px; + -webkit-border-top-left-radius: 8px; + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 2px 5px; + background-color: #FBFCFD; + border-top-width: 0; + /* opera specific markup */ + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 8px; + -moz-border-radius-bottomright: 8px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 60%, #F7F8FB 95%, #EEF1F7); + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 8px; + -webkit-border-bottom-right-radius: 8px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.6,#FFFFFF), color-stop(0.60,#FFFFFF), color-stop(0.95,#F7F8FB), to(#EEF1F7)); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} + +.params, .retval, .exception, .tparams { + border-spacing: 6px 2px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + + + + +/* @end */ + +/* @group Directory (tree) */ + +/* for the tree view */ + +.ftvtree { + font-family: sans-serif; + margin: 0px; +} + +/* these are for tree view when used as main index */ + +.directory { + font-size: 9pt; + font-weight: bold; + margin: 5px; +} + +.directory h3 { + margin: 0px; + margin-top: 1em; + font-size: 11pt; +} + +/* +The following two styles can be used to replace the root node title +with an image of your choice. Simply uncomment the next two styles, +specify the name of your image and be sure to set 'height' to the +proper pixel height of your image. +*/ + +/* +.directory h3.swap { + height: 61px; + background-repeat: no-repeat; + background-image: url("yourimage.gif"); +} +.directory h3.swap span { + display: none; +} +*/ + +.directory > h3 { + margin-top: 0; +} + +.directory p { + margin: 0px; + white-space: nowrap; +} + +.directory div { + display: none; + margin: 0px; +} + +.directory img { + vertical-align: -30%; +} + +/* these are for tree view when not used as main index */ + +.directory-alt { + font-size: 100%; + font-weight: bold; +} + +.directory-alt h3 { + margin: 0px; + margin-top: 1em; + font-size: 11pt; +} + +.directory-alt > h3 { + margin-top: 0; +} + +.directory-alt p { + margin: 0px; + white-space: nowrap; +} + +.directory-alt div { + display: none; + margin: 0px; +} + +.directory-alt img { + vertical-align: -30%; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + width: 100%; + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + width: 100%; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +div.ingroups +{ + margin-left: 5px; + font-size: 8pt; + padding-left: 5px; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 7px; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + border-left:4px solid; + padding: 0 0 0 6px; +} + +dl.note +{ + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + border-color: #00D000; +} + +dl.deprecated +{ + border-color: #505050; +} + +dl.todo +{ + border-color: #00C0E0; +} + +dl.test +{ + border-color: #3030E0; +} + +dl.bug +{ + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 20px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } + pre.fragment + { + overflow: visible; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + } +} + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/doxygen.png b/Balthisar Tidy/tidylib5-src/htmldoc/api/doxygen.png new file mode 100755 index 0000000000000000000000000000000000000000..635ed52fce7057ac24df92ec7664088a881fa5d0 GIT binary patch literal 3942 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 A+yDRo literal 0 HcmV?d00001 diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/files.html b/Balthisar Tidy/tidylib5-src/htmldoc/api/files.html new file mode 100755 index 00000000..9364f781 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/files.html @@ -0,0 +1,85 @@ + + + + + +HTML Tidy: File List + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+ + + + +
buffio.h [code]
platform.h [code]
tidy.h [code]
tidyenum.h [code]
+
+
+ + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/files.js b/Balthisar Tidy/tidylib5-src/htmldoc/api/files.js new file mode 100755 index 00000000..cd6740bf --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/files.js @@ -0,0 +1,7 @@ +var files = +[ + [ "buffio.h", "buffio_8h.html", "buffio_8h" ], + [ "platform.h", null, null ], + [ "tidy.h", "tidy_8h.html", "tidy_8h" ], + [ "tidyenum.h", null, null ] +]; \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/ftv2blank.png b/Balthisar Tidy/tidylib5-src/htmldoc/api/ftv2blank.png new file mode 100755 index 0000000000000000000000000000000000000000..3b7a29cb81d7895a716673f35590eaceb3793003 GIT binary patch literal 82 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%Qj(r7jv*C{Z|@!iau}EweqKKB en4GH+gF74RGzP}kvk&b8iF>;GxvX)7Tz#%>LmF6&|330OTN|a z{{=wx+WhU0y6zlAwAzONbPgh(@3v{|w(wmG$5y0Vi+t!($avy)0Ha#1p4gmU`n#I# zOX4L>+=Pi^D-w<(VJqs-_euK>g^b7iVhvNtYC7fIJCj6)A&|1Wgb-M!ftN7xU5k9^ z@#NVq`OxLViy`w%H6H)99eYw@JunRU3L>RIDT(VSeAi@ky#YWzbh$j1<pqv?W@8uFpX4?q6OPP0QkbO~IGXIo9O=aZ-NV0o=k&0TPjQc&C8 z!;pex!eqPA!cUs?hc4OkF6op_%C)F%@1dk*c;MU#FXAUKBtpQW-|J|tx%P2^UlulK zwGZh_IhaZ^JaCSkW}BlA_S*+%^WdfSH>XQXjD|RtVy0Z;_Vr<=C-PkTs6a925qLJ4 zz9gMabov~;1OPmE_=JV!O@@jAe?HwI;V4$t8cdGo2z;B1r8H5bX?MDrIa89Q5Zss= z3MpTJTEh7^?geXfpYnXQa)=k^DD@#zqw@ANTS8R5IHFCnGC zFye2Ec=U1D9z0xQab=64V!-Np9 zMH(puT5FV&6f)kci?5jV5ds3wqW^;1om2`AV;-)a5=D__^7FeqUH%!%?ly_5cIySX scdzjM-MP~PD&>->{B-~SC-dL>2dY=Zuwh)(*Z=?k07*qoM6N<$f<5VZJOBUy literal 0 HcmV?d00001 diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/ftv2folderclosed.png b/Balthisar Tidy/tidylib5-src/htmldoc/api/ftv2folderclosed.png new file mode 100755 index 0000000000000000000000000000000000000000..79aeaf70ea92d062a16854ad40e52e89cca48045 GIT binary patch literal 598 zcmV-c0;&CpP)@n_AxdjH^X_%=W+pR9H4$uA4h+M)Z#d_kbMCy^l8E3iFLkKsM?rAxpyKm4 zpJZ)wCsn&Nox^H-lKu(7+U5>wm2A8w0^WW2g4OoqUn>|0`SFu=`MCWZGa&&HAOdV` zeYKtvfkmJwErvx<&bzpCtDf3$I-O4H#iuW}I=63DQ7*VBG#m1QZc43!?0j^^rop|LB$6n4f?j zSPLSMBym3p04SyK^8IH#yt|kRc|ZZP#1{3s>~(8cV(ZcbR^><;boWi%VKNIM>wn*b zrp9+Dfgc#`?)fkxAXp?70cB6ODCBKDeot&&>KAEwTgN^hb6}3t>x6&%> z>z6%!t?B87Mo}*`iu!6}T+i3Xb*om;?Rrr!&KC93tf!Zno?gCE(#vyYJy$L0%-E@C ke^gM)yZ8S8(TzBo>VXiD3(P1I6Ekr)}6_y7!i1Evm4%w}a`=R2?wr!y|)&JW~oFQEP}n%!wl+h7bZoguFAGAuz-k z9*7*IR2fz1a$M z`?}KYC8b+UU$+)Ky?o8nt){0t%SvyoRQ2X+pl`K9eY;cFou#T?yjpoZ)xmbBzVrWw c^H&Le0J=&DKt3yzzW@LL07*qoM6N<$g5G@uO#lD@ literal 0 HcmV?d00001 diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/ftv2lastnode.png b/Balthisar Tidy/tidylib5-src/htmldoc/api/ftv2lastnode.png new file mode 100755 index 0000000000000000000000000000000000000000..3b7a29cb81d7895a716673f35590eaceb3793003 GIT binary patch literal 82 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%Qj(r7jv*C{Z|@!iau}EweqKKB en4GH+gF74RGzP}kvk&b8iF>;GxvX)7Tz#%>LmF6&|330OTN|a z{{=wx+WhU0y6zlAwAzONbPgh(@3v{|w(wmG$5y0Vi+t!($avy)0Ha#1p4gmU`n#I# zOX4L>+=Pi^D-w<(VJqs-_euK>g^b7iVhvNtYC7fIJCj6)A&|1Wgb-M!ftN7xU5k9^ z@#NVq`OxLViy`w%H6H)99eYw@JunRU3L>RIDT(VSeAi@ky#YWzbh$j1<pqv?W@8uFpX4?q6OPP0QkbO~IGXIo9O=aZ-NV0o=k&0TPjQc&C8 z!;pex!eqPA!cUs?hc4OkF6op_%C)F%@1dk*c;MU#FXAUKBtpQW-|J|tx%P2^UlulK zwGZh_IhaZ^JaCSkW}BlA_S*+%^WdfSH>XQXjD|RtVy0Z;_Vr<=C-PkTs6a925qLJ4 zz9gMabov~;1OPmE_=JV!O@@jAe?HwI;V4$t8cdGo2z;B1r8H5bX?MDrIa89Q5Zss= z3MpTJTEh7^?geXfpYnXQa)=k^DD@#zqw@ANTS8R5IHFCnGC zFye2Ec=U1D9z0xQab=64V!-Np9 zMH(puT5FV&6f)kci?5jV5ds3wqW^;1om2`AV;-)a5=D__^7FeqUH%!%?ly_5cIySX scdzjM-MP~PD&>->{B-~SC-dL>2dY=Zuwh)(*Z=?k07*qoM6N<$f<5VZJOBUy literal 0 HcmV?d00001 diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/ftv2mlastnode.png b/Balthisar Tidy/tidylib5-src/htmldoc/api/ftv2mlastnode.png new file mode 100755 index 0000000000000000000000000000000000000000..ec51f17a1fdc860c16a34aa1aeb753624409385b GIT binary patch literal 221 zcmV<303!d1P)zyT<scVDZ7_{EOe0eBcqfczyT<scVDZ7_{EOe0eBcqfc;GxvXiI)3s$q zXLSp?Vw#S->OEjPiI)3s$q zXLSp?Vw#S->OEjP-{AmhX=Jf@Vh3;mo5W!fIz z|G!}-&+_@bPjpO9=CQeNG-x}^He0~wUVC_fMvB=U2Bz7OmlqlcNzZjyB-4HN7~9Lr z$D7yJnqSa(es#+qiN5>4_4EDDFZO$H+Fh^MBH+YoTokY^Q!+9#?d)>vwv3Yw*Rly-LY$(@}t-3;)0XUPrZ!IB%s(_pZ#HPZ2xc? Sd^id83xlVtpUXO@geCxW-C}_N literal 0 HcmV?d00001 diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/ftv2vertline.png b/Balthisar Tidy/tidylib5-src/htmldoc/api/ftv2vertline.png new file mode 100755 index 0000000000000000000000000000000000000000..3b7a29cb81d7895a716673f35590eaceb3793003 GIT binary patch literal 82 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%Qj(r7jv*C{Z|@!iau}EweqKKB en4GH+gF74RGzP}kvk&b8iF>;GxvX + + + + +HTML Tidy: Data Fields + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+
+
+ + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/functions_func.html b/Balthisar Tidy/tidylib5-src/htmldoc/api/functions_func.html new file mode 100755 index 00000000..8daa20e7 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/functions_func.html @@ -0,0 +1,86 @@ + + + + + +HTML Tidy: Data Fields - Functions + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
+ + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/functions_vars.html b/Balthisar Tidy/tidylib5-src/htmldoc/api/functions_vars.html new file mode 100755 index 00000000..b74b6fc6 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/functions_vars.html @@ -0,0 +1,110 @@ + + + + + +HTML Tidy: Data Fields - Variables + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
+ + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/globals.html b/Balthisar Tidy/tidylib5-src/htmldoc/api/globals.html new file mode 100755 index 00000000..55aeef49 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/globals.html @@ -0,0 +1,425 @@ + + + + + +HTML Tidy: Globals + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- e -

+ + +

- t -

    +
  • tidyAccessWarningCount() +: tidy.h +
  • +
  • TidyAllocator +: tidy.h +
  • +
  • TidyAllocatorVtbl +: tidy.h +
  • +
  • tidyBufAlloc() +: buffio.h +
  • +
  • tidyBufAllocWithAllocator() +: buffio.h +
  • +
  • tidyBufAppend() +: buffio.h +
  • +
  • tidyBufAttach() +: buffio.h +
  • +
  • tidyBufCheckAlloc() +: buffio.h +
  • +
  • tidyBufClear() +: buffio.h +
  • +
  • tidyBufDetach() +: buffio.h +
  • +
  • tidyBufEndOfInput() +: buffio.h +
  • +
  • tidyBufFree() +: buffio.h +
  • +
  • tidyBufGetByte() +: buffio.h +
  • +
  • tidyBufInit() +: buffio.h +
  • +
  • tidyBufInitWithAllocator() +: buffio.h +
  • +
  • tidyBufPopByte() +: buffio.h +
  • +
  • tidyBufPutByte() +: buffio.h +
  • +
  • tidyBufUngetByte() +: buffio.h +
  • +
  • tidyCleanAndRepair() +: tidy.h +
  • +
  • tidyConfigErrorCount() +: tidy.h +
  • +
  • tidyDetectedGenericXml() +: tidy.h +
  • +
  • tidyDetectedHtmlVersion() +: tidy.h +
  • +
  • tidyDetectedXhtml() +: tidy.h +
  • +
  • TidyEOFFunc +: tidy.h +
  • +
  • tidyErrorCount() +: tidy.h +
  • +
  • tidyErrorSummary() +: tidy.h +
  • +
  • TidyFree +: tidy.h +
  • +
  • tidyGeneralInfo() +: tidy.h +
  • +
  • tidyGetAppData() +: tidy.h +
  • +
  • tidyGetByte() +: tidy.h +
  • +
  • TidyGetByteFunc +: tidy.h +
  • +
  • tidyGetNextOption() +: tidy.h +
  • +
  • tidyGetOption() +: tidy.h +
  • +
  • tidyGetOptionByName() +: tidy.h +
  • +
  • tidyGetOptionList() +: tidy.h +
  • +
  • tidyInitInputBuffer() +: buffio.h +
  • +
  • tidyInitOutputBuffer() +: buffio.h +
  • +
  • tidyInitSink() +: tidy.h +
  • +
  • tidyInitSource() +: tidy.h +
  • +
  • TidyInputSource +: tidy.h +
  • +
  • tidyIsEOF() +: tidy.h +
  • +
  • tidyLoadConfig() +: tidy.h +
  • +
  • tidyLoadConfigEnc() +: tidy.h +
  • +
  • TidyMalloc +: tidy.h +
  • +
  • TidyOptCallback +: tidy.h +
  • +
  • tidyOptCopyConfig() +: tidy.h +
  • +
  • tidyOptDiffThanDefault() +: tidy.h +
  • +
  • tidyOptDiffThanSnapshot() +: tidy.h +
  • +
  • tidyOptGetBool() +: tidy.h +
  • +
  • tidyOptGetCategory() +: tidy.h +
  • +
  • tidyOptGetCurrPick() +: tidy.h +
  • +
  • tidyOptGetDeclTagList() +: tidy.h +
  • +
  • tidyOptGetDefault() +: tidy.h +
  • +
  • tidyOptGetDefaultBool() +: tidy.h +
  • +
  • tidyOptGetDefaultInt() +: tidy.h +
  • +
  • tidyOptGetDoc() +: tidy.h +
  • +
  • tidyOptGetDocLinksList() +: tidy.h +
  • +
  • tidyOptGetEncName() +: tidy.h +
  • +
  • tidyOptGetId() +: tidy.h +
  • +
  • tidyOptGetIdForName() +: tidy.h +
  • +
  • tidyOptGetInt() +: tidy.h +
  • +
  • tidyOptGetName() +: tidy.h +
  • +
  • tidyOptGetNextDeclTag() +: tidy.h +
  • +
  • tidyOptGetNextDocLinks() +: tidy.h +
  • +
  • tidyOptGetNextPick() +: tidy.h +
  • +
  • tidyOptGetPickList() +: tidy.h +
  • +
  • tidyOptGetType() +: tidy.h +
  • +
  • tidyOptGetValue() +: tidy.h +
  • +
  • tidyOptIsReadOnly() +: tidy.h +
  • +
  • tidyOptParseValue() +: tidy.h +
  • +
  • tidyOptResetAllToDefault() +: tidy.h +
  • +
  • tidyOptResetToDefault() +: tidy.h +
  • +
  • tidyOptResetToSnapshot() +: tidy.h +
  • +
  • tidyOptSaveFile() +: tidy.h +
  • +
  • tidyOptSaveSink() +: tidy.h +
  • +
  • tidyOptSetBool() +: tidy.h +
  • +
  • tidyOptSetInt() +: tidy.h +
  • +
  • tidyOptSetValue() +: tidy.h +
  • +
  • tidyOptSnapshot() +: tidy.h +
  • +
  • TidyOutputSink +: tidy.h +
  • +
  • TidyPanic +: tidy.h +
  • +
  • tidyParseBuffer() +: tidy.h +
  • +
  • tidyParseFile() +: tidy.h +
  • +
  • tidyParseSource() +: tidy.h +
  • +
  • tidyParseStdin() +: tidy.h +
  • +
  • tidyParseString() +: tidy.h +
  • +
  • tidyPutByte() +: tidy.h +
  • +
  • TidyPutByteFunc +: tidy.h +
  • +
  • TidyRealloc +: tidy.h +
  • +
  • tidyReleaseDate() +: tidy.h +
  • +
  • TidyReportFilter +: tidy.h +
  • +
  • tidyRunDiagnostics() +: tidy.h +
  • +
  • tidySaveBuffer() +: tidy.h +
  • +
  • tidySaveFile() +: tidy.h +
  • +
  • tidySaveSink() +: tidy.h +
  • +
  • tidySaveStdout() +: tidy.h +
  • +
  • tidySaveString() +: tidy.h +
  • +
  • tidySetAppData() +: tidy.h +
  • +
  • tidySetCharEncoding() +: tidy.h +
  • +
  • tidySetErrorBuffer() +: tidy.h +
  • +
  • tidySetErrorFile() +: tidy.h +
  • +
  • tidySetErrorSink() +: tidy.h +
  • +
  • tidySetFreeCall() +: tidy.h +
  • +
  • tidySetInCharEncoding() +: tidy.h +
  • +
  • tidySetMallocCall() +: tidy.h +
  • +
  • tidySetOutCharEncoding() +: tidy.h +
  • +
  • tidySetPanicCall() +: tidy.h +
  • +
  • tidySetReallocCall() +: tidy.h +
  • +
  • tidySetReportFilter() +: tidy.h +
  • +
  • tidyStatus() +: tidy.h +
  • +
  • tidyUngetByte() +: tidy.h +
  • +
  • TidyUngetByteFunc +: tidy.h +
  • +
  • tidyWarningCount() +: tidy.h +
  • +
+
+
+ + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/globals_defs.html b/Balthisar Tidy/tidylib5-src/htmldoc/api/globals_defs.html new file mode 100755 index 00000000..48489891 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/globals_defs.html @@ -0,0 +1,80 @@ + + + + + +HTML Tidy: Globals + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
+ + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/globals_func.html b/Balthisar Tidy/tidylib5-src/htmldoc/api/globals_func.html new file mode 100755 index 00000000..6a1fc9d7 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/globals_func.html @@ -0,0 +1,376 @@ + + + + + +HTML Tidy: Globals + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- t -

    +
  • tidyAccessWarningCount() +: tidy.h +
  • +
  • tidyBufAlloc() +: buffio.h +
  • +
  • tidyBufAllocWithAllocator() +: buffio.h +
  • +
  • tidyBufAppend() +: buffio.h +
  • +
  • tidyBufAttach() +: buffio.h +
  • +
  • tidyBufCheckAlloc() +: buffio.h +
  • +
  • tidyBufClear() +: buffio.h +
  • +
  • tidyBufDetach() +: buffio.h +
  • +
  • tidyBufEndOfInput() +: buffio.h +
  • +
  • tidyBufFree() +: buffio.h +
  • +
  • tidyBufGetByte() +: buffio.h +
  • +
  • tidyBufInit() +: buffio.h +
  • +
  • tidyBufInitWithAllocator() +: buffio.h +
  • +
  • tidyBufPopByte() +: buffio.h +
  • +
  • tidyBufPutByte() +: buffio.h +
  • +
  • tidyBufUngetByte() +: buffio.h +
  • +
  • tidyCleanAndRepair() +: tidy.h +
  • +
  • tidyConfigErrorCount() +: tidy.h +
  • +
  • tidyDetectedGenericXml() +: tidy.h +
  • +
  • tidyDetectedHtmlVersion() +: tidy.h +
  • +
  • tidyDetectedXhtml() +: tidy.h +
  • +
  • tidyErrorCount() +: tidy.h +
  • +
  • tidyErrorSummary() +: tidy.h +
  • +
  • tidyGeneralInfo() +: tidy.h +
  • +
  • tidyGetAppData() +: tidy.h +
  • +
  • tidyGetByte() +: tidy.h +
  • +
  • tidyGetNextOption() +: tidy.h +
  • +
  • tidyGetOption() +: tidy.h +
  • +
  • tidyGetOptionByName() +: tidy.h +
  • +
  • tidyGetOptionList() +: tidy.h +
  • +
  • tidyInitInputBuffer() +: buffio.h +
  • +
  • tidyInitOutputBuffer() +: buffio.h +
  • +
  • tidyInitSink() +: tidy.h +
  • +
  • tidyInitSource() +: tidy.h +
  • +
  • tidyIsEOF() +: tidy.h +
  • +
  • tidyLoadConfig() +: tidy.h +
  • +
  • tidyLoadConfigEnc() +: tidy.h +
  • +
  • tidyOptCopyConfig() +: tidy.h +
  • +
  • tidyOptDiffThanDefault() +: tidy.h +
  • +
  • tidyOptDiffThanSnapshot() +: tidy.h +
  • +
  • tidyOptGetBool() +: tidy.h +
  • +
  • tidyOptGetCategory() +: tidy.h +
  • +
  • tidyOptGetCurrPick() +: tidy.h +
  • +
  • tidyOptGetDeclTagList() +: tidy.h +
  • +
  • tidyOptGetDefault() +: tidy.h +
  • +
  • tidyOptGetDefaultBool() +: tidy.h +
  • +
  • tidyOptGetDefaultInt() +: tidy.h +
  • +
  • tidyOptGetDoc() +: tidy.h +
  • +
  • tidyOptGetDocLinksList() +: tidy.h +
  • +
  • tidyOptGetEncName() +: tidy.h +
  • +
  • tidyOptGetId() +: tidy.h +
  • +
  • tidyOptGetIdForName() +: tidy.h +
  • +
  • tidyOptGetInt() +: tidy.h +
  • +
  • tidyOptGetName() +: tidy.h +
  • +
  • tidyOptGetNextDeclTag() +: tidy.h +
  • +
  • tidyOptGetNextDocLinks() +: tidy.h +
  • +
  • tidyOptGetNextPick() +: tidy.h +
  • +
  • tidyOptGetPickList() +: tidy.h +
  • +
  • tidyOptGetType() +: tidy.h +
  • +
  • tidyOptGetValue() +: tidy.h +
  • +
  • tidyOptIsReadOnly() +: tidy.h +
  • +
  • tidyOptParseValue() +: tidy.h +
  • +
  • tidyOptResetAllToDefault() +: tidy.h +
  • +
  • tidyOptResetToDefault() +: tidy.h +
  • +
  • tidyOptResetToSnapshot() +: tidy.h +
  • +
  • tidyOptSaveFile() +: tidy.h +
  • +
  • tidyOptSaveSink() +: tidy.h +
  • +
  • tidyOptSetBool() +: tidy.h +
  • +
  • tidyOptSetInt() +: tidy.h +
  • +
  • tidyOptSetValue() +: tidy.h +
  • +
  • tidyOptSnapshot() +: tidy.h +
  • +
  • tidyParseBuffer() +: tidy.h +
  • +
  • tidyParseFile() +: tidy.h +
  • +
  • tidyParseSource() +: tidy.h +
  • +
  • tidyParseStdin() +: tidy.h +
  • +
  • tidyParseString() +: tidy.h +
  • +
  • tidyPutByte() +: tidy.h +
  • +
  • tidyReleaseDate() +: tidy.h +
  • +
  • tidyRunDiagnostics() +: tidy.h +
  • +
  • tidySaveBuffer() +: tidy.h +
  • +
  • tidySaveFile() +: tidy.h +
  • +
  • tidySaveSink() +: tidy.h +
  • +
  • tidySaveStdout() +: tidy.h +
  • +
  • tidySaveString() +: tidy.h +
  • +
  • tidySetAppData() +: tidy.h +
  • +
  • tidySetCharEncoding() +: tidy.h +
  • +
  • tidySetErrorBuffer() +: tidy.h +
  • +
  • tidySetErrorFile() +: tidy.h +
  • +
  • tidySetErrorSink() +: tidy.h +
  • +
  • tidySetFreeCall() +: tidy.h +
  • +
  • tidySetInCharEncoding() +: tidy.h +
  • +
  • tidySetMallocCall() +: tidy.h +
  • +
  • tidySetOutCharEncoding() +: tidy.h +
  • +
  • tidySetPanicCall() +: tidy.h +
  • +
  • tidySetReallocCall() +: tidy.h +
  • +
  • tidySetReportFilter() +: tidy.h +
  • +
  • tidyStatus() +: tidy.h +
  • +
  • tidyUngetByte() +: tidy.h +
  • +
  • tidyWarningCount() +: tidy.h +
  • +
+
+
+ + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/globals_type.html b/Balthisar Tidy/tidylib5-src/htmldoc/api/globals_type.html new file mode 100755 index 00000000..9ba995be --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/globals_type.html @@ -0,0 +1,119 @@ + + + + + +HTML Tidy: Globals + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
+ + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__AttrGet.html b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__AttrGet.html new file mode 100755 index 00000000..bd731138 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__AttrGet.html @@ -0,0 +1,93 @@ + + + + + +HTML Tidy: Attribute Retrieval + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
Attribute Retrieval
+
+
+ + + + + +

+Modules

 Deprecated attribute retrieval per AttrId

+Functions

+TidyAttr TIDY_CALL tidyAttrGetById (TidyNode tnod, TidyAttrId attId)
+

Detailed Description

+

Lookup an attribute from a given node

+
+
+ + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__AttrGet.js b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__AttrGet.js new file mode 100755 index 00000000..762fb829 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__AttrGet.js @@ -0,0 +1,5 @@ +var group__AttrGet = +[ + [ "Deprecated attribute retrieval per AttrId", "group__AttrGetAttributeName.html", "group__AttrGetAttributeName" ], + [ "tidyAttrGetById", "group__AttrGet.html#ga5391e01ca5a2b497a7c044a25080468e", null ] +]; \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__AttrGetAttributeName.html b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__AttrGetAttributeName.html new file mode 100755 index 00000000..54a8eade --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__AttrGetAttributeName.html @@ -0,0 +1,177 @@ + + + + + +HTML Tidy: Deprecated attribute retrieval per AttrId + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
Deprecated attribute retrieval per AttrId
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

+TidyAttr TIDY_CALL tidyAttrGetHREF (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetSRC (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetID (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetNAME (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetSUMMARY (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetALT (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetLONGDESC (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetUSEMAP (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetISMAP (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetLANGUAGE (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetTYPE (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetVALUE (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetCONTENT (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetTITLE (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetXMLNS (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetDATAFLD (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetWIDTH (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetHEIGHT (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetFOR (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetSELECTED (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetCHECKED (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetLANG (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetTARGET (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetHTTP_EQUIV (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetREL (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetOnMOUSEMOVE (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetOnMOUSEDOWN (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetOnMOUSEUP (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetOnCLICK (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetOnMOUSEOVER (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetOnMOUSEOUT (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetOnKEYDOWN (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetOnKEYUP (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetOnKEYPRESS (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetOnFOCUS (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetOnBLUR (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetBGCOLOR (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetLINK (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetALINK (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetVLINK (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetTEXT (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetSTYLE (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetABBR (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetCOLSPAN (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrGetROWSPAN (TidyNode tnod)
+

Detailed Description

+
Deprecated:
The functions tidyAttrGet{AttributeName} are deprecated and should be replaced by tidyAttrGetById. For instance, tidyAttrGetID( TidyNode tnod ) can be replaced by tidyAttrGetById( TidyNode tnod, TidyAttr_ID ). This avoids a potential name clash with tidyAttrGetId for case-insensitive languages.
+
+
+ + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__AttrGetAttributeName.js b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__AttrGetAttributeName.js new file mode 100755 index 00000000..a9c74ad4 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__AttrGetAttributeName.js @@ -0,0 +1,48 @@ +var group__AttrGetAttributeName = +[ + [ "tidyAttrGetHREF", "group__AttrGetAttributeName.html#ga32edc3c33e5aadcdd83efd60d3ac2a3e", null ], + [ "tidyAttrGetSRC", "group__AttrGetAttributeName.html#ga7869ea78760d5d62509940fc1f2c21ac", null ], + [ "tidyAttrGetID", "group__AttrGetAttributeName.html#gae3b3b79328600053c21dcb14cbc0ffa8", null ], + [ "tidyAttrGetNAME", "group__AttrGetAttributeName.html#gaab8e86c4006c219832438ee0db0daf28", null ], + [ "tidyAttrGetSUMMARY", "group__AttrGetAttributeName.html#ga8f4d4e6e768186d11e516cc0e6b2407a", null ], + [ "tidyAttrGetALT", "group__AttrGetAttributeName.html#ga0b3704beb81b411038692cd6a50a6812", null ], + [ "tidyAttrGetLONGDESC", "group__AttrGetAttributeName.html#gafbeef23c8d7946a771c2179e41324e81", null ], + [ "tidyAttrGetUSEMAP", "group__AttrGetAttributeName.html#ga33e4dde55f16c04f7b2decbbf7b4d4a2", null ], + [ "tidyAttrGetISMAP", "group__AttrGetAttributeName.html#ga13d19afccb2d2a369bbf93c6127adb1c", null ], + [ "tidyAttrGetLANGUAGE", "group__AttrGetAttributeName.html#ga643d43c8c735054a60d5443fbed8a240", null ], + [ "tidyAttrGetTYPE", "group__AttrGetAttributeName.html#ga4ad1d50bf2ba65bb32617e2fa2c41c67", null ], + [ "tidyAttrGetVALUE", "group__AttrGetAttributeName.html#ga044e7be2a5353e64aaa4b2a71089e10b", null ], + [ "tidyAttrGetCONTENT", "group__AttrGetAttributeName.html#gaf29497f73685e92521ab620f65cb3140", null ], + [ "tidyAttrGetTITLE", "group__AttrGetAttributeName.html#ga3da405f3a9e87534fd828cf081c58d03", null ], + [ "tidyAttrGetXMLNS", "group__AttrGetAttributeName.html#ga5d1fd6265f41c08ed5427c80316caa03", null ], + [ "tidyAttrGetDATAFLD", "group__AttrGetAttributeName.html#ga232436e2e4087c67502a12e8782e172e", null ], + [ "tidyAttrGetWIDTH", "group__AttrGetAttributeName.html#ga08bbf26729bf8a3f6c1390d26d3666d0", null ], + [ "tidyAttrGetHEIGHT", "group__AttrGetAttributeName.html#gae148f282af56270d6e811b97268bca64", null ], + [ "tidyAttrGetFOR", "group__AttrGetAttributeName.html#gafe94b5b5ae7288d6d866f7b82703b82a", null ], + [ "tidyAttrGetSELECTED", "group__AttrGetAttributeName.html#ga048e47b2b4c2f14512c3d7f585b2d004", null ], + [ "tidyAttrGetCHECKED", "group__AttrGetAttributeName.html#ga94406af9c9c20b1942cce43c506ecf61", null ], + [ "tidyAttrGetLANG", "group__AttrGetAttributeName.html#ga992d84e0b6b5b3f25c0e40c7b25bd13f", null ], + [ "tidyAttrGetTARGET", "group__AttrGetAttributeName.html#gafda31fbe48294c6feeef15449629341a", null ], + [ "tidyAttrGetHTTP_EQUIV", "group__AttrGetAttributeName.html#gad023e11b117601b6abdc4373db879d34", null ], + [ "tidyAttrGetREL", "group__AttrGetAttributeName.html#ga28306ff6130eab4c88fce32674326280", null ], + [ "tidyAttrGetOnMOUSEMOVE", "group__AttrGetAttributeName.html#ga9fed89179a23ad83c73948c045507095", null ], + [ "tidyAttrGetOnMOUSEDOWN", "group__AttrGetAttributeName.html#ga5c723febdf97b14e7339dede87b410e7", null ], + [ "tidyAttrGetOnMOUSEUP", "group__AttrGetAttributeName.html#gaa218ed968a4b8fa50b43a4a549209077", null ], + [ "tidyAttrGetOnCLICK", "group__AttrGetAttributeName.html#ga38fe84b14dafb84b3f40968dc27b86e3", null ], + [ "tidyAttrGetOnMOUSEOVER", "group__AttrGetAttributeName.html#ga66be75bf699308d87172e0bf03100363", null ], + [ "tidyAttrGetOnMOUSEOUT", "group__AttrGetAttributeName.html#ga0b13bb4f3475afbded6e4ae6a2bdcf2b", null ], + [ "tidyAttrGetOnKEYDOWN", "group__AttrGetAttributeName.html#gaabfd3fbdaf97f83fe2da402d0cbe9e8e", null ], + [ "tidyAttrGetOnKEYUP", "group__AttrGetAttributeName.html#ga73473cc4d39d2fd70b860ebebcdc4815", null ], + [ "tidyAttrGetOnKEYPRESS", "group__AttrGetAttributeName.html#ga6beda5d89c91f6b387929b930832fb57", null ], + [ "tidyAttrGetOnFOCUS", "group__AttrGetAttributeName.html#ga4fd4f5b38f99d395b8a7e253cc45ef28", null ], + [ "tidyAttrGetOnBLUR", "group__AttrGetAttributeName.html#ga5a038e1439320c57c983da87efe64c3e", null ], + [ "tidyAttrGetBGCOLOR", "group__AttrGetAttributeName.html#gadcde1dd3d87752162067bdac5d2dd785", null ], + [ "tidyAttrGetLINK", "group__AttrGetAttributeName.html#gae8e7d8d65a20f14d6aa875493b195329", null ], + [ "tidyAttrGetALINK", "group__AttrGetAttributeName.html#ga49e3f791908e26561566587b0f15b37d", null ], + [ "tidyAttrGetVLINK", "group__AttrGetAttributeName.html#gae46a7c41114c29766f9fa95c10b36f9d", null ], + [ "tidyAttrGetTEXT", "group__AttrGetAttributeName.html#ga5c4b94ac9cfcbd403ce02690c9196388", null ], + [ "tidyAttrGetSTYLE", "group__AttrGetAttributeName.html#gaa90006fbac322f2577db885c913c7d19", null ], + [ "tidyAttrGetABBR", "group__AttrGetAttributeName.html#gaae1595d000373dd64c9dfe0a89d03597", null ], + [ "tidyAttrGetCOLSPAN", "group__AttrGetAttributeName.html#gafd6746350a6e8d7e324d0c309777f059", null ], + [ "tidyAttrGetROWSPAN", "group__AttrGetAttributeName.html#ga837b3be1dc949e7989dcbf25deaf5b36", null ] +]; \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__AttrIsAttributeName.html b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__AttrIsAttributeName.html new file mode 100755 index 00000000..9d410c9a --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__AttrIsAttributeName.html @@ -0,0 +1,177 @@ + + + + + +HTML Tidy: Deprecated attribute interrogation per AttrId + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
Deprecated attribute interrogation per AttrId
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

+Bool TIDY_CALL tidyAttrIsHREF (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsSRC (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsID (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsNAME (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsSUMMARY (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsALT (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsLONGDESC (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsUSEMAP (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsISMAP (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsLANGUAGE (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsTYPE (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsVALUE (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsCONTENT (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsTITLE (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsXMLNS (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsDATAFLD (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsWIDTH (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsHEIGHT (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsFOR (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsSELECTED (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsCHECKED (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsLANG (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsTARGET (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsHTTP_EQUIV (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsREL (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsOnMOUSEMOVE (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsOnMOUSEDOWN (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsOnMOUSEUP (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsOnCLICK (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsOnMOUSEOVER (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsOnMOUSEOUT (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsOnKEYDOWN (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsOnKEYUP (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsOnKEYPRESS (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsOnFOCUS (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsOnBLUR (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsBGCOLOR (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsLINK (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsALINK (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsVLINK (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsTEXT (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsSTYLE (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsABBR (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsCOLSPAN (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsROWSPAN (TidyAttr tattr)
+

Detailed Description

+
Deprecated:
The functions tidyAttrIs{AttributeName} are deprecated and should be replaced by tidyAttrGetId.
+
+
+ + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__AttrIsAttributeName.js b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__AttrIsAttributeName.js new file mode 100755 index 00000000..412ac8ec --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__AttrIsAttributeName.js @@ -0,0 +1,48 @@ +var group__AttrIsAttributeName = +[ + [ "tidyAttrIsHREF", "group__AttrIsAttributeName.html#ga7c5dab5750d48c0849fb5afddcaf6ef1", null ], + [ "tidyAttrIsSRC", "group__AttrIsAttributeName.html#ga9e42faa67c4c67d1f20b17494bcd85ae", null ], + [ "tidyAttrIsID", "group__AttrIsAttributeName.html#ga40eb7812272130ee672347252f8d2803", null ], + [ "tidyAttrIsNAME", "group__AttrIsAttributeName.html#ga30a54710b484eac706e936a69fb95e29", null ], + [ "tidyAttrIsSUMMARY", "group__AttrIsAttributeName.html#gab2b19098f9cf2e7c74d8b424e086df43", null ], + [ "tidyAttrIsALT", "group__AttrIsAttributeName.html#gad621c0fd59bdacd162dfdd769a62ef27", null ], + [ "tidyAttrIsLONGDESC", "group__AttrIsAttributeName.html#ga0a99b0a5db896cb47c8b40ef110370c8", null ], + [ "tidyAttrIsUSEMAP", "group__AttrIsAttributeName.html#gaeb125294c12e461615f32d9ffdb9bbd7", null ], + [ "tidyAttrIsISMAP", "group__AttrIsAttributeName.html#ga33c5307a710a27f636ca150112de3f7b", null ], + [ "tidyAttrIsLANGUAGE", "group__AttrIsAttributeName.html#gac903236acff81674020778300c3a3862", null ], + [ "tidyAttrIsTYPE", "group__AttrIsAttributeName.html#ga7a9c5c70693337edf09b36f483229fe5", null ], + [ "tidyAttrIsVALUE", "group__AttrIsAttributeName.html#ga9454a023bc9f5663c56b8404ec8406c8", null ], + [ "tidyAttrIsCONTENT", "group__AttrIsAttributeName.html#gac97bd371ff8401f13a333273e5e3bf22", null ], + [ "tidyAttrIsTITLE", "group__AttrIsAttributeName.html#ga6a47ddd81d777ff5a086bedc4e951040", null ], + [ "tidyAttrIsXMLNS", "group__AttrIsAttributeName.html#ga1147ae3c7c35ba4d4241832733859b78", null ], + [ "tidyAttrIsDATAFLD", "group__AttrIsAttributeName.html#ga3e3baf9e8a4ebe112b1865f3eb4b51fe", null ], + [ "tidyAttrIsWIDTH", "group__AttrIsAttributeName.html#ga7c62cdc314ebba251cf25f0eeec02f56", null ], + [ "tidyAttrIsHEIGHT", "group__AttrIsAttributeName.html#gaeb9e235fbc570a2fd73584e9c5a992be", null ], + [ "tidyAttrIsFOR", "group__AttrIsAttributeName.html#ga9eb541ed5e3b751a5d1fc1350443b5e6", null ], + [ "tidyAttrIsSELECTED", "group__AttrIsAttributeName.html#ga8a6824904535e40e3bdc2b17c4cf9dd2", null ], + [ "tidyAttrIsCHECKED", "group__AttrIsAttributeName.html#gae55a371bf3b146788b217be62499aa35", null ], + [ "tidyAttrIsLANG", "group__AttrIsAttributeName.html#gae8f47e206721fffc4eda7ca4af79e01e", null ], + [ "tidyAttrIsTARGET", "group__AttrIsAttributeName.html#ga315f297329d38bd0b69307e329699bd6", null ], + [ "tidyAttrIsHTTP_EQUIV", "group__AttrIsAttributeName.html#gaee94d3e34dd79b67e82c738e35076818", null ], + [ "tidyAttrIsREL", "group__AttrIsAttributeName.html#ga58a482b3e743570dcb88b64b9c93f172", null ], + [ "tidyAttrIsOnMOUSEMOVE", "group__AttrIsAttributeName.html#gad69f1e1cf8a7cf6d70359b7344839e79", null ], + [ "tidyAttrIsOnMOUSEDOWN", "group__AttrIsAttributeName.html#ga1df15af0e642d1c1bd1bbc64ffd894e9", null ], + [ "tidyAttrIsOnMOUSEUP", "group__AttrIsAttributeName.html#ga71c648c7d945d5d1a1da686813ef4149", null ], + [ "tidyAttrIsOnCLICK", "group__AttrIsAttributeName.html#ga4e70306e72db98316ff36c07058667ec", null ], + [ "tidyAttrIsOnMOUSEOVER", "group__AttrIsAttributeName.html#gadea7c51060ca59643fe1c4be493f70f8", null ], + [ "tidyAttrIsOnMOUSEOUT", "group__AttrIsAttributeName.html#gadba041c3573d5457fbee24356d4f59fc", null ], + [ "tidyAttrIsOnKEYDOWN", "group__AttrIsAttributeName.html#ga5699e85b46e535b657c70b47306a08db", null ], + [ "tidyAttrIsOnKEYUP", "group__AttrIsAttributeName.html#gaf4d69efe322c065fef448b5d5b48b8f7", null ], + [ "tidyAttrIsOnKEYPRESS", "group__AttrIsAttributeName.html#ga9b08c6cf7ec3f3605722486c4ba42b4f", null ], + [ "tidyAttrIsOnFOCUS", "group__AttrIsAttributeName.html#ga54437cfd33daef01fd9d9e63b79a20f5", null ], + [ "tidyAttrIsOnBLUR", "group__AttrIsAttributeName.html#gab704326c008f437a30878b8dd632ecca", null ], + [ "tidyAttrIsBGCOLOR", "group__AttrIsAttributeName.html#gad75eb36382a280b90761cba07fcf1895", null ], + [ "tidyAttrIsLINK", "group__AttrIsAttributeName.html#ga5d88a7dcf98264502e1a2a18014f58a7", null ], + [ "tidyAttrIsALINK", "group__AttrIsAttributeName.html#ga73acdbe07d9f4263897c2d7ef2f55a8d", null ], + [ "tidyAttrIsVLINK", "group__AttrIsAttributeName.html#ga502ead90e7b121fd1ae1b034a2a046da", null ], + [ "tidyAttrIsTEXT", "group__AttrIsAttributeName.html#ga7c6fde56b1bb05a07043ac1b69a72db8", null ], + [ "tidyAttrIsSTYLE", "group__AttrIsAttributeName.html#ga93224d5a31b94c82a4f97577338c3a59", null ], + [ "tidyAttrIsABBR", "group__AttrIsAttributeName.html#ga763c7d67faa40b48a0485d4aaeddf694", null ], + [ "tidyAttrIsCOLSPAN", "group__AttrIsAttributeName.html#ga69119cd18a1fb79bb02b78f8bf145f81", null ], + [ "tidyAttrIsROWSPAN", "group__AttrIsAttributeName.html#gaee7e2dfe999d6831d3af1e826dcf3c22", null ] +]; \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Attribute.html b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Attribute.html new file mode 100755 index 00000000..dc581f0f --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Attribute.html @@ -0,0 +1,97 @@ + + + + + +HTML Tidy: Attribute Interrogation + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
Attribute Interrogation
+
+
+ + + + + + + +

+Modules

 Deprecated attribute interrogation per AttrId

+Functions

+TidyAttrId TIDY_CALL tidyAttrGetId (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsEvent (TidyAttr tattr)
+Bool TIDY_CALL tidyAttrIsProp (TidyAttr tattr)
+

Detailed Description

+

Get information about any given attribute.

+
+
+ + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Attribute.js b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Attribute.js new file mode 100755 index 00000000..36dfafb9 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Attribute.js @@ -0,0 +1,7 @@ +var group__Attribute = +[ + [ "Deprecated attribute interrogation per AttrId", "group__AttrIsAttributeName.html", "group__AttrIsAttributeName" ], + [ "tidyAttrGetId", "group__Attribute.html#ga42c5074e590ed76a7a641dfd179471d9", null ], + [ "tidyAttrIsEvent", "group__Attribute.html#ga1e4d8ec29e240a6415b2caa7fff2b502", null ], + [ "tidyAttrIsProp", "group__Attribute.html#ga9f52a0de76388df02294718c573911bd", null ] +]; \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Basic.html b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Basic.html new file mode 100755 index 00000000..2d8b5348 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Basic.html @@ -0,0 +1,609 @@ + + + + + +HTML Tidy: Basic Operations + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
Basic Operations
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

+TidyDoc TIDY_CALL tidyCreate (void)
+TidyDoc TIDY_CALL tidyCreateWithAllocator (TidyAllocator *allocator)
+void TIDY_CALL tidyRelease (TidyDoc tdoc)
void TIDY_CALL tidySetAppData (TidyDoc tdoc, void *appData)
void *TIDY_CALL tidyGetAppData (TidyDoc tdoc)
ctmbstr TIDY_CALL tidyReleaseDate (void)
int TIDY_CALL tidyStatus (TidyDoc tdoc)
int TIDY_CALL tidyDetectedHtmlVersion (TidyDoc tdoc)
Bool TIDY_CALL tidyDetectedXhtml (TidyDoc tdoc)
Bool TIDY_CALL tidyDetectedGenericXml (TidyDoc tdoc)
uint TIDY_CALL tidyErrorCount (TidyDoc tdoc)
uint TIDY_CALL tidyWarningCount (TidyDoc tdoc)
uint TIDY_CALL tidyAccessWarningCount (TidyDoc tdoc)
uint TIDY_CALL tidyConfigErrorCount (TidyDoc tdoc)
int TIDY_CALL tidyLoadConfig (TidyDoc tdoc, ctmbstr configFile)
int TIDY_CALL tidyLoadConfigEnc (TidyDoc tdoc, ctmbstr configFile, ctmbstr charenc)
+Bool TIDY_CALL tidyFileExists (TidyDoc tdoc, ctmbstr filename)
int TIDY_CALL tidySetCharEncoding (TidyDoc tdoc, ctmbstr encnam)
int TIDY_CALL tidySetInCharEncoding (TidyDoc tdoc, ctmbstr encnam)
int TIDY_CALL tidySetOutCharEncoding (TidyDoc tdoc, ctmbstr encnam)
int TIDY_CALL tidyOptSaveFile (TidyDoc tdoc, ctmbstr cfgfil)
int TIDY_CALL tidyOptSaveSink (TidyDoc tdoc, TidyOutputSink *sink)
void TIDY_CALL tidyErrorSummary (TidyDoc tdoc)
void TIDY_CALL tidyGeneralInfo (TidyDoc tdoc)
+

Detailed Description

+

Tidy public interface

+

Several functions return an integer document status:

+
+ 0    -> SUCCESS
+ >0   -> 1 == TIDY WARNING, 2 == TIDY ERROR
+ <0   -> SEVERE ERROR
+ 

The following is a short example program.

+
+

include <tidy.h>

+
+

include <buffio.h>

+
+

include <stdio.h>

+
+

include <errno.h>

+
int main(int argc, char **argv )
+{
+  const char* input = "&lt;title&gt;Foo&lt;/title&gt;&lt;p&gt;Foo!";
+  TidyBuffer output;
+  TidyBuffer errbuf;
+  int rc = -1;
+  Bool ok;
 TidyDoc tdoc = tidyCreate();                     // Initialize "document"
+  tidyBufInit( &output );
+  tidyBufInit( &errbuf );
+  printf( "Tidying:\t\%s\\n", input );
 ok = tidyOptSetBool( tdoc, TidyXhtmlOut, yes );  // Convert to XHTML
+  if ( ok )
+    rc = tidySetErrorBuffer( tdoc, &errbuf );      // Capture diagnostics
+  if ( rc >= 0 )
+    rc = tidyParseString( tdoc, input );           // Parse the input
+  if ( rc >= 0 )
+    rc = tidyCleanAndRepair( tdoc );               // Tidy it up!
+  if ( rc >= 0 )
+    rc = tidyRunDiagnostics( tdoc );               // Kvetch
+  if ( rc > 1 )                                    // If error, force output.
+    rc = ( tidyOptSetBool(tdoc, TidyForceOutput, yes) ? rc : -1 );
+  if ( rc >= 0 )
+    rc = tidySaveBuffer( tdoc, &output );          // Pretty Print
 if ( rc >= 0 )
+  {
+    if ( rc > 0 )
+      printf( "\\nDiagnostics:\\n\\n\%s", errbuf.bp );
+    printf( "\\nAnd here is the result:\\n\\n\%s", output.bp );
+  }
+  else
+    printf( "A severe error (\%d) occurred.\\n", rc );
 tidyBufFree( &output );
+  tidyBufFree( &errbuf );
+  tidyRelease( tdoc );
+  return rc;
+}
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
void TIDY_CALL tidySetAppData (TidyDoc tdoc,
void * appData 
)
+
+
+

Let application store a chunk of data w/ each Tidy instance. Useful for callbacks.

+ +
+
+ +
+
+ + + + + + + + +
void* TIDY_CALL tidyGetAppData (TidyDoc tdoc)
+
+
+

Get application data set previously

+ +
+
+ +
+
+ + + + + + + + +
ctmbstr TIDY_CALL tidyReleaseDate (void )
+
+
+

Get release date (version) for current library

+ +
+
+ +
+
+ + + + + + + + +
int TIDY_CALL tidyStatus (TidyDoc tdoc)
+
+
+

Get status of current document.

+ +
+
+ +
+
+ + + + + + + + +
int TIDY_CALL tidyDetectedHtmlVersion (TidyDoc tdoc)
+
+
+

Detected HTML version: 0, 2, 3 or 4

+ +
+
+ +
+
+ + + + + + + + +
Bool TIDY_CALL tidyDetectedXhtml (TidyDoc tdoc)
+
+
+

Input is XHTML?

+ +
+
+ +
+
+ + + + + + + + +
Bool TIDY_CALL tidyDetectedGenericXml (TidyDoc tdoc)
+
+
+

Input is generic XML (not HTML or XHTML)?

+ +
+
+ +
+
+ + + + + + + + +
uint TIDY_CALL tidyErrorCount (TidyDoc tdoc)
+
+
+

Number of Tidy errors encountered. If > 0, output is suppressed unless TidyForceOutput is set.

+ +
+
+ +
+
+ + + + + + + + +
uint TIDY_CALL tidyWarningCount (TidyDoc tdoc)
+
+
+

Number of Tidy warnings encountered.

+ +
+
+ +
+
+ + + + + + + + +
uint TIDY_CALL tidyAccessWarningCount (TidyDoc tdoc)
+
+
+

Number of Tidy accessibility warnings encountered.

+ +
+
+ +
+
+ + + + + + + + +
uint TIDY_CALL tidyConfigErrorCount (TidyDoc tdoc)
+
+
+

Number of Tidy configuration errors encountered.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int TIDY_CALL tidyLoadConfig (TidyDoc tdoc,
ctmbstr configFile 
)
+
+
+

Load an ASCII Tidy configuration file

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int TIDY_CALL tidyLoadConfigEnc (TidyDoc tdoc,
ctmbstr configFile,
ctmbstr charenc 
)
+
+
+

Load a Tidy configuration file with the specified character encoding

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int TIDY_CALL tidySetCharEncoding (TidyDoc tdoc,
ctmbstr encnam 
)
+
+
+

Set the input/output character encoding for parsing markup. Values include: ascii, latin1, raw, utf8, iso2022, mac, win1252, utf16le, utf16be, utf16, big5 and shiftjis. Case in-sensitive.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int TIDY_CALL tidySetInCharEncoding (TidyDoc tdoc,
ctmbstr encnam 
)
+
+
+

Set the input encoding for parsing markup. As for tidySetCharEncoding but only affects the input encoding

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int TIDY_CALL tidySetOutCharEncoding (TidyDoc tdoc,
ctmbstr encnam 
)
+
+
+

Set the output encoding.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int TIDY_CALL tidyOptSaveFile (TidyDoc tdoc,
ctmbstr cfgfil 
)
+
+
+

Save current settings to named file. Only non-default values are written.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int TIDY_CALL tidyOptSaveSink (TidyDoc tdoc,
TidyOutputSinksink 
)
+
+
+

Save current settings to given output sink. Only non-default values are written.

+ +
+
+ +
+
+ + + + + + + + +
void TIDY_CALL tidyErrorSummary (TidyDoc tdoc)
+
+
+

Write more complete information about errors to current error sink.

+ +
+
+ +
+
+ + + + + + + + +
void TIDY_CALL tidyGeneralInfo (TidyDoc tdoc)
+
+
+

Write more general information about markup to current error sink.

+ +
+
+
+
+ + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Basic.js b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Basic.js new file mode 100755 index 00000000..0d3aca17 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Basic.js @@ -0,0 +1,27 @@ +var group__Basic = +[ + [ "tidyCreate", "group__Basic.html#ga728e98da5985ecb26de7c6c45f7fcaf2", null ], + [ "tidyCreateWithAllocator", "group__Basic.html#gaf58ea992501470e0998182a1c75df2aa", null ], + [ "tidyRelease", "group__Basic.html#gacc380c1451088b89898a85337b113713", null ], + [ "tidySetAppData", "group__Basic.html#gaa1a9f78be3542868ac10481e2efa8708", null ], + [ "tidyGetAppData", "group__Basic.html#ga1319c9757d4f8c596615e0fdcfcf2504", null ], + [ "tidyReleaseDate", "group__Basic.html#gab7b404ada690635341d2e2d332102b36", null ], + [ "tidyStatus", "group__Basic.html#gaf45a8fb57fb9bfce89c42e1cc9d3e760", null ], + [ "tidyDetectedHtmlVersion", "group__Basic.html#ga8fbec4bc2b67c4f525440cfc7196b443", null ], + [ "tidyDetectedXhtml", "group__Basic.html#gaf3279c9a0506629d2ae766c31c1de48d", null ], + [ "tidyDetectedGenericXml", "group__Basic.html#ga8dd761b5e230119f8eb6c412f12fdec2", null ], + [ "tidyErrorCount", "group__Basic.html#ga3617548e3669d00ad074daaaa8f3460d", null ], + [ "tidyWarningCount", "group__Basic.html#ga29b0c36f75584a2a26422b021561f19c", null ], + [ "tidyAccessWarningCount", "group__Basic.html#ga56ad617084cdcbb485f06f597de7dedb", null ], + [ "tidyConfigErrorCount", "group__Basic.html#gac17c01a0dbb8f73bdee29df48e499988", null ], + [ "tidyLoadConfig", "group__Basic.html#ga2dec710c0d4927e76a7b0d338b11693a", null ], + [ "tidyLoadConfigEnc", "group__Basic.html#gac677de148c6f00fc96a682c21433ab1c", null ], + [ "tidyFileExists", "group__Basic.html#gac10c770d6ea5a0610159ad17f8427943", null ], + [ "tidySetCharEncoding", "group__Basic.html#ga2612e184472c2a59ca822a37d030e9af", null ], + [ "tidySetInCharEncoding", "group__Basic.html#ga05203a9193542a67b8396cf6ca8acf59", null ], + [ "tidySetOutCharEncoding", "group__Basic.html#ga9b6bd07e38bf320cf88663a29967f1e9", null ], + [ "tidyOptSaveFile", "group__Basic.html#gaaa6e0510b0d7ca0524c928143488c6ca", null ], + [ "tidyOptSaveSink", "group__Basic.html#gabf30cc37e3e7aa07dd351f083ab747ee", null ], + [ "tidyErrorSummary", "group__Basic.html#ga4c050ea7d2746db948ad45edb2264d70", null ], + [ "tidyGeneralInfo", "group__Basic.html#ga28384bf13bf6962c8ef0bcab9b4b7971", null ] +]; \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Clean.html b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Clean.html new file mode 100755 index 00000000..34bbd70a --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Clean.html @@ -0,0 +1,124 @@ + + + + + +HTML Tidy: Diagnostics and Repair + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
Diagnostics and Repair
+
+
+ + + + +

+Functions

int TIDY_CALL tidyCleanAndRepair (TidyDoc tdoc)
int TIDY_CALL tidyRunDiagnostics (TidyDoc tdoc)
+

Function Documentation

+ +
+
+ + + + + + + + +
int TIDY_CALL tidyCleanAndRepair (TidyDoc tdoc)
+
+
+

Execute configured cleanup and repair operations on parsed markup

+ +
+
+ +
+
+ + + + + + + + +
int TIDY_CALL tidyRunDiagnostics (TidyDoc tdoc)
+
+
+

Run configured diagnostics on parsed and repaired markup. Must call tidyCleanAndRepair() first.

+ +
+
+
+
+ + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Clean.js b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Clean.js new file mode 100755 index 00000000..e4222ab3 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Clean.js @@ -0,0 +1,5 @@ +var group__Clean = +[ + [ "tidyCleanAndRepair", "group__Clean.html#ga11fd23eeb4acfaa0f9501effa0c21269", null ], + [ "tidyRunDiagnostics", "group__Clean.html#ga6170500974cc02114f6e4a29d44b7d77", null ] +]; \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Configuration.html b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Configuration.html new file mode 100755 index 00000000..b788b432 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Configuration.html @@ -0,0 +1,1020 @@ + + + + + +HTML Tidy: Configuration Options + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
Configuration Options
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Typedefs

typedef Bool(TIDY_CALL * TidyOptCallback )(ctmbstr option, ctmbstr value)

+Functions

+Bool TIDY_CALL tidySetOptionCallback (TidyDoc tdoc, TidyOptCallback pOptCallback)
TidyOptionId TIDY_CALL tidyOptGetIdForName (ctmbstr optnam)
TidyIterator TIDY_CALL tidyGetOptionList (TidyDoc tdoc)
TidyOption TIDY_CALL tidyGetNextOption (TidyDoc tdoc, TidyIterator *pos)
TidyOption TIDY_CALL tidyGetOption (TidyDoc tdoc, TidyOptionId optId)
TidyOption TIDY_CALL tidyGetOptionByName (TidyDoc tdoc, ctmbstr optnam)
TidyOptionId TIDY_CALL tidyOptGetId (TidyOption opt)
ctmbstr TIDY_CALL tidyOptGetName (TidyOption opt)
TidyOptionType TIDY_CALL tidyOptGetType (TidyOption opt)
Bool TIDY_CALL tidyOptIsReadOnly (TidyOption opt)
TidyConfigCategory TIDY_CALL tidyOptGetCategory (TidyOption opt)
ctmbstr TIDY_CALL tidyOptGetDefault (TidyOption opt)
ulong TIDY_CALL tidyOptGetDefaultInt (TidyOption opt)
Bool TIDY_CALL tidyOptGetDefaultBool (TidyOption opt)
TidyIterator TIDY_CALL tidyOptGetPickList (TidyOption opt)
ctmbstr TIDY_CALL tidyOptGetNextPick (TidyOption opt, TidyIterator *pos)
ctmbstr TIDY_CALL tidyOptGetValue (TidyDoc tdoc, TidyOptionId optId)
Bool TIDY_CALL tidyOptSetValue (TidyDoc tdoc, TidyOptionId optId, ctmbstr val)
Bool TIDY_CALL tidyOptParseValue (TidyDoc tdoc, ctmbstr optnam, ctmbstr val)
ulong TIDY_CALL tidyOptGetInt (TidyDoc tdoc, TidyOptionId optId)
Bool TIDY_CALL tidyOptSetInt (TidyDoc tdoc, TidyOptionId optId, ulong val)
Bool TIDY_CALL tidyOptGetBool (TidyDoc tdoc, TidyOptionId optId)
Bool TIDY_CALL tidyOptSetBool (TidyDoc tdoc, TidyOptionId optId, Bool val)
Bool TIDY_CALL tidyOptResetToDefault (TidyDoc tdoc, TidyOptionId opt)
Bool TIDY_CALL tidyOptResetAllToDefault (TidyDoc tdoc)
Bool TIDY_CALL tidyOptSnapshot (TidyDoc tdoc)
Bool TIDY_CALL tidyOptResetToSnapshot (TidyDoc tdoc)
Bool TIDY_CALL tidyOptDiffThanDefault (TidyDoc tdoc)
Bool TIDY_CALL tidyOptDiffThanSnapshot (TidyDoc tdoc)
Bool TIDY_CALL tidyOptCopyConfig (TidyDoc tdocTo, TidyDoc tdocFrom)
ctmbstr TIDY_CALL tidyOptGetEncName (TidyDoc tdoc, TidyOptionId optId)
ctmbstr TIDY_CALL tidyOptGetCurrPick (TidyDoc tdoc, TidyOptionId optId)
TidyIterator TIDY_CALL tidyOptGetDeclTagList (TidyDoc tdoc)
ctmbstr TIDY_CALL tidyOptGetNextDeclTag (TidyDoc tdoc, TidyOptionId optId, TidyIterator *iter)
ctmbstr TIDY_CALL tidyOptGetDoc (TidyDoc tdoc, TidyOption opt)
TidyIterator TIDY_CALL tidyOptGetDocLinksList (TidyDoc tdoc, TidyOption opt)
TidyOption TIDY_CALL tidyOptGetNextDocLinks (TidyDoc tdoc, TidyIterator *pos)
+

Detailed Description

+

Functions for getting and setting Tidy configuration options.

+

Typedef Documentation

+ +
+
+ + + + +
typedef Bool(TIDY_CALL * TidyOptCallback)(ctmbstr option, ctmbstr value)
+
+
+

Applications using TidyLib may want to augment command-line and configuration file options. Setting this callback allows an application developer to examine command-line and configuration file options after TidyLib has examined them and failed to recognize them.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
TidyOptionId TIDY_CALL tidyOptGetIdForName (ctmbstr optnam)
+
+
+

Get option ID by name

+ +
+
+ +
+
+ + + + + + + + +
TidyIterator TIDY_CALL tidyGetOptionList (TidyDoc tdoc)
+
+
+

Get iterator for list of option Example:

+
+TidyIterator itOpt = tidyGetOptionList( tdoc );
+while ( itOpt )
+{
+  TidyOption opt = tidyGetNextOption( tdoc, &itOpt );
+  .. get/set option values ..
+}
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
TidyOption TIDY_CALL tidyGetNextOption (TidyDoc tdoc,
TidyIterator * pos 
)
+
+
+

Get next Option

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
TidyOption TIDY_CALL tidyGetOption (TidyDoc tdoc,
TidyOptionId optId 
)
+
+
+

Lookup option by ID

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
TidyOption TIDY_CALL tidyGetOptionByName (TidyDoc tdoc,
ctmbstr optnam 
)
+
+
+

Lookup option by name

+ +
+
+ +
+
+ + + + + + + + +
TidyOptionId TIDY_CALL tidyOptGetId (TidyOption opt)
+
+
+

Get ID of given Option

+ +
+
+ +
+
+ + + + + + + + +
ctmbstr TIDY_CALL tidyOptGetName (TidyOption opt)
+
+
+

Get name of given Option

+ +
+
+ +
+
+ + + + + + + + +
TidyOptionType TIDY_CALL tidyOptGetType (TidyOption opt)
+
+
+

Get datatype of given Option

+ +
+
+ +
+
+ + + + + + + + +
Bool TIDY_CALL tidyOptIsReadOnly (TidyOption opt)
+
+
+

Is Option read-only?

+ +
+
+ +
+
+ + + + + + + + +
TidyConfigCategory TIDY_CALL tidyOptGetCategory (TidyOption opt)
+
+
+

Get category of given Option

+ +
+
+ +
+
+ + + + + + + + +
ctmbstr TIDY_CALL tidyOptGetDefault (TidyOption opt)
+
+
+

Get default value of given Option as a string

+ +
+
+ +
+
+ + + + + + + + +
ulong TIDY_CALL tidyOptGetDefaultInt (TidyOption opt)
+
+
+

Get default value of given Option as an unsigned integer

+ +
+
+ +
+
+ + + + + + + + +
Bool TIDY_CALL tidyOptGetDefaultBool (TidyOption opt)
+
+
+

Get default value of given Option as a Boolean value

+ +
+
+ +
+
+ + + + + + + + +
TidyIterator TIDY_CALL tidyOptGetPickList (TidyOption opt)
+
+
+

Iterate over Option "pick list"

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
ctmbstr TIDY_CALL tidyOptGetNextPick (TidyOption opt,
TidyIterator * pos 
)
+
+
+

Get next string value of Option "pick list"

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
ctmbstr TIDY_CALL tidyOptGetValue (TidyDoc tdoc,
TidyOptionId optId 
)
+
+
+

Get current Option value as a string

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Bool TIDY_CALL tidyOptSetValue (TidyDoc tdoc,
TidyOptionId optId,
ctmbstr val 
)
+
+
+

Set Option value as a string

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Bool TIDY_CALL tidyOptParseValue (TidyDoc tdoc,
ctmbstr optnam,
ctmbstr val 
)
+
+
+

Set named Option value as a string. Good if not sure of type.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
ulong TIDY_CALL tidyOptGetInt (TidyDoc tdoc,
TidyOptionId optId 
)
+
+
+

Get current Option value as an integer

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Bool TIDY_CALL tidyOptSetInt (TidyDoc tdoc,
TidyOptionId optId,
ulong val 
)
+
+
+

Set Option value as an integer

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Bool TIDY_CALL tidyOptGetBool (TidyDoc tdoc,
TidyOptionId optId 
)
+
+
+

Get current Option value as a Boolean flag

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Bool TIDY_CALL tidyOptSetBool (TidyDoc tdoc,
TidyOptionId optId,
Bool val 
)
+
+
+

Set Option value as a Boolean flag

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Bool TIDY_CALL tidyOptResetToDefault (TidyDoc tdoc,
TidyOptionId opt 
)
+
+
+

Reset option to default value by ID

+ +
+
+ +
+
+ + + + + + + + +
Bool TIDY_CALL tidyOptResetAllToDefault (TidyDoc tdoc)
+
+
+

Reset all options to their default values

+ +
+
+ +
+
+ + + + + + + + +
Bool TIDY_CALL tidyOptSnapshot (TidyDoc tdoc)
+
+
+

Take a snapshot of current config settings

+ +
+
+ +
+
+ + + + + + + + +
Bool TIDY_CALL tidyOptResetToSnapshot (TidyDoc tdoc)
+
+
+

Reset config settings to snapshot (after document processing)

+ +
+
+ +
+
+ + + + + + + + +
Bool TIDY_CALL tidyOptDiffThanDefault (TidyDoc tdoc)
+
+
+

Any settings different than default?

+ +
+
+ +
+
+ + + + + + + + +
Bool TIDY_CALL tidyOptDiffThanSnapshot (TidyDoc tdoc)
+
+
+

Any settings different than snapshot?

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Bool TIDY_CALL tidyOptCopyConfig (TidyDoc tdocTo,
TidyDoc tdocFrom 
)
+
+
+

Copy current configuration settings from one document to another

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
ctmbstr TIDY_CALL tidyOptGetEncName (TidyDoc tdoc,
TidyOptionId optId 
)
+
+
+

Get character encoding name. Used with TidyCharEncoding, TidyOutCharEncoding, TidyInCharEncoding

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
ctmbstr TIDY_CALL tidyOptGetCurrPick (TidyDoc tdoc,
TidyOptionId optId 
)
+
+
+

Get current pick list value for option by ID. Useful for enum types.

+ +
+
+ +
+
+ + + + + + + + +
TidyIterator TIDY_CALL tidyOptGetDeclTagList (TidyDoc tdoc)
+
+
+

Iterate over user declared tags

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
ctmbstr TIDY_CALL tidyOptGetNextDeclTag (TidyDoc tdoc,
TidyOptionId optId,
TidyIterator * iter 
)
+
+
+

Get next declared tag of specified type: TidyInlineTags, TidyBlockTags, TidyEmptyTags, TidyPreTags

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
ctmbstr TIDY_CALL tidyOptGetDoc (TidyDoc tdoc,
TidyOption opt 
)
+
+
+

Get option description

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
TidyIterator TIDY_CALL tidyOptGetDocLinksList (TidyDoc tdoc,
TidyOption opt 
)
+
+
+

Iterate over a list of related options

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
TidyOption TIDY_CALL tidyOptGetNextDocLinks (TidyDoc tdoc,
TidyIterator * pos 
)
+
+
+

Get next related option

+ +
+
+
+
+ + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Configuration.js b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Configuration.js new file mode 100755 index 00000000..61095477 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Configuration.js @@ -0,0 +1,41 @@ +var group__Configuration = +[ + [ "TidyOptCallback", "group__Configuration.html#gaee8a8bcb6091bd36f6fc20507a4544fc", null ], + [ "tidySetOptionCallback", "group__Configuration.html#gab94961700088d2daf8dcc012a5e33e49", null ], + [ "tidyOptGetIdForName", "group__Configuration.html#ga500f31ba81d015b8ce9dad6f2a6ade75", null ], + [ "tidyGetOptionList", "group__Configuration.html#gab92a35ffbd3b0b668534d63f94d2486f", null ], + [ "tidyGetNextOption", "group__Configuration.html#ga1a3088dacc539487e00f1eb4009dafc0", null ], + [ "tidyGetOption", "group__Configuration.html#ga030c695d6407b2756856eb1862642cfe", null ], + [ "tidyGetOptionByName", "group__Configuration.html#gaeae2e147645697fc54234ff2526a8108", null ], + [ "tidyOptGetId", "group__Configuration.html#ga51cf095b76921b4e290e14814998f096", null ], + [ "tidyOptGetName", "group__Configuration.html#gaf370cd2ea113747f50da185fda24adcb", null ], + [ "tidyOptGetType", "group__Configuration.html#ga06e2685cc2950b182ff2f7136d170a34", null ], + [ "tidyOptIsReadOnly", "group__Configuration.html#ga6aba2ccdb1237a70f5fe1393fee0ce4d", null ], + [ "tidyOptGetCategory", "group__Configuration.html#ga1d8b72e64e4d949dc21599fa788e842f", null ], + [ "tidyOptGetDefault", "group__Configuration.html#gab9e02c9927fe2c382ec5f81b4acf9cb4", null ], + [ "tidyOptGetDefaultInt", "group__Configuration.html#gafc8df35e864dd3a24f23aca3c2f8bd9d", null ], + [ "tidyOptGetDefaultBool", "group__Configuration.html#gadadea4da66e3718e02b720c2b59d170b", null ], + [ "tidyOptGetPickList", "group__Configuration.html#ga31f815fe2b5bf1e00d6b50be62edd0ab", null ], + [ "tidyOptGetNextPick", "group__Configuration.html#gad1366c5c458f38d2a9c6a6335e6704d9", null ], + [ "tidyOptGetValue", "group__Configuration.html#ga0fbe23ab1e4ec374fa38e6f514617e4d", null ], + [ "tidyOptSetValue", "group__Configuration.html#gaf37bdad3b6809d8cb78e7d6316d4ba69", null ], + [ "tidyOptParseValue", "group__Configuration.html#gad09fbcbbaf83fbf93e0d7be9c9bb30c0", null ], + [ "tidyOptGetInt", "group__Configuration.html#ga7ff683612d446b07318517e564cccc7a", null ], + [ "tidyOptSetInt", "group__Configuration.html#gad9e75a64c8dcbc54e791959cf934e1ad", null ], + [ "tidyOptGetBool", "group__Configuration.html#ga09e6c999e9e7ebc94ea3d9cf5d674125", null ], + [ "tidyOptSetBool", "group__Configuration.html#gac9de7e155bea5c28713f2bfb93614472", null ], + [ "tidyOptResetToDefault", "group__Configuration.html#ga2aa45ad67758ca0b18d14eafa37fe080", null ], + [ "tidyOptResetAllToDefault", "group__Configuration.html#ga874ce26884f0eeaf692c30758688888a", null ], + [ "tidyOptSnapshot", "group__Configuration.html#ga4beb2c73c90c3e2ae589c2642478cebd", null ], + [ "tidyOptResetToSnapshot", "group__Configuration.html#gae6212b8f32990763cc18a6d3f05eb191", null ], + [ "tidyOptDiffThanDefault", "group__Configuration.html#ga083cb42d6f4413604240b5c1b3aa2070", null ], + [ "tidyOptDiffThanSnapshot", "group__Configuration.html#ga793bc9e177aa90301802e44c4fc22e0e", null ], + [ "tidyOptCopyConfig", "group__Configuration.html#ga0b6cb26ab5dbbe0a0841d605fbd06fad", null ], + [ "tidyOptGetEncName", "group__Configuration.html#ga47f8502cc202fc7423937647957955a3", null ], + [ "tidyOptGetCurrPick", "group__Configuration.html#ga0785047cc73d5fbc88691861a0fa9c78", null ], + [ "tidyOptGetDeclTagList", "group__Configuration.html#ga55f30cf9e507f8fc66330ec3b0132620", null ], + [ "tidyOptGetNextDeclTag", "group__Configuration.html#gacec933eef8f9eec3dfa4382e05cab251", null ], + [ "tidyOptGetDoc", "group__Configuration.html#gafca3ed506463e192187133ff646a643d", null ], + [ "tidyOptGetDocLinksList", "group__Configuration.html#gaeed1ef5cb5329f3f5aca0a8ad7e8ea4f", null ], + [ "tidyOptGetNextDocLinks", "group__Configuration.html#ga1db79a95067d6364c02263d9492fa9e8", null ] +]; \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__IO.html b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__IO.html new file mode 100755 index 00000000..d0e10f0e --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__IO.html @@ -0,0 +1,517 @@ + + + + + +HTML Tidy: I/O and Messages + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
I/O and Messages
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Data Structures

struct  _TidyInputSource
struct  _TidyOutputSink

+Defines

#define EndOfStream   (~0u)

+Typedefs

typedef int(TIDY_CALL * TidyGetByteFunc )(void *sourceData)
typedef void(TIDY_CALL * TidyUngetByteFunc )(void *sourceData, byte bt)
typedef Bool(TIDY_CALL * TidyEOFFunc )(void *sourceData)
typedef TIDY_STRUCT struct
+_TidyInputSource 
TidyInputSource
typedef void(TIDY_CALL * TidyPutByteFunc )(void *sinkData, byte bt)
typedef TIDY_STRUCT struct
+_TidyOutputSink 
TidyOutputSink
typedef Bool(TIDY_CALL * TidyReportFilter )(TidyDoc tdoc, TidyReportLevel lvl, uint line, uint col, ctmbstr mssg)

+Functions

Bool TIDY_CALL tidyInitSource (TidyInputSource *source, void *srcData, TidyGetByteFunc gbFunc, TidyUngetByteFunc ugbFunc, TidyEOFFunc endFunc)
uint TIDY_CALL tidyGetByte (TidyInputSource *source)
void TIDY_CALL tidyUngetByte (TidyInputSource *source, uint byteValue)
Bool TIDY_CALL tidyIsEOF (TidyInputSource *source)
Bool TIDY_CALL tidyInitSink (TidyOutputSink *sink, void *snkData, TidyPutByteFunc pbFunc)
void TIDY_CALL tidyPutByte (TidyOutputSink *sink, uint byteValue)
Bool TIDY_CALL tidySetReportFilter (TidyDoc tdoc, TidyReportFilter filtCallback)
FILE *TIDY_CALL tidySetErrorFile (TidyDoc tdoc, ctmbstr errfilnam)
int TIDY_CALL tidySetErrorBuffer (TidyDoc tdoc, TidyBuffer *errbuf)
int TIDY_CALL tidySetErrorSink (TidyDoc tdoc, TidyOutputSink *sink)
+

Detailed Description

+

By default, Tidy will define, create and use instances of input and output handlers for standard C buffered I/O (i.e. FILE* stdin, FILE* stdout and FILE* stderr for content input, content output and diagnostic output, respectively. A FILE* cfgFile input handler will be used for config files. Command line options will just be set directly.

+

Define Documentation

+ +
+
+ + + + +
#define EndOfStream   (~0u)
+
+
+

End of input "character"

+ +
+
+

Typedef Documentation

+ +
+
+ + + + +
typedef int(TIDY_CALL * TidyGetByteFunc)(void *sourceData)
+
+
+

Input Callback: get next byte of input

+ +
+
+ +
+
+ + + + +
typedef void(TIDY_CALL * TidyUngetByteFunc)(void *sourceData, byte bt)
+
+
+

Input Callback: unget a byte of input

+ +
+
+ +
+
+ + + + +
typedef Bool(TIDY_CALL * TidyEOFFunc)(void *sourceData)
+
+
+

Input Callback: is end of input?

+ +
+
+ +
+
+ + + + +
typedef TIDY_STRUCT struct _TidyInputSource TidyInputSource
+
+
+

TidyInputSource - Delivers raw bytes of input

+ +
+
+ +
+
+ + + + +
typedef void(TIDY_CALL * TidyPutByteFunc)(void *sinkData, byte bt)
+
+
+

Output callback: send a byte to output

+ +
+
+ +
+
+ + + + +
typedef TIDY_STRUCT struct _TidyOutputSink TidyOutputSink
+
+
+

TidyOutputSink - accepts raw bytes of output

+ +
+
+ +
+
+ + + + +
typedef Bool(TIDY_CALL * TidyReportFilter)(TidyDoc tdoc, TidyReportLevel lvl, uint line, uint col, ctmbstr mssg)
+
+
+

Callback to filter messages by diagnostic level: info, warning, etc. Just set diagnostic output handler to redirect all diagnostics output. Return true to proceed with output, false to cancel.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Bool TIDY_CALL tidyInitSource (TidyInputSourcesource,
void * srcData,
TidyGetByteFunc gbFunc,
TidyUngetByteFunc ugbFunc,
TidyEOFFunc endFunc 
)
+
+
+

Facilitates user defined source by providing an entry point to marshal pointers-to-functions. Needed by .NET and possibly other language bindings.

+ +
+
+ +
+
+ + + + + + + + +
uint TIDY_CALL tidyGetByte (TidyInputSourcesource)
+
+
+

Helper: get next byte from input source

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void TIDY_CALL tidyUngetByte (TidyInputSourcesource,
uint byteValue 
)
+
+
+

Helper: unget byte back to input source

+ +
+
+ +
+
+ + + + + + + + +
Bool TIDY_CALL tidyIsEOF (TidyInputSourcesource)
+
+
+

Helper: check if input source at end

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Bool TIDY_CALL tidyInitSink (TidyOutputSinksink,
void * snkData,
TidyPutByteFunc pbFunc 
)
+
+
+

Facilitates user defined sinks by providing an entry point to marshal pointers-to-functions. Needed by .NET and possibly other language bindings.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void TIDY_CALL tidyPutByte (TidyOutputSinksink,
uint byteValue 
)
+
+
+

Helper: send a byte to output

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Bool TIDY_CALL tidySetReportFilter (TidyDoc tdoc,
TidyReportFilter filtCallback 
)
+
+
+

Give Tidy a filter callback to use

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
FILE* TIDY_CALL tidySetErrorFile (TidyDoc tdoc,
ctmbstr errfilnam 
)
+
+
+

Set error sink to named file

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int TIDY_CALL tidySetErrorBuffer (TidyDoc tdoc,
TidyBuffererrbuf 
)
+
+
+

Set error sink to given buffer

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int TIDY_CALL tidySetErrorSink (TidyDoc tdoc,
TidyOutputSinksink 
)
+
+
+

Set error sink to given generic sink

+ +
+
+
+
+ + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__IO.js b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__IO.js new file mode 100755 index 00000000..f4c18bba --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__IO.js @@ -0,0 +1,23 @@ +var group__IO = +[ + [ "_TidyInputSource", "struct__TidyInputSource.html", null ], + [ "_TidyOutputSink", "struct__TidyOutputSink.html", null ], + [ "EndOfStream", "group__IO.html#ga9a078b706ec6f37cce40958f6f68585a", null ], + [ "TidyGetByteFunc", "group__IO.html#ga6951f79d4b50288e96a3896ab01393d6", null ], + [ "TidyUngetByteFunc", "group__IO.html#ga298b882c5fc7cc969ef58fb187bdd371", null ], + [ "TidyEOFFunc", "group__IO.html#ga9f8e1bb4c4740ffb399ec424594c4972", null ], + [ "TidyInputSource", "group__IO.html#ga86fcc3c86bd63b26a559938bc38d34bb", null ], + [ "TidyPutByteFunc", "group__IO.html#ga63bcce5aa5f52e4e2e22aedd750b8bbc", null ], + [ "TidyOutputSink", "group__IO.html#ga6bdd15de48364d2b5dbf2141109d3f98", null ], + [ "TidyReportFilter", "group__IO.html#ga29c5bee28b95924a97ea4fbb81668c5e", null ], + [ "tidyInitSource", "group__IO.html#gab446af273e331cb0440dd01b6990d2d0", null ], + [ "tidyGetByte", "group__IO.html#gadba396ffec9f29b27d73a23264dcfa0b", null ], + [ "tidyUngetByte", "group__IO.html#ga0c8d46de315cabb0ac7d2cf01ca183d7", null ], + [ "tidyIsEOF", "group__IO.html#ga399df5ba17614205964a665f7b1726a6", null ], + [ "tidyInitSink", "group__IO.html#ga7e93289be3a7253cdf99a96285e6a2d4", null ], + [ "tidyPutByte", "group__IO.html#ga2a34772782d7b786e37012fce4cd2425", null ], + [ "tidySetReportFilter", "group__IO.html#ga51e02523601388bb83c2555b995e68b0", null ], + [ "tidySetErrorFile", "group__IO.html#ga669758031bbd5d4ba957b19e77229c8b", null ], + [ "tidySetErrorBuffer", "group__IO.html#ga5e5cffe93edf4bea0d3214be70d6f77b", null ], + [ "tidySetErrorSink", "group__IO.html#gad47c75f3af85e7927e7ac18918ec6363", null ] +]; \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Memory.html b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Memory.html new file mode 100755 index 00000000..fa596e2d --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Memory.html @@ -0,0 +1,270 @@ + + + + + +HTML Tidy: Memory Allocation + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
Memory Allocation
+
+
+ + + + + + + + + + + + + + + + +

+Data Structures

struct  _TidyAllocatorVtbl
struct  _TidyAllocator

+Typedefs

typedef struct _TidyAllocatorVtbl TidyAllocatorVtbl
typedef struct _TidyAllocator TidyAllocator
typedef void *(TIDY_CALL * TidyMalloc )(size_t len)
typedef void *(TIDY_CALL * TidyRealloc )(void *buf, size_t len)
typedef void(TIDY_CALL * TidyFree )(void *buf)
typedef void(TIDY_CALL * TidyPanic )(ctmbstr mssg)

+Functions

Bool TIDY_CALL tidySetMallocCall (TidyMalloc fmalloc)
Bool TIDY_CALL tidySetReallocCall (TidyRealloc frealloc)
Bool TIDY_CALL tidySetFreeCall (TidyFree ffree)
Bool TIDY_CALL tidySetPanicCall (TidyPanic fpanic)
+

Detailed Description

+

Tidy uses a user provided allocator for all memory allocations. If this allocator is not provided, then a default allocator is used which simply wraps standard C malloc/free calls. These wrappers call the panic function upon any failure. The default panic function prints an out of memory message to stderr, and calls exit(2).

+

For applications in which it is unacceptable to abort in the case of memory allocation, then the panic function can be replaced with one which longjmps() out of the tidy code. For this to clean up completely, you should be careful not to use any tidy methods that open files as these will not be closed before panic() is called.

+

TODO: associate file handles with tidyDoc and ensure that tidyDocRelease() can close them all.

+

Calling the withAllocator() family ( tidyCreateWithAllocator, tidyBufInitWithAllocator, tidyBufAllocWithAllocator) allow settings custom allocators).

+

All parts of the document use the same allocator. Calls that require a user provided buffer can optionally use a different allocator.

+

For reference in designing a plug-in allocator, most allocations made by tidy are less than 100 bytes, corresponding to attribute names/values, etc.

+

There is also an additional class of much larger allocations which are where most of the data from the lexer is stored. (It is not currently possible to use a separate allocator for the lexer, this would be a useful extension).

+

In general, approximately 1/3rd of the memory used by tidy is freed during the parse, so if memory usage is an issue then an allocator that can reuse this memory is a good idea.

+

Typedef Documentation

+ +
+
+ + + + +
typedef struct _TidyAllocatorVtbl TidyAllocatorVtbl
+
+
+

The allocators function table

+ +
+
+ +
+
+ + + + +
typedef struct _TidyAllocator TidyAllocator
+
+
+

The allocator

+ +
+
+ +
+
+ + + + +
typedef void*(TIDY_CALL * TidyMalloc)(size_t len)
+
+
+

Callback for "malloc" replacement

+ +
+
+ +
+
+ + + + +
typedef void*(TIDY_CALL * TidyRealloc)(void *buf, size_t len)
+
+
+

Callback for "realloc" replacement

+ +
+
+ +
+
+ + + + +
typedef void(TIDY_CALL * TidyFree)(void *buf)
+
+
+

Callback for "free" replacement

+ +
+
+ +
+
+ + + + +
typedef void(TIDY_CALL * TidyPanic)(ctmbstr mssg)
+
+
+

Callback for "out of memory" panic state

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
Bool TIDY_CALL tidySetMallocCall (TidyMalloc fmalloc)
+
+
+

Give Tidy a malloc() replacement

+ +
+
+ +
+
+ + + + + + + + +
Bool TIDY_CALL tidySetReallocCall (TidyRealloc frealloc)
+
+
+

Give Tidy a realloc() replacement

+ +
+
+ +
+
+ + + + + + + + +
Bool TIDY_CALL tidySetFreeCall (TidyFree ffree)
+
+
+

Give Tidy a free() replacement

+ +
+
+ +
+
+ + + + + + + + +
Bool TIDY_CALL tidySetPanicCall (TidyPanic fpanic)
+
+
+

Give Tidy an "out of memory" handler

+ +
+
+
+
+ + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Memory.js b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Memory.js new file mode 100755 index 00000000..c69f2dde --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Memory.js @@ -0,0 +1,15 @@ +var group__Memory = +[ + [ "_TidyAllocatorVtbl", "struct__TidyAllocatorVtbl.html", null ], + [ "_TidyAllocator", "struct__TidyAllocator.html", null ], + [ "TidyAllocatorVtbl", "group__Memory.html#ga3fe8c5ac7d658618c732565776940ed8", null ], + [ "TidyAllocator", "group__Memory.html#ga78e96524a88db0c09e766795265863da", null ], + [ "TidyMalloc", "group__Memory.html#ga3bd3cc4d0c837a4cd10ab472ba671430", null ], + [ "TidyRealloc", "group__Memory.html#ga9d9a5625817932dbbb39dd33de678edd", null ], + [ "TidyFree", "group__Memory.html#ga27931c443e424937ba47f0d4795aa35f", null ], + [ "TidyPanic", "group__Memory.html#ga0770be41d9935a3e2933ba0be3c7725c", null ], + [ "tidySetMallocCall", "group__Memory.html#gab55079374527525e3374ebc4d2a1e625", null ], + [ "tidySetReallocCall", "group__Memory.html#ga446b538da3ee3f2e5a3827b877665b30", null ], + [ "tidySetFreeCall", "group__Memory.html#ga70e707b7df86effb5727b0b9ff64eed7", null ], + [ "tidySetPanicCall", "group__Memory.html#gab12cc0435bacec1a8c725e02357acc00", null ] +]; \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__NodeAsk.html b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__NodeAsk.html new file mode 100755 index 00000000..a954afdc --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__NodeAsk.html @@ -0,0 +1,113 @@ + + + + + +HTML Tidy: Node Interrogation + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
Node Interrogation
+
+
+ + + + + + + + + + + + + + + +

+Modules

 Deprecated node interrogation per TagId

+Functions

+TidyNodeType TIDY_CALL tidyNodeGetType (TidyNode tnod)
+ctmbstr TIDY_CALL tidyNodeGetName (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsText (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsProp (TidyDoc tdoc, TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsHeader (TidyNode tnod)
+Bool TIDY_CALL tidyNodeHasText (TidyDoc tdoc, TidyNode tnod)
+Bool TIDY_CALL tidyNodeGetText (TidyDoc tdoc, TidyNode tnod, TidyBuffer *buf)
+Bool TIDY_CALL tidyNodeGetValue (TidyDoc tdoc, TidyNode tnod, TidyBuffer *buf)
+TidyTagId TIDY_CALL tidyNodeGetId (TidyNode tnod)
+uint TIDY_CALL tidyNodeLine (TidyNode tnod)
+uint TIDY_CALL tidyNodeColumn (TidyNode tnod)
+

Detailed Description

+

Get information about any givent node.

+
+
+ + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__NodeAsk.js b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__NodeAsk.js new file mode 100755 index 00000000..17f21682 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__NodeAsk.js @@ -0,0 +1,15 @@ +var group__NodeAsk = +[ + [ "Deprecated node interrogation per TagId", "group__NodeIsElementName.html", "group__NodeIsElementName" ], + [ "tidyNodeGetType", "group__NodeAsk.html#gaa9786b1ce44061e2811d1ecbcd76d318", null ], + [ "tidyNodeGetName", "group__NodeAsk.html#ga5ea4ecef06555a58f942b2c500722156", null ], + [ "tidyNodeIsText", "group__NodeAsk.html#ga446c2a5ed55a75685074585f007b52c5", null ], + [ "tidyNodeIsProp", "group__NodeAsk.html#ga2eb2b4a0ee75c74215de9859467d17f1", null ], + [ "tidyNodeIsHeader", "group__NodeAsk.html#ga69c929ff5987273560e683e44b2515eb", null ], + [ "tidyNodeHasText", "group__NodeAsk.html#ga4abc910dd180773665c6e2e4e30ea2d7", null ], + [ "tidyNodeGetText", "group__NodeAsk.html#ga174176952045d3a79500451eae0322d6", null ], + [ "tidyNodeGetValue", "group__NodeAsk.html#ga775c446f1fd1ffa25eb688af6c56853c", null ], + [ "tidyNodeGetId", "group__NodeAsk.html#ga30307d5b9937c7f0aad1f37d7cf7848c", null ], + [ "tidyNodeLine", "group__NodeAsk.html#ga98658b8c02e0d2000a6c7da5d916ced4", null ], + [ "tidyNodeColumn", "group__NodeAsk.html#ga00fb1f74d89419ad97f345660cd8876f", null ] +]; \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__NodeIsElementName.html b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__NodeIsElementName.html new file mode 100755 index 00000000..c689979a --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__NodeIsElementName.html @@ -0,0 +1,247 @@ + + + + + +HTML Tidy: Deprecated node interrogation per TagId + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
Deprecated node interrogation per TagId
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

+Bool TIDY_CALL tidyNodeIsHTML (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsHEAD (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsTITLE (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsBASE (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsMETA (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsBODY (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsFRAMESET (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsFRAME (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsIFRAME (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsNOFRAMES (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsHR (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsH1 (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsH2 (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsPRE (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsLISTING (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsP (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsUL (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsOL (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsDL (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsDIR (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsLI (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsDT (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsDD (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsTABLE (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsCAPTION (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsTD (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsTH (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsTR (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsCOL (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsCOLGROUP (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsBR (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsA (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsLINK (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsB (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsI (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsSTRONG (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsEM (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsBIG (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsSMALL (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsPARAM (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsOPTION (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsOPTGROUP (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsIMG (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsMAP (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsAREA (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsNOBR (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsWBR (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsFONT (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsLAYER (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsSPACER (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsCENTER (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsSTYLE (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsSCRIPT (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsNOSCRIPT (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsFORM (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsTEXTAREA (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsBLOCKQUOTE (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsAPPLET (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsOBJECT (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsDIV (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsSPAN (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsINPUT (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsQ (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsLABEL (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsH3 (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsH4 (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsH5 (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsH6 (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsADDRESS (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsXMP (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsSELECT (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsBLINK (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsMARQUEE (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsEMBED (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsBASEFONT (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsISINDEX (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsS (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsSTRIKE (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsU (TidyNode tnod)
+Bool TIDY_CALL tidyNodeIsMENU (TidyNode tnod)
+

Detailed Description

+
Deprecated:
The functions tidyNodeIs{ElementName} are deprecated and should be replaced by tidyNodeGetId.
+
+
+ + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__NodeIsElementName.js b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__NodeIsElementName.js new file mode 100755 index 00000000..202c4f3f --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__NodeIsElementName.js @@ -0,0 +1,83 @@ +var group__NodeIsElementName = +[ + [ "tidyNodeIsHTML", "group__NodeIsElementName.html#gaf692f1ed40027be3f3cd5d198abc3ad2", null ], + [ "tidyNodeIsHEAD", "group__NodeIsElementName.html#ga59e3d8737230aaf6aefd38923b2d9938", null ], + [ "tidyNodeIsTITLE", "group__NodeIsElementName.html#ga41c163de846f0a5f0a06f8e8ba1559cc", null ], + [ "tidyNodeIsBASE", "group__NodeIsElementName.html#ga9c09a80c0fbb47c46c48816217058067", null ], + [ "tidyNodeIsMETA", "group__NodeIsElementName.html#gaeecc06fcf1ead446d89e2da189124a84", null ], + [ "tidyNodeIsBODY", "group__NodeIsElementName.html#gacba5807618c3f9e55cc03ff87de9b7ce", null ], + [ "tidyNodeIsFRAMESET", "group__NodeIsElementName.html#gae1ea58f48b98e27dc9e4489937f17755", null ], + [ "tidyNodeIsFRAME", "group__NodeIsElementName.html#gacb9bcd9b662a2089064a3c240062c99f", null ], + [ "tidyNodeIsIFRAME", "group__NodeIsElementName.html#ga816d167ba4cb8b3787967ec3dbde5ec5", null ], + [ "tidyNodeIsNOFRAMES", "group__NodeIsElementName.html#ga8320b595afb1e7e167b7c1a79b0dc366", null ], + [ "tidyNodeIsHR", "group__NodeIsElementName.html#ga51ace62a3ec1c51035cabf4a2605d898", null ], + [ "tidyNodeIsH1", "group__NodeIsElementName.html#gac28ca322aabade5ec3a7a7601c72ee16", null ], + [ "tidyNodeIsH2", "group__NodeIsElementName.html#gaa6f4c167e5934e14fd2bc016cbcb5abd", null ], + [ "tidyNodeIsPRE", "group__NodeIsElementName.html#ga0603085c30d94973f5d9d5b5de2ff200", null ], + [ "tidyNodeIsLISTING", "group__NodeIsElementName.html#gafc3aadf1d5eaab9c59ce47bfc2b6ceae", null ], + [ "tidyNodeIsP", "group__NodeIsElementName.html#gafd77569c4993bcd4ded3b97608248b9e", null ], + [ "tidyNodeIsUL", "group__NodeIsElementName.html#gadde0e35eef49567f98c385a736588409", null ], + [ "tidyNodeIsOL", "group__NodeIsElementName.html#ga52d9c5612a982cc71602b5088f415879", null ], + [ "tidyNodeIsDL", "group__NodeIsElementName.html#gadb2e0e0fbeac0da447fd96fc75158f54", null ], + [ "tidyNodeIsDIR", "group__NodeIsElementName.html#gaac81f7e14fa7e59aa4fa8d4aa6d06268", null ], + [ "tidyNodeIsLI", "group__NodeIsElementName.html#gac6269b21e8ad6e21d66bd5addd77eb87", null ], + [ "tidyNodeIsDT", "group__NodeIsElementName.html#ga3a0c0bc0925bd40677da0286d8b27d7b", null ], + [ "tidyNodeIsDD", "group__NodeIsElementName.html#ga8517c2217955d3602426c2bda1da6402", null ], + [ "tidyNodeIsTABLE", "group__NodeIsElementName.html#gad88dbaf421328ad0026a0f6c5b471a28", null ], + [ "tidyNodeIsCAPTION", "group__NodeIsElementName.html#ga2493322b8c7ec6e7001e928bd71fc1b6", null ], + [ "tidyNodeIsTD", "group__NodeIsElementName.html#ga7de8f8de16a810da710ff0981a08d43d", null ], + [ "tidyNodeIsTH", "group__NodeIsElementName.html#gae4f6572db3d4bce835660e21f18b1983", null ], + [ "tidyNodeIsTR", "group__NodeIsElementName.html#ga6d2aafe8789a16ab429c5fdf9deb0da7", null ], + [ "tidyNodeIsCOL", "group__NodeIsElementName.html#ga4638800893b9ae5a70cdb74c06c6a79c", null ], + [ "tidyNodeIsCOLGROUP", "group__NodeIsElementName.html#ga385a0cd988f64c8a4bd67d9b198d2ea7", null ], + [ "tidyNodeIsBR", "group__NodeIsElementName.html#gaf0950a14b5b1ab4789b9b0a5bac0b18e", null ], + [ "tidyNodeIsA", "group__NodeIsElementName.html#gae73ab4feaf47cba0fe76ad6ceaaf45a5", null ], + [ "tidyNodeIsLINK", "group__NodeIsElementName.html#gac798ba0aa726aee5cbcf3262624c0458", null ], + [ "tidyNodeIsB", "group__NodeIsElementName.html#ga95af7c22df42cdc104858b6ef545c356", null ], + [ "tidyNodeIsI", "group__NodeIsElementName.html#gafe4ee40e682872ae83dfce0dd4a8d0c3", null ], + [ "tidyNodeIsSTRONG", "group__NodeIsElementName.html#ga15ea33b5dc08b426720d0c57cbecaced", null ], + [ "tidyNodeIsEM", "group__NodeIsElementName.html#ga445cccfc6c19f8f3b73ebd06a361bd48", null ], + [ "tidyNodeIsBIG", "group__NodeIsElementName.html#ga22e67a4b6c14214d35ad295a82509842", null ], + [ "tidyNodeIsSMALL", "group__NodeIsElementName.html#ga48af9e160f669f778de274336096e2eb", null ], + [ "tidyNodeIsPARAM", "group__NodeIsElementName.html#ga48067f28cfe217c9fc060650d0e3aca4", null ], + [ "tidyNodeIsOPTION", "group__NodeIsElementName.html#ga7f8b52642e3255b0480f48075dab8d6f", null ], + [ "tidyNodeIsOPTGROUP", "group__NodeIsElementName.html#gafe0455c4b138bffa99a913b8f3a9104f", null ], + [ "tidyNodeIsIMG", "group__NodeIsElementName.html#gafa4f741c56492e05bd351af1f0111f4e", null ], + [ "tidyNodeIsMAP", "group__NodeIsElementName.html#ga99beb2cb511391d1aca45fb85cedf27a", null ], + [ "tidyNodeIsAREA", "group__NodeIsElementName.html#gac266b333729c7430b5c73c61769f2786", null ], + [ "tidyNodeIsNOBR", "group__NodeIsElementName.html#ga6f0a957c81b4013ced6cbc4e7d8db2af", null ], + [ "tidyNodeIsWBR", "group__NodeIsElementName.html#ga89ed82add2b5524bb5cf08f382eb5116", null ], + [ "tidyNodeIsFONT", "group__NodeIsElementName.html#ga53c827624431293012ca7cfde97c937e", null ], + [ "tidyNodeIsLAYER", "group__NodeIsElementName.html#gaf238482802b2fb6e9e0b5b041d3b7611", null ], + [ "tidyNodeIsSPACER", "group__NodeIsElementName.html#ga445b2216e08962ebc2cf2013dd911969", null ], + [ "tidyNodeIsCENTER", "group__NodeIsElementName.html#ga6195cdbb5617b5240519b5a993f69592", null ], + [ "tidyNodeIsSTYLE", "group__NodeIsElementName.html#ga3e7e0649d24765c37404b64837dde32b", null ], + [ "tidyNodeIsSCRIPT", "group__NodeIsElementName.html#ga86627d1d0706847ff3087e196819706f", null ], + [ "tidyNodeIsNOSCRIPT", "group__NodeIsElementName.html#ga19d096d6eff710ef6c7a154ba8e4c71c", null ], + [ "tidyNodeIsFORM", "group__NodeIsElementName.html#ga507a029656b570eac822ea40122571d8", null ], + [ "tidyNodeIsTEXTAREA", "group__NodeIsElementName.html#ga8bd6a34ea2f61d687d24f12a49c51128", null ], + [ "tidyNodeIsBLOCKQUOTE", "group__NodeIsElementName.html#gabbbd873b72e446a8668c7c69582404e2", null ], + [ "tidyNodeIsAPPLET", "group__NodeIsElementName.html#gadfa5afb9f719c21667e98df09f043dd6", null ], + [ "tidyNodeIsOBJECT", "group__NodeIsElementName.html#gaf8c3d48a3d23f49a9d6e373ae18456c4", null ], + [ "tidyNodeIsDIV", "group__NodeIsElementName.html#gae423fbaf8bb2b2d7faf427ebb853159e", null ], + [ "tidyNodeIsSPAN", "group__NodeIsElementName.html#ga86ade270327fb3afa6d8f881fda3089e", null ], + [ "tidyNodeIsINPUT", "group__NodeIsElementName.html#ga648890464b129cbceaf749f912f6527e", null ], + [ "tidyNodeIsQ", "group__NodeIsElementName.html#ga6ef21bfc5033fd69c9f94e794d536fdb", null ], + [ "tidyNodeIsLABEL", "group__NodeIsElementName.html#ga7e4e65b0819e33ffdc38183f5dbf2785", null ], + [ "tidyNodeIsH3", "group__NodeIsElementName.html#ga4d49e513f271e3c1de40a2ca5bb507a5", null ], + [ "tidyNodeIsH4", "group__NodeIsElementName.html#ga8efaa17098b9b4c7be3f4c8a9edd5f37", null ], + [ "tidyNodeIsH5", "group__NodeIsElementName.html#gaa929252184f6d11fde69ee76f212822a", null ], + [ "tidyNodeIsH6", "group__NodeIsElementName.html#ga4b3bad82463198c3893c901aa20af219", null ], + [ "tidyNodeIsADDRESS", "group__NodeIsElementName.html#ga5ba4012b1bf4eb54b5042832f9a138e0", null ], + [ "tidyNodeIsXMP", "group__NodeIsElementName.html#ga25aba7bafb8f63d71fb54c143d053fd1", null ], + [ "tidyNodeIsSELECT", "group__NodeIsElementName.html#gaea4d09d1203e94c3010c56672ea6d711", null ], + [ "tidyNodeIsBLINK", "group__NodeIsElementName.html#gac03b2963ecda6cc08653294370baf8d8", null ], + [ "tidyNodeIsMARQUEE", "group__NodeIsElementName.html#ga16bca9ae0e87d001ed4242a83618f404", null ], + [ "tidyNodeIsEMBED", "group__NodeIsElementName.html#gab9e88a5cd07c8645db3293062fbb2a51", null ], + [ "tidyNodeIsBASEFONT", "group__NodeIsElementName.html#ga334efee28622bff3384c9eda4bb4eec5", null ], + [ "tidyNodeIsISINDEX", "group__NodeIsElementName.html#ga6c18dbdbb887968b79753ae455f2c90a", null ], + [ "tidyNodeIsS", "group__NodeIsElementName.html#gac62bc0004bfc655a7a21b6b98ddc5e6c", null ], + [ "tidyNodeIsSTRIKE", "group__NodeIsElementName.html#ga9d56a0c1da9fdf018cb6db4398260295", null ], + [ "tidyNodeIsU", "group__NodeIsElementName.html#gab28ee4ca158cb9122022719fdc08ec08", null ], + [ "tidyNodeIsMENU", "group__NodeIsElementName.html#ga41c2551e386adc53cd9ab0e00f707558", null ] +]; \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Opaque.html b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Opaque.html new file mode 100755 index 00000000..48972ad5 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Opaque.html @@ -0,0 +1,102 @@ + + + + + +HTML Tidy: Opaque Types + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
Opaque Types
+
+
+ + + + + + + + + + + +

+Data Structures

struct  TidyDoc
struct  TidyOption
struct  TidyNode
struct  TidyAttr

+Functions

opaque_type (TidyDoc)
opaque_type (TidyOption)
opaque_type (TidyNode)
opaque_type (TidyAttr)
+

Detailed Description

+

Cast to implementation types within lib. Reduces inter-dependencies/conflicts w/ application code.

+
+
+ + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Opaque.js b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Opaque.js new file mode 100755 index 00000000..a587a594 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Opaque.js @@ -0,0 +1,11 @@ +var group__Opaque = +[ + [ "TidyDoc", "structTidyDoc.html", null ], + [ "TidyOption", "structTidyOption.html", null ], + [ "TidyNode", "structTidyNode.html", null ], + [ "TidyAttr", "structTidyAttr.html", null ], + [ "opaque_type", "group__Opaque.html#ga1b209c260854e89f73101c18fe835516", null ], + [ "opaque_type", "group__Opaque.html#gafdaa7208b82ae763fbccb646035f9391", null ], + [ "opaque_type", "group__Opaque.html#gaa8d1f990e71bf7d6bc1b17974b7788a4", null ], + [ "opaque_type", "group__Opaque.html#ga236c416d715827e6db5691ce66415c2f", null ] +]; \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Parse.html b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Parse.html new file mode 100755 index 00000000..d2b815ef --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Parse.html @@ -0,0 +1,223 @@ + + + + + +HTML Tidy: Document Parse + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
Document Parse
+
+
+ + + + + + + +

+Functions

int TIDY_CALL tidyParseFile (TidyDoc tdoc, ctmbstr filename)
int TIDY_CALL tidyParseStdin (TidyDoc tdoc)
int TIDY_CALL tidyParseString (TidyDoc tdoc, ctmbstr content)
int TIDY_CALL tidyParseBuffer (TidyDoc tdoc, TidyBuffer *buf)
int TIDY_CALL tidyParseSource (TidyDoc tdoc, TidyInputSource *source)
+

Detailed Description

+

Parse markup from a given input source. String and filename functions added for convenience. HTML/XHTML version determined from input.

+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int TIDY_CALL tidyParseFile (TidyDoc tdoc,
ctmbstr filename 
)
+
+
+

Parse markup in named file

+ +
+
+ +
+
+ + + + + + + + +
int TIDY_CALL tidyParseStdin (TidyDoc tdoc)
+
+
+

Parse markup from the standard input

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int TIDY_CALL tidyParseString (TidyDoc tdoc,
ctmbstr content 
)
+
+
+

Parse markup in given string

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int TIDY_CALL tidyParseBuffer (TidyDoc tdoc,
TidyBufferbuf 
)
+
+
+

Parse markup in given buffer

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int TIDY_CALL tidyParseSource (TidyDoc tdoc,
TidyInputSourcesource 
)
+
+
+

Parse markup in given generic input source

+ +
+
+
+
+ + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Parse.js b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Parse.js new file mode 100755 index 00000000..107ff428 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Parse.js @@ -0,0 +1,8 @@ +var group__Parse = +[ + [ "tidyParseFile", "group__Parse.html#ga5ec263f2e430dd9c9e10437f067b2a28", null ], + [ "tidyParseStdin", "group__Parse.html#ga96b41ff6e6a7f9d0b9b0e901e33ad31d", null ], + [ "tidyParseString", "group__Parse.html#ga50c02fa244dcd120ae339719c2132ff9", null ], + [ "tidyParseBuffer", "group__Parse.html#gaa28ce34c95750f150205843885317851", null ], + [ "tidyParseSource", "group__Parse.html#gaa65dad2a4ca5fa97d267ddefe1180e0e", null ] +]; \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Save.html b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Save.html new file mode 100755 index 00000000..52b76570 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Save.html @@ -0,0 +1,229 @@ + + + + + +HTML Tidy: Document Save Functions + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
Document Save Functions
+
+
+ + + + + + + +

+Functions

int TIDY_CALL tidySaveFile (TidyDoc tdoc, ctmbstr filename)
int TIDY_CALL tidySaveStdout (TidyDoc tdoc)
int TIDY_CALL tidySaveBuffer (TidyDoc tdoc, TidyBuffer *buf)
int TIDY_CALL tidySaveString (TidyDoc tdoc, tmbstr buffer, uint *buflen)
int TIDY_CALL tidySaveSink (TidyDoc tdoc, TidyOutputSink *sink)
+

Detailed Description

+

Save currently parsed document to the given output sink. File name and string/buffer functions provided for convenience.

+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int TIDY_CALL tidySaveFile (TidyDoc tdoc,
ctmbstr filename 
)
+
+
+

Save to named file

+ +
+
+ +
+
+ + + + + + + + +
int TIDY_CALL tidySaveStdout (TidyDoc tdoc)
+
+
+

Save to standard output (FILE*)

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int TIDY_CALL tidySaveBuffer (TidyDoc tdoc,
TidyBufferbuf 
)
+
+
+

Save to given TidyBuffer object

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int TIDY_CALL tidySaveString (TidyDoc tdoc,
tmbstr buffer,
uint * buflen 
)
+
+
+

Save document to application buffer. If buffer is not big enough, ENOMEM will be returned and the necessary buffer size will be placed in *buflen.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int TIDY_CALL tidySaveSink (TidyDoc tdoc,
TidyOutputSinksink 
)
+
+
+

Save to given generic output sink

+ +
+
+
+
+ + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Save.js b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Save.js new file mode 100755 index 00000000..91dc711b --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Save.js @@ -0,0 +1,8 @@ +var group__Save = +[ + [ "tidySaveFile", "group__Save.html#ga19ee6e2ee0e719a97cff443ebb19ae44", null ], + [ "tidySaveStdout", "group__Save.html#ga6638d1800ee63fc6bea19bc2bf582be2", null ], + [ "tidySaveBuffer", "group__Save.html#ga7e8642262c8c4d34cf7cc426647d29f0", null ], + [ "tidySaveString", "group__Save.html#gaf684fefd3e42f459cf0a4ebe937ce12b", null ], + [ "tidySaveSink", "group__Save.html#gaea985b28470453d0218092b137f71e77", null ] +]; \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Tree.html b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Tree.html new file mode 100755 index 00000000..c1a4e285 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Tree.html @@ -0,0 +1,147 @@ + + + + + +HTML Tidy: Document Tree + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
Document Tree
+
+
+ + + + + + + + + + + + + + +

+Functions

+TidyNode TIDY_CALL tidyGetRoot (TidyDoc tdoc)
+TidyNode TIDY_CALL tidyGetHtml (TidyDoc tdoc)
+TidyNode TIDY_CALL tidyGetHead (TidyDoc tdoc)
+TidyNode TIDY_CALL tidyGetBody (TidyDoc tdoc)
+TidyNode TIDY_CALL tidyGetParent (TidyNode tnod)
+TidyNode TIDY_CALL tidyGetChild (TidyNode tnod)
+TidyNode TIDY_CALL tidyGetNext (TidyNode tnod)
+TidyNode TIDY_CALL tidyGetPrev (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrFirst (TidyNode tnod)
+TidyAttr TIDY_CALL tidyAttrNext (TidyAttr tattr)
+ctmbstr TIDY_CALL tidyAttrName (TidyAttr tattr)
+ctmbstr TIDY_CALL tidyAttrValue (TidyAttr tattr)
+

Detailed Description

+

A parsed and, optionally, repaired document is represented by Tidy as a Tree, much like a W3C DOM. This tree may be traversed using these functions. The following snippet gives a basic idea how these functions can be used.

+
+void dumpNode( TidyNode tnod, int indent )
+{
+  TidyNode child;
 for ( child = tidyGetChild(tnod); child; child = tidyGetNext(child) )
+  {
+    ctmbstr name;
+    switch ( tidyNodeGetType(child) )
+    {
+    case TidyNode_Root:       name = "Root";                    break;
+    case TidyNode_DocType:    name = "DOCTYPE";                 break;
+    case TidyNode_Comment:    name = "Comment";                 break;
+    case TidyNode_ProcIns:    name = "Processing Instruction";  break;
+    case TidyNode_Text:       name = "Text";                    break;
+    case TidyNode_CDATA:      name = "CDATA";                   break;
+    case TidyNode_Section:    name = "XML Section";             break;
+    case TidyNode_Asp:        name = "ASP";                     break;
+    case TidyNode_Jste:       name = "JSTE";                    break;
+    case TidyNode_Php:        name = "PHP";                     break;
+    case TidyNode_XmlDecl:    name = "XML Declaration";         break;
   case TidyNode_Start:
+    case TidyNode_End:
+    case TidyNode_StartEnd:
+    default:
+      name = tidyNodeGetName( child );
+      break;
+    }
+    assert( name != NULL );
+    printf( "\%*.*sNode: \%s\\n", indent, indent, " ", name );
+    dumpNode( child, indent + 4 );
+  }
+}
void dumpDoc( TidyDoc tdoc )
+{
+  dumpNode( tidyGetRoot(tdoc), 0 );
+}
void dumpBody( TidyDoc tdoc )
+{
+  dumpNode( tidyGetBody(tdoc), 0 );
+}
+
+
+ + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Tree.js b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Tree.js new file mode 100755 index 00000000..c5157ec3 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/group__Tree.js @@ -0,0 +1,15 @@ +var group__Tree = +[ + [ "tidyGetRoot", "group__Tree.html#gac70f893c5cd5805bf76b393ad07c93c6", null ], + [ "tidyGetHtml", "group__Tree.html#gae539f5031bd1e039458a7fffb07a2b7a", null ], + [ "tidyGetHead", "group__Tree.html#ga8bc403902d8535a6dab3efc29519d970", null ], + [ "tidyGetBody", "group__Tree.html#ga860430a9ae7b9d347f0f7eb4204b3046", null ], + [ "tidyGetParent", "group__Tree.html#ga0da0a16a07321623bda6a02a397111ca", null ], + [ "tidyGetChild", "group__Tree.html#ga0ef21eb446a56c3874a993b6f3966e73", null ], + [ "tidyGetNext", "group__Tree.html#ga60f48e1a0981ccfa027e62f73f0b1e7d", null ], + [ "tidyGetPrev", "group__Tree.html#ga7a277d67c8143a8dd66d6c4796e5afa2", null ], + [ "tidyAttrFirst", "group__Tree.html#ga7247560b46127ac69780b938d8bca177", null ], + [ "tidyAttrNext", "group__Tree.html#ga8af1c83f5c33e767ca40561341089bae", null ], + [ "tidyAttrName", "group__Tree.html#ga32dff6f721a553a54cee0324cda15ba7", null ], + [ "tidyAttrValue", "group__Tree.html#gaeb8f272e8135e744b9b3f006517f1073", null ] +]; \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/index.html b/Balthisar Tidy/tidylib5-src/htmldoc/api/index.html new file mode 100755 index 00000000..4d818b51 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/index.html @@ -0,0 +1,91 @@ + + + + + +HTML Tidy: Main Page + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
HTML Tidy +  0.1 +
+ +
+
+ + +
+
+ +
+
+
+ + + + + + + diff --git a/Balthisar Tidy/tidylib5-src/htmldoc/api/jquery.js b/Balthisar Tidy/tidylib5-src/htmldoc/api/jquery.js new file mode 100755 index 00000000..bcad7a84 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/htmldoc/api/jquery.js @@ -0,0 +1,111 @@ +/* + * jQuery JavaScript Library v1.3.2 + * http://jquery.com/ + * + * Copyright (c) 2009 John Resig + * Dual licensed under the MIT and GPL licenses. + * http://docs.jquery.com/License + * + * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) + * Revision: 6246 + */ +(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("",""]||!O.indexOf("",""]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
"]||!O.indexOf("",""]||(!O.indexOf("",""]||!O.indexOf("",""]||!o.support.htmlSerialize&&[1,"div
","
"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); +/* + * Sizzle CSS Selector Engine - v0.9.3 + * Copyright 2009, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return UT[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="

";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="
";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0) +{I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("
").append(M.responseText.replace(//g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function() +{G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='
';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); + +/* + * jQuery hashchange event - v1.3 - 7/21/2010 + * http://benalman.com/projects/jquery-hashchange-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ +(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$(' + + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_433360.html b/Balthisar Tidy/tidylib5-src/test/input/in_433360.html new file mode 100755 index 00000000..227673ab --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_433360.html @@ -0,0 +1,9 @@ + +[ #433360 ] Tags with missing > can't be repaired + +

+There seems to be an error occurring when you don't +end a tag with a >. Tidy won't fix it. +

+ + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_433604.xml b/Balthisar Tidy/tidylib5-src/test/input/in_433604.xml new file mode 100755 index 00000000..81c0b659 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_433604.xml @@ -0,0 +1,4 @@ + +[ #433604 ] Tidy inserts &nbsp; entity in -xml mode. +Use -xml on command line. +Test of   diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_433607.xml b/Balthisar Tidy/tidylib5-src/test/input/in_433607.xml new file mode 100755 index 00000000..67727840 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_433607.xml @@ -0,0 +1,3 @@ + +[ #433607 ] No warning for omitted end tag with -xml. +Use -xml on command line. diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_433656.html b/Balthisar Tidy/tidylib5-src/test/input/in_433656.html new file mode 100755 index 00000000..9db2dca7 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_433656.html @@ -0,0 +1,10 @@ + + + +[ #433656 ] Improve support for PHP + + +(some text) + + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_433666.html b/Balthisar Tidy/tidylib5-src/test/input/in_433666.html new file mode 100755 index 00000000..35376d63 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_433666.html @@ -0,0 +1,12 @@ + +[ #433666 ] Attempt to repair duplicate attributes + + + + + +
Test
+ + +[ #433670 ] &apos not recognized as valid XML entity. +Use -xml on command line. +Test of ' diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_433672.html b/Balthisar Tidy/tidylib5-src/test/input/in_433672.html new file mode 100755 index 00000000..e0c71501 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_433672.html @@ -0,0 +1,12 @@ + + +[ #433672 ] Anchor enclosing Header tags is omitted + + +

Section heading

+

Another heading

+ +
ack!
+

Goto Another Heading + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_433856.html b/Balthisar Tidy/tidylib5-src/test/input/in_433856.html new file mode 100755 index 00000000..5c2fd05e --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_433856.html @@ -0,0 +1,14 @@ + + + + + +[ #433856 ] Access violation w/Word files w/font tag + + + +

De kop

+ +

Dit is een test.

+
+ \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_434047.html b/Balthisar Tidy/tidylib5-src/test/input/in_434047.html new file mode 100755 index 00000000..3a4ef701 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_434047.html @@ -0,0 +1,13 @@ + + + +[ #434047 ] Mixed content in 4.01 Strict not allowed + + + + + + +
Some text.
+ + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_434100.html b/Balthisar Tidy/tidylib5-src/test/input/in_434100.html new file mode 100755 index 00000000..1c33b1ca --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_434100.html @@ -0,0 +1,13 @@ + + + + + + + + + +[ #434100 ] Error actually reported as a warning + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_434940.html b/Balthisar Tidy/tidylib5-src/test/input/in_434940.html new file mode 100755 index 00000000..076562cb --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_434940.html @@ -0,0 +1,9 @@ + + + +[ #434940 ] --show-body-only: print only body contents + + +Use "--show-body-only yes" on the command line + + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_435903.html b/Balthisar Tidy/tidylib5-src/test/input/in_435903.html new file mode 100755 index 00000000..be35048e --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_435903.html @@ -0,0 +1,19 @@ + + [ #435903 ] Script element w/body child to table bug> + + + + + + + +
+
+ + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_435917.html b/Balthisar Tidy/tidylib5-src/test/input/in_435917.html new file mode 100755 index 00000000..a5938fc5 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_435917.html @@ -0,0 +1,12 @@ + + + +[ #435917 ] <input onfocus=""> reported unknown attr + + +bug #1 + +bug #2 + + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_435919.html b/Balthisar Tidy/tidylib5-src/test/input/in_435919.html new file mode 100755 index 00000000..127cbf38 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_435919.html @@ -0,0 +1,8 @@ + + +[ #435919 ] Nested <q></q>'s not handled correctly + + +So then I said to him, don't go there. + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_435920.html b/Balthisar Tidy/tidylib5-src/test/input/in_435920.html new file mode 100755 index 00000000..c0fade23 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_435920.html @@ -0,0 +1,13 @@ + + +[ #435920 ] Space inserted before </td> causes probs + + +bla + + + + +
 
+ + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_435922.html b/Balthisar Tidy/tidylib5-src/test/input/in_435922.html new file mode 100755 index 00000000..cea6d9b3 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_435922.html @@ -0,0 +1,10 @@ + + + [ #435922 ] Missing <form> around <input> no warning + + + +
+ + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_435923.html b/Balthisar Tidy/tidylib5-src/test/input/in_435923.html new file mode 100755 index 00000000..ead575d9 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_435923.html @@ -0,0 +1,10 @@ + + + + [ #435923 ] Preserve case of attribute names + + + + + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_437468.html b/Balthisar Tidy/tidylib5-src/test/input/in_437468.html new file mode 100755 index 00000000..dd67848b --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_437468.html @@ -0,0 +1,9 @@ + + + +Test input file for iso-8859-1 character entities + + +

Phrase with numeric quotes expressly stated: “Déjà conçu à l'ère de Caféïne”

+ + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_438650.html b/Balthisar Tidy/tidylib5-src/test/input/in_438650.html new file mode 100755 index 00000000..55c8a197 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_438650.html @@ -0,0 +1,9 @@ + + +[ #438650 ] Newline in URL attr value becomes space + + +This is a test + + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_438658.html b/Balthisar Tidy/tidylib5-src/test/input/in_438658.html new file mode 100755 index 00000000..9eb1d499 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_438658.html @@ -0,0 +1,8 @@ + + +[ #438658 ] Missing / in title endtag makes 2 titles<title> +</head> +<body> +Test +</body> +</html> \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_438954.html b/Balthisar Tidy/tidylib5-src/test/input/in_438954.html new file mode 100755 index 00000000..39d02773 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_438954.html @@ -0,0 +1,9 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<title>[ #438954 ] Body tag w/attributes omitted w/hide-end + + +Use "--hide-endtags yes" on command line + + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_438956.html b/Balthisar Tidy/tidylib5-src/test/input/in_438956.html new file mode 100755 index 00000000..4f3123ab --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_438956.html @@ -0,0 +1,8 @@ + + +[ #438956 ] Bad head-endtag reported incorrectly + + +Test + + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_441508.html b/Balthisar Tidy/tidylib5-src/test/input/in_441508.html new file mode 100755 index 00000000..b9030524 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_441508.html @@ -0,0 +1,10 @@ + +[ #441508 ] parser.c: BadForm() function broken + + + +
Test
+ + + + + [ #441568 ] Font tags handling different + + +
+ +text-one + +
+ +text-two + + + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_441740.xhtml b/Balthisar Tidy/tidylib5-src/test/input/in_441740.xhtml new file mode 100755 index 00000000..47ee9385 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_441740.xhtml @@ -0,0 +1,28 @@ + + + + +Sample XHTML 1.1 document with Ruby markup + + +

+ + + 10 + 31 + 2002 + + + Month + Day + Year + + + Expiration Date + + +

+ + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_443362.html b/Balthisar Tidy/tidylib5-src/test/input/in_443362.html new file mode 100755 index 00000000..30f3aad2 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_443362.html @@ -0,0 +1,31 @@ + + + + +[ #443362 ] null-pointer except. for doctype in pre + + + +

Unofficial W3C Validator FAQ

+

This is a list of frequently asked questions and answers asked on the +www-validator-css@w3.org mailing list. + +

+What does "org.xml.sax.SAXException: +Please, fix your system identifier (URI) in the DOCTYPE rule." mean? +

+ +

Your XHTML document contains a document type +declaration but the system identifier points at some +non-W3C URI. Your document probably contains something +like this: +

+
 
+ 
+
+
+ + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_443381.xhtml b/Balthisar Tidy/tidylib5-src/test/input/in_443381.xhtml new file mode 100755 index 00000000..b5c6b9ac --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_443381.xhtml @@ -0,0 +1,10 @@ + + + +[ #443381 ] end tags for empty elements in XHTML + + +

TestcoolTest

+ + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_443576.html b/Balthisar Tidy/tidylib5-src/test/input/in_443576.html new file mode 100755 index 00000000..f3485c76 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_443576.html @@ -0,0 +1,12 @@ + + +[ #443576 ] End script tag inside scripts problem + + + + + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_443678.html b/Balthisar Tidy/tidylib5-src/test/input/in_443678.html new file mode 100755 index 00000000..2fe2cc9d --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_443678.html @@ -0,0 +1,19 @@ + + +[ #443678 ] Unclosed <script> in <head> messes Tidy + + + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_444394.html b/Balthisar Tidy/tidylib5-src/test/input/in_444394.html new file mode 100755 index 00000000..da104694 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_444394.html @@ -0,0 +1,149 @@ + + + + + + + + + + +Hello + + + + + + +
+ +

Hello

+ +

 

+ +

This is a nice document

+ +

Test

+ +

With a nice picture

+ +

 

+ +
+ + + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_445074.html b/Balthisar Tidy/tidylib5-src/test/input/in_445074.html new file mode 100755 index 00000000..761d0d39 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_445074.html @@ -0,0 +1,19 @@ + + + +[ #445074 ] XHTML requires form method="post" + + +
+ + + + +
+ +
+
+ + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_445394.html b/Balthisar Tidy/tidylib5-src/test/input/in_445394.html new file mode 100755 index 00000000..626aa648 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_445394.html @@ -0,0 +1,8 @@ + + +[ #445394 ] Improve handling of missing trailing " + + +link + + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_445557.html b/Balthisar Tidy/tidylib5-src/test/input/in_445557.html new file mode 100755 index 00000000..f1be0b87 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_445557.html @@ -0,0 +1,22 @@ + + + +[ #445557 ] Convert Symbol font chars to Unicode + + +

The predicate calculus has a number of theorems and axioms for proving logical statements. Here are the main symbols used in predicate calculus:

+

P(x) – proposition – a logical statement in the condition x.

+

x – any condition in the set of possible conditions.

+

c – a particular condition in the set of possible conditions.

+

" + – "For every"

+

$ + – "Exists"

+

® + – Implication

+

Ù + – Conjunction (logical and)

+

Ú + – Disjunction (logical or)

+ + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_446019.xhtml b/Balthisar Tidy/tidylib5-src/test/input/in_446019.xhtml new file mode 100755 index 00000000..afa5328c --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_446019.xhtml @@ -0,0 +1,12 @@ + + + +[ #446019 ] <img name="foo"> allowed in XTHML-Strict + + +

+TestTest +

+ + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_449348.html b/Balthisar Tidy/tidylib5-src/test/input/in_449348.html new file mode 100755 index 00000000..d6d32779 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_449348.html @@ -0,0 +1,14 @@ + + + +[ #449348 ] Whitespace added/removed to inline tags + + +

Make this wrap at the end of the line12345678: white-spacejoebob

+ +

This is long enough a wrap at the next line text +...

+ + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_450389.html b/Balthisar Tidy/tidylib5-src/test/input/in_450389.html new file mode 100755 index 00000000..ebe001c9 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_450389.html @@ -0,0 +1,82 @@ + + +[ #450389 ] Color attval check allows only black/# + + + + + + +

+Test black
+Test green
+Test silver
+Test lime
+Test gray
+Test olive
+Test white
+Test yellow
+Test maroon
+Test navy
+Test red
+Test blue
+Test purple
+Test teal
+Test fuchsia
+Test aqua
+

+ +

+Test Red
+Test RED
+

+ +

+Test invalid reddish
+

+ +

+Test black #000000
+Test green #008000
+Test silver #C0C0C0
+Test lime #00FF00
+Test gray #808080
+Test olive #808000
+Test white #FFFFFF
+Test yellow #FFFF00
+Test maroon #800000
+Test navy #000080
+Test red #FF0000
+Test blue #0000FF
+Test purple #800080
+Test teal #008080
+Test fuchsia #FF00FF
+Test aqua #00FFFF
+

+ +

+Test red #ff0000
+Test red #fF0000
+

+ +

+Test invalid red #FF
+

+ +

+Test invalid grurple
+Test invalid #grurple
+Test invalid #1234567
+

+ + + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_456596.html b/Balthisar Tidy/tidylib5-src/test/input/in_456596.html new file mode 100755 index 00000000..b8288785 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_456596.html @@ -0,0 +1,8 @@ + + + [ #456596 ] Missing attribute name garbles output + + + System News
+ + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_463066.html b/Balthisar Tidy/tidylib5-src/test/input/in_463066.html new file mode 100755 index 00000000..8af45ba2 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_463066.html @@ -0,0 +1,552 @@ + + + + + + + + + + + + + + + + + + +[ #463066 ] CleanWord2000 misses mso-list bullets + + + + + + + + + + + + + +
+ + + +

Test 1

+ + + +
    + +
  1. Here
  2. + +
  3. We
  4. + +
  5. Go
  6. + +
  7. Again
  8. + +
+ + + +

 

+ + + +
    + +
  1. Ok
  2. + +
  3. That
  4. + +
  5. Worked
  6. + +
+ + + +

 

+ + + +

v     But

+ + + +

v     It

+ + + +

v     Does

+ + + +

v     Not

+ + + +

v     Work

+ + + +

v     With

+ + + +

v     Bullet

+ + + +

v     Points

+ + + +

 

+ + + +

q       + +Now

+ + + +

q       + +It

+ + + +

q       + +Is

+ + + +

q       + +Working

+ + + +

 

+ + + +
    + +
  • Try
  • + +
  • It
  • + +
  • Again
  • + +
+ + + +

 

+ + + +
    + +
  • Do
  • + +
  • It
  • + +
  • Again
  • + +
  • And
  • + +
+ + + +

 

+ + + +
+ + + + + + + + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_467863.html b/Balthisar Tidy/tidylib5-src/test/input/in_467863.html new file mode 100755 index 00000000..5f60cb47 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_467863.html @@ -0,0 +1,8 @@ + + +[ #467863 ] un-nest <a> + + A B C + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_467865.html b/Balthisar Tidy/tidylib5-src/test/input/in_467865.html new file mode 100755 index 00000000..ea84cb1e --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_467865.html @@ -0,0 +1,9 @@ + + +[ #467865 ] un-nesting is incorrect + +

(foo bar). +...

+ + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_470663.html b/Balthisar Tidy/tidylib5-src/test/input/in_470663.html new file mode 100755 index 00000000..e165354c --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_470663.html @@ -0,0 +1,37 @@ + + + + + + + + Test Input For Bug #470663 + + + +

Body doesn't matter. Problem occurs parsing <head> element.

+ + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_470688.html b/Balthisar Tidy/tidylib5-src/test/input/in_470688.html new file mode 100755 index 00000000..f3c4f7fa --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_470688.html @@ -0,0 +1,10 @@ + + + +[ #470688 ] doesn't cleanup badly nested tags right + + +

RIGHT TRIANGLES

+ + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_471264.html b/Balthisar Tidy/tidylib5-src/test/input/in_471264.html new file mode 100755 index 00000000..b284b05c --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_471264.html @@ -0,0 +1,11 @@ + + +[ #471264 ] Reduce blank lines in output + +
    +
  • first element
  • +
  • second element
  • +
+ + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_473490.html b/Balthisar Tidy/tidylib5-src/test/input/in_473490.html new file mode 100755 index 00000000..03b0f8dc --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_473490.html @@ -0,0 +1,11 @@ + + + +[ #473490 ] DOCTYPE for Proprietary HTML to XHTML bad + + + +

Test

+
+ + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_480406.xml b/Balthisar Tidy/tidylib5-src/test/input/in_480406.xml new file mode 100755 index 00000000..63acee19 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_480406.xml @@ -0,0 +1,4 @@ + + + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_480701.xml b/Balthisar Tidy/tidylib5-src/test/input/in_480701.xml new file mode 100755 index 00000000..4adae949 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_480701.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_480843.xhtml b/Balthisar Tidy/tidylib5-src/test/input/in_480843.xhtml new file mode 100755 index 00000000..2f84b723 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_480843.xhtml @@ -0,0 +1,10 @@ + + + +[ #480843 ] Proposed change to FixID() + +

Introduction

+

New Introduction

+ + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_487204.html b/Balthisar Tidy/tidylib5-src/test/input/in_487204.html new file mode 100755 index 00000000..02d29672 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_487204.html @@ -0,0 +1,12 @@ + + +[ #487204 ] Duplicate DIV style attribute generated +
    +
      +
    1. One
    2. +
    3. Two
    4. +
    5. Three
    6. +
    +
+ \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_487283.html b/Balthisar Tidy/tidylib5-src/test/input/in_487283.html new file mode 100755 index 00000000..3b9ba38a --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_487283.html @@ -0,0 +1,22 @@ + + +[ #487283 ] >/select< does not terminate >option< + + +
+ +
+ + + +
row 1, cell 1 +row 1, cell 2 +
row 2, cell 1 +row 2, cell 2 +
+ + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_500236.xml b/Balthisar Tidy/tidylib5-src/test/input/in_500236.xml new file mode 100755 index 00000000..82561732 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_500236.xml @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_501230.xhtml b/Balthisar Tidy/tidylib5-src/test/input/in_501230.xhtml new file mode 100755 index 00000000..3f013c3c --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_501230.xhtml @@ -0,0 +1,12 @@ + + + +[ #501230 ] "0" (Zero) has to be lower case ! + + + +
+ + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_501669.html b/Balthisar Tidy/tidylib5-src/test/input/in_501669.html new file mode 100755 index 00000000..46bb207e --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_501669.html @@ -0,0 +1,15 @@ + + + +[ #501669 ] width="n*" marked invalid on <COL> + + + ++ + + +
xx
+ + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_503436.xml b/Balthisar Tidy/tidylib5-src/test/input/in_503436.xml new file mode 100755 index 00000000..9e3bd882 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_503436.xml @@ -0,0 +1,8 @@ + + +Testcase #503436 + + + first + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_504206.html b/Balthisar Tidy/tidylib5-src/test/input/in_504206.html new file mode 100755 index 00000000..b4b95684 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_504206.html @@ -0,0 +1,154 @@ + + +[ #504206] Tidy errors in processing forms. + +

COMM 428: Feedback Survey

+ +

Please fill out the following form based on YOUR +experience in COMM 428 to date.

+

Use the Send button at the bottom +of the page to send your feedback to me via e-mail. +


+
+ + + + + + + +

Name (optional):

+

E-Mail Address (optional):

+

Where will you be this time next year? + + +

+

Area(s) of concentation? (Select all that +Apply):
+MIS
+Finance
+Marketing
+Management
+Accounting
+Other
+

+

Q1: The instructor gives appropriate +consideration to the comments and questions of +students.
+Strongly Agree +Agree +Neither +Agree Nor Disagree +Disagree +Strongly Disagree +

+

Q2: The instructor relates theoretical +concepts covered in the course to practical +applications.
+Strongly Agree +Agree +Neither +Agree Nor Disagree +Disagree +Strongly Disagree +

+

Q3: The instructor presents class material +in a clear and organized manner.
+Strongly Agree +Agree +Neither +Agree Nor Disagree +Disagree +Strongly Disagree +

+

Q4: The instructor is prepared for +class.
+Strongly Agree +Agree +Neither +Agree Nor Disagree +Disagree +Strongly Disagree +

+

Q5: The instructor demonstrates enthusiasm +and interest in the subject matter.
+Strongly Agree +Agree +Neither Agree Nor Disagree +Disagree +Strongly Disagree +

+

Q6: The instructor posts reasonable office +hours and is available whenever I try to see him +during those hours.
+Strongly Agree +Agree +Neither +Agree Nor Disagree +Disagree +Strongly Disagree +

+

Q7: The instructor stimulates me to think +about the course.
+Strongly Agree +Agree +Neither Agree Nor Disagree +Disagree +Strongly Disagree +

+

Stengths (class/instructor): +
+ +
+

+

Weaknesses (class/instructor): +
+ +
+

+

Suggestions for improvement +(class/instructor; NOTE: This field is +REQUIRED): +
+ +
+

+

+ +
+ diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_505770.html b/Balthisar Tidy/tidylib5-src/test/input/in_505770.html new file mode 100755 index 00000000..5bdeb737 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_505770.html @@ -0,0 +1,34 @@ + + + +[ #505770] Unclosed <option> tag causing problems + + + + + +
+ + +
+
+ +
+ + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_508936.html b/Balthisar Tidy/tidylib5-src/test/input/in_508936.html new file mode 100755 index 00000000..f950f1dc --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_508936.html @@ -0,0 +1,11 @@ + + + [ #508936 ] Parse CSS Selector prefix in config file + + +

Allow user to specify +prefix for +class names Tidy generates with --clean yes option. +

+ + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_511243.xhtml b/Balthisar Tidy/tidylib5-src/test/input/in_511243.xhtml new file mode 100755 index 00000000..32fa5de4 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_511243.xhtml @@ -0,0 +1,14 @@ + + + + +[ #511243 ] xhtml utf8 format bug + + + +

+How to…
+Place an extended-hours order: + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_511679.html b/Balthisar Tidy/tidylib5-src/test/input/in_511679.html new file mode 100755 index 00000000..67f996b8 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_511679.html @@ -0,0 +1,6 @@ +[ 511679 ] Block level elements in a <pre> section + + + + +
foo
diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_514348.html b/Balthisar Tidy/tidylib5-src/test/input/in_514348.html new file mode 100755 index 00000000..2f483e25 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_514348.html @@ -0,0 +1,25 @@ + + + + + + + + [ #514348 ] Incorrect wrap behaviour + + + + + + + +
HomeNews +
+ + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_514893.html b/Balthisar Tidy/tidylib5-src/test/input/in_514893.html new file mode 100755 index 00000000..44fc960a --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_514893.html @@ -0,0 +1,19 @@ + + + + + [ 514893 ] Incorrect http-equiv <meta> tag + + + + + +

This document will test synchronization of the <meta http-equiv ...> +tag. It contains the header <meta http-equiv="CONTENT-TYPE" +content="TEXT/HTML; CHARSET=WINDOWS-1252" />.

+ +

On output, the header should be modified to reflect whatever output +encoding you have specified.

+ + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_516370.xhtml b/Balthisar Tidy/tidylib5-src/test/input/in_516370.xhtml new file mode 100755 index 00000000..792ffd09 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_516370.xhtml @@ -0,0 +1,13 @@ + + + +[ #516370 ] Invalid ID value? + +

Test valid D

+

Test valid ID

+

Test valid ID - : should only be used for namespaces

+

Test invalid ID

+

Test invalid ID

+ + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_517550.xhtml b/Balthisar Tidy/tidylib5-src/test/input/in_517550.xhtml new file mode 100755 index 00000000..723eb4c4 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_517550.xhtml @@ -0,0 +1,12 @@ + + + + + +[ #517550 ] parser misinterprets ?xml-stylesheet PI + + +

A test document

+ + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_525081.html b/Balthisar Tidy/tidylib5-src/test/input/in_525081.html new file mode 100755 index 00000000..1a393dc1 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_525081.html @@ -0,0 +1,12 @@ + + + +[ 525081 ] frameset rows attr. not recognized + + + + + + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_531964.xhtml b/Balthisar Tidy/tidylib5-src/test/input/in_531964.xhtml new file mode 100755 index 00000000..74709ec4 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_531964.xhtml @@ -0,0 +1,11 @@ + + + + +[ 531964 ] <p /> gets tidied into <p /></p> + + +

+ + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_532535.html b/Balthisar Tidy/tidylib5-src/test/input/in_532535.html new file mode 100755 index 00000000..bec6514c --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_532535.html @@ -0,0 +1,13 @@ + + + +[ 532535 ] Hang when in code <?xml /> + + +

 

+ + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_533105.html b/Balthisar Tidy/tidylib5-src/test/input/in_533105.html new file mode 100755 index 00000000..19a7298a --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_533105.html @@ -0,0 +1,20 @@ + + +[ 533105 ] Tidy confused: HTML in VBScript + + + + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_533233.html b/Balthisar Tidy/tidylib5-src/test/input/in_533233.html new file mode 100755 index 00000000..4787ac9b --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_533233.html @@ -0,0 +1,23 @@ + + + + + Test for bug #533233 + + + + + +

Script sample 1

+

Headline project—Link to offsite page.

+

Input 1

+

texttext

+ + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_537604.xml b/Balthisar Tidy/tidylib5-src/test/input/in_537604.xml new file mode 100755 index 00000000..713d2c85 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_537604.xml @@ -0,0 +1,6 @@ + + + + +this is a test of ©. &, <, >, ', " must be recognized. + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_539369.html b/Balthisar Tidy/tidylib5-src/test/input/in_539369.html new file mode 100755 index 00000000..323bf247 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_539369.html @@ -0,0 +1,22 @@ + + + + + + +[ 539369 ] Infinite loop </frame> after </frameset> + + + + + + + + + + + + + + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_539369a.html b/Balthisar Tidy/tidylib5-src/test/input/in_539369a.html new file mode 100755 index 00000000..6f455013 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_539369a.html @@ -0,0 +1,21 @@ + + + + + [ 539369 ] Test </frameset> inside <noframes> + + + + + + + + + <frameset> + + + + + + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_540045.xhtml b/Balthisar Tidy/tidylib5-src/test/input/in_540045.xhtml new file mode 100755 index 00000000..f730b1a8 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_540045.xhtml @@ -0,0 +1,13 @@ + + + + + + +[ 540045 ] Tidy strips all the IMG tags out! + + +USA flag + + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_540296.html b/Balthisar Tidy/tidylib5-src/test/input/in_540296.html new file mode 100755 index 00000000..1188debd --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_540296.html @@ -0,0 +1,13 @@ + +[ 540296 ] Tidy dumps + +
+
+
+
+
+
+
+
+ + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_540555.html b/Balthisar Tidy/tidylib5-src/test/input/in_540555.html new file mode 100755 index 00000000..2976f135 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_540555.html @@ -0,0 +1,5 @@ + + +<body> +<p>#540555 Empty title tag is trimmed</p> +</body> \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_540571.html b/Balthisar Tidy/tidylib5-src/test/input/in_540571.html new file mode 100755 index 00000000..03bdf6f9 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_540571.html @@ -0,0 +1,15 @@ +<html> +<head> +<title>#540571 Inconsistent behaviour with span inline element + + +

Hello World

+

+The font inline is moved so it becomes a child of the h1 element. +

+

Hello World

+

+The span inline is not moved so it becomes a child of the h1 element, which is inconsistent and does not correspond with current browser behaviour any more. +

+ + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_542029.html b/Balthisar Tidy/tidylib5-src/test/input/in_542029.html new file mode 100755 index 00000000..2d2aff51 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_542029.html @@ -0,0 +1,9 @@ + + + +[ 542029 ] PPrintXmlDecl reads outside array range + + +Test + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_543262.html b/Balthisar Tidy/tidylib5-src/test/input/in_543262.html new file mode 100755 index 00000000..b291986e --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_543262.html @@ -0,0 +1,14 @@ + + + + Preferences + + + +

Test

+ + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_545067.html b/Balthisar Tidy/tidylib5-src/test/input/in_545067.html new file mode 100755 index 00000000..7b28f1c1 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_545067.html @@ -0,0 +1,3 @@ + +[ 545067 ] Implicit closing of head broken +

diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_545772.html b/Balthisar Tidy/tidylib5-src/test/input/in_545772.html new file mode 100755 index 00000000..71ac3638 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_545772.html @@ -0,0 +1,14 @@ + + + +[ 547057 ] --output-xhtml hangs on most files + + + + + +test + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_552861.html b/Balthisar Tidy/tidylib5-src/test/input/in_552861.html new file mode 100755 index 00000000..a0137090 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_552861.html @@ -0,0 +1,12 @@ + + + Test Input For Bug #552861 + + + + + + +
Testing
+ + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_553468.xhtml b/Balthisar Tidy/tidylib5-src/test/input/in_553468.xhtml new file mode 100755 index 00000000..a1b48257 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_553468.xhtml @@ -0,0 +1,11 @@ + + + +[ #553468 ] Doesn't warn about <u> in XHTML strict + + +

Tidy doesn't complain about underlining in +XHTML strict documents

+ + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_566542.html b/Balthisar Tidy/tidylib5-src/test/input/in_566542.html new file mode 100755 index 00000000..91b36118 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_566542.html @@ -0,0 +1,8 @@ +[ 566542 ] parser hangs + +
  • Identify the member disks with ssaraid -H -lssa0 -n pdisk + [n] -u -a use=member +

    +

  • Identify the hot spare with ssaraid -H -lssa0 -n pdisk + [n]-u -a use=spare

    diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_570027.html b/Balthisar Tidy/tidylib5-src/test/input/in_570027.html new file mode 100755 index 00000000..125774e5 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_570027.html @@ -0,0 +1,34 @@ + + + + +[ 570027 ] Fixes crash in Word2000 cleanup + + + +

    á      +;   +Introduction +;

    + + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_578216.html b/Balthisar Tidy/tidylib5-src/test/input/in_578216.html new file mode 100755 index 00000000..ada5ec72 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_578216.html @@ -0,0 +1,27 @@ + + + +[ 578216 ] Incorrect indent of <SPAN> elements + + +
    + Benefits: Using a new Project Profile Knowledge +Base...
    + Solutions: Comprehensive intranet-based +knowledge base containing...
    + Roles: Drove site and content management +architecture...
    + Technology: Visual InterDev, IIS, +...
    +
    + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_586555.html b/Balthisar Tidy/tidylib5-src/test/input/in_586555.html new file mode 100755 index 00000000..6275b4c5 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_586555.html @@ -0,0 +1,19 @@ + + + + +[ 586555 ] Misplaced backslash caused by newline + + +

    [ 586555 ] Misplaced backslash caused by newline

    + + + + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_586562.html b/Balthisar Tidy/tidylib5-src/test/input/in_586562.html new file mode 100755 index 00000000..1c0b9fe4 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_586562.html @@ -0,0 +1,12 @@ + + + + + + + [586562] Two Doctypes + + +

    Two DOCTYPE's!

    + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_588061.html b/Balthisar Tidy/tidylib5-src/test/input/in_588061.html new file mode 100755 index 00000000..811a715d --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_588061.html @@ -0,0 +1,428 @@ + + + + + + + + + TVNAV.COM Garmin GPS Home Page + + + + +

    TVNAV.COM

    +Toll Free 877-625-3546 (US only)

    + + +

    + +
    Garmin Logo





    + +

    + + +To track your package click here.

    + +Check the current REBATE offers!

    +**NEW! GPSMAP 76S IN STOCK!** +

    + + +**NEW! Rino 110/120 GPS/FRS/GMRS Expected September** +

    + +**NEW! GPSMAP 196 Coming Soon!** +

    + +**NEW! City Navigator Australia....$265.00 IN STOCK!** +

    +**NEW! BlueChart software IN STOCK!** +

    + +**NEW! Europe MapSource: City Navigator, City Select, MetroGuide and Roads & Recreation IN STOCK!** +

    + +**NEW! We now have remanufactured GPS III ($150) in stock. 1 year warranty.
    ** +

    +**NEW! GPS V IN STOCK!** +

    +**NEW! eTrex/eMap/StreetPilot/ColorMap/StreetPilot III/GPSMAP 295 Bean Bag IN STOCK!** +

    +**NEW! StreetPilot III IN STOCK!** +

    +**NEW! StreetPilot/ColorMap/295 Deluxe Case IN STOCK!** +

    +**NEW! Sunvisor for StreetPilot, ColorMap, StreetPilot III and GPSMAP 295....$20.00 IN STOCK!** +

    +**We have R-A-M mounts now in stock for most Garmin units....Call or email us for prices and availability.** +

    +

    +

    + + +

    + +

    Total Video became an authorized Garmin dealer in January 1999. We sold 300+ GPS units prior to becoming a Garmin direct dealer, picking them up from various distributors and individuals to sell. By becoming a Garmin direct dealer we now are able to sell for less! Total Video prides itself with *very quick shipping and a strong history of customer satisfaction. Comments from customers. + +

    + +Want to learn more about GPS? Click here for further GPS information. + +


    +

    +Rino 110/120 GPS-Integrated FRS/GMRS Radios....(MAP $169.99/$249.99) Call or email us for our current price....too low to advertise! Coming Soon! + +

    + +eMap....$170.00 IN STOCK! + +

    + +eMap with 8MB memory cartridge....$200.00 IN STOCK! + +

    + +eMap with 8MB memory cartridge and USA MetroGuide MapSource....$215.00 IN STOCK! + +

    + +eTrex....$115.00 IN STOCK! + +

    + +eTrex Summit....$210.00 IN STOCK! + +

    + +eTrex Camo....$125.00 IN STOCK! + +

    + +eTrex Venture....(MAP $169.00) Call or email us for our current price....too low to advertise! IN STOCK! + +

    + +eTrex Legend....(MAP $249.00) Call or email us for our current price....too low to advertise! IN STOCK! + +

    + +eTrex Vista....(MAP $349.00) Call or email us for our current price....too low to advertise! IN STOCK! + +

    + +GPSMAP 76S....(MAP $449.99) Call or email us for our current price....too low to advertise! IN STOCK! + +

    + +GPSMAP 76....(MAP $349.00) Call or email us for our current price....too low to advertise! IN STOCK! + +

    + +GPS 76....(MAP $219.00) Call or email us for our current price....too low to advertise! IN STOCK! + +

    + +GPSMAP 176....(MAP $499.00) Call or email us for our current price....too low to advertise! IN STOCK! + +

    + +GPSMAP 176C....(MAP $599.00) Call or email us for our current price....too low to advertise! IN STOCK! + +

    + +GPSMAP 2006....(MAP $1199.00) Call or email us for our current price....too low to advertise! IN STOCK! + +

    + +GPSMAP 2006C....(MAP $1999.00) Call or email us for our current price....too low to advertise! IN STOCK! + +

    + +GPSMAP 2010C....(MAP $2499.00) Call or email us for our current price....too low to advertise! IN STOCK! + +

    + + +GPS 12....$140.00 IN STOCK! + +

    + +GPS 12XL with carrying case....$190.00 IN STOCK! + +

    + +GPS 12 MAP with PC interface cable....$280.00 IN STOCK! + +

    + +GPS II Plus....$190.00 IN STOCK! + +

    + + +GPS III Plus with PC interface cable....$280.00 IN STOCK! + +

    + +GPS V Deluxe w/*new* City Select with all unlocks....(MAP $499.00) Call or email us for our current price....too low to advertise! IN STOCK! + +

    + +*U.S. Roads and Recreation MapSource....$80.00 IN STOCK! + +

    + +*WorldMap MapSource....$80.00 IN STOCK! + +

    + +*TOPO MapSource....$85.00 IN STOCK! + +

    + +*Fishing Hot Spots MapSource (includes one coverage area unlock)....$85.00 IN STOCK! + +

    + +*U.S. Waterways & Lights MapSource....$60.00 IN STOCK! + +

    + +StreetPilot with dash mount, cigarette power cable and PC interface cable....$385.00 IN STOCK! + +

    + +StreetPilot ColorMap with dash mount, cigarette power cable and PC interface cable....$540.00 IN STOCK! + +

    + +StreetPilot III Deluxe w/128MB, *new* City Navigator w/all unlocks and portable bean bag mount....(MAP $999.00) Call or email us for our current price....too low to advertise! IN STOCK! + +

    + +*MetroGuide USA MapSource....$90.00 IN STOCK! + +

    + +*MetroGuide USA MapSource w/Blank 8MB Memory Cartridge....$110.00 IN STOCK! + +

    + +*MetroGuide USA MapSource w/Blank 16MB Memory Cartridge....$115.00 IN STOCK! + +

    + +*MetroGuide Canada with Roads & Recreation....$80.00 IN STOCK! + +

    + +*City Navigator Europe....$195.00 IN STOCK! + +

    + +*City Navigator Europe "All" unlock....$215.00 IN STOCK! + +

    + +*City Select Europe....$115.00 IN STOCK! + +

    + +*City Select Europe "All" unlock....$115.00 IN STOCK! + +

    + +*MetroGuide Europe....$115.00 IN STOCK! + +

    + +*Roads & Recreation Europe....$85.00 IN STOCK! + +

    + +*City Navigator Australia....$265.00 IN STOCK! + +

    + +*BlueChart w/one coverage area....(MAP Americas-$139.00/Atlantic-$229.00/Pacific-$189.00) Call or email us for our current prices....too low to advertise! IN STOCK! + +

    + +*BlueChart Single Region Unlock....Americas-$85.00/Atlantic-$145.00/Pacific-$105.00 IN STOCK! + +

    + +Blank 8MB Memory Cartridge....$45.00 IN STOCK! + +

    + +Blank 16MB Memory Cartridge....$55.00 IN STOCK! + +

    + +Blank 32MB Memory Cartridge....$70.00 IN STOCK! + +

    + +Blank 64MB Memory Cartridge....$105.00 IN STOCK! + +

    + +Blank 128MB Memory Cartridge....$155.00 IN STOCK! + +

    + +USB Data Card Programmer....$70.00 IN STOCK! + +

    + +PC Download Kit (includes AC/DC adapter and 12V cigarette power/PC interface cable (for round, 4 pin connectors only)....$45.00 + +

    + +eMap/eTrex PC Download Kit (includes AC/DC adapter and cigarette power/PC interface cable....$50.00 + +

    + +GPSMAP 162....$355.00 (w/internal antenna)/$375.00 (w/external antenna) IN STOCK! + +

    + +GPSMAP 168 Sounder....$495.00 (w/internal antenna)/$515.00 (w/external antenna) IN STOCK! + +

    + +NavTalk Cellular phone/GPS (ver. 2.16)....$375.00 + +

    + +GBR 21 and GBR 23 Differential Receivers....$180.00 + +

    + +Videos available on many of the Garmin products as well as general GPS usage videos. + +

    + +Garmin GPS and accessories catalog....$2.00 (for s/h in US. Refundable/free with order) + +

    + +Online GARMIN manuals.

    + +
    + +Stock status subject to change. We try to update the stock status continuously but we sometimes don't get it changed immediately. Check with us for current stock status.

    + +

    Our Return Policy

    Software Return Policy + +

    + + +Accessories and Miscellaneous Items + +

    + + +AVIATION GPS

    + +
    + +

    We also sell Garmin GPS accessories such as mounts, cables, cases, etc. + +

    + + We sell everything in the Garmin outdoor recreation, marine and cartography line. Email us for prices on any items you don't see listed above.
    + +

    +

    +We charge a flat $10.00 shipping and handling charge (via UPS ground) per GPS order (not per item) in the 48/US.

    $5.00 shipping and handling for accessories in the 48/US.

    An additional $10.00 charge for COD orders (COD s/h must be credit card secured).

    Faster shipping available.

    *3 day select (usually arrives in 2 days!)--addtl. $3.00.
    *2nd day air--addtl. $5.00.
    *Next day air saver--addtl. $20.00.
    *Next day air-Saturday delivery--addtl. $35.00
    *More shipping may be required on larger packages for 3 day, 2nd day and next day air packages.

    Click here to get UPS Ground delivery times. Our zip code is 67601 (Hays, Kansas).

    +Add $10 to UPS charges for FedEx shipping. (minimum FedEx s/h is $18) + +

    + +$20 for Priority Mail s/h on GPS units and $15 for accessories in the US. + +

    + +Email us for requirements/costs for out of 48/US sales or click here. + +



    + +

    ORDERING INFORMATION



    + +* Most orders received by 2:00 p.m. central time for in stock items will ship the same day (business days only). + +

    + +All orders in Kansas must pay a 6.8% sales tax. + +

    + +We accept payment by Discover/MasterCard/Visa/Pre-pay (orders paid by personal/company check orders held for 10 business days for check clearing. Cashier checks/money orders ship same day.). COD orders welcome (cashiers check or money order).

    + + + +
    rescue,hunting,fishing,camping,adsfg,videogi,productshun,GPS III,Garmin,StreetPilot,gps3,gpsIII,gps2,gps2plus,gpsII+,Street Atlas,StreetAtlas,Osborne,Plainville,Stockton,Victoria,Ellis,Kansas,WaKeeney,Quinter,Russell,LaCrosse,Gorham,gpsIIIPLUS,gps3+,gps III+,gps 3+,DeLorme,GPS III Plus,GPS III Pilot,aviation gps,DeLorme Street Atlas,garmin aviation,metro guides,MetroGuides,truck navigation,semi navigation,over the road navigation,navigation aids,truck stops,metro gides,colormap streetpilot,color streetpilot,guidance by Garmin,color street pilot,color map,color map streetpilot,color map Street Pilot,MetroGuide,garmin international,garmond,garmund,magellan,gps12,gps 12,gps12xl,gps 12XL,gps12cx,RANS,gps 12CX,gps12CX,color streetpilot,streetpilot color map,garmin gps,Street Pilot,experimental aircraft,EEA,tvnav.com,gps 12 MAP,NavTalk,StreetPilot ColorMap,emap,ColorMap,Street Pilot ColorMap,Street Pilot Color Map,cell phone,cellular phone,cellar phone,cellar,cellular,EMAP,e map,Nav Talk,GPS,G P S,Global Positioning System,globalpositioningsystem,gps outfitters,gps video,cables,gps cables,navigation,mapsource,map source,MapSource,TOPO MapSource,MetroGuide MapSource + +

    + + + +

    + +send email + +

    + +

    Toll Free Order Line (877) 625-3546 (US only)

    FAX (413) 383-8800

    Information /International Order Line (785) 625-3546

    + +
    + +

    Home Page

    + +
    + +
    + + + + + + + + + + + +
    + Subscribe to the TVNAV.COM GarminGPS mail list +
    + + + +
    + Powered by groups.yahoo.com +
    +
    + +

    + + + + +
    + +Counter reset 2/1/99 +

    +This site last modified 7/25/02
    + +

    + +
    + + + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_590716.html b/Balthisar Tidy/tidylib5-src/test/input/in_590716.html new file mode 100755 index 00000000..b7f7f147 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_590716.html @@ -0,0 +1,802 @@ + +[ #590716 ] Preserve Entities + +

    + + + + + + + + + + id=ID =XX
    + + + id=ID¡=XX
    + + + id=ID¢=XX
    + + + id=ID£=XX
    + + + id=ID¤=XX
    + + + id=ID¥=XX
    + + + id=ID¦=XX
    + + + id=ID§=XX
    + + + id=ID¨=XX
    + + + id=ID©=XX
    + + + id=IDª=XX
    + + + id=ID«=XX
    + + + id=ID¬=XX
    + + + id=ID­=XX
    + + + id=ID®=XX
    + + + id=ID¯=XX
    + + + id=ID°=XX
    + + + id=ID±=XX
    + + + id=ID²=XX
    + + + id=ID³=XX
    + + + id=ID´=XX
    + + + id=IDµ=XX
    + + + id=ID¶=XX
    + + + id=ID·=XX
    + + + id=ID¸=XX
    + + + id=ID¹=XX
    + + + id=IDº=XX
    + + + id=ID»=XX
    + + + id=ID¼=XX
    + + + id=ID½=XX
    + + + id=ID¾=XX
    + + + id=ID¿=XX
    + + + id=IDÀ=XX
    + + + id=IDÁ=XX
    + + + id=IDÂ=XX
    + + + id=IDÃ=XX
    + + + id=IDÄ=XX
    + + + id=IDÅ=XX
    + + + id=IDÆ=XX
    + + + id=IDÇ=XX
    + + + id=IDÈ=XX
    + + + id=IDÉ=XX
    + + + id=IDÊ=XX
    + + + id=IDË=XX
    + + + id=IDÌ=XX
    + + + id=IDÍ=XX
    + + + id=IDÎ=XX
    + + + id=IDÏ=XX
    + + + id=IDÐ=XX
    + + + id=IDÑ=XX
    + + + id=IDÒ=XX
    + + + id=IDÓ=XX
    + + + id=IDÔ=XX
    + + + id=IDÕ=XX
    + + + id=IDÖ=XX
    + + + id=ID×=XX
    + + + id=IDØ=XX
    + + + id=IDÙ=XX
    + + + id=IDÚ=XX
    + + + id=IDÛ=XX
    + + + id=IDÜ=XX
    + + + id=IDÝ=XX
    + + + id=IDÞ=XX
    + + + id=IDß=XX
    + + + id=IDà=XX
    + + + id=IDá=XX
    + + + id=IDâ=XX
    + + + id=IDã=XX
    + + + id=IDä=XX
    + + + id=IDå=XX
    + + + id=IDæ=XX
    + + + id=IDç=XX
    + + + id=IDè=XX
    + + + id=IDé=XX
    + + + id=IDê=XX
    + + + id=IDë=XX
    + + + id=IDì=XX
    + + + id=IDí=XX
    + + + id=IDî=XX
    + + + id=IDï=XX
    + + + id=IDð=XX
    + + + id=IDñ=XX
    + + + id=IDò=XX
    + + + id=IDó=XX
    + + + id=IDô=XX
    + + + id=IDõ=XX
    + + + id=IDö=XX
    + + + id=ID÷=XX
    + + + id=IDø=XX
    + + + id=IDù=XX
    + + + id=IDú=XX
    + + + id=IDû=XX
    + + + id=IDü=XX
    + + + id=IDý=XX
    + + + id=IDþ=XX
    + + + id=IDÿ=XX
    + + + + + + + + id=IDƒ=XX
    + + + id=IDΑ=XX
    + + + id=IDΒ=XX
    + + + id=IDΓ=XX
    + + + id=IDΔ=XX
    + + + id=IDΕ=XX
    + + + id=IDΖ=XX
    + + + id=IDΗ=XX
    + + + id=IDΘ=XX
    + + + id=IDΙ=XX
    + + + id=IDΚ=XX
    + + + id=IDΛ=XX
    + + + id=IDΜ=XX
    + + + id=IDΝ=XX
    + + + id=IDΞ=XX
    + + + id=IDΟ=XX
    + + + id=IDΠ=XX
    + + + id=IDΡ=XX
    + + + id=IDΣ=XX
    + + + id=IDΤ=XX
    + + + id=IDΥ=XX
    + + + id=IDΦ=XX
    + + + id=IDΧ=XX
    + + + id=IDΨ=XX
    + + + id=IDΩ=XX
    + + + id=IDα=XX
    + + + id=IDβ=XX
    + + + id=IDγ=XX
    + + + id=IDδ=XX
    + + + id=IDε=XX
    + + + id=IDζ=XX
    + + + id=IDη=XX
    + + + id=IDθ=XX
    + + + id=IDι=XX
    + + + id=IDκ=XX
    + + + id=IDλ=XX
    + + + id=IDμ=XX
    + + + id=IDν=XX
    + + + id=IDξ=XX
    + + + id=IDο=XX
    + + + id=IDπ=XX
    + + + id=IDρ=XX
    + + + id=IDς=XX
    + + + id=IDσ=XX
    + + + id=IDτ=XX
    + + + id=IDυ=XX
    + + + id=IDφ=XX
    + + + id=IDχ=XX
    + + + id=IDψ=XX
    + + + id=IDω=XX
    + + + id=IDϑ=XX
    + + + id=IDϒ=XX
    + + + id=IDϖ=XX
    + + + id=ID•=XX
    + + + id=ID…=XX
    + + + id=ID′=XX
    + + + id=ID″=XX
    + + + id=ID‾=XX
    + + + id=ID⁄=XX
    + + + id=ID℘=XX
    + + + id=IDℑ=XX
    + + + id=IDℜ=XX
    + + + id=ID™=XX
    + + + id=IDℵ=XX
    + + + id=ID←=XX
    + + + id=ID↑=XX
    + + + id=ID→=XX
    + + + id=ID↓=XX
    + + + id=ID↔=XX
    + + + id=ID↵=XX
    + + + id=ID⇐=XX
    + + + id=ID⇑=XX
    + + + id=ID⇒=XX
    + + + id=ID⇓=XX
    + + + id=ID⇔=XX
    + + + id=ID∀=XX
    + + + id=ID∂=XX
    + + + id=ID∃=XX
    + + + id=ID∅=XX
    + + + id=ID∇=XX
    + + + id=ID∈=XX
    + + + + + + id=ID∉=XX
    + + + id=ID∋=XX
    + + + id=ID∏=XX
    + + + id=ID∑=XX
    + + + id=ID−=XX
    + + + id=ID∗=XX
    + + + id=ID√=XX
    + + + id=ID∝=XX
    + + + id=ID∞=XX
    + + + id=ID∠=XX
    + + + id=ID∧=XX
    + + + id=ID∨=XX
    + + + id=ID∩=XX
    + + + id=ID∪=XX
    + + + id=ID∫=XX
    + + + id=ID∴=XX
    + + + id=ID∼=XX
    + + + id=ID≅=XX
    + + + id=ID≈=XX
    + + + id=ID≠=XX
    + + + id=ID≡=XX
    + + + id=ID≤=XX
    + + + id=ID≥=XX
    + + + id=ID⊂=XX
    + + + id=ID⊃=XX
    + + + id=ID⊄=XX
    + + + id=ID⊆=XX
    + + + id=ID⊇=XX
    + + + id=ID⊕=XX
    + + + id=ID⊗=XX
    + + + id=ID⊥=XX
    + + + id=ID⋅=XX
    + + + id=ID⌈=XX
    + + + id=ID⌉=XX
    + + + id=ID⌊=XX
    + + + id=ID⌋=XX
    + + + id=ID⟨=XX
    + + + id=ID⟩=XX
    + + + id=ID◊=XX
    + + + id=ID♠=XX
    + + + id=ID♣=XX
    + + + id=ID♥=XX
    + + + id=ID♦=XX
    + + + + + + + + id=ID"=XX
    + + + id=ID&=XX
    + + + id=ID<=XX
    + + + id=ID>=XX
    + + + + + + + + id=IDŒ=XX
    + + + id=IDœ=XX
    + + + id=IDŠ=XX
    + + + id=IDš=XX
    + + + id=IDŸ=XX
    + + + id=IDˆ=XX
    + + + id=ID˜=XX
    + + + id=ID =XX
    + + + id=ID =XX
    + + + id=ID =XX
    + + + id=ID‌=XX
    + + + id=ID‍=XX
    + + + id=ID‎=XX
    + + + id=ID‏=XX
    + + + id=ID–=XX
    + + + id=ID—=XX
    + + + id=ID‘=XX
    + + + id=ID’=XX
    + + + id=ID‚=XX
    + + + id=ID“=XX
    + + + id=ID”=XX
    + + + id=ID„=XX
    + + + id=ID†=XX
    + + + id=ID‡=XX
    + + + id=ID‰=XX
    + + + id=ID‹=XX
    + + + id=ID›=XX
    + + + + + + id=ID€=XX
    + + + + + + + + id=ID'=XX
    + + + id=ID&foo;=XX
    +

    + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_593705.html b/Balthisar Tidy/tidylib5-src/test/input/in_593705.html new file mode 100755 index 00000000..cf7c6758 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_593705.html @@ -0,0 +1,15 @@ + + + + [ 593705 ] Use of < comparison symbol confuses Tidy + + + +

    Does the script confuse Tidy?

    + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_598860.html b/Balthisar Tidy/tidylib5-src/test/input/in_598860.html new file mode 100755 index 00000000..c5f14b22 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_598860.html @@ -0,0 +1,9 @@ + + +#598860 script parsing fails with quote chars + + + + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_603128.html b/Balthisar Tidy/tidylib5-src/test/input/in_603128.html new file mode 100755 index 00000000..dd65c73e --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_603128.html @@ -0,0 +1,10 @@ + + + +[ 603128 ] tidy adds newlines after </html> + + +There is exactly one line-ending after the </html> - +older versions of Tidy will add an additional line-ending. + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_609058.html b/Balthisar Tidy/tidylib5-src/test/input/in_609058.html new file mode 100755 index 00000000..7331525e --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_609058.html @@ -0,0 +1,53 @@ + + + +609058 - elements replaced by CSS + + + + +
    +aa +aa +aa +
    + +
    +aa +aa +aa +
    + +
    +

    aa

    +

    aa

    +

    aa

    +
    + +
    +

    aa bb

    +

    aa bb

    +

    aa bb

    +
    + +
    +

    aa

    +

    aa

    +

    aa

    +
    + +
    +

    aa bb

    +

    aa bb

    +

    aa bb

    +
    + +
    +

    cc aa bb

    +

    cc aa bb

    +

    cc aa bb

    +
    + + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_616744.xml b/Balthisar Tidy/tidylib5-src/test/input/in_616744.xml new file mode 100755 index 00000000..6bf25eb7 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_616744.xml @@ -0,0 +1,12 @@ + + This is some stuff in a para. + There's a "command" +in it. + +
    + This line is indented 4 spaces. + + This (3rd) line is indented 8 spaces. +
    +
    + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_620531.html b/Balthisar Tidy/tidylib5-src/test/input/in_620531.html new file mode 100755 index 00000000..dc448201 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_620531.html @@ -0,0 +1,3 @@ +[ 620531 ] br in pre must not cause line break +

    foo

    +
    bar
    baz
    diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_629885.html b/Balthisar Tidy/tidylib5-src/test/input/in_629885.html new file mode 100755 index 00000000..d23b7191 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_629885.html @@ -0,0 +1,11 @@ + + + [629885] - Unbalanced quote in CSS Scrambles Doc + + + +

    Test

    + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_634889.html b/Balthisar Tidy/tidylib5-src/test/input/in_634889.html new file mode 100755 index 00000000..1747b79d --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_634889.html @@ -0,0 +1,9 @@ + + + [ 634889 ] Problem with <o:p> ms word tag + + +

    Probably OK, now that ParseTagNames() is fixed.

    + + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_640473.html b/Balthisar Tidy/tidylib5-src/test/input/in_640473.html new file mode 100755 index 00000000..20069099 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_640473.html @@ -0,0 +1,9 @@ +[ 640473 ] new-empty-tags doesn't work, breaks doc + +Foo bar foo foo foo +

    This is a test

    + + +This is a pre-formatted Baz! + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_640474.xml b/Balthisar Tidy/tidylib5-src/test/input/in_640474.xml new file mode 100755 index 00000000..e5feff0b --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_640474.xml @@ -0,0 +1,4 @@ + + Björn Höhrmann + Marc-André Lemburg + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_646946.xml b/Balthisar Tidy/tidylib5-src/test/input/in_646946.xml new file mode 100755 index 00000000..05d6fb5d --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_646946.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_647255.html b/Balthisar Tidy/tidylib5-src/test/input/in_647255.html new file mode 100755 index 0000000000000000000000000000000000000000..983255f914d63d516fb7cd35f200f17fcd294c17 GIT binary patch literal 524 zcmaixO-chn5QQIf%|`GJeE>xi6NDtAF%T7k0e=oK(E)?eh#AqGM{uPJ7p~liCooHQ zIf(jol2Ks<8M^A#tLiteWk$j@Q|+E=18^^}4SnP@Uu2Dg~Wc&43( z`npz!I8;?jGrf7uQC*;%!32eK;tiFDO?1i0-?dGr1Cyc?6vC~a`)|>EG>%5mH0RN4 z6nRan@dSDOo(s6B6}AjscE7#!C%$qgd%EHq4A?J$_jvI-!r72ryP%@tx^38+RV=o$ zm8=FXnb#_H1*S&!imh%9+o4mpO + + [ 647900 ] tables are incorrectly merged + + + + + +
    Table data
    + +

    A paragraph

    + + + + +
    Foo +
    + +
    Foo +
    +
    + +

    Another paragraph

    + +
    + + + + + +
    Input:
    + +

    Yet another paragraph

    + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_649812.html b/Balthisar Tidy/tidylib5-src/test/input/in_649812.html new file mode 100755 index 0000000000000000000000000000000000000000..9bb1795541dd256ac7e521c1219dd6c458f9dc82 GIT binary patch literal 1088 zcmbW1y>1gh6orqpvt{04NKI^A?FCybiDeswJP#5T6cki+ zh$kQ=T^6V(>S3}2ossnAwtE-V-E5|y}i8i&X z9r9lDT2PtsSWEb3HM!L!^F-TNk2vX7QAu~$k3boyr#8Et-O?Tib7YD!A9zOU>t4v8 z%SMU0#Cpcvm&A{C$oh7ose)Iq&PEqBoZ>5~gV%vCfpJc?$$bx&)ppAHI(e)0Um7a9 z8^$zafo!;$Qkaa#>Z*a(W9GyYJtI=pGPhUh%Oc)$W|QhN_&wG2xO+k0dTQafL)`_#Xd=uj0$N*vG5aW$aaWSHbd{K4%lKg-;L+i(rHLuSKmx + + + + [ 655338 ] Tidy leaves XML decl in wrong place + +

    foo + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_656889.html b/Balthisar Tidy/tidylib5-src/test/input/in_656889.html new file mode 100755 index 00000000..b2b2bc1b --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_656889.html @@ -0,0 +1,12 @@ + + + [ 656889 ] textarea text and line wrapping + + +

    + +
    + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_658230.html b/Balthisar Tidy/tidylib5-src/test/input/in_658230.html new file mode 100755 index 00000000..b546d8b8 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_658230.html @@ -0,0 +1,1144 @@ +

    BIG-5 ¦r¶° + +

    Here are some entities: & " — ′ + +

    A0 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³  @  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O +¢´  P  Q  R  S  T  U  V  W  X  Y  Z  [  \  ]  ^  _ +¢µ  `  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o +¢¶  p  q  r  s  t  u  v  w  x  y  z  {  |  }  ~ +¢Ï     ¡  ¢  £  ¤  ¥  ¦  §  ¨  ©  ª  «  ¬  ­  ®  ¯ +¢Ð  °  ±  ²  ³  ´  µ  ¶  ·  ¸  ¹  º  »  ¼  ½  ¾  ¿ +¢Ñ  À  Á  Â  Ã  Ä  Å  Æ  Ç  È  É  Ê  Ë  Ì  Í  Î  Ï +¢Ò  Ð  Ñ  Ò  Ó  Ô  Õ  Ö  ×  Ø  Ù  Ú  Û  Ü  Ý  Þ  ß +¢Ó  à  á  â  ã  ä  å  æ  ç  è  é  ê  ë  ì  í  î  ï +¢Ô  ð  ñ  ò  ó  ô  õ  ö  ÷  ø  ù  ú  û  ü  ý  þ + +

    A1 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ¡@ ¡A ¡B ¡C ¡D ¡E ¡F ¡G ¡H ¡I ¡J ¡K ¡L ¡M ¡N ¡O +¢´ ¡P ¡Q ¡R ¡S ¡T ¡U ¡V ¡W ¡X ¡Y ¡Z ¡[ ¡\ ¡] ¡^ ¡_ +¢µ ¡` ¡a ¡b ¡c ¡d ¡e ¡f ¡g ¡h ¡i ¡j ¡k ¡l ¡m ¡n ¡o +¢¶ ¡p ¡q ¡r ¡s ¡t ¡u ¡v ¡w ¡x ¡y ¡z ¡{ ¡| ¡} ¡~ +¢Ï ¡  ¡¡ ¡¢ ¡£ ¡¤ ¡¥ ¡¦ ¡§ ¡¨ ¡© ¡ª ¡« ¡¬ ¡­ ¡® ¡¯ +¢Ð ¡° ¡± ¡² ¡³ ¡´ ¡µ ¡¶ ¡· ¡¸ ¡¹ ¡º ¡» ¡¼ ¡½ ¡¾ ¡¿ +¢Ñ ¡À ¡Á ¡Â ¡Ã ¡Ä ¡Å ¡Æ ¡Ç ¡È ¡É ¡Ê ¡Ë ¡Ì ¡Í ¡Î ¡Ï +¢Ò ¡Ð ¡Ñ ¡Ò ¡Ó ¡Ô ¡Õ ¡Ö ¡× ¡Ø ¡Ù ¡Ú ¡Û ¡Ü ¡Ý ¡Þ ¡ß +¢Ó ¡à ¡á ¡â ¡ã ¡ä ¡å ¡æ ¡ç ¡è ¡é ¡ê ¡ë ¡ì ¡í ¡î ¡ï +¢Ô ¡ð ¡ñ ¡ò ¡ó ¡ô ¡õ ¡ö ¡÷ ¡ø ¡ù ¡ú ¡û ¡ü ¡ý ¡þ + +

    A2 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ¢@ ¢A ¢B ¢C ¢D ¢E ¢F ¢G ¢H ¢I ¢J ¢K ¢L ¢M ¢N ¢O +¢´ ¢P ¢Q ¢R ¢S ¢T ¢U ¢V ¢W ¢X ¢Y ¢Z ¢[ ¢\ ¢] ¢^ ¢_ +¢µ ¢` ¢a ¢b ¢c ¢d ¢e ¢f ¢g ¢h ¢i ¢j ¢k ¢l ¢m ¢n ¢o +¢¶ ¢p ¢q ¢r ¢s ¢t ¢u ¢v ¢w ¢x ¢y ¢z ¢{ ¢| ¢} ¢~ +¢Ï ¢  ¢¡ ¢¢ ¢£ ¢¤ ¢¥ ¢¦ ¢§ ¢¨ ¢© ¢ª ¢« ¢¬ ¢­ ¢® ¢¯ +¢Ð ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢¹ ¢º ¢» ¢¼ ¢½ ¢¾ ¢¿ +¢Ñ ¢À ¢Á ¢Â ¢Ã ¢Ä ¢Å ¢Æ ¢Ç ¢È ¢É ¢Ê ¢Ë ¢Ì ¢Í ¢Î ¢Ï +¢Ò ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô ¢Õ ¢Ö ¢× ¢Ø ¢Ù ¢Ú ¢Û ¢Ü ¢Ý ¢Þ ¢ß +¢Ó ¢à ¢á ¢â ¢ã ¢ä ¢å ¢æ ¢ç ¢è ¢é ¢ê ¢ë ¢ì ¢í ¢î ¢ï +¢Ô ¢ð ¢ñ ¢ò ¢ó ¢ô ¢õ ¢ö ¢÷ ¢ø ¢ù ¢ú ¢û ¢ü ¢ý ¢þ + +

    A3 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ £@ £A £B £C £D £E £F £G £H £I £J £K £L £M £N £O +¢´ £P £Q £R £S £T £U £V £W £X £Y £Z £[ £\ £] £^ £_ +¢µ £` £a £b £c £d £e £f £g £h £i £j £k £l £m £n £o +¢¶ £p £q £r £s £t £u £v £w £x £y £z £{ £| £} £~ +¢Ï £  £¡ £¢ ££ £¤ £¥ £¦ £§ £¨ £© £ª £« £¬ £­ £® £¯ +¢Ð ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ £º £» £¼ £½ £¾ £¿ +¢Ñ £À ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô £Ç £È £É £Ê £Ë £Ì £Í £Î £Ï +¢Ò £Ð £Ñ £Ò £Ó £Ô £Õ £Ö £× £Ø £Ù £Ú £Û £Ü £Ý £Þ £ß +¢Ó £à ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô £ç £è £é £ê £ë £ì £í £î £ï +¢Ô £ð £ñ £ò £ó £ô £õ £ö £÷ £ø £ù £ú £û £ü £ý £þ + +

    A4 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ¤@ ¤A ¤B ¤C ¤D ¤E ¤F ¤G ¤H ¤I ¤J ¤K ¤L ¤M ¤N ¤O +¢´ ¤P ¤Q ¤R ¤S ¤T ¤U ¤V ¤W ¤X ¤Y ¤Z ¤[ ¤\ ¤] ¤^ ¤_ +¢µ ¤` ¤a ¤b ¤c ¤d ¤e ¤f ¤g ¤h ¤i ¤j ¤k ¤l ¤m ¤n ¤o +¢¶ ¤p ¤q ¤r ¤s ¤t ¤u ¤v ¤w ¤x ¤y ¤z ¤{ ¤| ¤} ¤~ +¢Ï ¤  ¤¡ ¤¢ ¤£ ¤¤ ¤¥ ¤¦ ¤§ ¤¨ ¤© ¤ª ¤« ¤¬ ¤­ ¤® ¤¯ +¢Ð ¤° ¤± ¤² ¤³ ¤´ ¤µ ¤¶ ¤· ¤¸ ¤¹ ¤º ¤» ¤¼ ¤½ ¤¾ ¤¿ +¢Ñ ¤À ¤Á ¤Â ¤Ã ¤Ä ¤Å ¤Æ ¤Ç ¤È ¤É ¤Ê ¤Ë ¤Ì ¤Í ¤Î ¤Ï +¢Ò ¤Ð ¤Ñ ¤Ò ¤Ó ¤Ô ¤Õ ¤Ö ¤× ¤Ø ¤Ù ¤Ú ¤Û ¤Ü ¤Ý ¤Þ ¤ß +¢Ó ¤à ¤á ¤â ¤ã ¤ä ¤å ¤æ ¤ç ¤è ¤é ¤ê ¤ë ¤ì ¤í ¤î ¤ï +¢Ô ¤ð ¤ñ ¤ò ¤ó ¤ô ¤õ ¤ö ¤÷ ¤ø ¤ù ¤ú ¤û ¤ü ¤ý ¤þ + +

    A5 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ¥@ ¥A ¥B ¥C ¥D ¥E ¥F ¥G ¥H ¥I ¥J ¥K ¥L ¥M ¥N ¥O +¢´ ¥P ¥Q ¥R ¥S ¥T ¥U ¥V ¥W ¥X ¥Y ¥Z ¥[ ¥\ ¥] ¥^ ¥_ +¢µ ¥` ¥a ¥b ¥c ¥d ¥e ¥f ¥g ¥h ¥i ¥j ¥k ¥l ¥m ¥n ¥o +¢¶ ¥p ¥q ¥r ¥s ¥t ¥u ¥v ¥w ¥x ¥y ¥z ¥{ ¥| ¥} ¥~ +¢Ï ¥  ¥¡ ¥¢ ¥£ ¥¤ ¥¥ ¥¦ ¥§ ¥¨ ¥© ¥ª ¥« ¥¬ ¥­ ¥® ¥¯ +¢Ð ¥° ¥± ¥² ¥³ ¥´ ¥µ ¥¶ ¥· ¥¸ ¥¹ ¥º ¥» ¥¼ ¥½ ¥¾ ¥¿ +¢Ñ ¥À ¥Á ¥Â ¥Ã ¥Ä ¥Å ¥Æ ¥Ç ¥È ¥É ¥Ê ¥Ë ¥Ì ¥Í ¥Î ¥Ï +¢Ò ¥Ð ¥Ñ ¥Ò ¥Ó ¥Ô ¥Õ ¥Ö ¥× ¥Ø ¥Ù ¥Ú ¥Û ¥Ü ¥Ý ¥Þ ¥ß +¢Ó ¥à ¥á ¥â ¥ã ¥ä ¥å ¥æ ¥ç ¥è ¥é ¥ê ¥ë ¥ì ¥í ¥î ¥ï +¢Ô ¥ð ¥ñ ¥ò ¥ó ¥ô ¥õ ¥ö ¥÷ ¥ø ¥ù ¥ú ¥û ¥ü ¥ý ¥þ + +

    A6 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ¦@ ¦A ¦B ¦C ¦D ¦E ¦F ¦G ¦H ¦I ¦J ¦K ¦L ¦M ¦N ¦O +¢´ ¦P ¦Q ¦R ¦S ¦T ¦U ¦V ¦W ¦X ¦Y ¦Z ¦[ ¦\ ¦] ¦^ ¦_ +¢µ ¦` ¦a ¦b ¦c ¦d ¦e ¦f ¦g ¦h ¦i ¦j ¦k ¦l ¦m ¦n ¦o +¢¶ ¦p ¦q ¦r ¦s ¦t ¦u ¦v ¦w ¦x ¦y ¦z ¦{ ¦| ¦} ¦~ +¢Ï ¦  ¦¡ ¦¢ ¦£ ¦¤ ¦¥ ¦¦ ¦§ ¦¨ ¦© ¦ª ¦« ¦¬ ¦­ ¦® ¦¯ +¢Ð ¦° ¦± ¦² ¦³ ¦´ ¦µ ¦¶ ¦· ¦¸ ¦¹ ¦º ¦» ¦¼ ¦½ ¦¾ ¦¿ +¢Ñ ¦À ¦Á ¦Â ¦Ã ¦Ä ¦Å ¦Æ ¦Ç ¦È ¦É ¦Ê ¦Ë ¦Ì ¦Í ¦Î ¦Ï +¢Ò ¦Ð ¦Ñ ¦Ò ¦Ó ¦Ô ¦Õ ¦Ö ¦× ¦Ø ¦Ù ¦Ú ¦Û ¦Ü ¦Ý ¦Þ ¦ß +¢Ó ¦à ¦á ¦â ¦ã ¦ä ¦å ¦æ ¦ç ¦è ¦é ¦ê ¦ë ¦ì ¦í ¦î ¦ï +¢Ô ¦ð ¦ñ ¦ò ¦ó ¦ô ¦õ ¦ö ¦÷ ¦ø ¦ù ¦ú ¦û ¦ü ¦ý ¦þ + +

    A7 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ §@ §A §B §C §D §E §F §G §H §I §J §K §L §M §N §O +¢´ §P §Q §R §S §T §U §V §W §X §Y §Z §[ §\ §] §^ §_ +¢µ §` §a §b §c §d §e §f §g §h §i §j §k §l §m §n §o +¢¶ §p §q §r §s §t §u §v §w §x §y §z §{ §| §} §~ +¢Ï §  §¡ §¢ §£ §¤ §¥ §¦ §§ §¨ §© §ª §« §¬ §­ §® §¯ +¢Ð §° §± §² §³ §´ §µ §¶ §· §¸ §¹ §º §» §¼ §½ §¾ §¿ +¢Ñ §À §Á §Â §Ã §Ä §Å §Æ §Ç §È §É §Ê §Ë §Ì §Í §Î §Ï +¢Ò §Ð §Ñ §Ò §Ó §Ô §Õ §Ö §× §Ø §Ù §Ú §Û §Ü §Ý §Þ §ß +¢Ó §à §á §â §ã §ä §å §æ §ç §è §é §ê §ë §ì §í §î §ï +¢Ô §ð §ñ §ò §ó §ô §õ §ö §÷ §ø §ù §ú §û §ü §ý §þ + +

    A8 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ¨@ ¨A ¨B ¨C ¨D ¨E ¨F ¨G ¨H ¨I ¨J ¨K ¨L ¨M ¨N ¨O +¢´ ¨P ¨Q ¨R ¨S ¨T ¨U ¨V ¨W ¨X ¨Y ¨Z ¨[ ¨\ ¨] ¨^ ¨_ +¢µ ¨` ¨a ¨b ¨c ¨d ¨e ¨f ¨g ¨h ¨i ¨j ¨k ¨l ¨m ¨n ¨o +¢¶ ¨p ¨q ¨r ¨s ¨t ¨u ¨v ¨w ¨x ¨y ¨z ¨{ ¨| ¨} ¨~ +¢Ï ¨  ¨¡ ¨¢ ¨£ ¨¤ ¨¥ ¨¦ ¨§ ¨¨ ¨© ¨ª ¨« ¨¬ ¨­ ¨® ¨¯ +¢Ð ¨° ¨± ¨² ¨³ ¨´ ¨µ ¨¶ ¨· ¨¸ ¨¹ ¨º ¨» ¨¼ ¨½ ¨¾ ¨¿ +¢Ñ ¨À ¨Á ¨Â ¨Ã ¨Ä ¨Å ¨Æ ¨Ç ¨È ¨É ¨Ê ¨Ë ¨Ì ¨Í ¨Î ¨Ï +¢Ò ¨Ð ¨Ñ ¨Ò ¨Ó ¨Ô ¨Õ ¨Ö ¨× ¨Ø ¨Ù ¨Ú ¨Û ¨Ü ¨Ý ¨Þ ¨ß +¢Ó ¨à ¨á ¨â ¨ã ¨ä ¨å ¨æ ¨ç ¨è ¨é ¨ê ¨ë ¨ì ¨í ¨î ¨ï +¢Ô ¨ð ¨ñ ¨ò ¨ó ¨ô ¨õ ¨ö ¨÷ ¨ø ¨ù ¨ú ¨û ¨ü ¨ý ¨þ + +

    A9 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ©@ ©A ©B ©C ©D ©E ©F ©G ©H ©I ©J ©K ©L ©M ©N ©O +¢´ ©P ©Q ©R ©S ©T ©U ©V ©W ©X ©Y ©Z ©[ ©\ ©] ©^ ©_ +¢µ ©` ©a ©b ©c ©d ©e ©f ©g ©h ©i ©j ©k ©l ©m ©n ©o +¢¶ ©p ©q ©r ©s ©t ©u ©v ©w ©x ©y ©z ©{ ©| ©} ©~ +¢Ï ©  ©¡ ©¢ ©£ ©¤ ©¥ ©¦ ©§ ©¨ ©© ©ª ©« ©¬ ©­ ©® ©¯ +¢Ð ©° ©± ©² ©³ ©´ ©µ ©¶ ©· ©¸ ©¹ ©º ©» ©¼ ©½ ©¾ ©¿ +¢Ñ ©À ©Á ©Â ©Ã ©Ä ©Å ©Æ ©Ç ©È ©É ©Ê ©Ë ©Ì ©Í ©Î ©Ï +¢Ò ©Ð ©Ñ ©Ò ©Ó ©Ô ©Õ ©Ö ©× ©Ø ©Ù ©Ú ©Û ©Ü ©Ý ©Þ ©ß +¢Ó ©à ©á ©â ©ã ©ä ©å ©æ ©ç ©è ©é ©ê ©ë ©ì ©í ©î ©ï +¢Ô ©ð ©ñ ©ò ©ó ©ô ©õ ©ö ©÷ ©ø ©ù ©ú ©û ©ü ©ý ©þ + +

    AA ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ª@ ªA ªB ªC ªD ªE ªF ªG ªH ªI ªJ ªK ªL ªM ªN ªO +¢´ ªP ªQ ªR ªS ªT ªU ªV ªW ªX ªY ªZ ª[ ª\ ª] ª^ ª_ +¢µ ª` ªa ªb ªc ªd ªe ªf ªg ªh ªi ªj ªk ªl ªm ªn ªo +¢¶ ªp ªq ªr ªs ªt ªu ªv ªw ªx ªy ªz ª{ ª| ª} ª~ +¢Ï ª  ª¡ ª¢ ª£ ª¤ ª¥ ª¦ ª§ ª¨ ª© ªª ª« ª¬ ª­ ª® ª¯ +¢Ð ª° ª± ª² ª³ ª´ ªµ ª¶ ª· ª¸ ª¹ ªº ª» ª¼ ª½ ª¾ ª¿ +¢Ñ ªÀ ªÁ ªÂ ªÃ ªÄ ªÅ ªÆ ªÇ ªÈ ªÉ ªÊ ªË ªÌ ªÍ ªÎ ªÏ +¢Ò ªÐ ªÑ ªÒ ªÓ ªÔ ªÕ ªÖ ª× ªØ ªÙ ªÚ ªÛ ªÜ ªÝ ªÞ ªß +¢Ó ªà ªá ªâ ªã ªä ªå ªæ ªç ªè ªé ªê ªë ªì ªí ªî ªï +¢Ô ªð ªñ ªò ªó ªô ªõ ªö ª÷ ªø ªù ªú ªû ªü ªý ªþ + +

    AB ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ «@ «A «B «C «D «E «F «G «H «I «J «K «L «M «N «O +¢´ «P «Q «R «S «T «U «V «W «X «Y «Z «[ «\ «] «^ «_ +¢µ «` «a «b «c «d «e «f «g «h «i «j «k «l «m «n «o +¢¶ «p «q «r «s «t «u «v «w «x «y «z «{ «| «} «~ +¢Ï «  «¡ «¢ «£ «¤ «¥ «¦ «§ «¨ «© «ª «« «¬ «­ «® «¯ +¢Ð «° «± «² «³ «´ «µ «¶ «· «¸ «¹ «º «» «¼ «½ «¾ «¿ +¢Ñ «À «Á «Â «Ã «Ä «Å «Æ «Ç «È «É «Ê «Ë «Ì «Í «Î «Ï +¢Ò «Ð «Ñ «Ò «Ó «Ô «Õ «Ö «× «Ø «Ù «Ú «Û «Ü «Ý «Þ «ß +¢Ó «à «á «â «ã «ä «å «æ «ç «è «é «ê «ë «ì «í «î «ï +¢Ô «ð «ñ «ò «ó «ô «õ «ö «÷ «ø «ù «ú «û «ü «ý «þ + +

    AC ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ¬@ ¬A ¬B ¬C ¬D ¬E ¬F ¬G ¬H ¬I ¬J ¬K ¬L ¬M ¬N ¬O +¢´ ¬P ¬Q ¬R ¬S ¬T ¬U ¬V ¬W ¬X ¬Y ¬Z ¬[ ¬\ ¬] ¬^ ¬_ +¢µ ¬` ¬a ¬b ¬c ¬d ¬e ¬f ¬g ¬h ¬i ¬j ¬k ¬l ¬m ¬n ¬o +¢¶ ¬p ¬q ¬r ¬s ¬t ¬u ¬v ¬w ¬x ¬y ¬z ¬{ ¬| ¬} ¬~ +¢Ï ¬  ¬¡ ¬¢ ¬£ ¬¤ ¬¥ ¬¦ ¬§ ¬¨ ¬© ¬ª ¬« ¬¬ ¬­ ¬® ¬¯ +¢Ð ¬° ¬± ¬² ¬³ ¬´ ¬µ ¬¶ ¬· ¬¸ ¬¹ ¬º ¬» ¬¼ ¬½ ¬¾ ¬¿ +¢Ñ ¬À ¬Á ¬Â ¬Ã ¬Ä ¬Å ¬Æ ¬Ç ¬È ¬É ¬Ê ¬Ë ¬Ì ¬Í ¬Î ¬Ï +¢Ò ¬Ð ¬Ñ ¬Ò ¬Ó ¬Ô ¬Õ ¬Ö ¬× ¬Ø ¬Ù ¬Ú ¬Û ¬Ü ¬Ý ¬Þ ¬ß +¢Ó ¬à ¬á ¬â ¬ã ¬ä ¬å ¬æ ¬ç ¬è ¬é ¬ê ¬ë ¬ì ¬í ¬î ¬ï +¢Ô ¬ð ¬ñ ¬ò ¬ó ¬ô ¬õ ¬ö ¬÷ ¬ø ¬ù ¬ú ¬û ¬ü ¬ý ¬þ + +

    AD ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ­@ ­A ­B ­C ­D ­E ­F ­G ­H ­I ­J ­K ­L ­M ­N ­O +¢´ ­P ­Q ­R ­S ­T ­U ­V ­W ­X ­Y ­Z ­[ ­\ ­] ­^ ­_ +¢µ ­` ­a ­b ­c ­d ­e ­f ­g ­h ­i ­j ­k ­l ­m ­n ­o +¢¶ ­p ­q ­r ­s ­t ­u ­v ­w ­x ­y ­z ­{ ­| ­} ­~ +¢Ï ­  ­¡ ­¢ ­£ ­¤ ­¥ ­¦ ­§ ­¨ ­© ­ª ­« ­¬ ­­ ­® ­¯ +¢Ð ­° ­± ­² ­³ ­´ ­µ ­¶ ­· ­¸ ­¹ ­º ­» ­¼ ­½ ­¾ ­¿ +¢Ñ ­À ­Á ­Â ­Ã ­Ä ­Å ­Æ ­Ç ­È ­É ­Ê ­Ë ­Ì ­Í ­Î ­Ï +¢Ò ­Ð ­Ñ ­Ò ­Ó ­Ô ­Õ ­Ö ­× ­Ø ­Ù ­Ú ­Û ­Ü ­Ý ­Þ ­ß +¢Ó ­à ­á ­â ­ã ­ä ­å ­æ ­ç ­è ­é ­ê ­ë ­ì ­í ­î ­ï +¢Ô ­ð ­ñ ­ò ­ó ­ô ­õ ­ö ­÷ ­ø ­ù ­ú ­û ­ü ­ý ­þ + +

    AE ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ®@ ®A ®B ®C ®D ®E ®F ®G ®H ®I ®J ®K ®L ®M ®N ®O +¢´ ®P ®Q ®R ®S ®T ®U ®V ®W ®X ®Y ®Z ®[ ®\ ®] ®^ ®_ +¢µ ®` ®a ®b ®c ®d ®e ®f ®g ®h ®i ®j ®k ®l ®m ®n ®o +¢¶ ®p ®q ®r ®s ®t ®u ®v ®w ®x ®y ®z ®{ ®| ®} ®~ +¢Ï ®  ®¡ ®¢ ®£ ®¤ ®¥ ®¦ ®§ ®¨ ®© ®ª ®« ®¬ ®­ ®® ®¯ +¢Ð ®° ®± ®² ®³ ®´ ®µ ®¶ ®· ®¸ ®¹ ®º ®» ®¼ ®½ ®¾ ®¿ +¢Ñ ®À ®Á ®Â ®Ã ®Ä ®Å ®Æ ®Ç ®È ®É ®Ê ®Ë ®Ì ®Í ®Î ®Ï +¢Ò ®Ð ®Ñ ®Ò ®Ó ®Ô ®Õ ®Ö ®× ®Ø ®Ù ®Ú ®Û ®Ü ®Ý ®Þ ®ß +¢Ó ®à ®á ®â ®ã ®ä ®å ®æ ®ç ®è ®é ®ê ®ë ®ì ®í ®î ®ï +¢Ô ®ð ®ñ ®ò ®ó ®ô ®õ ®ö ®÷ ®ø ®ù ®ú ®û ®ü ®ý ®þ + +

    AF ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ¯@ ¯A ¯B ¯C ¯D ¯E ¯F ¯G ¯H ¯I ¯J ¯K ¯L ¯M ¯N ¯O +¢´ ¯P ¯Q ¯R ¯S ¯T ¯U ¯V ¯W ¯X ¯Y ¯Z ¯[ ¯\ ¯] ¯^ ¯_ +¢µ ¯` ¯a ¯b ¯c ¯d ¯e ¯f ¯g ¯h ¯i ¯j ¯k ¯l ¯m ¯n ¯o +¢¶ ¯p ¯q ¯r ¯s ¯t ¯u ¯v ¯w ¯x ¯y ¯z ¯{ ¯| ¯} ¯~ +¢Ï ¯  ¯¡ ¯¢ ¯£ ¯¤ ¯¥ ¯¦ ¯§ ¯¨ ¯© ¯ª ¯« ¯¬ ¯­ ¯® ¯¯ +¢Ð ¯° ¯± ¯² ¯³ ¯´ ¯µ ¯¶ ¯· ¯¸ ¯¹ ¯º ¯» ¯¼ ¯½ ¯¾ ¯¿ +¢Ñ ¯À ¯Á ¯Â ¯Ã ¯Ä ¯Å ¯Æ ¯Ç ¯È ¯É ¯Ê ¯Ë ¯Ì ¯Í ¯Î ¯Ï +¢Ò ¯Ð ¯Ñ ¯Ò ¯Ó ¯Ô ¯Õ ¯Ö ¯× ¯Ø ¯Ù ¯Ú ¯Û ¯Ü ¯Ý ¯Þ ¯ß +¢Ó ¯à ¯á ¯â ¯ã ¯ä ¯å ¯æ ¯ç ¯è ¯é ¯ê ¯ë ¯ì ¯í ¯î ¯ï +¢Ô ¯ð ¯ñ ¯ò ¯ó ¯ô ¯õ ¯ö ¯÷ ¯ø ¯ù ¯ú ¯û ¯ü ¯ý ¯þ + +

    B0 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ °@ °A °B °C °D °E °F °G °H °I °J °K °L °M °N °O +¢´ °P °Q °R °S °T °U °V °W °X °Y °Z °[ °\ °] °^ °_ +¢µ °` °a °b °c °d °e °f °g °h °i °j °k °l °m °n °o +¢¶ °p °q °r °s °t °u °v °w °x °y °z °{ °| °} °~ +¢Ï °  °¡ °¢ °£ °¤ °¥ °¦ °§ °¨ °© °ª °« °¬ °­ °® °¯ +¢Ð °° °± °² °³ °´ °µ °¶ °· °¸ °¹ °º °» °¼ °½ °¾ °¿ +¢Ñ °À °Á °Â °Ã °Ä °Å °Æ °Ç °È °É °Ê °Ë °Ì °Í °Î °Ï +¢Ò °Ð °Ñ °Ò °Ó °Ô °Õ °Ö °× °Ø °Ù °Ú °Û °Ü °Ý °Þ °ß +¢Ó °à °á °â °ã °ä °å °æ °ç °è °é °ê °ë °ì °í °î °ï +¢Ô °ð °ñ °ò °ó °ô °õ °ö °÷ °ø °ù °ú °û °ü °ý °þ + +

    B1 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ±@ ±A ±B ±C ±D ±E ±F ±G ±H ±I ±J ±K ±L ±M ±N ±O +¢´ ±P ±Q ±R ±S ±T ±U ±V ±W ±X ±Y ±Z ±[ ±\ ±] ±^ ±_ +¢µ ±` ±a ±b ±c ±d ±e ±f ±g ±h ±i ±j ±k ±l ±m ±n ±o +¢¶ ±p ±q ±r ±s ±t ±u ±v ±w ±x ±y ±z ±{ ±| ±} ±~ +¢Ï ±  ±¡ ±¢ ±£ ±¤ ±¥ ±¦ ±§ ±¨ ±© ±ª ±« ±¬ ±­ ±® ±¯ +¢Ð ±° ±± ±² ±³ ±´ ±µ ±¶ ±· ±¸ ±¹ ±º ±» ±¼ ±½ ±¾ ±¿ +¢Ñ ±À ±Á ±Â ±Ã ±Ä ±Å ±Æ ±Ç ±È ±É ±Ê ±Ë ±Ì ±Í ±Î ±Ï +¢Ò ±Ð ±Ñ ±Ò ±Ó ±Ô ±Õ ±Ö ±× ±Ø ±Ù ±Ú ±Û ±Ü ±Ý ±Þ ±ß +¢Ó ±à ±á ±â ±ã ±ä ±å ±æ ±ç ±è ±é ±ê ±ë ±ì ±í ±î ±ï +¢Ô ±ð ±ñ ±ò ±ó ±ô ±õ ±ö ±÷ ±ø ±ù ±ú ±û ±ü ±ý ±þ + +

    B2 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ²@ ²A ²B ²C ²D ²E ²F ²G ²H ²I ²J ²K ²L ²M ²N ²O +¢´ ²P ²Q ²R ²S ²T ²U ²V ²W ²X ²Y ²Z ²[ ²\ ²] ²^ ²_ +¢µ ²` ²a ²b ²c ²d ²e ²f ²g ²h ²i ²j ²k ²l ²m ²n ²o +¢¶ ²p ²q ²r ²s ²t ²u ²v ²w ²x ²y ²z ²{ ²| ²} ²~ +¢Ï ²  ²¡ ²¢ ²£ ²¤ ²¥ ²¦ ²§ ²¨ ²© ²ª ²« ²¬ ²­ ²® ²¯ +¢Ð ²° ²± ²² ²³ ²´ ²µ ²¶ ²· ²¸ ²¹ ²º ²» ²¼ ²½ ²¾ ²¿ +¢Ñ ²À ²Á ²Â ²Ã ²Ä ²Å ²Æ ²Ç ²È ²É ²Ê ²Ë ²Ì ²Í ²Î ²Ï +¢Ò ²Ð ²Ñ ²Ò ²Ó ²Ô ²Õ ²Ö ²× ²Ø ²Ù ²Ú ²Û ²Ü ²Ý ²Þ ²ß +¢Ó ²à ²á ²â ²ã ²ä ²å ²æ ²ç ²è ²é ²ê ²ë ²ì ²í ²î ²ï +¢Ô ²ð ²ñ ²ò ²ó ²ô ²õ ²ö ²÷ ²ø ²ù ²ú ²û ²ü ²ý ²þ + +

    B3 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ³@ ³A ³B ³C ³D ³E ³F ³G ³H ³I ³J ³K ³L ³M ³N ³O +¢´ ³P ³Q ³R ³S ³T ³U ³V ³W ³X ³Y ³Z ³[ ³\ ³] ³^ ³_ +¢µ ³` ³a ³b ³c ³d ³e ³f ³g ³h ³i ³j ³k ³l ³m ³n ³o +¢¶ ³p ³q ³r ³s ³t ³u ³v ³w ³x ³y ³z ³{ ³| ³} ³~ +¢Ï ³  ³¡ ³¢ ³£ ³¤ ³¥ ³¦ ³§ ³¨ ³© ³ª ³« ³¬ ³­ ³® ³¯ +¢Ð ³° ³± ³² ³³ ³´ ³µ ³¶ ³· ³¸ ³¹ ³º ³» ³¼ ³½ ³¾ ³¿ +¢Ñ ³À ³Á ³Â ³Ã ³Ä ³Å ³Æ ³Ç ³È ³É ³Ê ³Ë ³Ì ³Í ³Î ³Ï +¢Ò ³Ð ³Ñ ³Ò ³Ó ³Ô ³Õ ³Ö ³× ³Ø ³Ù ³Ú ³Û ³Ü ³Ý ³Þ ³ß +¢Ó ³à ³á ³â ³ã ³ä ³å ³æ ³ç ³è ³é ³ê ³ë ³ì ³í ³î ³ï +¢Ô ³ð ³ñ ³ò ³ó ³ô ³õ ³ö ³÷ ³ø ³ù ³ú ³û ³ü ³ý ³þ + +

    B4 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ´@ ´A ´B ´C ´D ´E ´F ´G ´H ´I ´J ´K ´L ´M ´N ´O +¢´ ´P ´Q ´R ´S ´T ´U ´V ´W ´X ´Y ´Z ´[ ´\ ´] ´^ ´_ +¢µ ´` ´a ´b ´c ´d ´e ´f ´g ´h ´i ´j ´k ´l ´m ´n ´o +¢¶ ´p ´q ´r ´s ´t ´u ´v ´w ´x ´y ´z ´{ ´| ´} ´~ +¢Ï ´  ´¡ ´¢ ´£ ´¤ ´¥ ´¦ ´§ ´¨ ´© ´ª ´« ´¬ ´­ ´® ´¯ +¢Ð ´° ´± ´² ´³ ´´ ´µ ´¶ ´· ´¸ ´¹ ´º ´» ´¼ ´½ ´¾ ´¿ +¢Ñ ´À ´Á ´Â ´Ã ´Ä ´Å ´Æ ´Ç ´È ´É ´Ê ´Ë ´Ì ´Í ´Î ´Ï +¢Ò ´Ð ´Ñ ´Ò ´Ó ´Ô ´Õ ´Ö ´× ´Ø ´Ù ´Ú ´Û ´Ü ´Ý ´Þ ´ß +¢Ó ´à ´á ´â ´ã ´ä ´å ´æ ´ç ´è ´é ´ê ´ë ´ì ´í ´î ´ï +¢Ô ´ð ´ñ ´ò ´ó ´ô ´õ ´ö ´÷ ´ø ´ù ´ú ´û ´ü ´ý ´þ + +

    B5 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ µ@ µA µB µC µD µE µF µG µH µI µJ µK µL µM µN µO +¢´ µP µQ µR µS µT µU µV µW µX µY µZ µ[ µ\ µ] µ^ µ_ +¢µ µ` µa µb µc µd µe µf µg µh µi µj µk µl µm µn µo +¢¶ µp µq µr µs µt µu µv µw µx µy µz µ{ µ| µ} µ~ +¢Ï µ  µ¡ µ¢ µ£ µ¤ µ¥ µ¦ µ§ µ¨ µ© µª µ« µ¬ µ­ µ® µ¯ +¢Ð µ° µ± µ² µ³ µ´ µµ µ¶ µ· µ¸ µ¹ µº µ» µ¼ µ½ µ¾ µ¿ +¢Ñ µÀ µÁ µÂ µÃ µÄ µÅ µÆ µÇ µÈ µÉ µÊ µË µÌ µÍ µÎ µÏ +¢Ò µÐ µÑ µÒ µÓ µÔ µÕ µÖ µ× µØ µÙ µÚ µÛ µÜ µÝ µÞ µß +¢Ó µà µá µâ µã µä µå µæ µç µè µé µê µë µì µí µî µï +¢Ô µð µñ µò µó µô µõ µö µ÷ µø µù µú µû µü µý µþ + +

    B6 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ¶@ ¶A ¶B ¶C ¶D ¶E ¶F ¶G ¶H ¶I ¶J ¶K ¶L ¶M ¶N ¶O +¢´ ¶P ¶Q ¶R ¶S ¶T ¶U ¶V ¶W ¶X ¶Y ¶Z ¶[ ¶\ ¶] ¶^ ¶_ +¢µ ¶` ¶a ¶b ¶c ¶d ¶e ¶f ¶g ¶h ¶i ¶j ¶k ¶l ¶m ¶n ¶o +¢¶ ¶p ¶q ¶r ¶s ¶t ¶u ¶v ¶w ¶x ¶y ¶z ¶{ ¶| ¶} ¶~ +¢Ï ¶  ¶¡ ¶¢ ¶£ ¶¤ ¶¥ ¶¦ ¶§ ¶¨ ¶© ¶ª ¶« ¶¬ ¶­ ¶® ¶¯ +¢Ð ¶° ¶± ¶² ¶³ ¶´ ¶µ ¶¶ ¶· ¶¸ ¶¹ ¶º ¶» ¶¼ ¶½ ¶¾ ¶¿ +¢Ñ ¶À ¶Á ¶Â ¶Ã ¶Ä ¶Å ¶Æ ¶Ç ¶È ¶É ¶Ê ¶Ë ¶Ì ¶Í ¶Î ¶Ï +¢Ò ¶Ð ¶Ñ ¶Ò ¶Ó ¶Ô ¶Õ ¶Ö ¶× ¶Ø ¶Ù ¶Ú ¶Û ¶Ü ¶Ý ¶Þ ¶ß +¢Ó ¶à ¶á ¶â ¶ã ¶ä ¶å ¶æ ¶ç ¶è ¶é ¶ê ¶ë ¶ì ¶í ¶î ¶ï +¢Ô ¶ð ¶ñ ¶ò ¶ó ¶ô ¶õ ¶ö ¶÷ ¶ø ¶ù ¶ú ¶û ¶ü ¶ý ¶þ + +

    B7 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ·@ ·A ·B ·C ·D ·E ·F ·G ·H ·I ·J ·K ·L ·M ·N ·O +¢´ ·P ·Q ·R ·S ·T ·U ·V ·W ·X ·Y ·Z ·[ ·\ ·] ·^ ·_ +¢µ ·` ·a ·b ·c ·d ·e ·f ·g ·h ·i ·j ·k ·l ·m ·n ·o +¢¶ ·p ·q ·r ·s ·t ·u ·v ·w ·x ·y ·z ·{ ·| ·} ·~ +¢Ï ·  ·¡ ·¢ ·£ ·¤ ·¥ ·¦ ·§ ·¨ ·© ·ª ·« ·¬ ·­ ·® ·¯ +¢Ð ·° ·± ·² ·³ ·´ ·µ ·¶ ·· ·¸ ·¹ ·º ·» ·¼ ·½ ·¾ ·¿ +¢Ñ ·À ·Á ·Â ·Ã ·Ä ·Å ·Æ ·Ç ·È ·É ·Ê ·Ë ·Ì ·Í ·Î ·Ï +¢Ò ·Ð ·Ñ ·Ò ·Ó ·Ô ·Õ ·Ö ·× ·Ø ·Ù ·Ú ·Û ·Ü ·Ý ·Þ ·ß +¢Ó ·à ·á ·â ·ã ·ä ·å ·æ ·ç ·è ·é ·ê ·ë ·ì ·í ·î ·ï +¢Ô ·ð ·ñ ·ò ·ó ·ô ·õ ·ö ·÷ ·ø ·ù ·ú ·û ·ü ·ý ·þ + +

    B8 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ¸@ ¸A ¸B ¸C ¸D ¸E ¸F ¸G ¸H ¸I ¸J ¸K ¸L ¸M ¸N ¸O +¢´ ¸P ¸Q ¸R ¸S ¸T ¸U ¸V ¸W ¸X ¸Y ¸Z ¸[ ¸\ ¸] ¸^ ¸_ +¢µ ¸` ¸a ¸b ¸c ¸d ¸e ¸f ¸g ¸h ¸i ¸j ¸k ¸l ¸m ¸n ¸o +¢¶ ¸p ¸q ¸r ¸s ¸t ¸u ¸v ¸w ¸x ¸y ¸z ¸{ ¸| ¸} ¸~ +¢Ï ¸  ¸¡ ¸¢ ¸£ ¸¤ ¸¥ ¸¦ ¸§ ¸¨ ¸© ¸ª ¸« ¸¬ ¸­ ¸® ¸¯ +¢Ð ¸° ¸± ¸² ¸³ ¸´ ¸µ ¸¶ ¸· ¸¸ ¸¹ ¸º ¸» ¸¼ ¸½ ¸¾ ¸¿ +¢Ñ ¸À ¸Á ¸Â ¸Ã ¸Ä ¸Å ¸Æ ¸Ç ¸È ¸É ¸Ê ¸Ë ¸Ì ¸Í ¸Î ¸Ï +¢Ò ¸Ð ¸Ñ ¸Ò ¸Ó ¸Ô ¸Õ ¸Ö ¸× ¸Ø ¸Ù ¸Ú ¸Û ¸Ü ¸Ý ¸Þ ¸ß +¢Ó ¸à ¸á ¸â ¸ã ¸ä ¸å ¸æ ¸ç ¸è ¸é ¸ê ¸ë ¸ì ¸í ¸î ¸ï +¢Ô ¸ð ¸ñ ¸ò ¸ó ¸ô ¸õ ¸ö ¸÷ ¸ø ¸ù ¸ú ¸û ¸ü ¸ý ¸þ + +

    B9 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ¹@ ¹A ¹B ¹C ¹D ¹E ¹F ¹G ¹H ¹I ¹J ¹K ¹L ¹M ¹N ¹O +¢´ ¹P ¹Q ¹R ¹S ¹T ¹U ¹V ¹W ¹X ¹Y ¹Z ¹[ ¹\ ¹] ¹^ ¹_ +¢µ ¹` ¹a ¹b ¹c ¹d ¹e ¹f ¹g ¹h ¹i ¹j ¹k ¹l ¹m ¹n ¹o +¢¶ ¹p ¹q ¹r ¹s ¹t ¹u ¹v ¹w ¹x ¹y ¹z ¹{ ¹| ¹} ¹~ +¢Ï ¹  ¹¡ ¹¢ ¹£ ¹¤ ¹¥ ¹¦ ¹§ ¹¨ ¹© ¹ª ¹« ¹¬ ¹­ ¹® ¹¯ +¢Ð ¹° ¹± ¹² ¹³ ¹´ ¹µ ¹¶ ¹· ¹¸ ¹¹ ¹º ¹» ¹¼ ¹½ ¹¾ ¹¿ +¢Ñ ¹À ¹Á ¹Â ¹Ã ¹Ä ¹Å ¹Æ ¹Ç ¹È ¹É ¹Ê ¹Ë ¹Ì ¹Í ¹Î ¹Ï +¢Ò ¹Ð ¹Ñ ¹Ò ¹Ó ¹Ô ¹Õ ¹Ö ¹× ¹Ø ¹Ù ¹Ú ¹Û ¹Ü ¹Ý ¹Þ ¹ß +¢Ó ¹à ¹á ¹â ¹ã ¹ä ¹å ¹æ ¹ç ¹è ¹é ¹ê ¹ë ¹ì ¹í ¹î ¹ï +¢Ô ¹ð ¹ñ ¹ò ¹ó ¹ô ¹õ ¹ö ¹÷ ¹ø ¹ù ¹ú ¹û ¹ü ¹ý ¹þ + +

    BA ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ º@ ºA ºB ºC ºD ºE ºF ºG ºH ºI ºJ ºK ºL ºM ºN ºO +¢´ ºP ºQ ºR ºS ºT ºU ºV ºW ºX ºY ºZ º[ º\ º] º^ º_ +¢µ º` ºa ºb ºc ºd ºe ºf ºg ºh ºi ºj ºk ºl ºm ºn ºo +¢¶ ºp ºq ºr ºs ºt ºu ºv ºw ºx ºy ºz º{ º| º} º~ +¢Ï º  º¡ º¢ º£ º¤ º¥ º¦ º§ º¨ º© ºª º« º¬ º­ º® º¯ +¢Ð º° º± º² º³ º´ ºµ º¶ º· º¸ º¹ ºº º» º¼ º½ º¾ º¿ +¢Ñ ºÀ ºÁ ºÂ ºÃ ºÄ ºÅ ºÆ ºÇ ºÈ ºÉ ºÊ ºË ºÌ ºÍ ºÎ ºÏ +¢Ò ºÐ ºÑ ºÒ ºÓ ºÔ ºÕ ºÖ º× ºØ ºÙ ºÚ ºÛ ºÜ ºÝ ºÞ ºß +¢Ó ºà ºá ºâ ºã ºä ºå ºæ ºç ºè ºé ºê ºë ºì ºí ºî ºï +¢Ô ºð ºñ ºò ºó ºô ºõ ºö º÷ ºø ºù ºú ºû ºü ºý ºþ + +

    BB ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ »@ »A »B »C »D »E »F »G »H »I »J »K »L »M »N »O +¢´ »P »Q »R »S »T »U »V »W »X »Y »Z »[ »\ »] »^ »_ +¢µ »` »a »b »c »d »e »f »g »h »i »j »k »l »m »n »o +¢¶ »p »q »r »s »t »u »v »w »x »y »z »{ »| »} »~ +¢Ï »  »¡ »¢ »£ »¤ »¥ »¦ »§ »¨ »© »ª »« »¬ »­ »® »¯ +¢Ð »° »± »² »³ »´ »µ »¶ »· »¸ »¹ »º »» »¼ »½ »¾ »¿ +¢Ñ »À »Á »Â »Ã »Ä »Å »Æ »Ç »È »É »Ê »Ë »Ì »Í »Î »Ï +¢Ò »Ð »Ñ »Ò »Ó »Ô »Õ »Ö »× »Ø »Ù »Ú »Û »Ü »Ý »Þ »ß +¢Ó »à »á »â »ã »ä »å »æ »ç »è »é »ê »ë »ì »í »î »ï +¢Ô »ð »ñ »ò »ó »ô »õ »ö »÷ »ø »ù »ú »û »ü »ý »þ + +

    BC ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ¼@ ¼A ¼B ¼C ¼D ¼E ¼F ¼G ¼H ¼I ¼J ¼K ¼L ¼M ¼N ¼O +¢´ ¼P ¼Q ¼R ¼S ¼T ¼U ¼V ¼W ¼X ¼Y ¼Z ¼[ ¼\ ¼] ¼^ ¼_ +¢µ ¼` ¼a ¼b ¼c ¼d ¼e ¼f ¼g ¼h ¼i ¼j ¼k ¼l ¼m ¼n ¼o +¢¶ ¼p ¼q ¼r ¼s ¼t ¼u ¼v ¼w ¼x ¼y ¼z ¼{ ¼| ¼} ¼~ +¢Ï ¼  ¼¡ ¼¢ ¼£ ¼¤ ¼¥ ¼¦ ¼§ ¼¨ ¼© ¼ª ¼« ¼¬ ¼­ ¼® ¼¯ +¢Ð ¼° ¼± ¼² ¼³ ¼´ ¼µ ¼¶ ¼· ¼¸ ¼¹ ¼º ¼» ¼¼ ¼½ ¼¾ ¼¿ +¢Ñ ¼À ¼Á ¼Â ¼Ã ¼Ä ¼Å ¼Æ ¼Ç ¼È ¼É ¼Ê ¼Ë ¼Ì ¼Í ¼Î ¼Ï +¢Ò ¼Ð ¼Ñ ¼Ò ¼Ó ¼Ô ¼Õ ¼Ö ¼× ¼Ø ¼Ù ¼Ú ¼Û ¼Ü ¼Ý ¼Þ ¼ß +¢Ó ¼à ¼á ¼â ¼ã ¼ä ¼å ¼æ ¼ç ¼è ¼é ¼ê ¼ë ¼ì ¼í ¼î ¼ï +¢Ô ¼ð ¼ñ ¼ò ¼ó ¼ô ¼õ ¼ö ¼÷ ¼ø ¼ù ¼ú ¼û ¼ü ¼ý ¼þ + +

    BD ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ½@ ½A ½B ½C ½D ½E ½F ½G ½H ½I ½J ½K ½L ½M ½N ½O +¢´ ½P ½Q ½R ½S ½T ½U ½V ½W ½X ½Y ½Z ½[ ½\ ½] ½^ ½_ +¢µ ½` ½a ½b ½c ½d ½e ½f ½g ½h ½i ½j ½k ½l ½m ½n ½o +¢¶ ½p ½q ½r ½s ½t ½u ½v ½w ½x ½y ½z ½{ ½| ½} ½~ +¢Ï ½  ½¡ ½¢ ½£ ½¤ ½¥ ½¦ ½§ ½¨ ½© ½ª ½« ½¬ ½­ ½® ½¯ +¢Ð ½° ½± ½² ½³ ½´ ½µ ½¶ ½· ½¸ ½¹ ½º ½» ½¼ ½½ ½¾ ½¿ +¢Ñ ½À ½Á ½Â ½Ã ½Ä ½Å ½Æ ½Ç ½È ½É ½Ê ½Ë ½Ì ½Í ½Î ½Ï +¢Ò ½Ð ½Ñ ½Ò ½Ó ½Ô ½Õ ½Ö ½× ½Ø ½Ù ½Ú ½Û ½Ü ½Ý ½Þ ½ß +¢Ó ½à ½á ½â ½ã ½ä ½å ½æ ½ç ½è ½é ½ê ½ë ½ì ½í ½î ½ï +¢Ô ½ð ½ñ ½ò ½ó ½ô ½õ ½ö ½÷ ½ø ½ù ½ú ½û ½ü ½ý ½þ + +

    BE ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ¾@ ¾A ¾B ¾C ¾D ¾E ¾F ¾G ¾H ¾I ¾J ¾K ¾L ¾M ¾N ¾O +¢´ ¾P ¾Q ¾R ¾S ¾T ¾U ¾V ¾W ¾X ¾Y ¾Z ¾[ ¾\ ¾] ¾^ ¾_ +¢µ ¾` ¾a ¾b ¾c ¾d ¾e ¾f ¾g ¾h ¾i ¾j ¾k ¾l ¾m ¾n ¾o +¢¶ ¾p ¾q ¾r ¾s ¾t ¾u ¾v ¾w ¾x ¾y ¾z ¾{ ¾| ¾} ¾~ +¢Ï ¾  ¾¡ ¾¢ ¾£ ¾¤ ¾¥ ¾¦ ¾§ ¾¨ ¾© ¾ª ¾« ¾¬ ¾­ ¾® ¾¯ +¢Ð ¾° ¾± ¾² ¾³ ¾´ ¾µ ¾¶ ¾· ¾¸ ¾¹ ¾º ¾» ¾¼ ¾½ ¾¾ ¾¿ +¢Ñ ¾À ¾Á ¾Â ¾Ã ¾Ä ¾Å ¾Æ ¾Ç ¾È ¾É ¾Ê ¾Ë ¾Ì ¾Í ¾Î ¾Ï +¢Ò ¾Ð ¾Ñ ¾Ò ¾Ó ¾Ô ¾Õ ¾Ö ¾× ¾Ø ¾Ù ¾Ú ¾Û ¾Ü ¾Ý ¾Þ ¾ß +¢Ó ¾à ¾á ¾â ¾ã ¾ä ¾å ¾æ ¾ç ¾è ¾é ¾ê ¾ë ¾ì ¾í ¾î ¾ï +¢Ô ¾ð ¾ñ ¾ò ¾ó ¾ô ¾õ ¾ö ¾÷ ¾ø ¾ù ¾ú ¾û ¾ü ¾ý ¾þ + +

    BF ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ¿@ ¿A ¿B ¿C ¿D ¿E ¿F ¿G ¿H ¿I ¿J ¿K ¿L ¿M ¿N ¿O +¢´ ¿P ¿Q ¿R ¿S ¿T ¿U ¿V ¿W ¿X ¿Y ¿Z ¿[ ¿\ ¿] ¿^ ¿_ +¢µ ¿` ¿a ¿b ¿c ¿d ¿e ¿f ¿g ¿h ¿i ¿j ¿k ¿l ¿m ¿n ¿o +¢¶ ¿p ¿q ¿r ¿s ¿t ¿u ¿v ¿w ¿x ¿y ¿z ¿{ ¿| ¿} ¿~ +¢Ï ¿  ¿¡ ¿¢ ¿£ ¿¤ ¿¥ ¿¦ ¿§ ¿¨ ¿© ¿ª ¿« ¿¬ ¿­ ¿® ¿¯ +¢Ð ¿° ¿± ¿² ¿³ ¿´ ¿µ ¿¶ ¿· ¿¸ ¿¹ ¿º ¿» ¿¼ ¿½ ¿¾ ¿¿ +¢Ñ ¿À ¿Á ¿Â ¿Ã ¿Ä ¿Å ¿Æ ¿Ç ¿È ¿É ¿Ê ¿Ë ¿Ì ¿Í ¿Î ¿Ï +¢Ò ¿Ð ¿Ñ ¿Ò ¿Ó ¿Ô ¿Õ ¿Ö ¿× ¿Ø ¿Ù ¿Ú ¿Û ¿Ü ¿Ý ¿Þ ¿ß +¢Ó ¿à ¿á ¿â ¿ã ¿ä ¿å ¿æ ¿ç ¿è ¿é ¿ê ¿ë ¿ì ¿í ¿î ¿ï +¢Ô ¿ð ¿ñ ¿ò ¿ó ¿ô ¿õ ¿ö ¿÷ ¿ø ¿ù ¿ú ¿û ¿ü ¿ý ¿þ + +

    C0 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ À@ ÀA ÀB ÀC ÀD ÀE ÀF ÀG ÀH ÀI ÀJ ÀK ÀL ÀM ÀN ÀO +¢´ ÀP ÀQ ÀR ÀS ÀT ÀU ÀV ÀW ÀX ÀY ÀZ À[ À\ À] À^ À_ +¢µ À` Àa Àb Àc Àd Àe Àf Àg Àh Ài Àj Àk Àl Àm Àn Ào +¢¶ Àp Àq Àr Às Àt Àu Àv Àw Àx Ày Àz À{ À| À} À~ +¢Ï À  À¡ À¢ À£ À¤ À¥ À¦ À§ À¨ À© Àª À« À¬ À­ À® À¯ +¢Ð À° À± À² À³ À´ Àµ À¶ À· À¸ À¹ Àº À» À¼ À½ À¾ À¿ +¢Ñ ÀÀ ÀÁ À Àà ÀÄ ÀÅ ÀÆ ÀÇ ÀÈ ÀÉ ÀÊ ÀË ÀÌ ÀÍ ÀÎ ÀÏ +¢Ò ÀÐ ÀÑ ÀÒ ÀÓ ÀÔ ÀÕ ÀÖ À× ÀØ ÀÙ ÀÚ ÀÛ ÀÜ ÀÝ ÀÞ Àß +¢Ó Àà Àá Àâ Àã Àä Àå Àæ Àç Àè Àé Àê Àë Àì Àí Àî Àï +¢Ô Àð Àñ Àò Àó Àô Àõ Àö À÷ Àø Àù Àú Àû Àü Àý Àþ + +

    C1 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ Á@ ÁA ÁB ÁC ÁD ÁE ÁF ÁG ÁH ÁI ÁJ ÁK ÁL ÁM ÁN ÁO +¢´ ÁP ÁQ ÁR ÁS ÁT ÁU ÁV ÁW ÁX ÁY ÁZ Á[ Á\ Á] Á^ Á_ +¢µ Á` Áa Áb Ác Ád Áe Áf Ág Áh Ái Áj Ák Ál Ám Án Áo +¢¶ Áp Áq Ár Ás Át Áu Áv Áw Áx Áy Áz Á{ Á| Á} Á~ +¢Ï Á  Á¡ Á¢ Á£ Á¤ Á¥ Á¦ Á§ Á¨ Á© Áª Á« Á¬ Á­ Á® Á¯ +¢Ð Á° Á± Á² Á³ Á´ Áµ Á¶ Á· Á¸ Á¹ Áº Á» Á¼ Á½ Á¾ Á¿ +¢Ñ ÁÀ ÁÁ Á Áà ÁÄ ÁÅ ÁÆ ÁÇ ÁÈ ÁÉ ÁÊ ÁË ÁÌ ÁÍ ÁÎ ÁÏ +¢Ò ÁÐ ÁÑ ÁÒ ÁÓ ÁÔ ÁÕ ÁÖ Á× ÁØ ÁÙ ÁÚ ÁÛ ÁÜ ÁÝ ÁÞ Áß +¢Ó Áà Áá Áâ Áã Áä Áå Áæ Áç Áè Áé Áê Áë Áì Áí Áî Áï +¢Ô Áð Áñ Áò Áó Áô Áõ Áö Á÷ Áø Áù Áú Áû Áü Áý Áþ + +

    C2 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ Â@ ÂA ÂB ÂC ÂD ÂE ÂF ÂG ÂH ÂI ÂJ ÂK ÂL ÂM ÂN ÂO +¢´ ÂP ÂQ ÂR ÂS ÂT ÂU ÂV ÂW ÂX ÂY ÂZ Â[ Â\ Â] Â^ Â_ +¢µ Â` Âa Âb Âc Âd Âe Âf Âg Âh Âi Âj Âk Âl Âm Ân Âo +¢¶ Âp Âq Âr Âs Ât Âu Âv Âw Âx Ây Âz Â{ Â| Â} Â~ +¢Ï   ¡ ¢ £ ¤ Â¥ ¦ § ¨ © ª « ¬ ­ ® ¯ +¢Ð ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ +¢Ñ ÂÀ ÂÁ  Âà ÂÄ ÂÅ ÂÆ ÂÇ ÂÈ ÂÉ ÂÊ ÂË ÂÌ ÂÍ ÂÎ ÂÏ +¢Ò ÂÐ ÂÑ ÂÒ ÂÓ ÂÔ ÂÕ ÂÖ Â× ÂØ ÂÙ ÂÚ ÂÛ ÂÜ ÂÝ ÂÞ Âß +¢Ó Âà Âá Ââ Âã Âä Âå Âæ Âç Âè Âé Âê Âë Âì Âí Âî Âï +¢Ô Âð Âñ Âò Âó Âô Âõ Âö Â÷ Âø Âù Âú Âû Âü Âý Âþ + +

    C3 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ Ã@ ÃA ÃB ÃC ÃD ÃE ÃF ÃG ÃH ÃI ÃJ ÃK ÃL ÃM ÃN ÃO +¢´ ÃP ÃQ ÃR ÃS ÃT ÃU ÃV ÃW ÃX ÃY ÃZ Ã[ Ã\ Ã] Ã^ Ã_ +¢µ Ã` Ãa Ãb Ãc Ãd Ãe Ãf Ãg Ãh Ãi Ãj Ãk Ãl Ãm Ãn Ão +¢¶ Ãp Ãq Ãr Ãs Ãt Ãu Ãv Ãw Ãx Ãy Ãz Ã{ Ã| Ã} Ã~ +¢Ï à á â ã ä Ã¥ æ ç è é ê ë ì í î ï +¢Ð ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ +¢Ñ ÃÀ ÃÁ àÃà ÃÄ ÃÅ ÃÆ ÃÇ ÃÈ ÃÉ ÃÊ ÃË ÃÌ ÃÍ ÃÎ ÃÏ +¢Ò ÃÐ ÃÑ ÃÒ ÃÓ ÃÔ ÃÕ ÃÖ Ã× ÃØ ÃÙ ÃÚ ÃÛ ÃÜ ÃÝ ÃÞ Ãß +¢Ó Ãà Ãá Ãâ Ãã Ãä Ãå Ãæ Ãç Ãè Ãé Ãê Ãë Ãì Ãí Ãî Ãï +¢Ô Ãð Ãñ Ãò Ãó Ãô Ãõ Ãö Ã÷ Ãø Ãù Ãú Ãû Ãü Ãý Ãþ + +

    C4 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ Ä@ ÄA ÄB ÄC ÄD ÄE ÄF ÄG ÄH ÄI ÄJ ÄK ÄL ÄM ÄN ÄO +¢´ ÄP ÄQ ÄR ÄS ÄT ÄU ÄV ÄW ÄX ÄY ÄZ Ä[ Ä\ Ä] Ä^ Ä_ +¢µ Ä` Äa Äb Äc Äd Äe Äf Äg Äh Äi Äj Äk Äl Äm Än Äo +¢¶ Äp Äq Är Äs Ät Äu Äv Äw Äx Äy Äz Ä{ Ä| Ä} Ä~ +¢Ï Ä  Ä¡ Ä¢ Ä£ Ĥ Ä¥ Ħ ħ Ĩ Ä© Ī Ä« Ĭ Ä­ Ä® į +¢Ð Ä° ı IJ ij Ä´ ĵ Ķ Ä· ĸ Ĺ ĺ Ä» ļ Ľ ľ Ä¿ +¢Ñ ÄÀ ÄÁ Ä Äà ÄÄ ÄÅ ÄÆ ÄÇ ÄÈ ÄÉ ÄÊ ÄË ÄÌ ÄÍ ÄÎ ÄÏ +¢Ò ÄÐ ÄÑ ÄÒ ÄÓ ÄÔ ÄÕ ÄÖ Ä× ÄØ ÄÙ ÄÚ ÄÛ ÄÜ ÄÝ ÄÞ Äß +¢Ó Äà Äá Äâ Äã Ää Äå Äæ Äç Äè Äé Äê Äë Äì Äí Äî Äï +¢Ô Äð Äñ Äò Äó Äô Äõ Äö Ä÷ Äø Äù Äú Äû Äü Äý Äþ + +

    C5 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ Å@ ÅA ÅB ÅC ÅD ÅE ÅF ÅG ÅH ÅI ÅJ ÅK ÅL ÅM ÅN ÅO +¢´ ÅP ÅQ ÅR ÅS ÅT ÅU ÅV ÅW ÅX ÅY ÅZ Å[ Å\ Å] Å^ Å_ +¢µ Å` Åa Åb Åc Åd Åe Åf Åg Åh Åi Åj Åk Ål Åm Ån Åo +¢¶ Åp Åq År Ås Åt Åu Åv Åw Åx Åy Åz Å{ Å| Å} Å~ +¢Ï Å  Å¡ Å¢ Å£ Ť Å¥ Ŧ ŧ Ũ Å© Ū Å« Ŭ Å­ Å® ů +¢Ð Å° ű Ų ų Å´ ŵ Ŷ Å· Ÿ Ź ź Å» ż Ž ž Å¿ +¢Ñ ÅÀ ÅÁ Å Åà ÅÄ ÅÅ ÅÆ ÅÇ ÅÈ ÅÉ ÅÊ ÅË ÅÌ ÅÍ ÅÎ ÅÏ +¢Ò ÅÐ ÅÑ ÅÒ ÅÓ ÅÔ ÅÕ ÅÖ Å× ÅØ ÅÙ ÅÚ ÅÛ ÅÜ ÅÝ ÅÞ Åß +¢Ó Åà Åá Åâ Åã Åä Åå Åæ Åç Åè Åé Åê Åë Åì Åí Åî Åï +¢Ô Åð Åñ Åò Åó Åô Åõ Åö Å÷ Åø Åù Åú Åû Åü Åý Åþ + +

    C6 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ Æ@ ÆA ÆB ÆC ÆD ÆE ÆF ÆG ÆH ÆI ÆJ ÆK ÆL ÆM ÆN ÆO +¢´ ÆP ÆQ ÆR ÆS ÆT ÆU ÆV ÆW ÆX ÆY ÆZ Æ[ Æ\ Æ] Æ^ Æ_ +¢µ Æ` Æa Æb Æc Æd Æe Æf Æg Æh Æi Æj Æk Æl Æm Æn Æo +¢¶ Æp Æq Ær Æs Æt Æu Æv Æw Æx Æy Æz Æ{ Æ| Æ} Æ~ +¢Ï Æ  Æ¡ Æ¢ Æ£ Ƥ Æ¥ Ʀ Ƨ ƨ Æ© ƪ Æ« Ƭ Æ­ Æ® Ư +¢Ð Æ° Ʊ Ʋ Ƴ Æ´ Ƶ ƶ Æ· Ƹ ƹ ƺ Æ» Ƽ ƽ ƾ Æ¿ +¢Ñ ÆÀ ÆÁ Æ Æà ÆÄ ÆÅ ÆÆ ÆÇ ÆÈ ÆÉ ÆÊ ÆË ÆÌ ÆÍ ÆÎ ÆÏ +¢Ò ÆÐ ÆÑ ÆÒ ÆÓ ÆÔ ÆÕ ÆÖ Æ× ÆØ ÆÙ ÆÚ ÆÛ ÆÜ ÆÝ ÆÞ Æß +¢Ó Æà Æá Æâ Æã Æä Æå Ææ Æç Æè Æé Æê Æë Æì Æí Æî Æï +¢Ô Æð Æñ Æò Æó Æô Æõ Æö Æ÷ Æø Æù Æú Æû Æü Æý Æþ + +

    C7 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ Ç@ ÇA ÇB ÇC ÇD ÇE ÇF ÇG ÇH ÇI ÇJ ÇK ÇL ÇM ÇN ÇO +¢´ ÇP ÇQ ÇR ÇS ÇT ÇU ÇV ÇW ÇX ÇY ÇZ Ç[ Ç\ Ç] Ç^ Ç_ +¢µ Ç` Ça Çb Çc Çd Çe Çf Çg Çh Çi Çj Çk Çl Çm Çn Ço +¢¶ Çp Çq Çr Çs Çt Çu Çv Çw Çx Çy Çz Ç{ Ç| Ç} Ç~ +¢Ï Ç  Ç¡ Ç¢ Ç£ Ǥ Ç¥ Ǧ ǧ Ǩ Ç© Ǫ Ç« Ǭ Ç­ Ç® ǯ +¢Ð Ç° DZ Dz dz Ç´ ǵ Ƕ Ç· Ǹ ǹ Ǻ Ç» Ǽ ǽ Ǿ Ç¿ +¢Ñ ÇÀ ÇÁ Ç Çà ÇÄ ÇÅ ÇÆ ÇÇ ÇÈ ÇÉ ÇÊ ÇË ÇÌ ÇÍ ÇÎ ÇÏ +¢Ò ÇÐ ÇÑ ÇÒ ÇÓ ÇÔ ÇÕ ÇÖ Ç× ÇØ ÇÙ ÇÚ ÇÛ ÇÜ ÇÝ ÇÞ Çß +¢Ó Çà Çá Çâ Çã Çä Çå Çæ Çç Çè Çé Çê Çë Çì Çí Çî Çï +¢Ô Çð Çñ Çò Çó Çô Çõ Çö Ç÷ Çø Çù Çú Çû Çü Çý Çþ + +

    C8 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ È@ ÈA ÈB ÈC ÈD ÈE ÈF ÈG ÈH ÈI ÈJ ÈK ÈL ÈM ÈN ÈO +¢´ ÈP ÈQ ÈR ÈS ÈT ÈU ÈV ÈW ÈX ÈY ÈZ È[ È\ È] È^ È_ +¢µ È` Èa Èb Èc Èd Èe Èf Èg Èh Èi Èj Èk Èl Èm Èn Èo +¢¶ Èp Èq Èr Ès Èt Èu Èv Èw Èx Èy Èz È{ È| È} È~ +¢Ï È  È¡ È¢ È£ Ȥ È¥ Ȧ ȧ Ȩ È© Ȫ È« Ȭ È­ È® ȯ +¢Ð È° ȱ Ȳ ȳ È´ ȵ ȶ È· ȸ ȹ Ⱥ È» ȼ Ƚ Ⱦ È¿ +¢Ñ ÈÀ ÈÁ È Èà ÈÄ ÈÅ ÈÆ ÈÇ ÈÈ ÈÉ ÈÊ ÈË ÈÌ ÈÍ ÈÎ ÈÏ +¢Ò ÈÐ ÈÑ ÈÒ ÈÓ ÈÔ ÈÕ ÈÖ È× ÈØ ÈÙ ÈÚ ÈÛ ÈÜ ÈÝ ÈÞ Èß +¢Ó Èà Èá Èâ Èã Èä Èå Èæ Èç Èè Èé Èê Èë Èì Èí Èî Èï +¢Ô Èð Èñ Èò Èó Èô Èõ Èö È÷ Èø Èù Èú Èû Èü Èý Èþ + +

    C9 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ É@ ÉA ÉB ÉC ÉD ÉE ÉF ÉG ÉH ÉI ÉJ ÉK ÉL ÉM ÉN ÉO +¢´ ÉP ÉQ ÉR ÉS ÉT ÉU ÉV ÉW ÉX ÉY ÉZ É[ É\ É] É^ É_ +¢µ É` Éa Éb Éc Éd Ée Éf Ég Éh Éi Éj Ék Él Ém Én Éo +¢¶ Ép Éq Ér És Ét Éu Év Éw Éx Éy Éz É{ É| É} É~ +¢Ï É  É¡ É¢ É£ ɤ É¥ ɦ ɧ ɨ É© ɪ É« ɬ É­ É® ɯ +¢Ð É° ɱ ɲ ɳ É´ ɵ ɶ É· ɸ ɹ ɺ É» ɼ ɽ ɾ É¿ +¢Ñ ÉÀ ÉÁ É Éà ÉÄ ÉÅ ÉÆ ÉÇ ÉÈ ÉÉ ÉÊ ÉË ÉÌ ÉÍ ÉÎ ÉÏ +¢Ò ÉÐ ÉÑ ÉÒ ÉÓ ÉÔ ÉÕ ÉÖ É× ÉØ ÉÙ ÉÚ ÉÛ ÉÜ ÉÝ ÉÞ Éß +¢Ó Éà Éá Éâ Éã Éä Éå Éæ Éç Éè Éé Éê Éë Éì Éí Éî Éï +¢Ô Éð Éñ Éò Éó Éô Éõ Éö É÷ Éø Éù Éú Éû Éü Éý Éþ + +

    CA ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ Ê@ ÊA ÊB ÊC ÊD ÊE ÊF ÊG ÊH ÊI ÊJ ÊK ÊL ÊM ÊN ÊO +¢´ ÊP ÊQ ÊR ÊS ÊT ÊU ÊV ÊW ÊX ÊY ÊZ Ê[ Ê\ Ê] Ê^ Ê_ +¢µ Ê` Êa Êb Êc Êd Êe Êf Êg Êh Êi Êj Êk Êl Êm Ên Êo +¢¶ Êp Êq Êr Ês Êt Êu Êv Êw Êx Êy Êz Ê{ Ê| Ê} Ê~ +¢Ï Ê  Ê¡ Ê¢ Ê£ ʤ Ê¥ ʦ ʧ ʨ Ê© ʪ Ê« ʬ Ê­ Ê® ʯ +¢Ð Ê° ʱ ʲ ʳ Ê´ ʵ ʶ Ê· ʸ ʹ ʺ Ê» ʼ ʽ ʾ Ê¿ +¢Ñ ÊÀ ÊÁ Ê Êà ÊÄ ÊÅ ÊÆ ÊÇ ÊÈ ÊÉ ÊÊ ÊË ÊÌ ÊÍ ÊÎ ÊÏ +¢Ò ÊÐ ÊÑ ÊÒ ÊÓ ÊÔ ÊÕ ÊÖ Ê× ÊØ ÊÙ ÊÚ ÊÛ ÊÜ ÊÝ ÊÞ Êß +¢Ó Êà Êá Êâ Êã Êä Êå Êæ Êç Êè Êé Êê Êë Êì Êí Êî Êï +¢Ô Êð Êñ Êò Êó Êô Êõ Êö Ê÷ Êø Êù Êú Êû Êü Êý Êþ + +

    CB ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ Ë@ ËA ËB ËC ËD ËE ËF ËG ËH ËI ËJ ËK ËL ËM ËN ËO +¢´ ËP ËQ ËR ËS ËT ËU ËV ËW ËX ËY ËZ Ë[ Ë\ Ë] Ë^ Ë_ +¢µ Ë` Ëa Ëb Ëc Ëd Ëe Ëf Ëg Ëh Ëi Ëj Ëk Ël Ëm Ën Ëo +¢¶ Ëp Ëq Ër Ës Ët Ëu Ëv Ëw Ëx Ëy Ëz Ë{ Ë| Ë} Ë~ +¢Ï Ë  Ë¡ Ë¢ Ë£ ˤ Ë¥ ˦ ˧ ˨ Ë© ˪ Ë« ˬ Ë­ Ë® ˯ +¢Ð Ë° ˱ ˲ ˳ Ë´ ˵ ˶ Ë· ˸ ˹ ˺ Ë» ˼ ˽ ˾ Ë¿ +¢Ñ ËÀ ËÁ Ë Ëà ËÄ ËÅ ËÆ ËÇ ËÈ ËÉ ËÊ ËË ËÌ ËÍ ËÎ ËÏ +¢Ò ËÐ ËÑ ËÒ ËÓ ËÔ ËÕ ËÖ Ë× ËØ ËÙ ËÚ ËÛ ËÜ ËÝ ËÞ Ëß +¢Ó Ëà Ëá Ëâ Ëã Ëä Ëå Ëæ Ëç Ëè Ëé Ëê Ëë Ëì Ëí Ëî Ëï +¢Ô Ëð Ëñ Ëò Ëó Ëô Ëõ Ëö Ë÷ Ëø Ëù Ëú Ëû Ëü Ëý Ëþ + +

    CC ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ Ì@ ÌA ÌB ÌC ÌD ÌE ÌF ÌG ÌH ÌI ÌJ ÌK ÌL ÌM ÌN ÌO +¢´ ÌP ÌQ ÌR ÌS ÌT ÌU ÌV ÌW ÌX ÌY ÌZ Ì[ Ì\ Ì] Ì^ Ì_ +¢µ Ì` Ìa Ìb Ìc Ìd Ìe Ìf Ìg Ìh Ìi Ìj Ìk Ìl Ìm Ìn Ìo +¢¶ Ìp Ìq Ìr Ìs Ìt Ìu Ìv Ìw Ìx Ìy Ìz Ì{ Ì| Ì} Ì~ +¢Ï Ì  Ì¡ Ì¢ Ì£ ̤ Ì¥ ̦ ̧ ̨ Ì© ̪ Ì« ̬ Ì­ Ì® ̯ +¢Ð Ì° ̱ ̲ ̳ Ì´ ̵ ̶ Ì· ̸ ̹ ̺ Ì» ̼ ̽ ̾ Ì¿ +¢Ñ ÌÀ ÌÁ Ì Ìà ÌÄ ÌÅ ÌÆ ÌÇ ÌÈ ÌÉ ÌÊ ÌË ÌÌ ÌÍ ÌÎ ÌÏ +¢Ò ÌÐ ÌÑ ÌÒ ÌÓ ÌÔ ÌÕ ÌÖ Ì× ÌØ ÌÙ ÌÚ ÌÛ ÌÜ ÌÝ ÌÞ Ìß +¢Ó Ìà Ìá Ìâ Ìã Ìä Ìå Ìæ Ìç Ìè Ìé Ìê Ìë Ìì Ìí Ìî Ìï +¢Ô Ìð Ìñ Ìò Ìó Ìô Ìõ Ìö Ì÷ Ìø Ìù Ìú Ìû Ìü Ìý Ìþ + +

    CD ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ Í@ ÍA ÍB ÍC ÍD ÍE ÍF ÍG ÍH ÍI ÍJ ÍK ÍL ÍM ÍN ÍO +¢´ ÍP ÍQ ÍR ÍS ÍT ÍU ÍV ÍW ÍX ÍY ÍZ Í[ Í\ Í] Í^ Í_ +¢µ Í` Ía Íb Íc Íd Íe Íf Íg Íh Íi Íj Ík Íl Ím Ín Ío +¢¶ Íp Íq Ír Ís Ít Íu Ív Íw Íx Íy Íz Í{ Í| Í} Í~ +¢Ï Í  Í¡ Í¢ Í£ ͤ Í¥ ͦ ͧ ͨ Í© ͪ Í« ͬ Í­ Í® ͯ +¢Ð Í° ͱ Ͳ ͳ Í´ ͵ Ͷ Í· ͸ ͹ ͺ Í» ͼ ͽ ; Í¿ +¢Ñ ÍÀ ÍÁ Í Íà ÍÄ ÍÅ ÍÆ ÍÇ ÍÈ ÍÉ ÍÊ ÍË ÍÌ ÍÍ ÍÎ ÍÏ +¢Ò ÍÐ ÍÑ ÍÒ ÍÓ ÍÔ ÍÕ ÍÖ Í× ÍØ ÍÙ ÍÚ ÍÛ ÍÜ ÍÝ ÍÞ Íß +¢Ó Íà Íá Íâ Íã Íä Íå Íæ Íç Íè Íé Íê Íë Íì Íí Íî Íï +¢Ô Íð Íñ Íò Íó Íô Íõ Íö Í÷ Íø Íù Íú Íû Íü Íý Íþ + +

    CE ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ Î@ ÎA ÎB ÎC ÎD ÎE ÎF ÎG ÎH ÎI ÎJ ÎK ÎL ÎM ÎN ÎO +¢´ ÎP ÎQ ÎR ÎS ÎT ÎU ÎV ÎW ÎX ÎY ÎZ Î[ Î\ Î] Î^ Î_ +¢µ Î` Îa Îb Îc Îd Îe Îf Îg Îh Îi Îj Îk Îl Îm În Îo +¢¶ Îp Îq Îr Îs Ît Îu Îv Îw Îx Îy Îz Î{ Î| Î} Î~ +¢Ï Π Ρ ΢ Σ Τ Î¥ Φ Χ Ψ Ω Ϊ Ϋ ά έ ή ί +¢Ð ΰ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο +¢Ñ ÎÀ ÎÁ ΠÎà ÎÄ ÎÅ ÎÆ ÎÇ ÎÈ ÎÉ ÎÊ ÎË ÎÌ ÎÍ ÎÎ ÎÏ +¢Ò ÎÐ ÎÑ ÎÒ ÎÓ ÎÔ ÎÕ ÎÖ Î× ÎØ ÎÙ ÎÚ ÎÛ ÎÜ ÎÝ ÎÞ Îß +¢Ó Îà Îá Îâ Îã Îä Îå Îæ Îç Îè Îé Îê Îë Îì Îí Îî Îï +¢Ô Îð Îñ Îò Îó Îô Îõ Îö Î÷ Îø Îù Îú Îû Îü Îý Îþ + +

    CF ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ Ï@ ÏA ÏB ÏC ÏD ÏE ÏF ÏG ÏH ÏI ÏJ ÏK ÏL ÏM ÏN ÏO +¢´ ÏP ÏQ ÏR ÏS ÏT ÏU ÏV ÏW ÏX ÏY ÏZ Ï[ Ï\ Ï] Ï^ Ï_ +¢µ Ï` Ïa Ïb Ïc Ïd Ïe Ïf Ïg Ïh Ïi Ïj Ïk Ïl Ïm Ïn Ïo +¢¶ Ïp Ïq Ïr Ïs Ït Ïu Ïv Ïw Ïx Ïy Ïz Ï{ Ï| Ï} Ï~ +¢Ï Ï  Ï¡ Ï¢ Ï£ Ϥ Ï¥ Ϧ ϧ Ϩ Ï© Ϫ Ï« Ϭ Ï­ Ï® ϯ +¢Ð Ï° ϱ ϲ ϳ Ï´ ϵ ϶ Ï· ϸ Ϲ Ϻ Ï» ϼ Ͻ Ͼ Ï¿ +¢Ñ ÏÀ ÏÁ Ï Ïà ÏÄ ÏÅ ÏÆ ÏÇ ÏÈ ÏÉ ÏÊ ÏË ÏÌ ÏÍ ÏÎ ÏÏ +¢Ò ÏÐ ÏÑ ÏÒ ÏÓ ÏÔ ÏÕ ÏÖ Ï× ÏØ ÏÙ ÏÚ ÏÛ ÏÜ ÏÝ ÏÞ Ïß +¢Ó Ïà Ïá Ïâ Ïã Ïä Ïå Ïæ Ïç Ïè Ïé Ïê Ïë Ïì Ïí Ïî Ïï +¢Ô Ïð Ïñ Ïò Ïó Ïô Ïõ Ïö Ï÷ Ïø Ïù Ïú Ïû Ïü Ïý Ïþ + +

    D0 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ Ð@ ÐA ÐB ÐC ÐD ÐE ÐF ÐG ÐH ÐI ÐJ ÐK ÐL ÐM ÐN ÐO +¢´ ÐP ÐQ ÐR ÐS ÐT ÐU ÐV ÐW ÐX ÐY ÐZ Ð[ Ð\ Ð] Ð^ Ð_ +¢µ Ð` Ða Ðb Ðc Ðd Ðe Ðf Ðg Ðh Ði Ðj Ðk Ðl Ðm Ðn Ðo +¢¶ Ðp Ðq Ðr Ðs Ðt Ðu Ðv Ðw Ðx Ðy Ðz Ð{ Ð| Ð} Ð~ +¢Ï Р С Т У Ф Ð¥ Ц Ч Ш Щ Ъ Ы Ь Э Ю Я +¢Ð а б в г д е ж з и й к л м н о п +¢Ñ ÐÀ ÐÁ РÐà ÐÄ ÐÅ ÐÆ ÐÇ ÐÈ ÐÉ ÐÊ ÐË ÐÌ ÐÍ ÐÎ ÐÏ +¢Ò ÐÐ ÐÑ ÐÒ ÐÓ ÐÔ ÐÕ ÐÖ Ð× ÐØ ÐÙ ÐÚ ÐÛ ÐÜ ÐÝ ÐÞ Ðß +¢Ó Ðà Ðá Ðâ Ðã Ðä Ðå Ðæ Ðç Ðè Ðé Ðê Ðë Ðì Ðí Ðî Ðï +¢Ô Ðð Ðñ Ðò Ðó Ðô Ðõ Ðö Ð÷ Ðø Ðù Ðú Ðû Ðü Ðý Ðþ + +

    D1 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ Ñ@ ÑA ÑB ÑC ÑD ÑE ÑF ÑG ÑH ÑI ÑJ ÑK ÑL ÑM ÑN ÑO +¢´ ÑP ÑQ ÑR ÑS ÑT ÑU ÑV ÑW ÑX ÑY ÑZ Ñ[ Ñ\ Ñ] Ñ^ Ñ_ +¢µ Ñ` Ña Ñb Ñc Ñd Ñe Ñf Ñg Ñh Ñi Ñj Ñk Ñl Ñm Ñn Ño +¢¶ Ñp Ñq Ñr Ñs Ñt Ñu Ñv Ñw Ñx Ñy Ñz Ñ{ Ñ| Ñ} Ñ~ +¢Ï Ñ  Ñ¡ Ñ¢ Ñ£ Ѥ Ñ¥ Ѧ ѧ Ѩ Ñ© Ѫ Ñ« Ѭ Ñ­ Ñ® ѯ +¢Ð Ñ° ѱ Ѳ ѳ Ñ´ ѵ Ѷ Ñ· Ѹ ѹ Ѻ Ñ» Ѽ ѽ Ѿ Ñ¿ +¢Ñ ÑÀ ÑÁ Ñ Ñà ÑÄ ÑÅ ÑÆ ÑÇ ÑÈ ÑÉ ÑÊ ÑË ÑÌ ÑÍ ÑÎ ÑÏ +¢Ò ÑÐ ÑÑ ÑÒ ÑÓ ÑÔ ÑÕ ÑÖ Ñ× ÑØ ÑÙ ÑÚ ÑÛ ÑÜ ÑÝ ÑÞ Ñß +¢Ó Ñà Ñá Ñâ Ñã Ñä Ñå Ñæ Ñç Ñè Ñé Ñê Ñë Ñì Ñí Ñî Ñï +¢Ô Ñð Ññ Ñò Ñó Ñô Ñõ Ñö Ñ÷ Ñø Ñù Ñú Ñû Ñü Ñý Ñþ + +

    D2 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ Ò@ ÒA ÒB ÒC ÒD ÒE ÒF ÒG ÒH ÒI ÒJ ÒK ÒL ÒM ÒN ÒO +¢´ ÒP ÒQ ÒR ÒS ÒT ÒU ÒV ÒW ÒX ÒY ÒZ Ò[ Ò\ Ò] Ò^ Ò_ +¢µ Ò` Òa Òb Òc Òd Òe Òf Òg Òh Òi Òj Òk Òl Òm Òn Òo +¢¶ Òp Òq Òr Òs Òt Òu Òv Òw Òx Òy Òz Ò{ Ò| Ò} Ò~ +¢Ï Ò  Ò¡ Ò¢ Ò£ Ò¤ Ò¥ Ò¦ Ò§ Ò¨ Ò© Òª Ò« Ò¬ Ò­ Ò® Ò¯ +¢Ð Ò° Ò± Ò² Ò³ Ò´ Òµ Ò¶ Ò· Ò¸ Ò¹ Òº Ò» Ò¼ Ò½ Ò¾ Ò¿ +¢Ñ ÒÀ ÒÁ Ò Òà ÒÄ ÒÅ ÒÆ ÒÇ ÒÈ ÒÉ ÒÊ ÒË ÒÌ ÒÍ ÒÎ ÒÏ +¢Ò ÒÐ ÒÑ ÒÒ ÒÓ ÒÔ ÒÕ ÒÖ Ò× ÒØ ÒÙ ÒÚ ÒÛ ÒÜ ÒÝ ÒÞ Òß +¢Ó Òà Òá Òâ Òã Òä Òå Òæ Òç Òè Òé Òê Òë Òì Òí Òî Òï +¢Ô Òð Òñ Òò Òó Òô Òõ Òö Ò÷ Òø Òù Òú Òû Òü Òý Òþ + +

    D3 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ Ó@ ÓA ÓB ÓC ÓD ÓE ÓF ÓG ÓH ÓI ÓJ ÓK ÓL ÓM ÓN ÓO +¢´ ÓP ÓQ ÓR ÓS ÓT ÓU ÓV ÓW ÓX ÓY ÓZ Ó[ Ó\ Ó] Ó^ Ó_ +¢µ Ó` Óa Ób Óc Ód Óe Óf Óg Óh Ói Ój Ók Ól Óm Ón Óo +¢¶ Óp Óq Ór Ós Ót Óu Óv Ów Óx Óy Óz Ó{ Ó| Ó} Ó~ +¢Ï Ó  Ó¡ Ó¢ Ó£ Ó¤ Ó¥ Ó¦ Ó§ Ó¨ Ó© Óª Ó« Ó¬ Ó­ Ó® Ó¯ +¢Ð Ó° Ó± Ó² Ó³ Ó´ Óµ Ó¶ Ó· Ó¸ Ó¹ Óº Ó» Ó¼ Ó½ Ó¾ Ó¿ +¢Ñ ÓÀ ÓÁ Ó Óà ÓÄ ÓÅ ÓÆ ÓÇ ÓÈ ÓÉ ÓÊ ÓË ÓÌ ÓÍ ÓÎ ÓÏ +¢Ò ÓÐ ÓÑ ÓÒ ÓÓ ÓÔ ÓÕ ÓÖ Ó× ÓØ ÓÙ ÓÚ ÓÛ ÓÜ ÓÝ ÓÞ Óß +¢Ó Óà Óá Óâ Óã Óä Óå Óæ Óç Óè Óé Óê Óë Óì Óí Óî Óï +¢Ô Óð Óñ Óò Óó Óô Óõ Óö Ó÷ Óø Óù Óú Óû Óü Óý Óþ + +

    D4 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ Ô@ ÔA ÔB ÔC ÔD ÔE ÔF ÔG ÔH ÔI ÔJ ÔK ÔL ÔM ÔN ÔO +¢´ ÔP ÔQ ÔR ÔS ÔT ÔU ÔV ÔW ÔX ÔY ÔZ Ô[ Ô\ Ô] Ô^ Ô_ +¢µ Ô` Ôa Ôb Ôc Ôd Ôe Ôf Ôg Ôh Ôi Ôj Ôk Ôl Ôm Ôn Ôo +¢¶ Ôp Ôq Ôr Ôs Ôt Ôu Ôv Ôw Ôx Ôy Ôz Ô{ Ô| Ô} Ô~ +¢Ï Ô  Ô¡ Ô¢ Ô£ Ô¤ Ô¥ Ô¦ Ô§ Ô¨ Ô© Ôª Ô« Ô¬ Ô­ Ô® Ô¯ +¢Ð Ô° Ô± Ô² Ô³ Ô´ Ôµ Ô¶ Ô· Ô¸ Ô¹ Ôº Ô» Ô¼ Ô½ Ô¾ Ô¿ +¢Ñ ÔÀ ÔÁ Ô Ôà ÔÄ ÔÅ ÔÆ ÔÇ ÔÈ ÔÉ ÔÊ ÔË ÔÌ ÔÍ ÔÎ ÔÏ +¢Ò ÔÐ ÔÑ ÔÒ ÔÓ ÔÔ ÔÕ ÔÖ Ô× ÔØ ÔÙ ÔÚ ÔÛ ÔÜ ÔÝ ÔÞ Ôß +¢Ó Ôà Ôá Ôâ Ôã Ôä Ôå Ôæ Ôç Ôè Ôé Ôê Ôë Ôì Ôí Ôî Ôï +¢Ô Ôð Ôñ Ôò Ôó Ôô Ôõ Ôö Ô÷ Ôø Ôù Ôú Ôû Ôü Ôý Ôþ + +

    D5 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ Õ@ ÕA ÕB ÕC ÕD ÕE ÕF ÕG ÕH ÕI ÕJ ÕK ÕL ÕM ÕN ÕO +¢´ ÕP ÕQ ÕR ÕS ÕT ÕU ÕV ÕW ÕX ÕY ÕZ Õ[ Õ\ Õ] Õ^ Õ_ +¢µ Õ` Õa Õb Õc Õd Õe Õf Õg Õh Õi Õj Õk Õl Õm Õn Õo +¢¶ Õp Õq Õr Õs Õt Õu Õv Õw Õx Õy Õz Õ{ Õ| Õ} Õ~ +¢Ï Õ  Õ¡ Õ¢ Õ£ Õ¤ Õ¥ Õ¦ Õ§ Õ¨ Õ© Õª Õ« Õ¬ Õ­ Õ® Õ¯ +¢Ð Õ° Õ± Õ² Õ³ Õ´ Õµ Õ¶ Õ· Õ¸ Õ¹ Õº Õ» Õ¼ Õ½ Õ¾ Õ¿ +¢Ñ ÕÀ ÕÁ Õ Õà ÕÄ ÕÅ ÕÆ ÕÇ ÕÈ ÕÉ ÕÊ ÕË ÕÌ ÕÍ ÕÎ ÕÏ +¢Ò ÕÐ ÕÑ ÕÒ ÕÓ ÕÔ ÕÕ ÕÖ Õ× ÕØ ÕÙ ÕÚ ÕÛ ÕÜ ÕÝ ÕÞ Õß +¢Ó Õà Õá Õâ Õã Õä Õå Õæ Õç Õè Õé Õê Õë Õì Õí Õî Õï +¢Ô Õð Õñ Õò Õó Õô Õõ Õö Õ÷ Õø Õù Õú Õû Õü Õý Õþ + +

    D6 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ Ö@ ÖA ÖB ÖC ÖD ÖE ÖF ÖG ÖH ÖI ÖJ ÖK ÖL ÖM ÖN ÖO +¢´ ÖP ÖQ ÖR ÖS ÖT ÖU ÖV ÖW ÖX ÖY ÖZ Ö[ Ö\ Ö] Ö^ Ö_ +¢µ Ö` Öa Öb Öc Öd Öe Öf Ög Öh Öi Öj Ök Öl Öm Ön Öo +¢¶ Öp Öq Ör Ös Öt Öu Öv Öw Öx Öy Öz Ö{ Ö| Ö} Ö~ +¢Ï Ö  Ö¡ Ö¢ Ö£ Ö¤ Ö¥ Ö¦ Ö§ Ö¨ Ö© Öª Ö« Ö¬ Ö­ Ö® Ö¯ +¢Ð Ö° Ö± Ö² Ö³ Ö´ Öµ Ö¶ Ö· Ö¸ Ö¹ Öº Ö» Ö¼ Ö½ Ö¾ Ö¿ +¢Ñ ÖÀ ÖÁ Ö Öà ÖÄ ÖÅ ÖÆ ÖÇ ÖÈ ÖÉ ÖÊ ÖË ÖÌ ÖÍ ÖÎ ÖÏ +¢Ò ÖÐ ÖÑ ÖÒ ÖÓ ÖÔ ÖÕ ÖÖ Ö× ÖØ ÖÙ ÖÚ ÖÛ ÖÜ ÖÝ ÖÞ Öß +¢Ó Öà Öá Öâ Öã Öä Öå Öæ Öç Öè Öé Öê Öë Öì Öí Öî Öï +¢Ô Öð Öñ Öò Öó Öô Öõ Öö Ö÷ Öø Öù Öú Öû Öü Öý Öþ + +

    D7 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ×@ ×A ×B ×C ×D ×E ×F ×G ×H ×I ×J ×K ×L ×M ×N ×O +¢´ ×P ×Q ×R ×S ×T ×U ×V ×W ×X ×Y ×Z ×[ ×\ ×] ×^ ×_ +¢µ ×` ×a ×b ×c ×d ×e ×f ×g ×h ×i ×j ×k ×l ×m ×n ×o +¢¶ ×p ×q ×r ×s ×t ×u ×v ×w ×x ×y ×z ×{ ×| ×} ×~ +¢Ï ×  ס ×¢ ×£ פ ×¥ צ ק ר ש ת ׫ ׬ ×­ ×® ׯ +¢Ð ×° ×± ײ ׳ ×´ ×µ ׶ ×· ׸ ×¹ ׺ ×» ×¼ ×½ ×¾ ׿ +¢Ñ ×À ×Á × ×à ×Ä ×Å ×Æ ×Ç ×È ×É ×Ê ×Ë ×Ì ×Í ×Î ×Ï +¢Ò ×Ð ×Ñ ×Ò ×Ó ×Ô ×Õ ×Ö ×× ×Ø ×Ù ×Ú ×Û ×Ü ×Ý ×Þ ×ß +¢Ó ×à ×á ×â ×ã ×ä ×å ×æ ×ç ×è ×é ×ê ×ë ×ì ×í ×î ×ï +¢Ô ×ð ×ñ ×ò ×ó ×ô ×õ ×ö ×÷ ×ø ×ù ×ú ×û ×ü ×ý ×þ + +

    D8 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ Ø@ ØA ØB ØC ØD ØE ØF ØG ØH ØI ØJ ØK ØL ØM ØN ØO +¢´ ØP ØQ ØR ØS ØT ØU ØV ØW ØX ØY ØZ Ø[ Ø\ Ø] Ø^ Ø_ +¢µ Ø` Øa Øb Øc Ød Øe Øf Øg Øh Øi Øj Øk Øl Øm Øn Øo +¢¶ Øp Øq Ør Øs Øt Øu Øv Øw Øx Øy Øz Ø{ Ø| Ø} Ø~ +¢Ï Ø  Ø¡ Ø¢ Ø£ ؤ Ø¥ ئ ا ب Ø© ت Ø« ج Ø­ Ø® د +¢Ð Ø° ر ز س Ø´ ص ض Ø· ظ ع غ Ø» ؼ ؽ ؾ Ø¿ +¢Ñ ØÀ ØÁ Ø Øà ØÄ ØÅ ØÆ ØÇ ØÈ ØÉ ØÊ ØË ØÌ ØÍ ØÎ ØÏ +¢Ò ØÐ ØÑ ØÒ ØÓ ØÔ ØÕ ØÖ Ø× ØØ ØÙ ØÚ ØÛ ØÜ ØÝ ØÞ Øß +¢Ó Øà Øá Øâ Øã Øä Øå Øæ Øç Øè Øé Øê Øë Øì Øí Øî Øï +¢Ô Øð Øñ Øò Øó Øô Øõ Øö Ø÷ Øø Øù Øú Øû Øü Øý Øþ + +

    D9 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ Ù@ ÙA ÙB ÙC ÙD ÙE ÙF ÙG ÙH ÙI ÙJ ÙK ÙL ÙM ÙN ÙO +¢´ ÙP ÙQ ÙR ÙS ÙT ÙU ÙV ÙW ÙX ÙY ÙZ Ù[ Ù\ Ù] Ù^ Ù_ +¢µ Ù` Ùa Ùb Ùc Ùd Ùe Ùf Ùg Ùh Ùi Ùj Ùk Ùl Ùm Ùn Ùo +¢¶ Ùp Ùq Ùr Ùs Ùt Ùu Ùv Ùw Ùx Ùy Ùz Ù{ Ù| Ù} Ù~ +¢Ï Ù  Ù¡ Ù¢ Ù£ Ù¤ Ù¥ Ù¦ Ù§ Ù¨ Ù© Ùª Ù« Ù¬ Ù­ Ù® Ù¯ +¢Ð Ù° Ù± Ù² Ù³ Ù´ Ùµ Ù¶ Ù· Ù¸ Ù¹ Ùº Ù» Ù¼ Ù½ Ù¾ Ù¿ +¢Ñ ÙÀ ÙÁ Ù Ùà ÙÄ ÙÅ ÙÆ ÙÇ ÙÈ ÙÉ ÙÊ ÙË ÙÌ ÙÍ ÙÎ ÙÏ +¢Ò ÙÐ ÙÑ ÙÒ ÙÓ ÙÔ ÙÕ ÙÖ Ù× ÙØ ÙÙ ÙÚ ÙÛ ÙÜ ÙÝ ÙÞ Ùß +¢Ó Ùà Ùá Ùâ Ùã Ùä Ùå Ùæ Ùç Ùè Ùé Ùê Ùë Ùì Ùí Ùî Ùï +¢Ô Ùð Ùñ Ùò Ùó Ùô Ùõ Ùö Ù÷ Ùø Ùù Ùú Ùû Ùü Ùý Ùþ + +

    DA ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ Ú@ ÚA ÚB ÚC ÚD ÚE ÚF ÚG ÚH ÚI ÚJ ÚK ÚL ÚM ÚN ÚO +¢´ ÚP ÚQ ÚR ÚS ÚT ÚU ÚV ÚW ÚX ÚY ÚZ Ú[ Ú\ Ú] Ú^ Ú_ +¢µ Ú` Úa Úb Úc Úd Úe Úf Úg Úh Úi Új Úk Úl Úm Ún Úo +¢¶ Úp Úq Úr Ús Út Úu Úv Úw Úx Úy Úz Ú{ Ú| Ú} Ú~ +¢Ï Ú  Ú¡ Ú¢ Ú£ Ú¤ Ú¥ Ú¦ Ú§ Ú¨ Ú© Úª Ú« Ú¬ Ú­ Ú® Ú¯ +¢Ð Ú° Ú± Ú² Ú³ Ú´ Úµ Ú¶ Ú· Ú¸ Ú¹ Úº Ú» Ú¼ Ú½ Ú¾ Ú¿ +¢Ñ ÚÀ ÚÁ Ú Úà ÚÄ ÚÅ ÚÆ ÚÇ ÚÈ ÚÉ ÚÊ ÚË ÚÌ ÚÍ ÚÎ ÚÏ +¢Ò ÚÐ ÚÑ ÚÒ ÚÓ ÚÔ ÚÕ ÚÖ Ú× ÚØ ÚÙ ÚÚ ÚÛ ÚÜ ÚÝ ÚÞ Úß +¢Ó Úà Úá Úâ Úã Úä Úå Úæ Úç Úè Úé Úê Úë Úì Úí Úî Úï +¢Ô Úð Úñ Úò Úó Úô Úõ Úö Ú÷ Úø Úù Úú Úû Úü Úý Úþ + +

    DB ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ Û@ ÛA ÛB ÛC ÛD ÛE ÛF ÛG ÛH ÛI ÛJ ÛK ÛL ÛM ÛN ÛO +¢´ ÛP ÛQ ÛR ÛS ÛT ÛU ÛV ÛW ÛX ÛY ÛZ Û[ Û\ Û] Û^ Û_ +¢µ Û` Ûa Ûb Ûc Ûd Ûe Ûf Ûg Ûh Ûi Ûj Ûk Ûl Ûm Ûn Ûo +¢¶ Ûp Ûq Ûr Ûs Ût Ûu Ûv Ûw Ûx Ûy Ûz Û{ Û| Û} Û~ +¢Ï Û  Û¡ Û¢ Û£ Û¤ Û¥ Û¦ Û§ Û¨ Û© Ûª Û« Û¬ Û­ Û® Û¯ +¢Ð Û° Û± Û² Û³ Û´ Ûµ Û¶ Û· Û¸ Û¹ Ûº Û» Û¼ Û½ Û¾ Û¿ +¢Ñ ÛÀ ÛÁ Û Ûà ÛÄ ÛÅ ÛÆ ÛÇ ÛÈ ÛÉ ÛÊ ÛË ÛÌ ÛÍ ÛÎ ÛÏ +¢Ò ÛÐ ÛÑ ÛÒ ÛÓ ÛÔ ÛÕ ÛÖ Û× ÛØ ÛÙ ÛÚ ÛÛ ÛÜ ÛÝ ÛÞ Ûß +¢Ó Ûà Ûá Ûâ Ûã Ûä Ûå Ûæ Ûç Ûè Ûé Ûê Ûë Ûì Ûí Ûî Ûï +¢Ô Ûð Ûñ Ûò Ûó Ûô Ûõ Ûö Û÷ Ûø Ûù Ûú Ûû Ûü Ûý Ûþ + +

    DC ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ Ü@ ÜA ÜB ÜC ÜD ÜE ÜF ÜG ÜH ÜI ÜJ ÜK ÜL ÜM ÜN ÜO +¢´ ÜP ÜQ ÜR ÜS ÜT ÜU ÜV ÜW ÜX ÜY ÜZ Ü[ Ü\ Ü] Ü^ Ü_ +¢µ Ü` Üa Üb Üc Üd Üe Üf Üg Üh Üi Üj Ük Ül Üm Ün Üo +¢¶ Üp Üq Ür Üs Üt Üu Üv Üw Üx Üy Üz Ü{ Ü| Ü} Ü~ +¢Ï Ü  Ü¡ Ü¢ Ü£ ܤ Ü¥ ܦ ܧ ܨ Ü© ܪ Ü« ܬ Ü­ Ü® ܯ +¢Ð Ü° ܱ ܲ ܳ Ü´ ܵ ܶ Ü· ܸ ܹ ܺ Ü» ܼ ܽ ܾ Ü¿ +¢Ñ ÜÀ ÜÁ Ü Üà ÜÄ ÜÅ ÜÆ ÜÇ ÜÈ ÜÉ ÜÊ ÜË ÜÌ ÜÍ ÜÎ ÜÏ +¢Ò ÜÐ ÜÑ ÜÒ ÜÓ ÜÔ ÜÕ ÜÖ Ü× ÜØ ÜÙ ÜÚ ÜÛ ÜÜ ÜÝ ÜÞ Üß +¢Ó Üà Üá Üâ Üã Üä Üå Üæ Üç Üè Üé Üê Üë Üì Üí Üî Üï +¢Ô Üð Üñ Üò Üó Üô Üõ Üö Ü÷ Üø Üù Üú Üû Üü Üý Üþ + +

    DD ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ Ý@ ÝA ÝB ÝC ÝD ÝE ÝF ÝG ÝH ÝI ÝJ ÝK ÝL ÝM ÝN ÝO +¢´ ÝP ÝQ ÝR ÝS ÝT ÝU ÝV ÝW ÝX ÝY ÝZ Ý[ Ý\ Ý] Ý^ Ý_ +¢µ Ý` Ýa Ýb Ýc Ýd Ýe Ýf Ýg Ýh Ýi Ýj Ýk Ýl Ým Ýn Ýo +¢¶ Ýp Ýq Ýr Ýs Ýt Ýu Ýv Ýw Ýx Ýy Ýz Ý{ Ý| Ý} Ý~ +¢Ï Ý  Ý¡ Ý¢ Ý£ ݤ Ý¥ ݦ ݧ ݨ Ý© ݪ Ý« ݬ Ý­ Ý® ݯ +¢Ð Ý° ݱ ݲ ݳ Ý´ ݵ ݶ Ý· ݸ ݹ ݺ Ý» ݼ ݽ ݾ Ý¿ +¢Ñ ÝÀ ÝÁ Ý Ýà ÝÄ ÝÅ ÝÆ ÝÇ ÝÈ ÝÉ ÝÊ ÝË ÝÌ ÝÍ ÝÎ ÝÏ +¢Ò ÝÐ ÝÑ ÝÒ ÝÓ ÝÔ ÝÕ ÝÖ Ý× ÝØ ÝÙ ÝÚ ÝÛ ÝÜ ÝÝ ÝÞ Ýß +¢Ó Ýà Ýá Ýâ Ýã Ýä Ýå Ýæ Ýç Ýè Ýé Ýê Ýë Ýì Ýí Ýî Ýï +¢Ô Ýð Ýñ Ýò Ýó Ýô Ýõ Ýö Ý÷ Ýø Ýù Ýú Ýû Ýü Ýý Ýþ + +

    DE ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ Þ@ ÞA ÞB ÞC ÞD ÞE ÞF ÞG ÞH ÞI ÞJ ÞK ÞL ÞM ÞN ÞO +¢´ ÞP ÞQ ÞR ÞS ÞT ÞU ÞV ÞW ÞX ÞY ÞZ Þ[ Þ\ Þ] Þ^ Þ_ +¢µ Þ` Þa Þb Þc Þd Þe Þf Þg Þh Þi Þj Þk Þl Þm Þn Þo +¢¶ Þp Þq Þr Þs Þt Þu Þv Þw Þx Þy Þz Þ{ Þ| Þ} Þ~ +¢Ï Þ  Þ¡ Þ¢ Þ£ Þ¤ Þ¥ Þ¦ Þ§ Þ¨ Þ© Þª Þ« Þ¬ Þ­ Þ® Þ¯ +¢Ð Þ° Þ± Þ² Þ³ Þ´ Þµ Þ¶ Þ· Þ¸ Þ¹ Þº Þ» Þ¼ Þ½ Þ¾ Þ¿ +¢Ñ ÞÀ ÞÁ Þ Þà ÞÄ ÞÅ ÞÆ ÞÇ ÞÈ ÞÉ ÞÊ ÞË ÞÌ ÞÍ ÞÎ ÞÏ +¢Ò ÞÐ ÞÑ ÞÒ ÞÓ ÞÔ ÞÕ ÞÖ Þ× ÞØ ÞÙ ÞÚ ÞÛ ÞÜ ÞÝ ÞÞ Þß +¢Ó Þà Þá Þâ Þã Þä Þå Þæ Þç Þè Þé Þê Þë Þì Þí Þî Þï +¢Ô Þð Þñ Þò Þó Þô Þõ Þö Þ÷ Þø Þù Þú Þû Þü Þý Þþ + +

    DF ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ß@ ßA ßB ßC ßD ßE ßF ßG ßH ßI ßJ ßK ßL ßM ßN ßO +¢´ ßP ßQ ßR ßS ßT ßU ßV ßW ßX ßY ßZ ß[ ß\ ß] ß^ ß_ +¢µ ß` ßa ßb ßc ßd ße ßf ßg ßh ßi ßj ßk ßl ßm ßn ßo +¢¶ ßp ßq ßr ßs ßt ßu ßv ßw ßx ßy ßz ß{ ß| ß} ß~ +¢Ï ß  ß¡ ߢ ߣ ߤ ߥ ߦ ߧ ߨ ß© ߪ ß« ߬ ß­ ß® ߯ +¢Ð ß° ß± ß² ß³ ß´ ßµ ߶ ß· ߸ ß¹ ߺ ß» ß¼ ß½ ß¾ ß¿ +¢Ñ ßÀ ßÁ ß ßà ßÄ ßÅ ßÆ ßÇ ßÈ ßÉ ßÊ ßË ßÌ ßÍ ßÎ ßÏ +¢Ò ßÐ ßÑ ßÒ ßÓ ßÔ ßÕ ßÖ ß× ßØ ßÙ ßÚ ßÛ ßÜ ßÝ ßÞ ßß +¢Ó ßà ßá ßâ ßã ßä ßå ßæ ßç ßè ßé ßê ßë ßì ßí ßî ßï +¢Ô ßð ßñ ßò ßó ßô ßõ ßö ß÷ ßø ßù ßú ßû ßü ßý ßþ + +

    E0 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ à@ àA àB àC àD àE àF àG àH àI àJ àK àL àM àN àO +¢´ àP àQ àR àS àT àU àV àW àX àY àZ à[ à\ à] à^ à_ +¢µ à` àa àb àc àd àe àf àg àh ài àj àk àl àm àn ào +¢¶ àp àq àr às àt àu àv àw àx ày àz à{ à| à} à~ +¢Ï à  à¡ à¢ à£ à¤ à¥ à¦ à§ à¨ à© àª à« à¬ à­ à® à¯ +¢Ð ఠౠಠೠഠൠච෠ภ๠ຠ໠༠འྠ࿠+¢Ñ àÀ àÁ à àà àÄ àÅ àÆ àÇ àÈ àÉ àÊ àË àÌ àÍ àÎ àÏ +¢Ò àÐ àÑ àÒ àÓ àÔ àÕ àÖ à× àØ àÙ àÚ àÛ àÜ àÝ àÞ àß +¢Ó àà àá àâ àã àä àå àæ àç àè àé àê àë àì àí àî àï +¢Ô àð àñ àò àó àô àõ àö à÷ àø àù àú àû àü àý àþ + +

    E1 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ á@ áA áB áC áD áE áF áG áH áI áJ áK áL áM áN áO +¢´ áP áQ áR áS áT áU áV áW áX áY áZ á[ á\ á] á^ á_ +¢µ á` áa áb ác ád áe áf ág áh ái áj ák ál ám án áo +¢¶ áp áq ár ás át áu áv áw áx áy áz á{ á| á} á~ +¢Ï á  á¡ á¢ á£ á¤ á¥ á¦ á§ á¨ á© áª á« á¬ á­ á® á¯ +¢Ð ᰠᱠᲠ᳠ᴠᵠᶠᷠḠṠẠỠἠὠᾠῠ+¢Ñ áÀ áÁ á áà áÄ áÅ áÆ áÇ áÈ áÉ áÊ áË áÌ áÍ áÎ áÏ +¢Ò áÐ áÑ áÒ áÓ áÔ áÕ áÖ á× áØ áÙ áÚ áÛ áÜ áÝ áÞ áß +¢Ó áà áá áâ áã áä áå áæ áç áè áé áê áë áì áí áî áï +¢Ô áð áñ áò áó áô áõ áö á÷ áø áù áú áû áü áý áþ + +

    E2 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ â@ âA âB âC âD âE âF âG âH âI âJ âK âL âM âN âO +¢´ âP âQ âR âS âT âU âV âW âX âY âZ â[ â\ â] â^ â_ +¢µ â` âa âb âc âd âe âf âg âh âi âj âk âl âm ân âo +¢¶ âp âq âr âs ât âu âv âw âx ây âz â{ â| â} â~ +¢Ï â  â¡ â¢ â£ â¤ â¥ â¦ â§ â¨ â© âª â« â¬ â­ â® â¯ +¢Ð ⰠⱠⲠⳠⴠⵠⶠⷠ⸠⹠⺠⻠⼠⽠⾠⿠+¢Ñ âÀ âÁ â âà âÄ âÅ âÆ âÇ âÈ âÉ âÊ âË âÌ âÍ âÎ âÏ +¢Ò âÐ âÑ âÒ âÓ âÔ âÕ âÖ â× âØ âÙ âÚ âÛ âÜ âÝ âÞ âß +¢Ó âà âá ââ âã âä âå âæ âç âè âé âê âë âì âí âî âï +¢Ô âð âñ âò âó âô âõ âö â÷ âø âù âú âû âü âý âþ + +

    E3 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ã@ ãA ãB ãC ãD ãE ãF ãG ãH ãI ãJ ãK ãL ãM ãN ãO +¢´ ãP ãQ ãR ãS ãT ãU ãV ãW ãX ãY ãZ ã[ ã\ ã] ã^ ã_ +¢µ ã` ãa ãb ãc ãd ãe ãf ãg ãh ãi ãj ãk ãl ãm ãn ão +¢¶ ãp ãq ãr ãs ãt ãu ãv ãw ãx ãy ãz ã{ ã| ã} ã~ +¢Ï ã  ã¡ ã¢ ã£ ã¤ ã¥ ã¦ ã§ ã¨ ã© ãª ã« ã¬ ã­ ã® ã¯ +¢Ð 㰠㱠㲠㳠㴠㵠㶠㷠㸠㹠㺠㻠㼠㽠㾠㿠+¢Ñ ãÀ ãÁ ã ãà ãÄ ãÅ ãÆ ãÇ ãÈ ãÉ ãÊ ãË ãÌ ãÍ ãÎ ãÏ +¢Ò ãÐ ãÑ ãÒ ãÓ ãÔ ãÕ ãÖ ã× ãØ ãÙ ãÚ ãÛ ãÜ ãÝ ãÞ ãß +¢Ó ãà ãá ãâ ãã ãä ãå ãæ ãç ãè ãé ãê ãë ãì ãí ãî ãï +¢Ô ãð ãñ ãò ãó ãô ãõ ãö ã÷ ãø ãù ãú ãû ãü ãý ãþ + +

    E4 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ä@ äA äB äC äD äE äF äG äH äI äJ äK äL äM äN äO +¢´ äP äQ äR äS äT äU äV äW äX äY äZ ä[ ä\ ä] ä^ ä_ +¢µ ä` äa äb äc äd äe äf äg äh äi äj äk äl äm än äo +¢¶ äp äq är äs ät äu äv äw äx äy äz ä{ ä| ä} ä~ +¢Ï ä  ä¡ ä¢ ä£ ä¤ ä¥ ä¦ ä§ ä¨ ä© äª ä« ä¬ ä­ ä® ä¯ +¢Ð ä° ä± ä² ä³ ä´ äµ ä¶ ä· ä¸ ä¹ äº ä» ä¼ ä½ ä¾ ä¿ +¢Ñ äÀ äÁ ä äà äÄ äÅ äÆ äÇ äÈ äÉ äÊ äË äÌ äÍ äÎ äÏ +¢Ò äÐ äÑ äÒ äÓ äÔ äÕ äÖ ä× äØ äÙ äÚ äÛ äÜ äÝ äÞ äß +¢Ó äà äá äâ äã ää äå äæ äç äè äé äê äë äì äí äî äï +¢Ô äð äñ äò äó äô äõ äö ä÷ äø äù äú äû äü äý äþ + +

    E5 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ å@ åA åB åC åD åE åF åG åH åI åJ åK åL åM åN åO +¢´ åP åQ åR åS åT åU åV åW åX åY åZ å[ å\ å] å^ å_ +¢µ å` åa åb åc åd åe åf åg åh åi åj åk ål åm ån åo +¢¶ åp åq år ås åt åu åv åw åx åy åz å{ å| å} å~ +¢Ï å  å¡ å¢ å£ å¤ å¥ å¦ å§ å¨ å© åª å« å¬ å­ å® å¯ +¢Ð å° å± å² å³ å´ åµ å¶ å· å¸ å¹ åº å» å¼ å½ å¾ å¿ +¢Ñ åÀ åÁ å åà åÄ åÅ åÆ åÇ åÈ åÉ åÊ åË åÌ åÍ åÎ åÏ +¢Ò åÐ åÑ åÒ åÓ åÔ åÕ åÖ å× åØ åÙ åÚ åÛ åÜ åÝ åÞ åß +¢Ó åà åá åâ åã åä åå åæ åç åè åé åê åë åì åí åî åï +¢Ô åð åñ åò åó åô åõ åö å÷ åø åù åú åû åü åý åþ + +

    E6 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ æ@ æA æB æC æD æE æF æG æH æI æJ æK æL æM æN æO +¢´ æP æQ æR æS æT æU æV æW æX æY æZ æ[ æ\ æ] æ^ æ_ +¢µ æ` æa æb æc æd æe æf æg æh æi æj æk æl æm æn æo +¢¶ æp æq ær æs æt æu æv æw æx æy æz æ{ æ| æ} æ~ +¢Ï æ  æ¡ æ¢ æ£ æ¤ æ¥ æ¦ æ§ æ¨ æ© æª æ« æ¬ æ­ æ® æ¯ +¢Ð æ° æ± æ² æ³ æ´ æµ æ¶ æ· æ¸ æ¹ æº æ» æ¼ æ½ æ¾ æ¿ +¢Ñ æÀ æÁ æ æà æÄ æÅ æÆ æÇ æÈ æÉ æÊ æË æÌ æÍ æÎ æÏ +¢Ò æÐ æÑ æÒ æÓ æÔ æÕ æÖ æ× æØ æÙ æÚ æÛ æÜ æÝ æÞ æß +¢Ó æà æá æâ æã æä æå ææ æç æè æé æê æë æì æí æî æï +¢Ô æð æñ æò æó æô æõ æö æ÷ æø æù æú æû æü æý æþ + +

    E7 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ç@ çA çB çC çD çE çF çG çH çI çJ çK çL çM çN çO +¢´ çP çQ çR çS çT çU çV çW çX çY çZ ç[ ç\ ç] ç^ ç_ +¢µ ç` ça çb çc çd çe çf çg çh çi çj çk çl çm çn ço +¢¶ çp çq çr çs çt çu çv çw çx çy çz ç{ ç| ç} ç~ +¢Ï ç  ç¡ ç¢ ç£ ç¤ ç¥ ç¦ ç§ ç¨ ç© çª ç« ç¬ ç­ ç® ç¯ +¢Ð ç° ç± ç² ç³ ç´ çµ ç¶ ç· ç¸ ç¹ çº ç» ç¼ ç½ ç¾ ç¿ +¢Ñ çÀ çÁ ç çà çÄ çÅ çÆ çÇ çÈ çÉ çÊ çË çÌ çÍ çÎ çÏ +¢Ò çÐ çÑ çÒ çÓ çÔ çÕ çÖ ç× çØ çÙ çÚ çÛ çÜ çÝ çÞ çß +¢Ó çà çá çâ çã çä çå çæ çç çè çé çê çë çì çí çî çï +¢Ô çð çñ çò çó çô çõ çö ç÷ çø çù çú çû çü çý çþ + +

    E8 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ è@ èA èB èC èD èE èF èG èH èI èJ èK èL èM èN èO +¢´ èP èQ èR èS èT èU èV èW èX èY èZ è[ è\ è] è^ è_ +¢µ è` èa èb èc èd èe èf èg èh èi èj èk èl èm èn èo +¢¶ èp èq èr ès èt èu èv èw èx èy èz è{ è| è} è~ +¢Ï è  è¡ è¢ è£ è¤ è¥ è¦ è§ è¨ è© èª è« è¬ è­ è® è¯ +¢Ð è° è± è² è³ è´ èµ è¶ è· è¸ è¹ èº è» è¼ è½ è¾ è¿ +¢Ñ èÀ èÁ è èà èÄ èÅ èÆ èÇ èÈ èÉ èÊ èË èÌ èÍ èÎ èÏ +¢Ò èÐ èÑ èÒ èÓ èÔ èÕ èÖ è× èØ èÙ èÚ èÛ èÜ èÝ èÞ èß +¢Ó èà èá èâ èã èä èå èæ èç èè èé èê èë èì èí èî èï +¢Ô èð èñ èò èó èô èõ èö è÷ èø èù èú èû èü èý èþ + +

    E9 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ é@ éA éB éC éD éE éF éG éH éI éJ éK éL éM éN éO +¢´ éP éQ éR éS éT éU éV éW éX éY éZ é[ é\ é] é^ é_ +¢µ é` éa éb éc éd ée éf ég éh éi éj ék él ém én éo +¢¶ ép éq ér és ét éu év éw éx éy éz é{ é| é} é~ +¢Ï é  é¡ é¢ é£ é¤ é¥ é¦ é§ é¨ é© éª é« é¬ é­ é® é¯ +¢Ð é° é± é² é³ é´ éµ é¶ é· é¸ é¹ éº é» é¼ é½ é¾ é¿ +¢Ñ éÀ éÁ é éà éÄ éÅ éÆ éÇ éÈ éÉ éÊ éË éÌ éÍ éÎ éÏ +¢Ò éÐ éÑ éÒ éÓ éÔ éÕ éÖ é× éØ éÙ éÚ éÛ éÜ éÝ éÞ éß +¢Ó éà éá éâ éã éä éå éæ éç éè éé éê éë éì éí éî éï +¢Ô éð éñ éò éó éô éõ éö é÷ éø éù éú éû éü éý éþ + +

    EA ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ê@ êA êB êC êD êE êF êG êH êI êJ êK êL êM êN êO +¢´ êP êQ êR êS êT êU êV êW êX êY êZ ê[ ê\ ê] ê^ ê_ +¢µ ê` êa êb êc êd êe êf êg êh êi êj êk êl êm ên êo +¢¶ êp êq êr ês êt êu êv êw êx êy êz ê{ ê| ê} ê~ +¢Ï ê  ê¡ ê¢ ê£ ê¤ ê¥ ê¦ ê§ ê¨ ê© êª ê« ê¬ ê­ ê® ê¯ +¢Ð ê° ê± ê² ê³ ê´ êµ ê¶ ê· ê¸ ê¹ êº ê» ê¼ ê½ ê¾ ê¿ +¢Ñ êÀ êÁ ê êà êÄ êÅ êÆ êÇ êÈ êÉ êÊ êË êÌ êÍ êÎ êÏ +¢Ò êÐ êÑ êÒ êÓ êÔ êÕ êÖ ê× êØ êÙ êÚ êÛ êÜ êÝ êÞ êß +¢Ó êà êá êâ êã êä êå êæ êç êè êé êê êë êì êí êî êï +¢Ô êð êñ êò êó êô êõ êö ê÷ êø êù êú êû êü êý êþ + +

    EB ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ë@ ëA ëB ëC ëD ëE ëF ëG ëH ëI ëJ ëK ëL ëM ëN ëO +¢´ ëP ëQ ëR ëS ëT ëU ëV ëW ëX ëY ëZ ë[ ë\ ë] ë^ ë_ +¢µ ë` ëa ëb ëc ëd ëe ëf ëg ëh ëi ëj ëk ël ëm ën ëo +¢¶ ëp ëq ër ës ët ëu ëv ëw ëx ëy ëz ë{ ë| ë} ë~ +¢Ï ë  ë¡ ë¢ ë£ ë¤ ë¥ ë¦ ë§ ë¨ ë© ëª ë« ë¬ ë­ ë® ë¯ +¢Ð ë° ë± ë² ë³ ë´ ëµ ë¶ ë· ë¸ ë¹ ëº ë» ë¼ ë½ ë¾ ë¿ +¢Ñ ëÀ ëÁ ë ëà ëÄ ëÅ ëÆ ëÇ ëÈ ëÉ ëÊ ëË ëÌ ëÍ ëÎ ëÏ +¢Ò ëÐ ëÑ ëÒ ëÓ ëÔ ëÕ ëÖ ë× ëØ ëÙ ëÚ ëÛ ëÜ ëÝ ëÞ ëß +¢Ó ëà ëá ëâ ëã ëä ëå ëæ ëç ëè ëé ëê ëë ëì ëí ëî ëï +¢Ô ëð ëñ ëò ëó ëô ëõ ëö ë÷ ëø ëù ëú ëû ëü ëý ëþ + +

    EC ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ì@ ìA ìB ìC ìD ìE ìF ìG ìH ìI ìJ ìK ìL ìM ìN ìO +¢´ ìP ìQ ìR ìS ìT ìU ìV ìW ìX ìY ìZ ì[ ì\ ì] ì^ ì_ +¢µ ì` ìa ìb ìc ìd ìe ìf ìg ìh ìi ìj ìk ìl ìm ìn ìo +¢¶ ìp ìq ìr ìs ìt ìu ìv ìw ìx ìy ìz ì{ ì| ì} ì~ +¢Ï ì  ì¡ ì¢ ì£ ì¤ ì¥ ì¦ ì§ ì¨ ì© ìª ì« ì¬ ì­ ì® ì¯ +¢Ð ì° ì± ì² ì³ ì´ ìµ ì¶ ì· ì¸ ì¹ ìº ì» ì¼ ì½ ì¾ ì¿ +¢Ñ ìÀ ìÁ ì ìà ìÄ ìÅ ìÆ ìÇ ìÈ ìÉ ìÊ ìË ìÌ ìÍ ìÎ ìÏ +¢Ò ìÐ ìÑ ìÒ ìÓ ìÔ ìÕ ìÖ ì× ìØ ìÙ ìÚ ìÛ ìÜ ìÝ ìÞ ìß +¢Ó ìà ìá ìâ ìã ìä ìå ìæ ìç ìè ìé ìê ìë ìì ìí ìî ìï +¢Ô ìð ìñ ìò ìó ìô ìõ ìö ì÷ ìø ìù ìú ìû ìü ìý ìþ + +

    ED ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ í@ íA íB íC íD íE íF íG íH íI íJ íK íL íM íN íO +¢´ íP íQ íR íS íT íU íV íW íX íY íZ í[ í\ í] í^ í_ +¢µ í` ía íb íc íd íe íf íg íh íi íj ík íl ím ín ío +¢¶ íp íq ír ís ít íu ív íw íx íy íz í{ í| í} í~ +¢Ï í  í¡ í¢ í£ í¤ í¥ í¦ í§ í¨ í© íª í« í¬ í­ í® í¯ +¢Ð í° í± í² í³ í´ íµ í¶ í· í¸ í¹ íº í» í¼ í½ í¾ í¿ +¢Ñ íÀ íÁ í íà íÄ íÅ íÆ íÇ íÈ íÉ íÊ íË íÌ íÍ íÎ íÏ +¢Ò íÐ íÑ íÒ íÓ íÔ íÕ íÖ í× íØ íÙ íÚ íÛ íÜ íÝ íÞ íß +¢Ó íà íá íâ íã íä íå íæ íç íè íé íê íë íì íí íî íï +¢Ô íð íñ íò íó íô íõ íö í÷ íø íù íú íû íü íý íþ + +

    EE ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ î@ îA îB îC îD îE îF îG îH îI îJ îK îL îM îN îO +¢´ îP îQ îR îS îT îU îV îW îX îY îZ î[ î\ î] î^ î_ +¢µ î` îa îb îc îd îe îf îg îh îi îj îk îl îm în îo +¢¶ îp îq îr îs ît îu îv îw îx îy îz î{ î| î} î~ +¢Ï î  î¡ î¢ î£ î¤ î¥ î¦ î§ î¨ î© îª î« î¬ î­ î® î¯ +¢Ð î° î± î² î³ î´ îµ î¶ î· î¸ î¹ îº î» î¼ î½ î¾ î¿ +¢Ñ îÀ îÁ î îà îÄ îÅ îÆ îÇ îÈ îÉ îÊ îË îÌ îÍ îÎ îÏ +¢Ò îÐ îÑ îÒ îÓ îÔ îÕ îÖ î× îØ îÙ îÚ îÛ îÜ îÝ îÞ îß +¢Ó îà îá îâ îã îä îå îæ îç îè îé îê îë îì îí îî îï +¢Ô îð îñ îò îó îô îõ îö î÷ îø îù îú îû îü îý îþ + +

    EF ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ï@ ïA ïB ïC ïD ïE ïF ïG ïH ïI ïJ ïK ïL ïM ïN ïO +¢´ ïP ïQ ïR ïS ïT ïU ïV ïW ïX ïY ïZ ï[ ï\ ï] ï^ ï_ +¢µ ï` ïa ïb ïc ïd ïe ïf ïg ïh ïi ïj ïk ïl ïm ïn ïo +¢¶ ïp ïq ïr ïs ït ïu ïv ïw ïx ïy ïz ï{ ï| ï} ï~ +¢Ï ï  ï¡ ï¢ ï£ ï¤ ï¥ ï¦ ï§ ï¨ ï© ïª ï« ï¬ ï­ ï® ï¯ +¢Ð ï° ï± ï² ï³ ï´ ïµ ï¶ ï· ï¸ ï¹ ïº ï» ï¼ ï½ ï¾ ï¿ +¢Ñ ïÀ ïÁ ï ïà ïÄ ïÅ ïÆ ïÇ ïÈ ïÉ ïÊ ïË ïÌ ïÍ ïÎ ïÏ +¢Ò ïÐ ïÑ ïÒ ïÓ ïÔ ïÕ ïÖ ï× ïØ ïÙ ïÚ ïÛ ïÜ ïÝ ïÞ ïß +¢Ó ïà ïá ïâ ïã ïä ïå ïæ ïç ïè ïé ïê ïë ïì ïí ïî ïï +¢Ô ïð ïñ ïò ïó ïô ïõ ïö ï÷ ïø ïù ïú ïû ïü ïý ïþ + +

    F0 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ð@ ðA ðB ðC ðD ðE ðF ðG ðH ðI ðJ ðK ðL ðM ðN ðO +¢´ ðP ðQ ðR ðS ðT ðU ðV ðW ðX ðY ðZ ð[ ð\ ð] ð^ ð_ +¢µ ð` ða ðb ðc ðd ðe ðf ðg ðh ði ðj ðk ðl ðm ðn ðo +¢¶ ðp ðq ðr ðs ðt ðu ðv ðw ðx ðy ðz ð{ ð| ð} ð~ +¢Ï ð  ð¡ ð¢ ð£ ð¤ ð¥ ð¦ ð§ ð¨ ð© ðª ð« ð¬ ð­ ð® ð¯ +¢Ð ð° ð± ð² ð³ ð´ ðµ ð¶ ð· ð¸ ð¹ ðº ð» ð¼ ð½ ð¾ ð¿ +¢Ñ ðÀ ðÁ ð ðà ðÄ ðÅ ðÆ ðÇ ðÈ ðÉ ðÊ ðË ðÌ ðÍ ðÎ ðÏ +¢Ò ðÐ ðÑ ðÒ ðÓ ðÔ ðÕ ðÖ ð× ðØ ðÙ ðÚ ðÛ ðÜ ðÝ ðÞ ðß +¢Ó ðà ðá ðâ ðã ðä ðå ðæ ðç ðè ðé ðê ðë ðì ðí ðî ðï +¢Ô ðð ðñ ðò ðó ðô ðõ ðö ð÷ ðø ðù ðú ðû ðü ðý ðþ + +

    F1 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ñ@ ñA ñB ñC ñD ñE ñF ñG ñH ñI ñJ ñK ñL ñM ñN ñO +¢´ ñP ñQ ñR ñS ñT ñU ñV ñW ñX ñY ñZ ñ[ ñ\ ñ] ñ^ ñ_ +¢µ ñ` ña ñb ñc ñd ñe ñf ñg ñh ñi ñj ñk ñl ñm ñn ño +¢¶ ñp ñq ñr ñs ñt ñu ñv ñw ñx ñy ñz ñ{ ñ| ñ} ñ~ +¢Ï ñ  ñ¡ ñ¢ ñ£ ñ¤ ñ¥ ñ¦ ñ§ ñ¨ ñ© ñª ñ« ñ¬ ñ­ ñ® ñ¯ +¢Ð ñ° ñ± ñ² ñ³ ñ´ ñµ ñ¶ ñ· ñ¸ ñ¹ ñº ñ» ñ¼ ñ½ ñ¾ ñ¿ +¢Ñ ñÀ ñÁ ñ ñà ñÄ ñÅ ñÆ ñÇ ñÈ ñÉ ñÊ ñË ñÌ ñÍ ñÎ ñÏ +¢Ò ñÐ ñÑ ñÒ ñÓ ñÔ ñÕ ñÖ ñ× ñØ ñÙ ñÚ ñÛ ñÜ ñÝ ñÞ ñß +¢Ó ñà ñá ñâ ñã ñä ñå ñæ ñç ñè ñé ñê ñë ñì ñí ñî ñï +¢Ô ñð ññ ñò ñó ñô ñõ ñö ñ÷ ñø ñù ñú ñû ñü ñý ñþ + +

    F2 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ò@ òA òB òC òD òE òF òG òH òI òJ òK òL òM òN òO +¢´ òP òQ òR òS òT òU òV òW òX òY òZ ò[ ò\ ò] ò^ ò_ +¢µ ò` òa òb òc òd òe òf òg òh òi òj òk òl òm òn òo +¢¶ òp òq òr òs òt òu òv òw òx òy òz ò{ ò| ò} ò~ +¢Ï ò  ò¡ ò¢ ò£ ò¤ ò¥ ò¦ ò§ ò¨ ò© òª ò« ò¬ ò­ ò® ò¯ +¢Ð ò° ò± ò² ò³ ò´ òµ ò¶ ò· ò¸ ò¹ òº ò» ò¼ ò½ ò¾ ò¿ +¢Ñ òÀ òÁ ò òà òÄ òÅ òÆ òÇ òÈ òÉ òÊ òË òÌ òÍ òÎ òÏ +¢Ò òÐ òÑ òÒ òÓ òÔ òÕ òÖ ò× òØ òÙ òÚ òÛ òÜ òÝ òÞ òß +¢Ó òà òá òâ òã òä òå òæ òç òè òé òê òë òì òí òî òï +¢Ô òð òñ òò òó òô òõ òö ò÷ òø òù òú òû òü òý òþ + +

    F3 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ó@ óA óB óC óD óE óF óG óH óI óJ óK óL óM óN óO +¢´ óP óQ óR óS óT óU óV óW óX óY óZ ó[ ó\ ó] ó^ ó_ +¢µ ó` óa ób óc ód óe óf óg óh ói ój ók ól óm ón óo +¢¶ óp óq ór ós ót óu óv ów óx óy óz ó{ ó| ó} ó~ +¢Ï ó  ó¡ ó¢ ó£ ó¤ ó¥ ó¦ ó§ ó¨ ó© óª ó« ó¬ ó­ ó® ó¯ +¢Ð ó° ó± ó² ó³ ó´ óµ ó¶ ó· ó¸ ó¹ óº ó» ó¼ ó½ ó¾ ó¿ +¢Ñ óÀ óÁ ó óà óÄ óÅ óÆ óÇ óÈ óÉ óÊ óË óÌ óÍ óÎ óÏ +¢Ò óÐ óÑ óÒ óÓ óÔ óÕ óÖ ó× óØ óÙ óÚ óÛ óÜ óÝ óÞ óß +¢Ó óà óá óâ óã óä óå óæ óç óè óé óê óë óì óí óî óï +¢Ô óð óñ óò óó óô óõ óö ó÷ óø óù óú óû óü óý óþ + +

    F4 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ô@ ôA ôB ôC ôD ôE ôF ôG ôH ôI ôJ ôK ôL ôM ôN ôO +¢´ ôP ôQ ôR ôS ôT ôU ôV ôW ôX ôY ôZ ô[ ô\ ô] ô^ ô_ +¢µ ô` ôa ôb ôc ôd ôe ôf ôg ôh ôi ôj ôk ôl ôm ôn ôo +¢¶ ôp ôq ôr ôs ôt ôu ôv ôw ôx ôy ôz ô{ ô| ô} ô~ +¢Ï ô  ô¡ ô¢ ô£ ô¤ ô¥ ô¦ ô§ ô¨ ô© ôª ô« ô¬ ô­ ô® ô¯ +¢Ð ô° ô± ô² ô³ ô´ ôµ ô¶ ô· ô¸ ô¹ ôº ô» ô¼ ô½ ô¾ ô¿ +¢Ñ ôÀ ôÁ ô ôà ôÄ ôÅ ôÆ ôÇ ôÈ ôÉ ôÊ ôË ôÌ ôÍ ôÎ ôÏ +¢Ò ôÐ ôÑ ôÒ ôÓ ôÔ ôÕ ôÖ ô× ôØ ôÙ ôÚ ôÛ ôÜ ôÝ ôÞ ôß +¢Ó ôà ôá ôâ ôã ôä ôå ôæ ôç ôè ôé ôê ôë ôì ôí ôî ôï +¢Ô ôð ôñ ôò ôó ôô ôõ ôö ô÷ ôø ôù ôú ôû ôü ôý ôþ + +

    F5 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ õ@ õA õB õC õD õE õF õG õH õI õJ õK õL õM õN õO +¢´ õP õQ õR õS õT õU õV õW õX õY õZ õ[ õ\ õ] õ^ õ_ +¢µ õ` õa õb õc õd õe õf õg õh õi õj õk õl õm õn õo +¢¶ õp õq õr õs õt õu õv õw õx õy õz õ{ õ| õ} õ~ +¢Ï õ  õ¡ õ¢ õ£ õ¤ õ¥ õ¦ õ§ õ¨ õ© õª õ« õ¬ õ­ õ® õ¯ +¢Ð õ° õ± õ² õ³ õ´ õµ õ¶ õ· õ¸ õ¹ õº õ» õ¼ õ½ õ¾ õ¿ +¢Ñ õÀ õÁ õ õà õÄ õÅ õÆ õÇ õÈ õÉ õÊ õË õÌ õÍ õÎ õÏ +¢Ò õÐ õÑ õÒ õÓ õÔ õÕ õÖ õ× õØ õÙ õÚ õÛ õÜ õÝ õÞ õß +¢Ó õà õá õâ õã õä õå õæ õç õè õé õê õë õì õí õî õï +¢Ô õð õñ õò õó õô õõ õö õ÷ õø õù õú õû õü õý õþ + +

    F6 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ö@ öA öB öC öD öE öF öG öH öI öJ öK öL öM öN öO +¢´ öP öQ öR öS öT öU öV öW öX öY öZ ö[ ö\ ö] ö^ ö_ +¢µ ö` öa öb öc öd öe öf ög öh öi öj ök öl öm ön öo +¢¶ öp öq ör ös öt öu öv öw öx öy öz ö{ ö| ö} ö~ +¢Ï ö  ö¡ ö¢ ö£ ö¤ ö¥ ö¦ ö§ ö¨ ö© öª ö« ö¬ ö­ ö® ö¯ +¢Ð ö° ö± ö² ö³ ö´ öµ ö¶ ö· ö¸ ö¹ öº ö» ö¼ ö½ ö¾ ö¿ +¢Ñ öÀ öÁ ö öà öÄ öÅ öÆ öÇ öÈ öÉ öÊ öË öÌ öÍ öÎ öÏ +¢Ò öÐ öÑ öÒ öÓ öÔ öÕ öÖ ö× öØ öÙ öÚ öÛ öÜ öÝ öÞ öß +¢Ó öà öá öâ öã öä öå öæ öç öè öé öê öë öì öí öî öï +¢Ô öð öñ öò öó öô öõ öö ö÷ öø öù öú öû öü öý öþ + +

    F7 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ÷@ ÷A ÷B ÷C ÷D ÷E ÷F ÷G ÷H ÷I ÷J ÷K ÷L ÷M ÷N ÷O +¢´ ÷P ÷Q ÷R ÷S ÷T ÷U ÷V ÷W ÷X ÷Y ÷Z ÷[ ÷\ ÷] ÷^ ÷_ +¢µ ÷` ÷a ÷b ÷c ÷d ÷e ÷f ÷g ÷h ÷i ÷j ÷k ÷l ÷m ÷n ÷o +¢¶ ÷p ÷q ÷r ÷s ÷t ÷u ÷v ÷w ÷x ÷y ÷z ÷{ ÷| ÷} ÷~ +¢Ï ÷  ÷¡ ÷¢ ÷£ ÷¤ ÷¥ ÷¦ ÷§ ÷¨ ÷© ÷ª ÷« ÷¬ ÷­ ÷® ÷¯ +¢Ð ÷° ÷± ÷² ÷³ ÷´ ÷µ ÷¶ ÷· ÷¸ ÷¹ ÷º ÷» ÷¼ ÷½ ÷¾ ÷¿ +¢Ñ ÷À ÷Á ÷ ÷à ÷Ä ÷Å ÷Æ ÷Ç ÷È ÷É ÷Ê ÷Ë ÷Ì ÷Í ÷Î ÷Ï +¢Ò ÷Ð ÷Ñ ÷Ò ÷Ó ÷Ô ÷Õ ÷Ö ÷× ÷Ø ÷Ù ÷Ú ÷Û ÷Ü ÷Ý ÷Þ ÷ß +¢Ó ÷à ÷á ÷â ÷ã ÷ä ÷å ÷æ ÷ç ÷è ÷é ÷ê ÷ë ÷ì ÷í ÷î ÷ï +¢Ô ÷ð ÷ñ ÷ò ÷ó ÷ô ÷õ ÷ö ÷÷ ÷ø ÷ù ÷ú ÷û ÷ü ÷ý ÷þ + +

    F8 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ø@ øA øB øC øD øE øF øG øH øI øJ øK øL øM øN øO +¢´ øP øQ øR øS øT øU øV øW øX øY øZ ø[ ø\ ø] ø^ ø_ +¢µ ø` øa øb øc ød øe øf øg øh øi øj øk øl øm øn øo +¢¶ øp øq ør øs øt øu øv øw øx øy øz ø{ ø| ø} ø~ +¢Ï ø  ø¡ ø¢ ø£ ø¤ ø¥ ø¦ ø§ ø¨ ø© øª ø« ø¬ ø­ ø® ø¯ +¢Ð ø° ø± ø² ø³ ø´ øµ ø¶ ø· ø¸ ø¹ øº ø» ø¼ ø½ ø¾ ø¿ +¢Ñ øÀ øÁ ø øà øÄ øÅ øÆ øÇ øÈ øÉ øÊ øË øÌ øÍ øÎ øÏ +¢Ò øÐ øÑ øÒ øÓ øÔ øÕ øÖ ø× øØ øÙ øÚ øÛ øÜ øÝ øÞ øß +¢Ó øà øá øâ øã øä øå øæ øç øè øé øê øë øì øí øî øï +¢Ô øð øñ øò øó øô øõ øö ø÷ øø øù øú øû øü øý øþ + +

    F9 ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ù@ ùA ùB ùC ùD ùE ùF ùG ùH ùI ùJ ùK ùL ùM ùN ùO +¢´ ùP ùQ ùR ùS ùT ùU ùV ùW ùX ùY ùZ ù[ ù\ ù] ù^ ù_ +¢µ ù` ùa ùb ùc ùd ùe ùf ùg ùh ùi ùj ùk ùl ùm ùn ùo +¢¶ ùp ùq ùr ùs ùt ùu ùv ùw ùx ùy ùz ù{ ù| ù} ù~ +¢Ï ù  ù¡ ù¢ ù£ ù¤ ù¥ ù¦ ù§ ù¨ ù© ùª ù« ù¬ ù­ ù® ù¯ +¢Ð ù° ù± ù² ù³ ù´ ùµ ù¶ ù· ù¸ ù¹ ùº ù» ù¼ ù½ ù¾ ù¿ +¢Ñ ùÀ ùÁ ù ùà ùÄ ùÅ ùÆ ùÇ ùÈ ùÉ ùÊ ùË ùÌ ùÍ ùÎ ùÏ +¢Ò ùÐ ùÑ ùÒ ùÓ ùÔ ùÕ ùÖ ù× ùØ ùÙ ùÚ ùÛ ùÜ ùÝ ùÞ ùß +¢Ó ùà ùá ùâ ùã ùä ùå ùæ ùç ùè ùé ùê ùë ùì ùí ùî ùï +¢Ô ùð ùñ ùò ùó ùô ùõ ùö ù÷ ùø ùù ùú ùû ùü ùý ùþ + +

    FA ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ú@ úA úB úC úD úE úF úG úH úI úJ úK úL úM úN úO +¢´ úP úQ úR úS úT úU úV úW úX úY úZ ú[ ú\ ú] ú^ ú_ +¢µ ú` úa úb úc úd úe úf úg úh úi új úk úl úm ún úo +¢¶ úp úq úr ús út úu úv úw úx úy úz ú{ ú| ú} ú~ +¢Ï ú  ú¡ ú¢ ú£ ú¤ ú¥ ú¦ ú§ ú¨ ú© úª ú« ú¬ ú­ ú® ú¯ +¢Ð ú° ú± ú² ú³ ú´ úµ ú¶ ú· ú¸ ú¹ úº ú» ú¼ ú½ ú¾ ú¿ +¢Ñ úÀ úÁ ú úà úÄ úÅ úÆ úÇ úÈ úÉ úÊ úË úÌ úÍ úÎ úÏ +¢Ò úÐ úÑ úÒ úÓ úÔ úÕ úÖ ú× úØ úÙ úÚ úÛ úÜ úÝ úÞ úß +¢Ó úà úá úâ úã úä úå úæ úç úè úé úê úë úì úí úî úï +¢Ô úð úñ úò úó úô úõ úö ú÷ úø úù úú úû úü úý úþ + +

    FB ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ û@ ûA ûB ûC ûD ûE ûF ûG ûH ûI ûJ ûK ûL ûM ûN ûO +¢´ ûP ûQ ûR ûS ûT ûU ûV ûW ûX ûY ûZ û[ û\ û] û^ û_ +¢µ û` ûa ûb ûc ûd ûe ûf ûg ûh ûi ûj ûk ûl ûm ûn ûo +¢¶ ûp ûq ûr ûs ût ûu ûv ûw ûx ûy ûz û{ û| û} û~ +¢Ï û  û¡ û¢ û£ û¤ û¥ û¦ û§ û¨ û© ûª û« û¬ û­ û® û¯ +¢Ð û° û± û² û³ û´ ûµ û¶ û· û¸ û¹ ûº û» û¼ û½ û¾ û¿ +¢Ñ ûÀ ûÁ û ûà ûÄ ûÅ ûÆ ûÇ ûÈ ûÉ ûÊ ûË ûÌ ûÍ ûÎ ûÏ +¢Ò ûÐ ûÑ ûÒ ûÓ ûÔ ûÕ ûÖ û× ûØ ûÙ ûÚ ûÛ ûÜ ûÝ ûÞ ûß +¢Ó ûà ûá ûâ ûã ûä ûå ûæ ûç ûè ûé ûê ûë ûì ûí ûî ûï +¢Ô ûð ûñ ûò ûó ûô ûõ ûö û÷ ûø ûù ûú ûû ûü ûý ûþ + +

    FC ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ü@ üA üB üC üD üE üF üG üH üI üJ üK üL üM üN üO +¢´ üP üQ üR üS üT üU üV üW üX üY üZ ü[ ü\ ü] ü^ ü_ +¢µ ü` üa üb üc üd üe üf üg üh üi üj ük ül üm ün üo +¢¶ üp üq ür üs üt üu üv üw üx üy üz ü{ ü| ü} ü~ +¢Ï ü  ü¡ ü¢ ü£ ü¤ ü¥ ü¦ ü§ ü¨ ü© üª ü« ü¬ ü­ ü® ü¯ +¢Ð ü° ü± ü² ü³ ü´ üµ ü¶ ü· ü¸ ü¹ üº ü» ü¼ ü½ ü¾ ü¿ +¢Ñ üÀ üÁ ü üà üÄ üÅ üÆ üÇ üÈ üÉ üÊ üË üÌ üÍ üÎ üÏ +¢Ò üÐ üÑ üÒ üÓ üÔ üÕ üÖ ü× üØ üÙ üÚ üÛ üÜ üÝ üÞ üß +¢Ó üà üá üâ üã üä üå üæ üç üè üé üê üë üì üí üî üï +¢Ô üð üñ üò üó üô üõ üö ü÷ üø üù üú üû üü üý üþ + +

    FD ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ ý@ ýA ýB ýC ýD ýE ýF ýG ýH ýI ýJ ýK ýL ýM ýN ýO +¢´ ýP ýQ ýR ýS ýT ýU ýV ýW ýX ýY ýZ ý[ ý\ ý] ý^ ý_ +¢µ ý` ýa ýb ýc ýd ýe ýf ýg ýh ýi ýj ýk ýl ým ýn ýo +¢¶ ýp ýq ýr ýs ýt ýu ýv ýw ýx ýy ýz ý{ ý| ý} ý~ +¢Ï ý  ý¡ ý¢ ý£ ý¤ ý¥ ý¦ ý§ ý¨ ý© ýª ý« ý¬ ý­ ý® ý¯ +¢Ð ý° ý± ý² ý³ ý´ ýµ ý¶ ý· ý¸ ý¹ ýº ý» ý¼ ý½ ý¾ ý¿ +¢Ñ ýÀ ýÁ ý ýà ýÄ ýÅ ýÆ ýÇ ýÈ ýÉ ýÊ ýË ýÌ ýÍ ýÎ ýÏ +¢Ò ýÐ ýÑ ýÒ ýÓ ýÔ ýÕ ýÖ ý× ýØ ýÙ ýÚ ýÛ ýÜ ýÝ ýÞ ýß +¢Ó ýà ýá ýâ ýã ýä ýå ýæ ýç ýè ýé ýê ýë ýì ýí ýî ýï +¢Ô ýð ýñ ýò ýó ýô ýõ ýö ý÷ ýø ýù ýú ýû ýü ýý ýþ + +

    FE ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢Ï ¢Ð ¢Ñ ¢Ò ¢Ó ¢Ô +¢³ þ@ þA þB þC þD þE þF þG þH þI þJ þK þL þM þN þO +¢´ þP þQ þR þS þT þU þV þW þX þY þZ þ[ þ\ þ] þ^ þ_ +¢µ þ` þa þb þc þd þe þf þg þh þi þj þk þl þm þn þo +¢¶ þp þq þr þs þt þu þv þw þx þy þz þ{ þ| þ} þ~ +¢Ï þ  þ¡ þ¢ þ£ þ¤ þ¥ þ¦ þ§ þ¨ þ© þª þ« þ¬ þ­ þ® þ¯ +¢Ð þ° þ± þ² þ³ þ´ þµ þ¶ þ· þ¸ þ¹ þº þ» þ¼ þ½ þ¾ þ¿ +¢Ñ þÀ þÁ þ þà þÄ þÅ þÆ þÇ þÈ þÉ þÊ þË þÌ þÍ þÎ þÏ +¢Ò þÐ þÑ þÒ þÓ þÔ þÕ þÖ þ× þØ þÙ þÚ þÛ þÜ þÝ þÞ þß +¢Ó þà þá þâ þã þä þå þæ þç þè þé þê þë þì þí þî þï +¢Ô þð þñ þò þó þô þõ þö þ÷ þø þù þú þû þü þý þþ + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_660397.html b/Balthisar Tidy/tidylib5-src/test/input/in_660397.html new file mode 100755 index 00000000..5c9320e1 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_660397.html @@ -0,0 +1,239 @@ + + + + + + +

    ¯Aufkl„rung ist der Ausgang des Menschen +
    aus seiner selbstverschuldeten Unmndigkeit.® +
    /Immanuel Kant/
    + + +

    ¯TCPA® und ¯Palladium®

    +

    Ein weiterer Schritt in die Unmndigkeit +
    oder ein Schritt hin zur Emanzipation? Õ

    + +

    Von der ™ffentlichkeit weitgehend unbemerkt geistern seit einigen Wochen +geheimnisvolle neue Schlagworte und Krzel durch die Welt der +EDV-Profis: ¯TCPA® und ¯Palladium®. Interessiert habe ich mich damit +n„her besch„ftigt, denn allein die Tatsache, daá die Bezeichnung +¯Palladium® in unserem Fall anders als in den Naturwissenschaften nicht +ein wertvolles Metall meint, sondern eine Wortsch”pfung der Firma +¯Microsoft® darstellt, verheiát nichts Gutes und weckte daher meinen +Argwohn. Der wesentlich neutralere Begriff ¯TCPA® (das steht fr +¯Trusted Computing Platform Alliance®) dagegen scheint auf den ersten +Blick positive oder zumindest neutrale Emotionen zu wecken - aber auch +nur auf den ersten Blick, denn wenn man sich des Horrorszenarios bewuát +wird, das hinter ¯TCPA® in Kombination mit ¯Palladium® steckt, so drfte +wohl selbst der unbedarfteste EDV-Anwender schlaflose N„chte bekommen.

    + +

    Was hat es also mit diesen Begriffen auf sich, welche Intentionen liegen +diesen Schlagworten zugrunde und was bedeuten die dahintersteckenden +neuen Techniken fr den EDV-Anwender?

    + +

    Die ¯TCPA® ist ein Zusammenschluá fhrender Hardwarehersteller, darunter +IBM, HP, AMD und Intel, die sich vorgenommen haben, den Personal +Computer durch Implementation neuer Hardwaretechnologien sicherer zu +machen. Wie uns allen bewuát ist, hat die Monokultur im +Betriebssystemsektor dazu gefhrt, daá durch das uns„gliche Monopol von +¯Microsoft® in Kombination mit der grottenschlechten Software dieser +Firma allerorten und allenthalben eine wahre Flut von Computerviren, +sogenannten trojanischen Pferden, Wrmern und Sicherheitsl”chern +entstanden ist und t„glich neu auf den Anwender zurollt, die den Umgang +mit dem PC immer wieder zum Žrgernis werden l„át. Diesem šbel wollen die +an der ¯TCPA® beteiligten Konzerne nun durch den sogenannten +¯Fritz®-Chip (benannt nach dem US-Senator Fritz Hollings) abhelfen - ein +hehrer Wunsch. Bei dem Fritz-Chip handelt es sich um einen +Krypto-Baustein, der in zuknftige Generationen von Personal Computern +integriert werden und allgemein die Systeme sicherer machen soll. Dieser +Chip speichert mehrere Schlssel, die hardware- und anwenderspezifisch +definiert sind. Sobald der PC eingeschaltet wird, nimmt der Fritz-Chip +seine Arbeit auf und fragt einen Schlssel nach dem anderen ab: Zun„chst +wird das BIOS abgefragt, anschlieáend alle im Rechner vorhandenen +BIOS-Erweiterungen der Steckkarten. Danach wird die Festplatte +berprft, und anschlieáend prft der TCPA-Chip auch noch den +Bootsektor, den Bootloader, den Kernel und die Ger„tetreiber. Da bei +jedem dieser Schritte eine Prfsumme abgespeichert und ein 160 Bit +langer eindeutiger Wert aus den gewonnenen Daten und einem speziellen +Schlssel generiert wird, hat der Fritz-Chip jederzeit die v”llige +Kontrolle ber das Gesamtsystem.

    + +

    Damit taucht schon die erste Problematik fr den Anwender auf: Bereits +ein Flash-Update des Rechner-BIOS legt das gesamte System lahm, da dann +die generierten Werte des Fritz-Chip nicht mehr mit den gespeicherten +Werten, die zertifiziert sind, bereinstimmen. In Zeiten, in denen +aufgrund der oftmals schlampig implementierten BIOS-Versionen +Flash-Updates derselben zumindest bei den blichen Consumer-Produkten an +der Tagesordnung sind, ist also der Fritz-Chip eher hinderlich denn ein +Segen fr den Anwender. Gleiches gilt brigens fr diejenigen Anwender, +die beispielsweise eine neue Grafikkarte oder eine gr”áere Festplatte +einbauen wollen - auch fr sie bedeutet jede Hardware-Modifikation eine +- vermutlich natrlich kostenpflichtige - Neuzertifizierung des +Gesamtsystems, damit dieses wieder als ¯TCPA-konform® angesehen werden +kann. Bei der Neuzertifizierung wird online anhand einer Liste mit +geprfter Hardware (HCL) und einer weiteren Liste mit gesperrten +Seriennummern (SRL) die Konformit„tstabelle des Rechners geprft und +aktualisiert.

    + +

    Hat der Fritz-Chip beim Bootvorgang alle Komponenten als ¯TCPA-konform® +berprft und erkannt, bergibt er die Kontrolle schlieálich an das +Betriebssystem. Ab diesem Punkt hakt nun - wie k”nnte es anders sein? - +die Firma ¯Microsoft® ein mit ihrer ¯Palladium®-Technologie. Sobald der +Anwender jetzt ein Programm startet, berprft das Betriebssystem dieses +anhand der im Fritz-Chip gespeicherten Werte fr die SRL. Sollte sich +herausstellen, daá dieses Programm keine gltige Lizenz und/oder +Seriennummer besitzt oder die Lizenz abgelaufen ist, wird es gar nicht +erst gestartet. Stellt es sich als ¯TCPA-konform® heraus, so wird nach +der Freigabe und dem anschlieáenden Start erneut online eine Liste mit +gesperrten Dokumenten fr dieses Programm abgerufen (DRL), um zu +verhindern, daá der Anwender fr ihn nicht vorgesehene Dateien ”ffnet +oder unerlaubterweise nutzt.

    + +

    Was sich auf den ersten Blick tats„chlich als wirksame Waffe gegen +Viren, Trojaner, Wrmer und „hnliche Probleme geriert, entmndigt jedoch +den Anwender: ¯Palladium® st”át vor allem bei der +Unterhaltungsindustrie, die einen erbitterten Kampf gegen jegliche +Weiterverbreitung urheberrechtlich geschtzter Produkte im Internet +fhrt, auf groáe Zustimmung, bietet sich hier jedoch erstmals +vordergrndig die M”glichkeit, MP3-Tauschb”rsen und „hnliche Dienste +effizient trockenzulegen dank ¯Microsoft®. Auch das Kopieren einzelner +Musikstcke zu privaten Zwecken am heimischen PC wird damit unterbunden +- dank ¯Microsoft® werden also vermutlich die ohnehin bervollen Kassen +der Unterhaltungsindustrie zuknftig noch kr„ftiger klingeln!

    + +

    Doch der Anwender hat natrlich noch die M”glichkeit, auch nicht +¯TCPA-konforme® Software auf seinem heimischen PC zu installieren und zu +starten. Bemerkt ¯Palladium® eine solche Anwendung, wird das +Gesamtsystem als ¯kompromittiert® gekennzeichnet und alle konformen +Anwendungen samt Dateien werden geschlossen. Der Nutzwert eines solchen +Systems drfte fr den Anwender dann wohl gegen Null tendieren.

    + +

    Doch gehen wir einen Schritt weiter und bedenken wir die Folgen dieser +Technologie:

    + +
      +
    1. + Die SRL's, DRL's und HCL's, die fr die + Konformit„ts-Authentifizierung eines PC's unbedingt ben”tigt + werden, werden an zentraler Stelle im Internet gespeichert und + abgerufen. Hacker brauchen jetzt also nicht mehr einzelne PC's + anzugreifen, sondern k”nnen ihr Engagement auf diese Server + konzentrieren - und damit unter Umst„nden mit einem einzigen + gelungenen Angriff Millionen von Rechnern unbrauchbar machen. +
    2. +
    3. + Es bedarf keiner ausgesprochen ausgepr„gten Phantasie, um sich + auszumalen, wie ¯Palladium® mit unerwnschten Konkurrenzprodukten + verfahren kann: Sollen bestimmte Softwareprodukte anderer + Hersteller als ¯Microsoft® nicht als ¯konform® zertifiziert + werden, so gengt es, sie auf die ¯schwarze Liste® des + ¯Palladium®-Systems zu setzen. Bei einem Start solcher Software + w„re der Rechner nur noch sehr eingeschr„nkt nutzbar, da + ¯kompromittiert® - jeder Anwender wrde sich wohl zumindest + berlegen, ob er beim n„chsten Mal nicht doch zur drittklassigen + Spyware aus dem Hause ¯Microsoft® greift. +
    4. +
    5. + Die Zertifizierungen fr Software und Dateien kosten Geld: + Sch„tzungen gehen von bis zu sechsstelligen Dollarsummen aus fr + eine einzige Anwendung. Die Folge dieser Lizenzierungspraxis w„re, + daá die Freewareszene von der Bildfl„che verschwindet. Viele + tausend Programmierer, die unter oftmals groáem pers”nlichen + Engagament und erheblichem Zeitaufwand ansehnliche Projekte als + Freeware entwickelt haben, h„tten keine M”glichkeit und auch keine + Motivation mehr, ihre oft wirklich innovativen Projekte der + Anwendergemeinde zur Verfgung zu stellen dank der kriminellen + Krake ¯Microsoft®. +
    6. +
    7. + Der gesamte von der GPL-Lizenz abgedeckte Bereich wrde ebenfalls + sang- und klanglos vor dem Aus stehen, da auch hier zun„chst + erhebliche Betr„ge in eine Zertifizierung gesteckt werden máten, + denen keine Einnahmen gegenberstehen. Die wohl gef„hrlichste + Konkurrenz fr ¯Microsoft®, n„mlich die oftmals aus idealistischer + und moralischer Intention heraus handelnden freien Entwickler, die + ihre Software unter der GPL-Lizenz vertreiben, w„re mit einem + Schlag ausgeschaltet. +
    8. +
    9. + Dem uns„glichen Monopol der Firma ¯Microsoft® im + Betriebssystemmarkt wrde ein weiterer nachhaltiger Schub + verliehen, denn Konkurrenzsysteme máten, um mit dem Fritz-Chip + und damit letztendlich auch mit ¯Palladium® zu harmonieren, + ebenfalls ¯TCPA-konform® gestaltet werden. Fr OS/2 WARP ebenso + wie fr die meisten Linux-Distributionen und auch Systeme wie + FreeBSD, NetBSD oder auch BeOS und (mit Einschr„nkungen) QNX wrde + der Zwang zur ¯TCPA-® und ¯Palladium®-Konformit„t das Verschwinden + vom EDV-Markt bedeuten, denn ohne diese Konformit„t wrden diese + meist besseren Betriebssysteme als ¯unsicher® gelten. OS/2 WARP + und die eComStation wrden aus den groáen Banken und + Versicherungen, bei TK-Dienstleistern und bei den anderen + Anwendern im professionellen Umfeld ge„chtet und von den + Festplatten verbannt zugunsten der wesentlich schlechteren + ¯Windows®-Systeme. Die einzige Alternative bliebe nach dem + derzeitigen Stand der Dinge HP-Linux, da HP bereits an der ¯TCPA-® + und ¯Palladium®-Konformit„t seines Linux arbeitet. +
    10. +
    11. + Mit dem ¯Palladium®-System wrde die offene, basisdemokratische + Struktur des Internet endgltig zu Grabe getragen und einem + Meinungs- und Zensurmonopol der Firma ¯Microsoft® weichen. + ¯Microsoft® k”nnte ber die variable Gestaltung von + Zertifizierungsgebhren die Weiterverbreitung kritischer Dokumente + im Internet oder im Rahmen von Software-Distributionen verhindern. + Obendrein w„ren alle Newsdienste auáer den ¯Microsoft®-eigenen + davon betroffen - freiwillige, sehr anerkennenswerte Initiativen + wie beispielsweise auch die VOICE, die sich der Aufkl„rung der + OS/2-Gemeinde verschrieben hat, máten fr die einzelnen Beitr„ge + Zertifizierungsgebhren an ¯Microsoft® zahlen fr die + ¯Palladium®-Konformit„t, um nicht auf der ¯schwarzen Liste® der + DRL-Server zu landen. Das Internet als Transporteur + basisdemokratischer Ideale w„re zerst”rt und zu einem Sprachrohr + von ¯Microsoft® verkommen. +
    12. +
    13. + Durch die enge Kopplung der ¯Palladium®-Technologie in Kooperation + mit dem Fritz-Chip an Hard- und Software wrde der + Gebrauchtsoftwaremarkt zum Erliegen kommen - weil bereits einmal + durch TCPA und ¯Palladium® zertifizierte Software aufgrund der + Verschlsselung untrennbar an die Hardware gekoppelt ist. Fr + ¯Microsoft® erfllt sich damit ein lange gehegter Traum: Jeder + K„ufer eines PC muá Software aus Redmond neu kaufen, da die alte + Software nur ber eine Seriennummern-Freigabe auf ein anderes + Ger„t bertragbar w„re - und davon steht nicht ein einziges Wort + in den entsprechenden Standardisierungs-Richtlinien. +
    14. +
    + +

    Das hier geschilderte Horrorszenario erscheint keineswegs abwegig: Bill +Gates hat mit der Unterhaltungsindustrie starke Kombattanten im Rcken, +denen es genauso wie ihm um die Profitmaximierung um jeden Preis geht - +auch wenn dabei demokratische und ethische Prinzipien nicht nur +ausgeh”hlt, sondern offen mit Fáen getreten werden und auf der Strecke +bleiben. Offen diskutiert werden die Folgen seiner Technologie noch +nicht; bislang hat Gates gr”áten Wert darauf gelegt, sich stets +”ffentlich und lauthals als Vork„mpfer gegen Raubkopierertum zum Wohle +der Software- und der Unterhaltungsindustrie und auch zum angeblichen +Nutzen des Endverbrauchers zu gerieren - mit ¯Palladium® jedoch +berschreitet ¯Microsoft® im Halbdunkel ein- fr allemal eine Grenze, +die dem vermeintlichen Vork„mpfer Gates fr die Durchsetzung von +Urheberrechten bislang Fesseln anlegte: Nun geht es um die vollkommene +Kontrolle der Informationsgesellschaft durch einen Konzern, der +krimineller Machenschaften mehrfach berfhrt ist - die Weltherrschaft +einer einzelnen kleinen Clique im Mediensektor droht, und das auch noch +mit blau„ugiger Zustimmung einiger international agierender +Medienkonzerne, die bisher offenbar noch gar nicht realisiert haben, daá +sie sich mit ihrer offensichtlich blinden Profitsucht einem Mann +ausliefern, den andere als den gef„hrlichsten Zeitgenossen seit Adolf +Hitler betrachten.

    + +

    Es wird Zeit, daá die Demokraten unter den EDV-Profis und -Anwendern +endlich aus ihrem Dornr”schenschlaf aufwachen, denn:

    + +
    ¯Man darf nicht +warten, bis aus dem Schneeball eine Lawine geworden ist. Man muá den +rollenden Schneeball zertreten. Die Lawine h„lt keiner mehr auf. Sie +ruht erst, wenn sie alles unter sich begraben hat...® +
    /Erich K„stner/
    + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_661606.html b/Balthisar Tidy/tidylib5-src/test/input/in_661606.html new file mode 100755 index 00000000..f804f180 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_661606.html @@ -0,0 +1,15 @@ + + + + [661606] Two bytes at the last line, w/ asian options + + + + +

    18

    + +

    ‚º‚ñ‚Ô@‚µ‚Á‚Ï‚¢‚µ‚Ä
    ‚µ‚Ü‚¢‚Ü‚µ‚½B

    + u‚Ç‚¤‚µ‚悤cH£

    + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_663548.html b/Balthisar Tidy/tidylib5-src/test/input/in_663548.html new file mode 100755 index 00000000..f26332e1 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_663548.html @@ -0,0 +1,22 @@ + + +[663548] Javascript and Tidy - missing code + + + +

    foo + + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_671087.html b/Balthisar Tidy/tidylib5-src/test/input/in_671087.html new file mode 100755 index 00000000..a51f2008 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_671087.html @@ -0,0 +1,14 @@ + + + +tidy loops with --new-inline-tags table,tr,td + + + + + + +
    table heading
    + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_676156.html b/Balthisar Tidy/tidylib5-src/test/input/in_676156.html new file mode 100755 index 00000000..f822cb60 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_676156.html @@ -0,0 +1,5 @@ +foo +bar + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_676205.html b/Balthisar Tidy/tidylib5-src/test/input/in_676205.html new file mode 100755 index 00000000..77b87b56 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_676205.html @@ -0,0 +1,10 @@ + + + + [676205] <img src="> crashes Tidy + + + + + + +[ 676205 ] <img src="> crashes Tidy + + + + + + + +Error: File Copy Error! File=C:\WinNT\ +System32\PERFLIB_PERFDATA_<#>.DAT (copying to a +'.fil'). + + +Error: File Copy Error! File=C:\WinNT\ +System32\PERFLIB_PERFDATA_ +<#>.DAT (copying to a '.fil'). +
    id
    + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_679135.html b/Balthisar Tidy/tidylib5-src/test/input/in_679135.html new file mode 100755 index 00000000..4a5c5f63 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_679135.html @@ -0,0 +1,25 @@ + + + + [ 679135 ] Crashes while checking attributes + + + + +

    + + + +
    + + + +
    + + +
    +
    + + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_680664.xhtml b/Balthisar Tidy/tidylib5-src/test/input/in_680664.xhtml new file mode 100755 index 00000000..ef1de47d --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_680664.xhtml @@ -0,0 +1,17 @@ + + + + +[ 680664 ] Malformed comment generates bad (X)HTML + + + + +
    +This is a test of some pre stuff.
    +See what happens to this comment 
    +  
    +   
    +
    +
    +  

    How to…
    + Place an extended-hours order:

    + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_695408.html b/Balthisar Tidy/tidylib5-src/test/input/in_695408.html new file mode 100755 index 00000000..e38c76ff --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_695408.html @@ -0,0 +1,14 @@ + + + [ 695408 ] Empty spans getting dropped, even if they have attrs + + + + + + + + +
    + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_696799.html b/Balthisar Tidy/tidylib5-src/test/input/in_696799.html new file mode 100755 index 00000000..b2d909b2 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_696799.html @@ -0,0 +1,12 @@ + + + [ 696799 ] Crash: <script language=""> + + + + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_706260.html b/Balthisar Tidy/tidylib5-src/test/input/in_706260.html new file mode 100755 index 00000000..07cc79c7 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_706260.html @@ -0,0 +1,14 @@ + + + + + #706260 size not accepted for input + + + +
    + +
    + + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_765852.html b/Balthisar Tidy/tidylib5-src/test/input/in_765852.html new file mode 100755 index 00000000..7113f634 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_765852.html @@ -0,0 +1,3 @@ + +#765852 Empty tag striping +

    Text following italics without a blank after the i end tag is not cleaned up correctly (the bold blank is eliminated).

    \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_795643-1.html b/Balthisar Tidy/tidylib5-src/test/input/in_795643-1.html new file mode 100755 index 00000000..0902f050 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_795643-1.html @@ -0,0 +1 @@ +

    Hi

    diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_795643-2.html b/Balthisar Tidy/tidylib5-src/test/input/in_795643-2.html new file mode 100755 index 00000000..7fdd4968 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_795643-2.html @@ -0,0 +1 @@ +

    Hi

    diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_836462-2.html b/Balthisar Tidy/tidylib5-src/test/input/in_836462-2.html new file mode 100755 index 00000000..1bfd16ce --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_836462-2.html @@ -0,0 +1,21 @@ + + + +836462-2 + + +

    Heading

    + +
      +
    1. First ordered list item

    2. +
    3. Second ordered list item

    4. +
    5. Third ordered list item

    6. +
        +
      • First unordered list item

      • +
      • Second unordered list item

      • +
      +
    7. Fourth unordered list item

    8. +
    9. Fifth unordered list item

    10. +
    + + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_836462-3.html b/Balthisar Tidy/tidylib5-src/test/input/in_836462-3.html new file mode 100755 index 00000000..b9e980ca --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_836462-3.html @@ -0,0 +1,9 @@ + +test + +
      + +
      +
    + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_836462.html b/Balthisar Tidy/tidylib5-src/test/input/in_836462.html new file mode 100755 index 00000000..727c9e5c --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_836462.html @@ -0,0 +1,21 @@ + + + +836462 + + +

    Heading

    + +
      +
    • First list item

    • +
    • Second list item

    • +
    • Third list item

    • +
        +
      • First list item 2

      • +
      • Second list item 2

      • +
      +
    • Fourth list item

    • +
    • Fifth list item

    • +
    + + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_837023.html b/Balthisar Tidy/tidylib5-src/test/input/in_837023.html new file mode 100755 index 00000000..201f993b --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_837023.html @@ -0,0 +1,12 @@ + + +[ 837023 ] segfault on doctype-like element + + + +Just text. + + + + + \ No newline at end of file diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_978947.html b/Balthisar Tidy/tidylib5-src/test/input/in_978947.html new file mode 100755 index 00000000..b68fa10d --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_978947.html @@ -0,0 +1,22 @@ + + + + + +Bug: &nbsp; disappears after </pre> + + +Here the non-breaking spaces (     ) +remain. +

         Works multiple times +(     ) as well.
    +But . . .  :

    +
    +A block of 
    +preformatted text.
    +
    +Now the non-breaking spaces (     ) +are replaced with ordinary spaces, and disappear. + + diff --git a/Balthisar Tidy/tidylib5-src/test/input/in_996484.html b/Balthisar Tidy/tidylib5-src/test/input/in_996484.html new file mode 100755 index 00000000..89a05a34 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/input/in_996484.html @@ -0,0 +1,40 @@ + + + +test whether xx<...>yy</...> is wrapped properly + + +

    test 1.1 (no space)

    +

    xxyy

    + +

    test 1.2 (with space)

    +

    xx yy

    + +

    test 1.3 (with non breaking space)

    +

    xx yy

    + +

    test 2.1 (no space)

    +

    xxyy

    + +

    test 2.2 (with space)

    +

    xx yy

    + +

    test 2.3 (with non breaking space)

    +

    xx yy

    + +

    test 3 (no space)

    +

    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    +

    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    + +

    test 4 (<br>)

    +

    zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
    xx

    + +

    test 5 (no space in the front)

    +

    aa

    + +

    test 6 (no space in the front)

    +

    aaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    + + + diff --git a/Balthisar Tidy/tidylib5-src/test/onetest.cmd b/Balthisar Tidy/tidylib5-src/test/onetest.cmd new file mode 100755 index 00000000..57007666 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/onetest.cmd @@ -0,0 +1,103 @@ +@echo off + +REM onetest.cmd - execute a single test case +REM +REM (c) 1998-2006 (W3C) MIT, ERCIM, Keio University +REM See tidy.c for the copyright notice. +REM +REM +REM + +@if "%TIDY%." == "." goto Err1 +@if NOT EXIST %TIDY% goto Err2 +@if "%TIDYOUT%." == "." goto Err3 +@if NOT EXIST %TIDYOUT%\nul goto Err4 +@if NOT EXIST input\nul goto Err5 + +set TESTNO=%1 +set EXPECTED=%2 + +set INFILES=input\in_%1.*ml +set CFGFILE=input\cfg_%1.txt + +set TIDYFILE=%TIDYOUT%\out_%1.html +set MSGFILE=%TIDYOUT%\msg_%1.txt + +set HTML_TIDY= + +REM If no test specific config file, use default. +if NOT exist %CFGFILE% set CFGFILE=input\cfg_default.txt + +REM Get specific input file name +@set INFILE= +for %%F in ( %INFILES% ) do set INFILE=%%F +@if "%INFILE%." == "." goto Err6 +@if NOT EXIST %INFILE% goto Err7 + +REM Remove any pre-exising test outputs +if exist %MSGFILE% del %MSGFILE% +if exist %TIDYFILE% del %TIDYFILE% + +@REM Noisy output, or quiet +@REM echo Testing %1 input %INFILE% config %CFGFILE% ... +echo Testing %1 + +%TIDY% -f %MSGFILE% -config %CFGFILE% %3 %4 %5 %6 %7 %8 %9 --tidy-mark no -o %TIDYFILE% %INFILE% +set STATUS=%ERRORLEVEL% + +if %STATUS% EQU %EXPECTED% goto done +set ERRTESTS=%ERRTESTS% %TESTNO% +echo *** Failed - got %STATUS%, expected %EXPECTED% *** +type %MSGFILE% +goto done + +:Err1 +@echo ============================================================== +@echo ERROR: runtime exe not set in TIDY environment variable ... +@echo ============================================================== +@goto TRYAT + +:Err2 +@echo ============================================================== +@echo ERROR: runtime exe %TIDY% not found ... check name, location ... +@echo ============================================================== +@goto TRYAT + +:Err3 +@echo ============================================================== +@echo ERROR: output folder TIDYOUT not set in environment ... +@echo ============================================================== +@goto TRYAT + +:Err4 +@echo ============================================================== +@echo ERROR: output folder %TIDYOUT% does not exist ... +@echo ============================================================== +@goto TRYAT + +:Err5 +@echo ============================================================== +@echo ERROR: input folder 'input' does not exist ... check name, location .. +@echo ============================================================== +@goto TRYAT + +:TRYAT +@echo Try running alltest.cmd ..\build\msvc\Release\Tidy.exe tmp ... +@echo ============================================================== +@goto done + +:Err6 +@echo ============================================================== +@echo ERROR: Failed to find input matching '%INFILES%'!!! +@echo ============================================================== +@pause +@goto done + +:Err7 +@echo ============================================================== +@echo ERROR: Failed to find input file '%INFILE%'!!! +@echo ============================================================== +@pause +@goto done + +:done diff --git a/Balthisar Tidy/tidylib5-src/test/onetesta.cmd b/Balthisar Tidy/tidylib5-src/test/onetesta.cmd new file mode 100755 index 00000000..b06bfe53 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/onetesta.cmd @@ -0,0 +1,68 @@ +@echo off + +REM execute a single test case of the accessibility test suite +REM +REM (c) 2006 (W3C) MIT, ERCIM, Keio University +REM See tidy.c for the copyright notice. +REM +REM +REM + +echo Testing %1 %2 %3 +set TESTNO=%1 +set TESTEXPECTED=%2 +set ACCESSLEVEL=%3 + +set INFILES=%TIDYINPUT%\%1.*ml +set CFGFILE=%TIDYINPUT%\cfg_%1.txt + +set TIDYFILE=%TIDYOUT%\out_%1.html +set MSGFILE=%TIDYout%\msg_%1.txt + +set HTML_TIDY= + +REM If no test specific config file, use default. +if NOT exist %CFGFILE% set CFGFILE=%TIDYINPUT%\cfg_default.txt + +REM Get specific input file name +for %%F in ( %INFILES% ) do set INFILE=%%F + +if EXIST %INFILE% goto DOIT +@echo ERROR: Can NOT locate [%INFILE%] ... aborting test ... +@echo ======================================= >> ACCERR.TXT +@echo Testing %1 %2 %3 >> ACCERR.TXT +@echo ERROR: Can NOT locate [%INFILE%] ... aborting test ... >> ACCERR.TXT +@goto done + +:DOIT +REM Remove any pre-existing test outputs +if exist %MSGFILE% del %MSGFILE% +if exist %TIDYFILE% del %TIDYFILE% + +REM this has to all one line ... +%TIDY% -f %MSGFILE% --accessibility-check %ACCESSLEVEL% -config %CFGFILE% --gnu-emacs yes --tidy-mark no -o %TIDYFILE% %INFILE% + +@REM output the FIND count to the a result file +find /c "%TESTEXPECTED%" %MSGFILE% > tempres.txt +@REM load the find count, token 3, into variable RESULT +for /F "tokens=3" %%i in (tempres.txt) do set RESULT=%%i +@REM test the RESULT variable ... +if "%RESULT%." == "0." goto Err +if "%RESULT%." == "1." goto done +@REM echo note - test '%TESTEXPECTED%' found %RESULT% times in file '%INFILE%' +goto done + +:Err +echo FAILED --- test '%TESTEXPECTED%' not detected in file '%INFILE%' +type %MSGFILE% +echo FAILED --- test '%TESTEXPECTED%' not detected in above +set FAILEDACC=%FAILEDACC% %1 +REM append results to the ACCERR.TXT file +echo ======================================= >> ACCERR.TXT +echo %TIDY% -f %MSGFILE% --accessibility-check %ACCESSLEVEL% -config %CFGFILE% --gnu-emacs yes --tidy-mark no -o %TIDYFILE% %INFILE% >> ACCERR.TXT +echo FAILED --- test '%TESTEXPECTED%' not detected in file '%MSGFILE%', as follows - >> ACCERR.TXT +type %MSGFILE% >> ACCERR.TXT +echo FAILED --- test '%TESTEXPECTED%' not detected in above >> ACCERR.TXT +goto done + +:done diff --git a/Balthisar Tidy/tidylib5-src/test/output/out_427820.html b/Balthisar Tidy/tidylib5-src/test/output/out_427820.html new file mode 100755 index 00000000..83d5bd1f --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/output/out_427820.html @@ -0,0 +1,16 @@ + + + + + Test Input For Bug #427820 + + + + + + + +

    + + diff --git a/Balthisar Tidy/tidylib5-src/test/output/out_427826.html b/Balthisar Tidy/tidylib5-src/test/output/out_427826.html new file mode 100755 index 00000000..d73cfa99 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/output/out_427826.html @@ -0,0 +1,59 @@ + + + + + + [#427826] Script source needs escaping/CDATA + section + + + + + + + +

    If converted to XML/XHTML, the < in the javascript source + above causes problems for XML tools.

    + + diff --git a/Balthisar Tidy/tidylib5-src/test/output/out_431721.html b/Balthisar Tidy/tidylib5-src/test/output/out_431721.html new file mode 100755 index 00000000..716a09b1 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/output/out_431721.html @@ -0,0 +1,54 @@ + + + Joe-Bob Briggs LLP + + + +
    +

    Joe-Bob Briggs LLP

    + +

    + +

    Bryan Joe-Bob LLP is a leading national and international + corporate, litigation and private client law firm.  We + represent a wide variety of business, institutional and + individual clients for whom our lawyers handle a wide range + of matters.  As a result, our lawyers are well prepared + to meet the needs of clients whether large or small, public + or private, for-profit or not-for-profit.

    + +

    + +

    Joe-Bob Briggs has more offices than you can shake a stick + at.  These locations give Joe-Bob the geographic reach + to assist his clients where their needs are most + pressing.

    + +
      +
    • Estate Planning
    • + +
    • Closely-Held Business Practice
    • + +
    • Estate, Gift, Income and Other Tax Advice
    • +
    + +

    + +

    Joe-Bob joined the Firm in 1995 after 15 years with the + Kansas City firm of Fish, Gill, Smoker & Butts, where he + was a Shareholder/Director.  John is a past Chair of the + Estate Planning, Probate and Trust Committee of the Kansas + City Metropolitan Bar Association and co-authored the + Drinking Procedures Manual for County Practitioners.  + Currently, JB is a member of the Missouri Bar Probate and + Trust Committee, the Estate Planning Society and the + Mid-America Planned Giving Council.  A fellow of the + American College of Trust and Estate Counsel, JB lectures + frequently on Estate Planning topics for both legal and lay + organizations. 

    + +

    +
    + + + diff --git a/Balthisar Tidy/tidylib5-src/test/output/out_480701.html b/Balthisar Tidy/tidylib5-src/test/output/out_480701.html new file mode 100755 index 00000000..645c1061 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/output/out_480701.html @@ -0,0 +1,14 @@ + + + + + + diff --git a/Balthisar Tidy/tidylib5-src/test/output/out_533233.html b/Balthisar Tidy/tidylib5-src/test/output/out_533233.html new file mode 100755 index 00000000..08c786f2 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/output/out_533233.html @@ -0,0 +1,37 @@ + + + + + Test for bug #533233 + + + + + +

    Script sample 1

    + +

    Headline project—Link to + offsite page.

    + +

    Input 1

    + +

    texttext

    + + diff --git a/Balthisar Tidy/tidylib5-src/test/output/out_540571.html b/Balthisar Tidy/tidylib5-src/test/output/out_540571.html new file mode 100755 index 00000000..66077b3d --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/output/out_540571.html @@ -0,0 +1,22 @@ + + + + + #540571 Inconsistent behaviour with span inline element + + + +

    + Hello World +

    + +

    The font inline is moved so it becomes a child of the h1 element.

    + +

    + Hello World +

    + +

    The span inline is not moved so it becomes a child of the h1 element, which is inconsistent and does not correspond with current browser behaviour any more.

    + + + diff --git a/Balthisar Tidy/tidylib5-src/test/testaccess.sh b/Balthisar Tidy/tidylib5-src/test/testaccess.sh new file mode 100755 index 00000000..b2c38990 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/testaccess.sh @@ -0,0 +1,21 @@ +#! /bin/sh + +# +# testaccess.sh - execute all testcases for regression testing +# +# (c) 2005 (W3C) MIT, ERCIM, Keio University +# See tidy.c for the copyright notice. +# +# +# +# set -x + +VERSION='$Id' + +cat accesscases.txt | sed 1d | \ +{ +while read bugNo expected +do + ./testaccessone.sh $bugNo $expected "$@" | tee -a testaccess.log +done +} diff --git a/Balthisar Tidy/tidylib5-src/test/testaccessone.sh b/Balthisar Tidy/tidylib5-src/test/testaccessone.sh new file mode 100755 index 00000000..85ee82e0 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/testaccessone.sh @@ -0,0 +1,76 @@ +#! /bin/sh + +# +# execute a single testcase +# +# (c) 2005 (W3C) MIT, ERCIM, Keio University +# See tidy.c for the copyright notice. +# +# +# +# set -x + +VERSION='$Id' + +echo Testing $1 + +set +f + +TESTNO=$1 +TESTEXPECTED=$2 +ACCESSLEVEL=$3 + +TIDY=../bin/tidy +INFILES=./accessTest/$1.*ml +CFGFILE=./accessTest/cfg_$1.txt + +TIDYFILE=./tmp/out_$1.html +MSGFILE=./tmp/msg_$1.txt + +unset HTML_TIDY + +shift +shift +shift + +# Remove any pre-exising test outputs +for INFIL in $MSGFILE $TIDYFILE +do + if [ -f $INFIL ] + then + rm $INFIL + fi +done + +for INFILE in $INFILES +do + if [ -r $INFILE ] + then + break + fi +done + +# If no test specific config file, use default. +if [ ! -f $CFGFILE ] +then + CFGFILE=./accessTest/cfg_default.txt +fi + +# Make sure output directory exists. +if [ ! -d ./tmp ] +then + mkdir ./tmp +fi + +$TIDY -f $MSGFILE --accessibility-check $ACCESSLEVEL -config $CFGFILE "$@" --gnu-emacs yes --tidy-mark no -o $TIDYFILE $INFILE +STATUS=$? + +if [ `grep -c -e ' \['$TESTEXPECTED'\]: ' $MSGFILE` = 0 ] +then + echo "--- test '$TESTEXPECTED' not detected in file '$INFILE'" + cat $MSGFILE + exit 1 +fi + +exit 0 + diff --git a/Balthisar Tidy/tidylib5-src/test/testall.sh b/Balthisar Tidy/tidylib5-src/test/testall.sh new file mode 100755 index 00000000..adc0ee7b --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/testall.sh @@ -0,0 +1,35 @@ +#! /bin/sh + +# +# testall.sh - execute all testcases for regression testing +# +# (c) 1998-2003 (W3C) MIT, ERCIM, Keio University +# See tidy.c for the copyright notice. +# +# +# +# set -x + +VERSION='$Id' + +BUGS="426885 427633 427662 427664 427671 427672 427675 427676 427677\ + 427810 427811 427813 427816 427818 427819 427820 427821 427822 427823\ + 427825 427826 427827 427830 427833 427834 427835 427836 427837 427838 427839\ + 427840 427841 427845 427846 431716 431721 431731 431736\ + 431739 431874 431889 431895 431898 431958 431964 432677 433012\ + 433021 433040 433359 433360 433656 433666 433672 433856 434047 434100\ + 434940 435903 435917 435919 435920 435922 435923 437468 438650\ + 438658 438954 438956 441508 441568 443362 443576 443678 445074 445394\ + 445557 449348 470663 480701 487204 487283 501669 504206 505770 511679\ + 533233 540571 543262 545772 553468 566542 586555 586562 588061 593705 616744\ + 620531 629885 634889 640473 640474 646946 647255 647900 649812 655338\ + 656889 658230 660397 661606 676156 676205 688746 695408 696799" + +# for bugNo in ${BUGS} + +while read bugNo expected +do +# echo Testing $bugNo | tee -a testall.log + ./testone.sh $bugNo $expected "$@" | tee -a testall.log +done < testcases.txt + diff --git a/Balthisar Tidy/tidylib5-src/test/testcases.txt b/Balthisar Tidy/tidylib5-src/test/testcases.txt new file mode 100755 index 00000000..87db9ab3 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/testcases.txt @@ -0,0 +1,227 @@ +426885 1 +427633 0 +427662 1 +427664 1 +427671 1 +427672 1 +427675 1 +427676 2 +427677 1 +427810 1 +427811 1 +427813 1 +427816 1 +427818 1 +427819 1 +427820 1 +427821 0 +427822 1 +427823 1 +427825 1 +427826 0 +427827 1 +427830 1 +427833 0 +427834 0 +427835 1 +427836 1 +427837 0 +427838 1 +427839 0 +427840 1 +427841 1 +427845 0 +427846 1 +431716 0 +431721 1 +431731 1 +431736 1 +431739 1 +431874 1 +431889 1 +431895 1 +431898 1 +431958 0 +431964 1 +432677 0 +433012 1 +433021 1 +433040 0 +433359 0 +433360 1 +433604 0 +433607 0 +433656 0 +433666 1 +433672 1 +433856 1 +434047 0 +434100 2 +434940 0 +435903 1 +435917 1 +435919 1 +435920 1 +435922 1 +435923 0 +437468 0 +438650 1 +438658 1 +438954 0 +438956 1 +441508 1 +441568 0 +443362 1 +443576 1 +443678 1 +445074 1 +445394 1 +445557 1 +449348 0 +470663 1 +473490 1 +480406 0 +480701 0 +487204 1 +487283 1 +500236 1 +501669 0 +503436 1 +504206 1 +505770 1 +511679 1 +511243 0 +533233 0 +540571 1 +543262 0 +545772 0 +553468 0 +566542 1 +586555 1 +586562 1 +588061 1 +590716 1 +593705 0 +609058 0 +616744 0 +620531 1 +629885 1 +634889 1 +640473 1 +640474 0 +646946 0 +647255 1 +647900 2 +649812 0 +655338 1 +656889 1 +658230 1 +660397 1 +661606 0 +671087 0 +676156 1 +676205 1 +678268 1 +688746 1 +695408 1 +696799 1 +706260 0 +765852 1 +795643-1 1 +795643-2 1 +836462 1 +836462-2 1 +836462-3 1 +837023 1 +978947 0 +996484 0 +1002509 2 +1003361 0 +1004051 0 +1004512 0 +1014993 1 +1015959 1 +1027888 1 +1050673 1 +1052758 0 +1053626 1 +1055304 1 +1055398 1 +1056023 1 +1056910 0 +1062345 1 +1062511 1 +1062661 1 +1063256 2 +1067112 1 +1068087 1 +1069549 0 +1069553 0 +1072528 1 +1078345 0 +1079820 1 +1086083 1 +1090318 1 +1098012 1 +1107622 1 +1117013 0 +1115094 1 +1145571 1 +1145572 0 +1168193 1 +1183751 0 +1198501 0 +1207443 0 +1210752 1 +1231279 1 +1235296 0 +1241723 0 +1263391 1 +1266647 1 +1282835 0 +1286029 0 +1286278 0 +1316258 1 +1316307 1 +1316307-2 1 +1326520 1 +1331849 1 +1333579 1 +1359292 1 +1398397 1 +1407266 1 +1408034 1 +1410061 1 +1410061-1 1 +1410061-2 1 +1415137 1 +1423252 1 +1426419 1 +1436578 0 +1452744 0 +1445570 1 +1503897 1 +1586158 0 +1590220-1 1 +1590220-2 1 +1603538-1 1 +1603538-2 1 +1610888-1 0 +1610888-2 0 +1632470 1 +1632218 1 +1638062 1 +1674502 1 +1707836 1 +1715153 1 +1720953 0 +1773932 1 +1986717-1 0 +1986717-2 0 +1986717-3 0 +2046048 2 +2085175 0 +2359929 1 +2705873-1 0 +2705873-2 0 +2709860 0 diff --git a/Balthisar Tidy/tidylib5-src/test/testone.sh b/Balthisar Tidy/tidylib5-src/test/testone.sh new file mode 100755 index 00000000..b8ec0b2a --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/testone.sh @@ -0,0 +1,73 @@ +#! /bin/sh + +# +# testone.sh - execute a single testcase +# +# (c) 1998-2006 (W3C) MIT, ERCIM, Keio University +# See tidy.c for the copyright notice. +# +# +# +# set -x + +VERSION='$Id' + +echo Testing $1 + +set +f + +TESTNO=$1 +EXPECTED=$2 +TIDY=../bin/tidy +INFILES=./input/in_${TESTNO}.*ml +CFGFILE=./input/cfg_${TESTNO}.txt + +TIDYFILE=./tmp/out_${TESTNO}.html +MSGFILE=./tmp/msg_${TESTNO}.txt + +unset HTML_TIDY + +shift +shift + +# Remove any pre-exising test outputs +for INFIL in $MSGFILE $TIDYFILE +do + if [ -f $INFIL ] + then + rm $INFIL + fi +done + +for INFILE in $INFILES +do + if [ -r $INFILE ] + then + break + fi +done + +# If no test specific config file, use default. +if [ ! -f $CFGFILE ] +then + CFGFILE=./input/cfg_default.txt +fi + +# Make sure output directory exists. +if [ ! -d ./tmp ] +then + mkdir ./tmp +fi + +$TIDY -f $MSGFILE -config $CFGFILE "$@" --tidy-mark no -o $TIDYFILE $INFILE +STATUS=$? + +if [ $STATUS -ne $EXPECTED ] +then + echo "== $TESTNO failed (Status received: $STATUS vs expected: $EXPECTED)" + cat $MSGFILE + exit 1 +fi + +exit 0 + diff --git a/Balthisar Tidy/tidylib5-src/test/testxml.sh b/Balthisar Tidy/tidylib5-src/test/testxml.sh new file mode 100755 index 00000000..08a46a0e --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/testxml.sh @@ -0,0 +1,27 @@ +#! /bin/sh + +# +# testxml.sh - execute all XML testcases +# +# (c) 1998-2005 (W3C) MIT, ERCIM, Keio University +# See tidy.c for the copyright notice. +# +# +# +# set -x + +VERSION='$Id' + +BUGS="427837 431956 433604 433607 433670 434100\ + 480406 480701 500236 503436 537604 616744 640474 646946" + +while read bugNo expected +do +# echo Testing $bugNo | tee -a testxml.log + ./testone.sh "$bugNo" "$expected" "$@" | tee -a testxml.log + if test -f "./tmp/out_$bugNo.html" + then + mv "./tmp/out_$bugNo.html" "./tmp/out_$bugNo.xml" + fi +done < xmlcases.txt + diff --git a/Balthisar Tidy/tidylib5-src/test/xmlcases.txt b/Balthisar Tidy/tidylib5-src/test/xmlcases.txt new file mode 100755 index 00000000..16bccfe4 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/xmlcases.txt @@ -0,0 +1,27 @@ +427837 0 +431956 0 +432677 0 +433604 0 +433607 0 +433670 0 +434100 2 +473490 1 +480406 0 +480701 0 +500236 1 +503436 1 +537604 0 +540045 0 +542029 1 +586555 1 +616744 0 +634889 1 +640474 0 +646946 0 +1003994 2 +1004008 1 +1030944 0 +1365706 0 +1448730 0 +1510101 0 +1573338 0 diff --git a/Balthisar Tidy/tidylib5-src/test/xmltest.cmd b/Balthisar Tidy/tidylib5-src/test/xmltest.cmd new file mode 100755 index 00000000..e34e6aa1 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/test/xmltest.cmd @@ -0,0 +1,11 @@ +@echo off + +REM xmltest.cmd - execute all XML test cases +REM +REM (c) 1998-2003 (W3C) MIT, ERCIM, Keio University +REM See tidy.c for the copyright notice. +REM +REM +REM + +for /F "tokens=1*" %%i in (xmlcases.txt) do call onetest.cmd %%i %%j diff --git a/Balthisar Tidy/tidylib5-src/tidy.css b/Balthisar Tidy/tidylib5-src/tidy.css new file mode 100755 index 00000000..a600db99 --- /dev/null +++ b/Balthisar Tidy/tidylib5-src/tidy.css @@ -0,0 +1,329 @@ +/* 1st Style ignored by Netscape */ +td.dummy, font.dummy, .dummy, a:link.dummy, a:visited.dummy, a:active.dummy +{ +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 16pt; +color: #336699; +text-decoration: none; +font-weight: normal +} + +body +{ +margin-left: 10%; +margin-right: 10%; +font-family: sans-serif; +background-color: #FFFFFF +} + +/* Blue TITLE */ +td.title, font.title, .title, a:link.title, a:visited.title, a:active.title +{ +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 16pt; +color: #336699; +text-decoration: none; +font-weight: normal +} + +/* BODY TEXT */ +td.text, font.text, .text, a:link.text, a:visited.text, a:active.text +{ +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 9pt; +color: #000000; +text-decoration: none; +font-weight: normal +} + +/* BOLD BODY TEXT */ +td.textbold, font.textbold, .textbold, a:link.textbold, a:visited.textbold, a:active.textbold +{ +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 9pt; +color: #000000; +text-decoration: none; +font-weight: bold +} + +/* BOLD BODY TEXT LINK WITH UNDERLINE*/ +td.textboldlink, font.textboldlink, .textboldlink, a:link.textboldlink, a:visited.textboldlink, a:active.textboldlink +{ +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 9pt; +color: #000000; +font-weight: bold +} + +/* SMALL BODY TEXT */ +td.smtext, font.smtext, .smtext, a:link.smtext, a:visited.smtext, a:active.smtext +{ +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 8pt; +color: #000000; +text-decoration: none; +font-weight: normal +} + +/* SMALL BOLD BODY TEXT */ +td.smtextbold, font.smtextbold, .smtextbold, a:link.smtextbold, a:visited.smtextbold, a:active.smtextbold +{ +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 8pt; +color: #000000; +text-decoration: none; +font-weight: bold +} + +/* TITLES +td.title, font.title, .title, a:link.title, a:visited.title, a:active.title +{ +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 12pt; +color: #CC3300; +text-decoration: none; +font-weight: bold +} +*/ + +/* SUBTITLES */ +td.subtitle, font.subtitle, .subtitle, a:link.subtitle, a:visited.subtitle, a:active.subtitle +{ +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 11pt; +color: #000000; +text-decoration: none; +font-weight: bold +} + +/* LEGAL TEXT */ +td.legal, font.legal, .legal, a:link.legal, a:visited.legal, a:active.legal +{ +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 8pt; +color: #000000; +text-decoration: none; +font-weight: normal +} + +td.legallink, font.legallink, .legallink, a:link.legallink, a:visited.legallink, a:active.legallink +{ +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 8pt; +color: #CC3300; +font-weight: normal +} + +/* RED TEXT */ +td.textred, font.textred, .textred, a:link.textred, a:visited.textred, a:active.textred +{ +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 10pt; +color: #CC3300; +text-decoration: none; +font-weight: normal +} + +/* RED TEXT BOLD*/ +td.textredbold, font.textredbold, .textredbold, a:link.textredbold, a:visited.textredbold, a:active.textredbold +{ +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 10pt; +color: #CC3300; +text-decoration: none; +font-weight: bold +} + +/* LINKS */ +td.link, font.link, .link, a:link.link, a:visited.link, a:active.link +{ +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 10pt; +color: #3366CC; +font-weight: normal +} + +td.tabletitlelink, font.tabletitlelink, .tabletitlelink, a:link.tabletitlelink, a:visited.tabletitlelink, a:active.tabletitlelink +{ +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 10pt; +background-color: #e9e9d3; +color: #000000; +} + +/* TABLE TITLES */ +td.tabletitle, font.tabletitle, .tabletitle, a:link.tabletitle, a:visited.tabletitle, a:active.tabletitle +{ +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 10pt; +color: #336699; +background-color: #e9e9d3; +/* text-decoration: none; */ +font-weight: bold +} + +/* TABLE CELL */ +td.cell, tr.cell, font.cell, .cell, a:link.cell, a:visited.cell, a:active.cell +{ +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 12pt; +color: #000000; +font-weight: normal; +/* background-color: #e9e9d3 */ +background-color: #f5f5f5 +} + +/* SHADED TABLE CELL */ +td.shaded, tr.shaded, font.shaded, .shaded, a:link.shaded, a:visited.shaded, a:active.shaded +{ +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 12pt; +color: #000000; +font-weight: normal; +background-color: #f5f5f5 +} + +/* GLOSSARY TERM */ +td.term, font.term, .term, a:link.term, a:visited.term, a:active.term +{ +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 10pt; +font-style: normal; +color: #000000; +text-decoration: none; +font-weight: normal +} + +/* ELEMENT TAGS */ +ul +{ +font-family: Arial, Helvetica, sans-serif; +font-size: 10pt; +font-style: normal; +font-weight: normal +} +li +{ +font-family: Arial, Helvetica, sans-serif; +font-size: 10pt; +font-style: normal; +font-weight: normal +} + +a:link.h1, a:visited.h1, .h1 +{ +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 12pt; +color: #0066CC +} +a:active.h1 +{ +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 12pt; +font-weight: bold; +color: #0066CC +} +h1 +{ +margin-left: -8%; +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 12pt; +color: #0066CC +} + +.h2 +{ +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 11pt; +/* font-weight: bold; */ +color: #000000 +} + +h2 +{ +margin-left: -4%; +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 11pt; +/* font-weight: bold; */ +color: #000000 +} + +A:link.h3, A:visited.h3, .h3 +{ font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 10pt; +color: #000000; +font-weight: bold +} + +A:active.h3 +{ +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 10pt; +color: #000000; +font-weight: bold +} + +h3 +{ +margin-left: -4%; +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 10pt; +font-weight: bold; +color: #000000 +} + +h4 +{ +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 9pt; +font-weight: bold; +color: #000000 +} + +.code, A:active.code, A:link.code, A:visited.code +{ +font-family: "Courier New", Courier, monospace; +} + +.abstract +{ + font-style : italic; +} + +p +{ +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 10pt; +font-style: normal +} + +td +{ +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 10pt; +font-style: normal +} + +/* LINKS */ +a:link, a:active +{ +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 10pt; +color: #3366CC; +font-weight: normal +} + +a:visited +{ +font-family: Arial, Helvetica, "Trebuchet MS", sans-serif; +font-size: 10pt; +color: #333366; +font-weight: normal +} + +code { + /* use browser/user default for `font-family` */ + font-weight: bold; + color: brown; + background: transparent; +} diff --git a/Classes/App Pieces/AppController.h b/Classes/App Pieces/AppController.h deleted file mode 100644 index b9f04ead..00000000 --- a/Classes/App Pieces/AppController.h +++ /dev/null @@ -1,24 +0,0 @@ -/*************************************************************************************** - AppController.h -- part of Balthisar Tidy - - The main application controller, which ties together the PreferenceControllers and - the BatchController. The DocumentController is implemented automatically, and no - special works needs to be done. - ***************************************************************************************/ - -#import - -@class PreferenceController; // let compiler know that this exists! -@class BatchController; // let compiler know that this exists! - -@interface AppController : NSObject { - PreferenceController *preferenceController; // we need a PreferenceController instance for preferences. - BatchController *batchController; // we need a BatchController instance for the batch window. -} - -- (IBAction)showPreferences:(id)sender; // user wants to see the preferences. -- (IBAction)showBatch:(id)sender; // user wants to see the batch window. - - -@end - diff --git a/Classes/App Pieces/AppController.m b/Classes/App Pieces/AppController.m deleted file mode 100644 index c417d6f8..00000000 --- a/Classes/App Pieces/AppController.m +++ /dev/null @@ -1,70 +0,0 @@ -/*************************************************************************************** - AppController.m -- part of Balthisar Tidy - - The main application controller, which ties together the PreferenceControllers and - the BatchController. The DocumentController is implemented automatically, and no - special works needs to be done. - ***************************************************************************************/ - -#import -#import "AppController.h" -#import "PreferenceController.h" -#import "BatchController.h" - - -@implementation AppController - -/******************************************************************** - initialize - when the class is created, we want to make sure all of the - options are registered before anything else happens. We've\ - implemented this functionality as a class method in our - PreferenceController class, which works quite nicely and - we don't have to intermix that stuff directly in our code - here. -*********************************************************************/ -+(void)initialize { - [PreferenceController registerUserDefaults]; -} // end initialize - -/******************************************************************** - dealloc - make sure that the preference controller and batch controller - are properly disposed of. -*********************************************************************/ -- (void)dealloc { - [preferenceController release]; - [batchController release]; - [super dealloc]; -} // end dealloc - -/******************************************************************** - showPreferences - show the prefereces window. -*********************************************************************/ -- (IBAction)showPreferences:(id)sender { - // is preferenceController instance variable (outlet) nil? - // if so, then we need to create it. - if (!preferenceController) { - preferenceController = [[PreferenceController alloc] init]; - } - // ...and now show it - [preferenceController showWindow:self]; -} // end showPreferences - - -/******************************************************************** - showBatch - show the batch window. -*********************************************************************/ -- (IBAction)showBatch:(id)sender { - // is batchController instance variable (outlet) nil? - // if so, then we need to create it. - if (!batchController) { - batchController = [[BatchController alloc] init]; - } - // ...and now show it - [batchController showWindow:self]; -} // end showBatch - -@end diff --git a/Classes/App Pieces/BatchController.h b/Classes/App Pieces/BatchController.h deleted file mode 100644 index 74cc8fea..00000000 --- a/Classes/App Pieces/BatchController.h +++ /dev/null @@ -1,32 +0,0 @@ -/*************************************************************************************** - BatchController.h -- part of Balthisar Tidy - - The main controller for the batch-mode interface. Here we'll control the following: - o We're the Datasource delegate for the NSOutlineView, so handle that. - o We're going to handle drag-and-drop on the NSOutlineView for adding files. - o We're going to implement and control the interface for doing the Tidy'ing. - ***************************************************************************************/ - -#import -#import -#import "OptionPaneController.h" - -@interface BatchController : NSWindowController { - IBOutlet NSOutlineView *fileList; // outlet for the NSOutlineView - - IBOutlet NSView *optionPane; // pointer to our empty optionPane. - - OptionPaneController *optionController; // this will control the real option pane loaded into optionPane - JSDTidyDocument *tidyProcess; // this will point to the optionPaneController's tidy process. - - TreeNode *fileTree; // holds a list of everything we'll batch process. -} - --(IBAction)startBatch:(id)sender; // handler for the batch button being pressed. - -- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item; -- (int)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item; -- (id)outlineView:(NSOutlineView *)outlineView child:(int)index ofItem:(id)item; -- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item; - -@end diff --git a/Classes/App Pieces/BatchController.m b/Classes/App Pieces/BatchController.m deleted file mode 100644 index c2799b39..00000000 --- a/Classes/App Pieces/BatchController.m +++ /dev/null @@ -1,136 +0,0 @@ -/*************************************************************************************** - BatchController.m -- part of Balthisar Tidy - - The main controller for the batch-mode interface. Here we'll control the following: - o We're the Datasource delegate for the NSOutlineView, so handle that. - o We're going to handle drag-and-drop on the NSOutlineView for adding files. - o We're going to implement and control the interface for doing the Tidy'ing. - ***************************************************************************************/ - -#import "BatchController.h" -#import - -@implementation BatchController - -/******************************************************************** - init - Our creator -- we will do the following: - o init the window with the "Batch" nib. - o set out window frame auto-save name. - o initialize our instance variables. -*********************************************************************/ -- (id)init { - if (self = [super initWithWindowNibName:@"Batch"]) { -/* TreeNode *tempNode = nil; - [self setWindowFrameAutosaveName:@"BatchWindow"]; - fileTree = [[TreeNode treeNodeWithData:@"Invisible Node"] retain]; - tempNode = [TreeNode treeNodeWithData:@"First Node"]; - [fileTree insertChild:tempNode atIndex:0]; - tempNode = [TreeNode treeNodeWithData:@"Second Node"]; - [fileTree insertChild:tempNode atIndex:1]; - [tempNode insertChild:[TreeNode treeNodeWithData:@"First Sub Node"] atIndex:0]; - //[fileTree insertChild:[TreeNode treeNodeWithData:@"First Node"] atIndex:0]; - //[fileTree insertChild:[TreeNode treeNodeWithData:@"Second Node"] atIndex:1]; - - [self setWindowFrameAutosaveName:@"BatchWindow"]; -*/ } // if - return self; -} - -/******************************************************************** - dealloc - Our destructor. We will: - o release our instance variables - o call the inherited method to ensure everything else is ok. -*********************************************************************/ --(void)dealloc { - [optionController release]; - [fileTree release]; - [super dealloc]; -} - -/******************************************************************** - windowDidLoad - when the window has loaded, let's do: - o honor the preferences and pre-set the controls. -*********************************************************************/ -- (void)windowDidLoad { -/* NSUserDefaults *defaults; - - defaults = [NSUserDefaults standardUserDefaults]; - colorAsData = [defaults objectForKey: BNRTableBgColorKey]; - [colorWell setColor:[NSUnarchiver unarchiveObjectWithData:colorAsData]]; - [checkbox setState:[defaults boolForKey:BNREmptyDocKey]]; */ -} - -/******************************************************************** - awakeFromNib - When we wake from the nib file, setup the option controller -*********************************************************************/ --(void) awakeFromNib { - // create a OptionPaneController and put it in place of optionPane - if (!optionController) - optionController = [[OptionPaneController alloc] init]; - [optionController putViewIntoView:optionPane]; - [optionController setTarget:self]; - [optionController setAction:@selector(optionChanged:)]; -} // awakeFromNib - - -/**************************************************************************************************** - DATA SOURCE methods for the NSOutlineView. - ****************************************************************************************************/ - -/******************************************************************** - outlineView:isItemExpandable - the NSOutlineView polls this delegate method to determine if an - item is expandable. We'll say okay if there are children. -*********************************************************************/ -- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item { - return ([item numberOfChildren] > 0); -} - -/******************************************************************** - outlineView:numberOfChildrenOfItem - the NSOutlineView polls this delegate method to determine how - many children an item has. -*********************************************************************/ -- (int)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item { - // if item is nil, then we're the root of the VIEW! We should ge the root of the fileTree. - if (item == nil) - return [fileTree numberOfChildren]; // return number of fileList top level nodes. - else - return [item numberOfChildren]; // return the item number of children already in the view. -} - -/******************************************************************** - outlineView:child:ofItem - the NSOutlineView polls this delegate method to retrieve the - children of the item. It will be called repeatedly to get the - sucessive children, based on how many children were returned - for numberOfChildrenOfItem. -*********************************************************************/ -- (id)outlineView:(NSOutlineView *)outlineView child:(int)index ofItem:(id)item { - // if item is nil, then we're the root of the VIEW! We should ge the root of the fileTree. - if (item == nil) - return [fileTree childAtIndex:index]; // return the top-level sibling nodes of fileTree. - else - return [item childAtIndex:index]; // otherwise, item will be part of fileTree with its own children. -} - -/******************************************************************** - outlineView:objectValueForTableColumn:byItem - the NSOutlineView polls this delegate method to retrieve the - data to display for each column of each item of the view. We're - going to retrieve the nodeData for each item, which should be - a string, which will be displayed by the view. -*********************************************************************/ -- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item { - return (NSString *)[item nodeData]; -} - --(IBAction)startBatch:(id)sender { - -} // startBatch - -@end diff --git a/Classes/App Pieces/OptionPaneController.h b/Classes/App Pieces/OptionPaneController.h deleted file mode 100644 index 73f2bf09..00000000 --- a/Classes/App Pieces/OptionPaneController.h +++ /dev/null @@ -1,44 +0,0 @@ -/*************************************************************************************** - OptionPaneController.h -- part of Balthisar Tidy - - The main controller for the multi-use option pane. implemented separately for - o use on a document window - o use on the preferences window - - This controller parses optionsInEffect.txt in the application bundle, and compares - the options listed there with the linked-in TidyLib to determine which options are - in effect and valid. We use an instance of JSDTidyDocument to deal with this. - ***************************************************************************************/ - -#import -#import "JSDTidy.h" - -@interface OptionPaneController : NSObject { - IBOutlet NSView *myView; // pointer to the view -- will be returned by getView. - IBOutlet NSTableView *theTable; // pointer to the table - IBOutlet NSTextField *theDescription; // pointer to the description field. - - SEL _action; // routine to be called (action method) when an option changes. - id _target; // the target for the action method (optional--can be nil targeted). - - NSArray *optionsInEffect; // array of NSString that holds the options we really want to use. - NSArray *optionsExceptions; // array of NSString that holds the options we want to treat as STRINGS - JSDTidyDocument *tidyProcess; // our tidy wrapper/processor for dealing with valid options dynamically. - -} - --(id)init; // initialize the view so we can use it. --(NSView *)getView; // return the view so that it can be used in a parent window. --(void)putViewIntoView:(NSView *)dstView; // make the view of this controller the view of dstView. - --(IBAction)optionChanged:(id)sender; // handle an option changing in the tableview. - --(SEL)action; // returns the action for this controller when options change. --(void)setAction:(SEL)theAction; // sets the action for this controller when options change. --(id)target; // returns the target for this controller. --(void)setTarget:(id)theTarget; // sets the target -- optional, can be nil-targeted action. - --(void)tidyDocument:(JSDTidyDocument *)theDoc; // set method for tidyProcess --(JSDTidyDocument *)tidyDocument; // get method for tidyProcess - -@end diff --git a/Classes/App Pieces/OptionPaneController.m b/Classes/App Pieces/OptionPaneController.m deleted file mode 100644 index add29568..00000000 --- a/Classes/App Pieces/OptionPaneController.m +++ /dev/null @@ -1,239 +0,0 @@ -/*************************************************************************************** - OptionPaneController.h -- part of Balthisar Tidy - - The main controller for the multi-use option pane. implemented separately for - o use on a document window - o use on the preferences window - ***************************************************************************************/ - -#import "OptionPaneController.h" -#import "JSDTableColumn.h" - -@implementation OptionPaneController - - -/******************************************************************** - init - designated initializer - load the bundle so the view can be drawn. -*********************************************************************/ --(id)init { - if ([super init]) { - [NSBundle loadNibNamed:@"OptionPane" owner:self]; - tidyProcess = [[JSDTidyDocument alloc] init]; - // get our options list and exception list (items to treat as string regardless of tidylib definition) - optionsInEffect = [[NSArray arrayWithArray:[JSDTidyDocument loadConfigurationListFromResource:@"optionsInEffect" ofType:@"txt"]] retain]; - optionsExceptions = [[NSArray arrayWithArray:[JSDTidyDocument loadConfigurationListFromResource:@"optionsTypesExceptions" ofType:@"txt"]] retain]; - - // create a custom column for the NSTableView -- the table will retain and control it. - [[JSDTableColumn alloc] initReplacingColumn:[theTable tableColumnWithIdentifier:@"check"]]; - } // if - return self; -} // init - -/********************************************************************* - dealloc - our destructor -- get rid of stuff -**********************************************************************/ -- (void)dealloc -{ - [tidyProcess release]; - [optionsInEffect release]; - [optionsExceptions release]; - [super dealloc]; -} - -/******************************************************************** - getView - return theView so that it can be made a subview in another - window. -*********************************************************************/ --(NSView *)getView { - return myView; -} // getView - -/******************************************************************** - putViewIntoView - put the view of this controller into theView -*********************************************************************/ --(void)putViewIntoView:(NSView *)dstView { - // remove all subviews -- should only be one or zero, but let's be safe. - NSEnumerator *enumerator = [[dstView subviews] objectEnumerator]; - NSView *trash; - while (trash = [enumerator nextObject]) - [trash removeFromSuperview]; - // and put in the view - [dstView addSubview:myView]; - [theTable reloadData]; // this DOES happen automatically, but the scroll bars don't initially appear. - [theTable selectRow:0 byExtendingSelection:NO]; // this SHOULD happen automatically, but doesn't for some reason. -} - - -/******************************************************************** - tableViewSelectionDidChange: - we arrived here by virtue of this controller class being the - delegate of the table. Whenever the selection changes - we're going to put up a helpful hint of what the selection is. -*********************************************************************/ -- (void)tableViewSelectionDidChange:(NSNotification *)aNotification { - // get the description of the selected row. - if ([aNotification object] == theTable) - [theDescription setStringValue:NSLocalizedString([optionsInEffect objectAtIndex:[theTable selectedRow]], nil)]; -} // tableViewSelectionDidChange - -/******************************************************************** - numberOfRowsInTableView - we're here because we're the datasource of the tableview. - We need to specify how many items are in the table view. -*********************************************************************/ -- (int)numberOfRowsInTableView:(NSTableView *)aTableView { - return [optionsInEffect count]; -} // numberOfRowsInTableView - - -/******************************************************************** - tableView:objectValueForTableColumn:row - we're here because we're the datasource of the tableview. - We need to specify what to show in the row/column. -*********************************************************************/ -- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex { - // get the id for the option at this row - TidyOptionId optId = [JSDTidyDocument optionIdForName:[optionsInEffect objectAtIndex:rowIndex]]; - - // handle returning the name of the option. - if ([[aTableColumn identifier] isEqualToString:@"name"]) - return [optionsInEffect objectAtIndex:rowIndex]; - - // handle the value column of the option - if ([[aTableColumn identifier] isEqualToString:@"check"]) - // if we're working on Encoding, then return the INDEX in allAvailableStringEncodings of the value. - if ( (optId == TidyCharEncoding) || (optId == TidyInCharEncoding) || (optId == TidyOutCharEncoding) ) { - int i = [[tidyProcess optionValueForId:optId] intValue]; // value of option - uint j = [[[tidyProcess class] allAvailableStringEncodings] indexOfObject:[NSNumber numberWithInt:i]]; // index of option - return [[NSNumber numberWithInt:j] stringValue]; // return it as a string - } else - return [tidyProcess optionValueForId:optId]; - return @""; -} //tableView:objectValueForTableColumn:row - - - -/******************************************************************** - tableColumn:customDataCellForRow - we're here because we're the datasource of the tableview. - We need to specify which cell to use for this particular row. -*********************************************************************/ --(id)tableColumn:(JSDTableColumn *)aTableColumn customDataCellForRow:(int)row { - // get the id for the option at this row - TidyOptionId optId = [JSDTidyDocument optionIdForName:[optionsInEffect objectAtIndex:row]]; - - if ([[aTableColumn identifier] isEqualToString:@"check"]) { - NSArray *picks = [JSDTidyDocument optionPickListForId:optId]; - // only return a popup if there IS a picklist OR the item is in the optionsExceptions array. - if ( ([picks count] != 0) && (![optionsExceptions containsObject:[optionsInEffect objectAtIndex:row]] ) ) - return [aTableColumn usefulPopUpCell:picks]; - } // if - return nil; -} // tableColumn:customDataCellForRow - -/******************************************************************** - tableView:shouldEditTableColumn:row - we're here because we're the delegate of the tableview. - We need to disable for text editing cells with widgets. -*********************************************************************/ -- (BOOL)tableView:(NSTableView *)aTableView shouldEditTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex { - if ([[aTableColumn identifier] isEqualToString:@"check"]) { - if ([[aTableColumn dataCellForRow:rowIndex] class] != [NSTextFieldCell class]) - return NO; - else - return YES; - } // if - return NO; -} // tableView:shouldEditTableColumn:row - - -/******************************************************************** - tableView:setObjectValue:forTableColumn:row - user changed a value -- let's record it! -*********************************************************************/ -- (void)tableView:(NSTableView *)aTableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)inColumn row:(int)inRow { - TidyOptionId optId = [JSDTidyDocument optionIdForName:[optionsInEffect objectAtIndex:inRow]]; - if ([[inColumn identifier] isEqualToString:@"check"]) { - // if we're working with encoding, we need to get the NSStringEncoding instead of the index of the item. - if ( (optId == TidyCharEncoding) || (optId == TidyInCharEncoding) || (optId == TidyOutCharEncoding) ) { - id myNumber = [[[tidyProcess class] allAvailableStringEncodings] objectAtIndex:[object unsignedLongValue]]; - [tidyProcess setOptionValueForId:optId fromObject:myNumber]; - } else - [tidyProcess setOptionValueForId:optId fromObject:object]; - } // if -} // tableView:setObjectValue:forTableColumn:row - -/******************************************************************** - tidyDocument - get method to expose the tidy document. -*********************************************************************/ --(void)tidyDocument:(JSDTidyDocument *)theDoc { - [theDoc retain]; - [tidyProcess release]; - tidyProcess = theDoc; -} // tidyDocument - - -/******************************************************************** - tidyDocument - set method to expose the tidy document. -*********************************************************************/ --(JSDTidyDocument *)tidyDocument { - return tidyProcess; -} // tidyDocument - -//=================================================================================================== -// TARGETING AND ACTIONING -- we want to behave like a Cocoa component, so support that idea. -//=================================================================================================== - -/******************************************************************** - optionChanged: - One of the options changed! See if there's something assigned - to _action, and if so, call it! We're here as a result of being - the Action of the tableview. -*********************************************************************/ -- (IBAction)optionChanged:(id)sender { - [NSApp sendAction:_action to:_target from:self]; -} - -/******************************************************************** - action - return the assigned action. -*********************************************************************/ --(SEL)action { - return _action; -} // action - -/******************************************************************** - SetAction - assign an action to this controller. -*********************************************************************/ --(void)setAction:(SEL)theAction { - _action = theAction; -} // setAction; - -/******************************************************************** - target - return the target of this controller. -*********************************************************************/ --(id)target { - return _target; -} // target - -/******************************************************************** - SetTarget - assign a target to this controller. Remember that actions work - on the target-action paradigm, but that nil-targeted actions are - supported. This means if _target isn't used, the action is - sent all the way up the responder chain. If there's a target, it - only goes to the target. -*********************************************************************/ --(void)setTarget:(id)theTarget { - _target = theTarget; -} // setTarger - -@end diff --git a/Classes/App Pieces/PreferenceController.h b/Classes/App Pieces/PreferenceController.h deleted file mode 100644 index 94307a63..00000000 --- a/Classes/App Pieces/PreferenceController.h +++ /dev/null @@ -1,36 +0,0 @@ -/*************************************************************************************** - PreferenceController.h -- part of Balthisar Tidy - - The main preference controller. Here we'll control the following: - o Handles the application preferences. - o Implements class methods to be used before instantiation. - ***************************************************************************************/ - -#import -#import "OptionPaneController.h" - -extern NSString *JSDKeySavingPrefStyle; -extern NSString *JSDKeyWarnBeforeOverwrite; -extern NSString *JSDKeyBatchSavingPrefStyle; - -@interface PreferenceController : NSWindowController { - - IBOutlet NSButton *saving1; // pointer to enable save - IBOutlet NSButton *saving2; // pointer to disable save - IBOutlet NSButton *savingWarn; // pointer to warn on save - - IBOutlet NSButton *batchSaving1; // pointer to overwrite - IBOutlet NSButton *batchSaving2; // pointer to backup - - IBOutlet NSView *optionPane; // pointer to our empty optionPane. - OptionPaneController *optionController; // this will control the real option pane loaded into optionPane - - JSDTidyDocument *tidyProcess; // this will point to the optionPaneController's tidy process. - -} -+(void)registerUserDefaults; - --(IBAction)preferenceChanged:(id)sender; // handler for a configuration option change. --(IBAction)radioSavingChanged:(id)sender; // handler for a saving preference change. --(IBAction)radioBatchChanged:(id)sender; // handler for a batch preference change. -@end diff --git a/Classes/App Pieces/PreferenceController.m b/Classes/App Pieces/PreferenceController.m deleted file mode 100644 index 35c3919d..00000000 --- a/Classes/App Pieces/PreferenceController.m +++ /dev/null @@ -1,146 +0,0 @@ -/*************************************************************************************** - PreferenceController.m -- part of Balthisar Tidy - - The main preference controller. Here we'll control the following: - o Handles the application preferences. - o Implements class methods to be used before instantiation. - ***************************************************************************************/ - -#import -#import "PreferenceController.h" -#import "JSDTidy.h" - -// these convenience definitions for our prefs keys. -// the rest are generated by TidyLib directly. -NSString *JSDKeySavingPrefStyle = @"SavingPrefStyle"; -NSString *JSDKeyWarnBeforeOverwrite = @"WarnBeforeOverwrite"; -NSString *JSDKeyBatchSavingPrefStyle = @"BatchSavingPrefStyle"; - - -@implementation PreferenceController - -/******************************************************************** - registerUserDefaults -- CLASS method. - register all of the user defaults. Implemented as a CLASS - method in order to keep this with the preferences controller, - but the preferences controller won't have been created yet! -*********************************************************************/ -+(void)registerUserDefaults { - NSMutableDictionary *defaultValues = [NSMutableDictionary dictionary]; // create a dictionary - // put all of the defaults in the dictionary - [defaultValues setObject:[NSNumber numberWithInt:2] forKey:JSDKeySavingPrefStyle /* was key 10 */]; - [defaultValues setObject:[NSNumber numberWithBool:NO] forKey:JSDKeyWarnBeforeOverwrite /* was key 11 */]; - [defaultValues setObject:[NSNumber numberWithInt:1] forKey:JSDKeyBatchSavingPrefStyle /* was key 14 */]; - [JSDTidyDocument addDefaultsToDictionary:defaultValues]; // get the defaults ultimately from the linked-in TidyLib - // register the defaults with the defaults system - [[NSUserDefaults standardUserDefaults] registerDefaults: defaultValues]; -} // registerUserDefaults - -/******************************************************************** - init - Our creator -- we want to load the nib "Preferences". -*********************************************************************/ -- (id)init { - if (self = [super initWithWindowNibName:@"Preferences"]) - [self setWindowFrameAutosaveName:@"PrefWindow"]; - return self; -} // init - -/******************************************************************** - dealloc - clean up. -*********************************************************************/ -- (void)dealloc -{ - tidyProcess = nil; - [optionController release]; - [super dealloc]; -} // dealloc - -/******************************************************************** - awakeFromNib - When we wake from the nib file, setup the option pane controller. -*********************************************************************/ --(void) awakeFromNib { - // create a OptionPaneController and put it in place of optionPane - if (!optionController) - optionController = [[OptionPaneController alloc] init]; - [optionController putViewIntoView:optionPane]; - [optionController setTarget:self]; - [optionController setAction:@selector(optionChanged:)]; - tidyProcess = [optionController tidyDocument]; -} // awakeFromNib - - -/******************************************************************** - windowDidLoad - when the window has loaded, let's put the correct preferences on. -*********************************************************************/ -- (void)windowDidLoad { - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - [saving1 setState:([defaults integerForKey: JSDKeySavingPrefStyle] == 1)]; - [saving2 setState:([defaults integerForKey: JSDKeySavingPrefStyle] == 2)]; - [savingWarn setState:[defaults boolForKey: JSDKeyWarnBeforeOverwrite]]; - [savingWarn setEnabled:[saving1 state]]; - [batchSaving1 setState:([defaults integerForKey: JSDKeyBatchSavingPrefStyle] == 1)]; - [batchSaving2 setState:([defaults integerForKey: JSDKeyBatchSavingPrefStyle] == 2)]; - // load the default systems preferences. - [tidyProcess takeOptionValuesFromDefaults:defaults]; -} // windowDidLoad - -/******************************************************************** - radioSavingChanged - one of the radio buttons for saving options has changed. - Handle this apart, since we're not using a matrix. -*********************************************************************/ --(IBAction)radioSavingChanged:(id)sender { - [saving1 setState:NO]; - [saving2 setState:NO]; - [sender setState:YES]; - [savingWarn setEnabled:[saving1 state]]; - [self preferenceChanged:nil]; -} // radioSavingChanged - - -/******************************************************************** - radioBatchChanged - one of the radio buttons for batch options has changed. - Handle this apart, since we're not using a matrix. -*********************************************************************/ --(IBAction)radioBatchChanged:(id)sender { - [batchSaving1 setState:NO]; - [batchSaving2 setState:NO]; - [sender setState:YES]; - [self preferenceChanged:nil]; -} // radioSavingChanged - -/******************************************************************** - preferenceChanged - one of the saving/batch prefs changed. Log and notify. -*********************************************************************/ --(IBAction)preferenceChanged:(id)sender { - // update the preference registry - [[NSUserDefaults standardUserDefaults] setInteger:0 forKey:JSDKeySavingPrefStyle]; - if ([saving1 state]) [[NSUserDefaults standardUserDefaults] setInteger:1 forKey:JSDKeySavingPrefStyle]; - if ([saving2 state]) [[NSUserDefaults standardUserDefaults] setInteger:2 forKey:JSDKeySavingPrefStyle]; - [[NSUserDefaults standardUserDefaults] setBool:[savingWarn state] forKey:JSDKeyWarnBeforeOverwrite]; - [[NSUserDefaults standardUserDefaults] setInteger:0 forKey:JSDKeyBatchSavingPrefStyle]; - if ([batchSaving1 state]) [[NSUserDefaults standardUserDefaults] setInteger:1 forKey:JSDKeyBatchSavingPrefStyle]; - if ([batchSaving2 state]) [[NSUserDefaults standardUserDefaults] setInteger:2 forKey:JSDKeyBatchSavingPrefStyle]; - // send the notification that a saving preference has changed! - [[NSNotificationCenter defaultCenter] postNotificationName:@"JSDSavePrefChange" object:nil]; -} - -/******************************************************************** - optionChanged - one of the preferences changed in the table view. We're - here as a result of having been set the Action for the - OptionPaneController. We're gonna record the preference, - but we're not going to post a notification, 'cos new - documents will read the preferences themselves. -*********************************************************************/ --(IBAction)optionChanged:(id)sender { - [tidyProcess writeOptionValuesWithDefaults:[NSUserDefaults standardUserDefaults]]; -} // optionChanged - -@end diff --git a/Classes/App Pieces/TidyDocument.h b/Classes/App Pieces/TidyDocument.h deleted file mode 100644 index 0be3159b..00000000 --- a/Classes/App Pieces/TidyDocument.h +++ /dev/null @@ -1,37 +0,0 @@ -/*************************************************************************************** - TidyDocument.h -- part of Balthisar Tidy - - The main document controller. Here we'll control the following: - o - ***************************************************************************************/ - -#import -#import "JSDTidy.h" -#import "OptionPaneController.h" -#import "JSDTextView.h" - -@interface TidyDocument : NSDocument -{ - // view outlets - IBOutlet JSDTextView *sourceView; // pointer to the source HTML view. - IBOutlet JSDTextView *tidyView; // pointer to the tidy'd HTML view. - IBOutlet NSTableView *errorView; // pointer to where to display the error messages. - - // items for the option controller and pane - IBOutlet NSView *optionPane; // pointer to our empty optionPane. - OptionPaneController *optionController; // this will control the real option pane loaded into optionPane - - // internally-used instance variables. - JSDTidyDocument* tidyProcess; // our tidy wrapper/processor. - int saveBehavior; // the save behavior from the preferences. - bool saveWarning; // the warning behavior for when saveBehavior == 1; - bool yesSavedAs; // disable warnings and protections once a save-as has been done. - bool tidyOriginalFile; // flags whether the file was CREATED by Tidy, for writing type/creator codes. -} - -- (IBAction)optionChanged:(id)sender; // react to a tidy'ing control being changed. - -- (IBAction)errorClicked:(id)sender; // react to an error row being clicked. - -- (void)retidy; // tidy's itself. -@end diff --git a/Classes/App Pieces/TidyDocument.m b/Classes/App Pieces/TidyDocument.m deleted file mode 100644 index b234be7c..00000000 --- a/Classes/App Pieces/TidyDocument.m +++ /dev/null @@ -1,398 +0,0 @@ -/*************************************************************************************** - TidyDocument.m -- part of Balthisar Tidy - - The main document controller. Here we'll control the following: - o File I/O, including the use of type/creator codes. - o Dirty file detection. - o Handle Preferences - o Handle Options for running Tidy - o Tidy - ***************************************************************************************/ - -//============================================================================================= -// NOTES ABOUT "DIRTY FILE" DETECTION -// We're doing a few convoluted things to allow undo in the -// sourceView while not messing up the document dirty flags. -// Essentially, whenever the [sourceView] <> [tidyView], we're going -// to call it dirty. Whenever we write a file, it's obviously fit to be the source file, -// and we can then put it in the sourceView. -//============================================================================================= - -//============================================================================================= -// NOTES ABOUT TYPE/CREATOR CODES -// Mac OS X is trying to kill type/creator codes. Oh well. But they're still supported -// and I continue to believe they're betting than Windows-ish file extensions. We're going -// to try to make everybody happy by doing the following: -// o For files that Tidy creates by the user typing into the sourceView, we'll save them -// with the Tidy type/creator codes. We'll use WWS2 for Balthisar Tidy creator, and -// TEXT for filetype. (I shouldn't use WWS2 'cos that's Balthisar Cascade type!!!). -// o For *existing* files that Tidy modifies, we'll check to see if type/creator already -// exists, and if so, we'll re-write with the existing type/creator, otherwise we'll -// not use any type/creator and let the OS do its own thing in Finder. -//============================================================================================= - -#import "TidyDocument.h" -#import "PreferenceController.h" -#import "JSDTidy.h" - -@implementation TidyDocument - -//============================================================================================= -// FILE I/O HANDLING -//============================================================================================= - -/******************************************************************** - readFromFile: - Called as part of the responder chain. We already have a name - and type as a result of (1) the file picker, or (2) opening a - document from Finder. Here, we'll merely load the file contents - into an NSData, and process it when the nib awakes (since we're - likely to be called here before the nib and its controls exist). -*********************************************************************/ -- (BOOL)readFromFile:(NSString *)filename ofType:(NSString *)docType { - [tidyProcess setOriginalTextWithData:[NSData dataWithContentsOfFile:filename]]; // give our tidyProcess the data. - tidyOriginalFile = NO; // the current file was OPENED, not a Tidy original. - return YES; // yes, it was loaded successfully. -} // readFromFile - -/******************************************************************** - dataRepresentationOfType - Called as a result of saving files. All we're going to do is - pass back the NSData taken from the TidyDoc -*********************************************************************/ -- (NSData *)dataRepresentationOfType:(NSString *)aType { - return [tidyProcess tidyTextAsData]; // return the raw data in user-encoding to be written. -} // dataRepresentationOfType - -/******************************************************************** - writeToFile - Called as a result of saving files, and does the actual writing. - We're going to override it so that we can update the sourceView - automatically any time the file is saved. The logic is, once the - file is saved, the sourceview ought to reflect the actual file - contents, which is the tidy'd view. -*********************************************************************/ -- (BOOL)writeToFile:(NSString *)fileName ofType:(NSString *)type { - bool success = [super writeToFile:fileName ofType:type]; // inherited method does the actual saving - if (success) { - [tidyProcess setOriginalText:[tidyProcess tidyText]]; // make the tidyText the new originalText. - [sourceView setString:[tidyProcess workingText]]; // update the sourceView with the newly-saved contents. - yesSavedAs = YES; // this flag disables the warnings, since they're meaningless now. - } - return success; -} // writeToFile - -/******************************************************************** - fileAttributesToWriteToFile:ofType:saveOperation - Called as a result of saving files. We're going to support the - use of HFS+ type/creator codes, since Cocoa doesn't do this - automatically. We only do this on files that haven't been - opened by Tidy. That way, Tidy-created documents show the Tidy - icons, and documents that were merely opened retain thier - original file associations. We COULD make this a preference - item such that Tidy will always add type/creator codes. -*********************************************************************/ -- (NSDictionary *)fileAttributesToWriteToFile:(NSString *)fullDocumentPath - ofType:(NSString *)documentTypeName - saveOperation:(NSSaveOperationType)saveOperationType { - // get the inherited dictionary. - NSMutableDictionary *myDict = (NSMutableDictionary *)[super fileAttributesToWriteToFile:fullDocumentPath ofType:documentTypeName saveOperation:saveOperationType]; - // ONLY add type/creator if this is an original file -- NOT if we opened the file. - if (tidyOriginalFile) { - [myDict setObject:[NSNumber numberWithUnsignedLong:'WWS2'] forKey:NSFileHFSCreatorCode]; // set creator code. - [myDict setObject:[NSNumber numberWithUnsignedLong:'TEXT'] forKey:NSFileHFSTypeCode]; // set file type. - } else { // use original type/creator codes, if any. - OSType macType = [ [ [ NSFileManager defaultManager ] fileAttributesAtPath: fullDocumentPath traverseLink: YES ] fileHFSTypeCode]; - OSType macCreator = [ [ [ NSFileManager defaultManager ] fileAttributesAtPath: fullDocumentPath traverseLink: YES ] fileHFSCreatorCode]; - if ((macType != 0) && (macCreator != 0)) { - [myDict setObject:[NSNumber numberWithUnsignedLong:macCreator] forKey:NSFileHFSCreatorCode]; - [myDict setObject:[NSNumber numberWithUnsignedLong:macType] forKey:NSFileHFSTypeCode]; - } - } - return myDict; -} // fileAttributesToWriteToFile:ofType:saveOperation - -/******************************************************************** - revertToSavedFromFile:ofType - allow the default reversion to take place, and then put the - correct value in the editor if it took place. The inherited - method does readFromFile, so our tidyProcess will already - have the reverted data. -*********************************************************************/ -- (BOOL)revertToSavedFromFile:(NSString *)fileName ofType:(NSString *)type { - bool didRevert = [super revertToSavedFromFile:fileName ofType:type]; - if (didRevert) { - [sourceView setString:[tidyProcess workingText]]; // update the display, since the reversion already loaded the data. - [self retidy]; // retidy the document. - } // if - return didRevert; // flag whether we reverted or not. -} // revertToSavedFromFile:ofType - -/******************************************************************** - saveDocument - we're going to override the default save to make sure we can - comply with the user's preferences. We're being over-protective - because we want to not get blamed for screwing up the users' - data if Tidy doesn't process something correctly. -*********************************************************************/ -- (IBAction)saveDocument:(id)sender { - // normal save, but with a warning and chance to back out. Here's the logic for how this works: - // (1) the user requested a warning before overwriting original files. - // (2) the sourceView isn't empty. - // (3) the file hasn't been saved already. This last is important, because if the file has - // already been edited and saved, there's no longer an "original" file to protect. - - // warning will only apply if there's a current file and it's NOT been saved yet, and it's not new. - if ( (saveBehavior == 1) && // behavior is protective AND - (saveWarning) && // we want to have a warning AND - (yesSavedAs == NO) && // we've NOT yet done a save as... AND - ([[self fileName] length] != 0 )) { // the filename isn't zero length - int i = NSRunAlertPanel(NSLocalizedString(@"WarnSaveOverwrite", nil), NSLocalizedString(@"WarnSaveOverwriteExplain", nil), - NSLocalizedString(@"continue save", nil),NSLocalizedString(@"do not save", nil) , nil); - if (i == NSAlertAlternateReturn) - return; // don't let user continue the save operation if he chose don't save. - } // if - - // save is completely disabled -- tell user to Save AsÉ - if (saveBehavior == 2) { - NSRunAlertPanel(NSLocalizedString(@"WarnSaveDisabled", nil), NSLocalizedString(@"WarnSaveDisabledExplain", nil), - NSLocalizedString(@"cancel", nil), nil, nil); - return; // don't let user continue the save operation. - } // if - - return [super saveDocument:sender]; -} // end saveDocument - -//============================================================================================= -// INITIALIZATION, DESTRUCTION, AND SETUP -//============================================================================================= - -/******************************************************************** - init - Our creator -- create the tidy processor and the processString. - Also be registered to receive preference notifications for the - file-saving preferences. -*********************************************************************/ -- (id)init -{ - if ([super init]) { - tidyOriginalFile = YES; // if yes, we'll write file/creator codes. - tidyProcess = [[JSDTidyDocument alloc] init]; // use our own tidy process, NOT the controller's instance. - // register for notification - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleSavePrefChange:) name:@"JSDSavePrefChange" object:nil]; - } // if - return self; -} // init - -/********************************************************************* - dealloc - our destructor -- get rid of the tidy processor and processString -**********************************************************************/ -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; // remove ourselves from the notification center! - [tidyProcess release]; // release the tidyProcess. - [optionController release]; // remove the optionController pane. - [super dealloc]; // do the inherited dealloc. -} // dealloc - -/******************************************************************** - configureViewSettings - given aView, make it non-wrapping. Also set fonts. -*********************************************************************/ -- (void)configureViewSettings:(NSTextView *)aView { - [aView setFont:[NSFont fontWithName:@"Courier" size:12]]; // set the font for the views. - [aView setRichText:NO]; // don't allow rich text. - [aView setUsesFontPanel:NO]; // don't allow the font panel. - [aView setContinuousSpellCheckingEnabled:NO]; // turn off spell checking. - [aView setSelectable:YES]; // text can be selectable. - [aView setEditable:NO]; // text shouldn't be editable. - [aView setImportsGraphics:NO]; // don't let user import graphics. - [aView setUsesRuler:NO]; // no, the ruler won't be used. -} // configureViewSettings - -/******************************************************************** - awakeFromNib - When we wake from the nib file, setup the option controller -*********************************************************************/ --(void) awakeFromNib { - // create a OptionPaneController and put it in place of optionPane - if (!optionController) - optionController = [[OptionPaneController alloc] init]; - [optionController putViewIntoView:optionPane]; - [optionController setTarget:self]; - [optionController setAction:@selector(optionChanged:)]; -} // awakeFromNib - -/******************************************************************** - windowControllerDidLoadNib: - The nib is loaded. If there's a string in processString, it will - appear in the sourceView. -*********************************************************************/ -- (void)windowControllerDidLoadNib:(NSWindowController *) aController -{ - [super windowControllerDidLoadNib:aController]; // inherited method needs to be called. - - // configure the view settings that we can't in IB. - [self configureViewSettings:[sourceView textView]]; // setup the sourceView's options. - [[sourceView textView] setEditable:YES]; // make the sourceView editable. - [self configureViewSettings:[tidyView textView]]; // setup the tidyView's options. - - // honor the defaults system defaults. - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; // get the default default system - [[optionController tidyDocument] takeOptionValuesFromDefaults:defaults]; // make the optionController take the values - - // saving behavior settings - saveBehavior = [defaults integerForKey:JSDKeySavingPrefStyle]; - saveWarning = [defaults boolForKey:JSDKeyWarnBeforeOverwrite]; - yesSavedAs = NO; - - // make the sourceView string the same as our loaded text. - [sourceView setString:[tidyProcess workingText]]; - - // force the processing to occur. - [self optionChanged:self]; -} // windowControllerDidLoadNib - -/******************************************************************** - windowNibName - return the name of the Nib associated with this class. -*********************************************************************/ -- (NSString *)windowNibName { - return @"TidyDocument"; -} // windowNibName - - -//============================================================================================= -// PREFERENCES, TIDY OPTIONS, AND TIDYING -//============================================================================================= - -/******************************************************************** - handleSavePrefChange - this method receives "JSDSavePrefChange" notifications, so that - we can keep abreast of the user's desired "Save" behaviours. -*********************************************************************/ -- (void)handleSavePrefChange:(NSNotification *)note -{ - saveBehavior = [[NSUserDefaults standardUserDefaults] integerForKey:JSDKeySavingPrefStyle]; - saveWarning = [[NSUserDefaults standardUserDefaults] boolForKey:JSDKeyWarnBeforeOverwrite]; -} // handleSavePrefChange - -/******************************************************************** - retidy - do the actual re-tidy'ing - *********************************************************************/ --(void)retidy { - [tidyProcess setWorkingText:[sourceView string]]; // put the sourceView text into the tidyProcess. - [tidyView setString:[tidyProcess tidyText]]; // put the tidy'd text into the view. - [errorView reloadData]; // reload the error data - [errorView deselectAll:self]; // get rid of the selected row. - - // handle document dirty detection -- we're NOT dirty if the source and tidy string are - // the same, or there is no source view, of if the source is the same as the original. - if ( ( [tidyProcess areEqualOriginalTidy]) || // the original text and tidy text are equal OR - ( [[tidyProcess originalText] length] == 0 ) || // the originalText was never there OR - ( [tidyProcess areEqualOriginalWorking ] )) // the workingText is the same as the original. - [self updateChangeCount:NSChangeCleared]; - else - [self updateChangeCount:NSChangeDone]; -} // retidy - -/******************************************************************** - textDidChange: - we arrived here by virtue of this document class being the - delegate of sourceView. Whenever the text changes, let's - reprocess all of the text. Hopefully the user won't be - inclined to type everything, 'cos this is bound to be slow. - *********************************************************************/ -- (void)textDidChange:(NSNotification *)aNotification { - [self retidy]; -} // textDidChange - - -/******************************************************************** - optionChanged: - One of the options changed! We're here by virtue of being the - action of the optionController instance. Let's retidy here. -*********************************************************************/ -- (IBAction)optionChanged:(id)sender { - [tidyProcess optionCopyFromDocument:[optionController tidyDocument]]; - [self retidy]; -} // optionChanged - - -//============================================================================================= -// SUPPORT FOR THE ERROR TABLE -//============================================================================================= - - -/******************************************************************** - numberOfRowsInTableView - we're here because we're the datasource of the tableview. - We need to specify how many items are in the table view. -*********************************************************************/ -- (int)numberOfRowsInTableView:(NSTableView *)aTableView { - return [[tidyProcess errorArray] count]; -} // numberOfRowsInTableView - - -/******************************************************************** - tableView:objectValueForTableColumn:row - we're here because we're the datasource of the tableview. - We need to specify what to show in the row/column. -*********************************************************************/ -- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex { - NSDictionary *error = [[tidyProcess errorArray] objectAtIndex:rowIndex]; // get the current error - - // list of error types -- no localized; users can localize based on this string. - NSArray *errorTypes = [NSArray arrayWithObjects:@"Info:", @"Warning:", @"Config:", @"Access:", @"Error:", @"Document:", @"Panic:", nil]; - - // handle returning the severity of the error, localized. - if ([[aTableColumn identifier] isEqualToString:@"severity"]) - return NSLocalizedString([errorTypes objectAtIndex: [[error objectForKey:@"level"] intValue] ], nil); - - // handle the location, localized, or "N/A" if not applicable - if ([[aTableColumn identifier] isEqualToString:@"where"]) { - if (([[error objectForKey:@"line"] intValue] == 0) || ([[error objectForKey:@"column"] intValue] == 0)) { - return NSLocalizedString(@"N/A", nil); - } // if (N/A) - return [NSString stringWithFormat:@"%@ %@, %@ %@", NSLocalizedString(@"line", nil), [error objectForKey:@"line"], NSLocalizedString(@"column", nil), [error objectForKey:@"column"]]; - } // if where - - if ([[aTableColumn identifier] isEqualToString:@"description"]) - return [error objectForKey:@"message"]; - return @""; -} //tableView:objectValueForTableColumn:row - -/******************************************************************** - errorClicked: - we arrived here by virtue of this controller class and this - method being the action of the table. Whenever the selection - changes we're going to highlight and show the related - column/row in the sourceView. -*********************************************************************/ -- (IBAction)errorClicked:(id)sender { - int errorViewRow = [errorView selectedRow]; - if (errorViewRow >= 0) { - int highlightRow = [[[[tidyProcess errorArray] objectAtIndex:errorViewRow] objectForKey:@"line"] intValue]; - int highlightCol = [[[[tidyProcess errorArray] objectAtIndex:errorViewRow] objectForKey:@"column"] intValue]; - [sourceView setHighlightedLine:highlightRow column:highlightCol]; - } - else - [sourceView setHighlightedLine:0 column:0]; -} // errorClicked - -/******************************************************************** - tableViewSelectionDidChange: - we arrived here by virtue of this controller class being the - delegate of the table. Whenever the selection changes - we're going to highlight and show the related column/row - in the sourceView. -*********************************************************************/ -- (void)tableViewSelectionDidChange:(NSNotification *)aNotification { - // get the description of the selected row. - if ([aNotification object] == errorView) - [self errorClicked:self]; -} // tableViewSelectionDidChange - - -@end diff --git a/Classes/JSDTidy/JSDTidy.h b/Classes/JSDTidy/JSDTidy.h deleted file mode 100644 index 20085bec..00000000 --- a/Classes/JSDTidy/JSDTidy.h +++ /dev/null @@ -1,197 +0,0 @@ -/*************************************************************************************** - JSDTidy.h - - A Cocoa wrapper for tidylib. - - IMPORTANT NOTES: please see the file JSDTidy.rtf for some important notes. - "FORMAL" DOCUMENATATION: please see the file JSDTidy.html for the "formal," Apple- - style documentation. If it shows up as plain-text in - Project-Builder, right-click it and open-as an HTML file. - - ***************************************************************************************/ - -#import -#import "tidy.h" -#import "tidyenum.h" - -//----------------------------------------------------------------------------------------------------------------- -// SOME DEFINES -//----------------------------------------------------------------------------------------------------------------- -// In the prefs file, this prefix will prepend all TidyLib options stored there. This would only be used if you're -// using the convenience preferences methods defined in JSDTidyDocument that work with the native Cocoa preferences -// system. This "prefix" support exists in order to isolate the TidyLib configuration names from your own pref names. -#define tidyPrefPrefix @"-tidy-" - -// The keys for dealing with errors in errorArray, which is an array of NSDictionary objects with these keys. -#define errorKeyLevel @"level" -#define errorKeyLine @"line" -#define errorKeyColumn @"column" -#define errorKeyMessage @"message" - -// the default encoding styles that override the tidy-implemented character encodings. -#define defaultInputEncoding NSMacOSRomanStringEncoding -#define defaultLastEncoding NSMacOSRomanStringEncoding -#define defaultOutputEncoding NSMacOSRomanStringEncoding - - -/**************************************************************************************************** - JSDTidyDocument - A basic TidyLib implementation in Cocoa. Tries to implement all of the "good stuff" from TidyLib, - including the TidyDoc object and methods to use it, options, and eventually true HTML parsing. - "See config.c" for all of Tidy's configuration options. - It should be completely self-contained but for linking to Foundation and tidy.h. - ****************************************************************************************************/ -@interface JSDTidyDocument : NSObject { -//------------------------------------------------------------------------------------------------------------ -// INSTANCE VARIABLES -- they're protected for subclassing. Use the accessor methods instead of these. -//------------------------------------------------------------------------------------------------------------ -@protected - TidyDoc prefDoc; // the TidyDocument instance for HOLDING PREFERENCES and nothing more. - NSString *originalText; // buffer for the original text - Note this is an NSString instance. - NSString *workingText; // buffer the current working text - Note this an an NSString instance. - NSString *tidyText; // buffer for the tidy'd text - Note this is an NSString instance. - NSString *errorText; // buffer for the error text - This is a standard NSString. - NSMutableArray *errorArray; // buffer for the error text as an array of NSDictionary of the errors. - NSStringEncoding inputEncoding; // the user-specified input-encoding to process everything. OVERRIDE tidy. - NSStringEncoding lastEncoding; // the PREVIOUS user-specified input encoding. This is so we can REVERT. - NSStringEncoding outputEncoding; // the user-specified output-encoding to process everything. OVERRIDE tidy. -} - - -//------------------------------------------------------------------------------------------------------------ -// ENCODING SUPPORT -//------------------------------------------------------------------------------------------------------------ -+(NSArray *)allAvailableStringEncodings; // returns an array of NSStringEncoding. -+(NSArray *)allAvailableStringEncodingsNames; // returns an array of NSString, correlated to above. - -//------------------------------------------------------------------------------------------------------------ -// INITIALIZATION and DESTRUCTION -//------------------------------------------------------------------------------------------------------------ --(id)init; // override the initializer - designated initializer --(void)dealloc; // override the destructor. - -// the following convenience initializer assumes you know you're putting in a correctly-decoded NSString. --(id)initWithString:(NSString *)value; // sets original & working text at initialization. - -// these convenience initializers will DECODE to the Unicode string using the default set for input-encoding --(id)initWithFile:(NSString *)path; // initialize with a given file. --(id)initWithData:(NSData *)data; // initialize with the given data. - - -//------------------------------------------------------------------------------------------------------------ -// TEXT - the important, good stuff. -//------------------------------------------------------------------------------------------------------------ - -//--------------------------------------------- -// originalText -- this allows an optional ref- -// erence copy of the really original text as -// a convenience for changes. The non-string -// set methods decode using the current en- -// coding set in input-encoding. -//--------------------------------------------- --(NSString *)originalText; // read the original text as an NSString. --(void)setOriginalText:(NSString *)value; // set the original & working text from an NSString. --(void)setOriginalTextWithData:(NSData *)data; // set the original & working text from an NSData. --(void)setOriginalTextWithFile:(NSString *)path; // set the original & working text from a file. - -//--------------------------------------------- -// workingText -- this is the text that Tidy -// will actually tidy up. The non-string set -// methods decode using the current encoding -// setting in input-encoding. -//--------------------------------------------- --(NSString *)workingText; // read the working text as an NSString. --(void)setWorkingText:(NSString *)value; // set the working text from an NSString. --(void)setWorkingTextWithData:(NSData *)data; // set the working text from an NSData. --(void)setWorkingTextWithFile:(NSString *)path; // set the working text from a file. - -//--------------------------------------------- -// tidyText -- this is the text that Tidy -// generates from the workingText. -//--------------------------------------------- --(NSString *)tidyText; // return the tidy'd text. --(NSData *)tidyTextAsData; // return the tidy'd text in the output-encoding format. --(void)tidyTextToFile:(NSString *)path; // write the tidy'd text to a file in the current format. - -//--------------------------------------------- -// errors reported by tidy -//--------------------------------------------- --(NSString *)errorText; // return the error text in traditional tidy format. --(NSArray *)errorArray; // return the array of tidy errors and warnings. - -//--------------------------------------------- -// comparing the text. -//--------------------------------------------- --(bool)areEqualOriginalWorking; // are the original and working text identical? --(bool)areEqualWorkingTidy; // are the working and tidy text identical? --(bool)areEqualOriginalTidy; // are the orginal and tidy text identical? - -//------------------------------------------------------------------------------------------------------------ -// OPTIONS - methods for dealing with options -//------------------------------------------------------------------------------------------------------------ -+(NSArray *) optionGetList; // returns an NSArray of NSString for all options built into Tidy. -+(int) optionCount; // returns the number of options built into Tidy. - -+(TidyOptionId) optionIdForName:(NSString *)name; // returns the TidyOptionId for the given option name. - -+(NSString *) optionNameForId:(TidyOptionId)idf; // returns the name for the given TidyOptionId. -+(TidyConfigCategory)optionCategoryForId:(TidyOptionId)idf; // returns the TidyConfigCategory for the given TidyOptionId. -+(TidyOptionType) optionTypeForId:(TidyOptionId)idf; // returns the TidyOptionType: string, int, or bool. -+(NSString *) optionDefaultValueForId:(TidyOptionId)idf; // returns the factory default value for the given TidyOptionId. -+(bool) optionIsReadOnlyForId:(TidyOptionId)idf; // indicates whether the option is read-only. -+(NSArray *) optionPickListForId:(TidyOptionId)idf; // returns an NSArray of NSString for the given TidyOptionId. - --(NSString *) optionValueForId:(TidyOptionId)idf; // returns the value for the item as an NSString --(void) setOptionValueForId:(TidyOptionId)idf // sets the value for the given TidyOptionId. - fromObject:(id)value; // Works with NSString or NSNumber only! - --(void) optionResetToDefaultForId:(TidyOptionId)id;// resets the designated TidyOptionId to factory default --(void) optionResetAllToDefault; // resets all options to factory default - --(void) optionCopyFromDocument:(JSDTidyDocument *)theDocument; // sets options based on those in theDocument. - -//------------------------------------------------------------------------------------------------------------ -// RAW ACCESS EXPOSURE -//------------------------------------------------------------------------------------------------------------ --(TidyDoc)tidyDocument; // return the TidyDoc attached to this instance. - -//------------------------------------------------------------------------------------------------------------ -// DIAGNOSTICS and REPAIR -//------------------------------------------------------------------------------------------------------------ --(int) tidyDetectedHtmlVersion; // returns 0, 2, 3 or 4 --(bool)tidyDetectedXhtml; // determines whether the document is XHTML. --(bool)tidyDetectedGenericXml; // determines if the document is generic XML. - --(int) tidyStatus; // returns 0 if there are no errors, 2 for doc errors, 1 for other. --(uint)tidyErrorCount; // returns number of document errors. --(uint)tidyWarningCount; // returns number of document warnings. --(uint)tidyAccessWarningCount; // returns number of document accessibility warnings. - -// the errorFilter is the instance method that is called from the c-callback in the implementation file. So, callback-to-c-to-this. --(bool)errorFilter:(TidyDoc)tDoc Level:(TidyReportLevel)lvl Line:(uint)line Column:(uint)col Message:(ctmbstr)mssg; - -//------------------------------------------------------------------------------------------------------------ -// MISCELLENEOUS - misc. Tidy methods supported -//------------------------------------------------------------------------------------------------------------ --(NSString *)tidyReleaseDate; // returns the TidyLib release date - -//------------------------------------------------------------------------------------------------------------ -// SUPPORTED CONFIG LIST SUPPORT -//------------------------------------------------------------------------------------------------------------ -+(NSArray *)loadConfigurationListFromResource:(NSString *)fileName ofType:(NSString *)fileType; // get list of config options. - -//------------------------------------------------------------------------------------------------------------ -// MAC OS PREFS SUPPORT -//------------------------------------------------------------------------------------------------------------ -+(void)addDefaultsToDictionary:(NSMutableDictionary *)defaultDictionary; // sucks the defaults into a dictionary. -+(void)addDefaultsToDictionary:(NSMutableDictionary *)defaultDictionary // same as above, but with list of tidy options. - fromResource:(NSString *)fileName - ofType:(NSString *)fileType; --(void)writeOptionValuesWithDefaults:(NSUserDefaults *)defaults; // write the values right into prefs. --(void)takeOptionValuesFromDefaults:(NSUserDefaults *)defaults; // take config from passed-in defaults. - -//------------------------------------------------------------------------------------------------------------ -// DOCUMENT TREE PARSING -- coming soon! -//------------------------------------------------------------------------------------------------------------ - -@end // JSDTidyDocument diff --git a/Classes/JSDTidy/JSDTidy.m b/Classes/JSDTidy/JSDTidy.m deleted file mode 100644 index bec18010..00000000 --- a/Classes/JSDTidy/JSDTidy.m +++ /dev/null @@ -1,883 +0,0 @@ -/*************************************************************************************** - JSDTidy.m - - A Cocoa wrapper for tidylib. - ***************************************************************************************/ - -#import "JSDTidy.h" -#import "buffio.h" -#import "config.h" - -// let the compiler know this function exists. -extern id objc_msgSend( id self, SEL op, ...); - -@implementation JSDTidyDocument - -/******************************************************************** - tidyCallbackFilter - In order to support TidyLib's callback function for process- - ing errors on the fly, we need to set up a standard C-function - to handle the callback. In the TidyDoc that we receive, we - will have put a pointer to self, so that we can call the - correct instance method from here. - ********************************************************************/ -BOOL tidyCallbackFilter ( TidyDoc tdoc, TidyReportLevel lvl, uint line, uint col, ctmbstr mssg ) { - typedef Bool (*myTemp)( id, SEL, TidyDoc, TidyReportLevel, uint, uint, ctmbstr ); // to cast objc_msgSend properly. - bool k = (myTemp)objc_msgSend((id)tidyGetAppData( tdoc ), @selector(errorFilter:Level:Line:Column:Message:), tdoc, lvl, line, col, mssg); - return k; -} // tidyCallbackFilter - - -//------------------------------------------------------------------------------------------------------------ -// ENCODING SUPPORT -- support the full extent of Mac OS X character encoding. -//------------------------------------------------------------------------------------------------------------ - -/******************************************************************** - encodingCompare (regular C-function). - Sort using the equivalent Mac encoding as the major key. - Secondary key is the actual encoding value, which works well. - Treat Unicode encodings as special case, and put them at top. - THIS ROUTINE BASED ON THE ROUTINE FROM THE TEXTEDIT EXAMPLE. - ********************************************************************/ -static int encodingCompare(const void *firstPtr, const void *secondPtr) { - CFStringEncoding first = *(CFStringEncoding *)firstPtr; - CFStringEncoding second = *(CFStringEncoding *)secondPtr; - CFStringEncoding macEncodingForFirst = CFStringGetMostCompatibleMacStringEncoding(first); - CFStringEncoding macEncodingForSecond = CFStringGetMostCompatibleMacStringEncoding(second); - if (first == second) return 0; // Should really never happen - if (macEncodingForFirst == kCFStringEncodingUnicode || macEncodingForSecond == kCFStringEncodingUnicode) { - if (macEncodingForSecond == macEncodingForFirst) return (first > second) ? 1 : -1; // Both Unicode; compare second order - return (macEncodingForFirst == kCFStringEncodingUnicode) ? -1 : 1; // First is Unicode - } // if - if ((macEncodingForFirst > macEncodingForSecond) || ((macEncodingForFirst == macEncodingForSecond) && (first > second))) return 1; - return -1; -} // encodingCompare - -/******************************************************************** - allAvailableStringEncodings - returns an array of all available string encodings on the current - system. The array is of NSNumber containing the NSStringEncoding. - This will also sort the list, and only includes those encodings - with human-readable names. - THIS ROUTINE BASED ON THE ROUTINE FROM THE TEXTEDIT EXAMPLE. - ********************************************************************/ -+(NSArray *)allAvailableStringEncodings { - static NSMutableArray *allEncodings = nil; // only do this once - if (!allEncodings) { - const CFStringEncoding *cfEncodings = CFStringGetListOfAvailableEncodings(); - CFStringEncoding *tmp; - int cnt, num = 0; - while (cfEncodings[num] != kCFStringEncodingInvalidId) num++; // Count - tmp = malloc(sizeof(CFStringEncoding) * num); - memcpy(tmp, cfEncodings, sizeof(CFStringEncoding) * num); // Copy the list - qsort(tmp, num, sizeof(CFStringEncoding), encodingCompare); // Sort it - allEncodings = [[NSMutableArray alloc] init]; // Now put it in an NSArray - for (cnt = 0; cnt < num; cnt++) { - NSStringEncoding nsEncoding = CFStringConvertEncodingToNSStringEncoding(tmp[cnt]); - if (nsEncoding && [NSString localizedNameOfStringEncoding:nsEncoding]) [allEncodings addObject:[NSNumber numberWithUnsignedInt:nsEncoding]]; - } // for - free(tmp); - } // if - return allEncodings; -} // allAvailableStringEncodings - -/******************************************************************** - allAvailableStringEncodingsNames - returns an array of all available string encodings on the current - system. The array is of NSString containing the human-readable - names of the encoding types. - ********************************************************************/ -+(NSArray *)allAvailableStringEncodingsNames { - static NSMutableArray *encodingNames = nil; // only do this once - if (!encodingNames) { - encodingNames = [[NSMutableArray alloc] init]; - NSArray *allEncodings = [[self class] allAvailableStringEncodings]; // reference the list of encoding numbers. - int cnt; // init counter. - int numEncodings = [allEncodings count]; // get number of encodings usable. - for (cnt = 0; cnt < numEncodings; cnt++) { // loop through the encodings present. - NSStringEncoding encoding = [[allEncodings objectAtIndex:cnt] unsignedIntValue]; // get the encoding type. - NSString *encodingName = [NSString localizedNameOfStringEncoding:encoding]; // get the encoding name. - [encodingNames addObject:encodingName]; // add to the array. - } // for - } // if - return encodingNames; -} // allAvailableStringEncodingsNames - -/******************************************************************** - fixSourceCoding - repairs the character decoding whenever the input-coding has - changed. This is the logic of how this works here: - o Our NSString is Unicode, and was decoded FROM lastEncoding. - o So using lastEncoding make the NSString into an NSData. - o Using inputEncoding, make the NSData into a new string. - We're going to process both originalText and workingText. - ********************************************************************/ --(void)fixSourceCoding { - // only go through the trouble if the encoding isn't the same! - if (lastEncoding != inputEncoding) { - NSString *newText; - newText = [[NSString alloc] initWithData:[originalText dataUsingEncoding:lastEncoding] encoding:inputEncoding]; - [originalText release]; - originalText = newText; - newText = [[NSString alloc] initWithData:[workingText dataUsingEncoding:lastEncoding] encoding:inputEncoding]; - [workingText release]; - workingText = newText; -#warning HERE is where to call encodingChange event. - } // if -} // fixSourceCoding - - -//------------------------------------------------------------------------------------------------------------ -// INITIALIZATION and DESTRUCTION -//------------------------------------------------------------------------------------------------------------ - -/******************************************************************** - init (the designated initializer) - set up our local variables needed. - ********************************************************************/ --(id)init { - if (self = [super init]) { - originalText = @""; // initialize the originalText. - workingText = @""; // initialize the workingText. - tidyText = @""; // initialize the tidyText. - errorText = @""; // initialize the errorText. - errorArray = [[NSMutableArray alloc] init]; // initialize the errorArray. - prefDoc = tidyCreate(); // create the preference container. - inputEncoding = defaultInputEncoding; // set default user-specified input-encoding. - lastEncoding = defaultLastEncoding; // set default user-specified previous encoding for reversion. - outputEncoding = defaultOutputEncoding; // set default user-specified output-encoding. - } - return self; -} // init - -/******************************************************************** - dealloc - free up everything we've allocated (I hope). - ********************************************************************/ --(void)dealloc { - [originalText release]; - [workingText release]; - [tidyText release]; - [errorText release]; - [errorArray release]; - tidyRelease(prefDoc); - [super dealloc]; -} // dealloc - -/******************************************************************** - initWithString - initialize with an existing string. - ********************************************************************/ --(id)initWithString:(NSString *)value { - [[self init] setOriginalText:value]; - return self; -} // initWithString - -/******************************************************************** - initWithFile - initialize with the contents of a file. - ********************************************************************/ --(id)initWithFile:(NSString *)path { - [[self init] setOriginalTextWithFile:path]; - return self; -} // initWithFile - -/******************************************************************** - initWithData - initialize with the contents of a file. - ********************************************************************/ --(id)initWithData:(NSData *)data { - [[self init] setOriginalTextWithData:data]; - return self; -} // initWithData - - -//------------------------------------------------------------------------------------------------------------ -// TEXT - the important, good stuff. -//------------------------------------------------------------------------------------------------------------ - -/******************************************************************** - processTidy - regard as PRIVATE - do the actual tidy processing to set the tidyText and errorText - ********************************************************************/ --(void)processTidy { - // use a FRESH TidyDocument each time to cover up some issues with it. - TidyDoc newTidy = tidyCreate(); // this is the TidyDoc will will really process. Eventually will be prefDoc. - tidyOptCopyConfig( newTidy, prefDoc ); // put our preferences into the working copy newTidy. - - // setup the output buffer to copy to an NSString instead of writing to stdout - TidyBuffer *outBuffer = malloc(sizeof(TidyBuffer)); - tidyBufInit( outBuffer ); - - // setup the error buffer to catch errors here instead of stdout - tidySetAppData( newTidy, (uint)self ); // so we can send a message from outside ourself to ourself. - tidySetReportFilter( newTidy, (TidyReportFilter)&tidyCallbackFilter); // the callback will go to this out-of-class C function. - [errorArray removeAllObjects]; // clear out all of the previous errors. - TidyBuffer *errBuffer = malloc(sizeof(TidyBuffer)); // allocate a buffer for our error text. - tidyBufInit( errBuffer ); // init the buffer. - tidySetErrorBuffer( newTidy, errBuffer ); // and let tidy know to use it. - - // parse the workingText and clean, repair, and diagnose it. - tidyOptSetValue( newTidy, TidyCharEncoding, [@"utf8" cString] ); // set all internal char-encoding to UTF8. - tidyOptSetValue( newTidy, TidyInCharEncoding, [@"utf8" cString] ); // set all internal char-encoding to UTF8. - tidyOptSetValue( newTidy, TidyOutCharEncoding, [@"utf8" cString] ); // set all internal char-encoding to UTF8. -// tidyParseBuffer(newTidy, (void*)[[workingText dataUsingEncoding:NSUTF8StringEncoding] bytes]); // parse the original text into the TidyDoc - tidyParseString(newTidy, [workingText UTF8String]); // parse the original text into the TidyDoc - tidyCleanAndRepair( newTidy ); // clean and repair - tidyRunDiagnostics( newTidy ); // runs diagnostics on the document for us. - - // save the tidy'd text to an NSString - tidySaveBuffer( newTidy, outBuffer ); // save it to the buffer we set up above. - [tidyText release]; // release the current tidyText. - if (outBuffer->size > 0) { // case the buffer to an NSData that we can use to set the NSString. - tidyText = [[NSString alloc] initWithUTF8String:outBuffer->bp]; // make a string from the data. - } else - tidyText = @""; // set to null string -- no output. - [tidyText retain]; - - // give the Tidy general info at the bottom. - tidyErrorSummary (newTidy); - tidyGeneralInfo( newTidy ); - - // copy the error buffer into an NSString -- the errorArray is built using - // callbacks so we don't need to do anything at all to build it right here. - [errorText release]; - if (errBuffer->size > 0) - errorText = [[NSString alloc] initWithCString:errBuffer->bp]; - else - errorText = @""; - [errorText retain]; - - tidyBufFree(outBuffer); // free the output buffer. - tidyBufFree(errBuffer); // free the error buffer. - - // prefDoc has "good" preferences, not corrupted by tidy's processing. But we want to keep newTidy to expose it to - // the using application. So, we'll assign newTidy as prefDoc after putting prefDoc's preferences into newTidy. - tidyOptCopyConfig( newTidy, prefDoc ); // save our uncorrupted preferences. - tidyRelease(prefDoc); // kill the old prefDoc. - prefDoc = newTidy; // now prefDoc is the just-tidy'd document. -} // processTidy - -/******************************************************************** - originalText - read the original text as an NSString. - ********************************************************************/ --(NSString *)originalText { - return originalText; -} // originalText - -/******************************************************************** - setOriginalText - set the original & working text from an NSString. - ********************************************************************/ --(void)setOriginalText:(NSString *)value { - [value retain]; - [originalText release]; - originalText = value; - [self setWorkingText:originalText]; // will also process tidy. -} // setOriginalText - -/******************************************************************** - setOriginalTextWithData - set the original & working text from an NSData. Use the current - user-specified setting for input-encoding to decode. - ********************************************************************/ --(void)setOriginalTextWithData:(NSData *)data { - [originalText release]; - originalText = [[NSString alloc] initWithData:data encoding:inputEncoding]; - [originalText retain]; - [self setWorkingText:originalText]; // will also process tidy. -} // setOriginalTextWithData - -/******************************************************************** - setOriginalTextWithFile - set the original & working text from a file. - ********************************************************************/ --(void)setOriginalTextWithFile:(NSString *)path { - [originalText release]; - originalText = [[NSString alloc] initWithData:[NSData dataWithContentsOfFile:path] encoding:inputEncoding]; - [originalText retain]; - [self setWorkingText:originalText]; // will also process tidy. -} // setOriginalTextWithFile - -/******************************************************************** - workingText - read the original text as an NSString. - ********************************************************************/ --(NSString *)workingText { - return workingText; -} // workingText - -/******************************************************************** - setWorkingText - set the original & working text from an NSString. - ********************************************************************/ --(void)setWorkingText:(NSString *)value { - [value retain]; - [workingText release]; - workingText = value; - [self processTidy]; -} // setWorkingText - -/******************************************************************** - setWorkingTextWithData - set the original & working text from an NSData. - ********************************************************************/ --(void)setWorkingTextWithData:(NSData *)data { - [workingText release]; - workingText = [[NSString alloc] initWithData:data encoding:inputEncoding]; - [workingText retain]; - [self processTidy]; -} // setWorkingTextWithData - -/******************************************************************** - setWorkingTextWithFile - set the original & working text from a file. - ********************************************************************/ --(void)setWorkingTextWithFile:(NSString *)path { - [workingText release]; - workingText = [[NSString alloc] initWithData:[NSData dataWithContentsOfFile:path] encoding:inputEncoding]; - [workingText retain]; - [self processTidy]; -} // setWorkingTextWithFile - -/******************************************************************** - tidyText - return the tidy'd text. - ********************************************************************/ --(NSString *)tidyText { - return tidyText; -} // tidyText - -/******************************************************************** - tidyTextAsData - return the tidy'd text in the output-encoding format. - ********************************************************************/ --(NSData *)tidyTextAsData { - return [tidyText dataUsingEncoding:outputEncoding]; -} // tidyTextAsData - -/******************************************************************** - tidyTextToFile - write the tidy'd text to a file in the current format. - ********************************************************************/ --(void)tidyTextToFile:(NSString *)path { - [[tidyText dataUsingEncoding:outputEncoding] writeToFile:path atomically:YES]; -} // tidyTextToFile - -/******************************************************************** - errorText - read the error text. - ********************************************************************/ --(NSString *)errorText { - return errorText; -} // errorText - -/******************************************************************** - errorArray - read the error array. - ********************************************************************/ --(NSArray *)errorArray { - return (NSArray *)errorArray; -} // errorArray - - -/******************************************************************** - areEqualOriginalWorking - are the original and working text identical? - ********************************************************************/ --(bool)areEqualOriginalWorking { - return [originalText isEqualToString:workingText]; -} // areEqualOriginalWorking - -/******************************************************************** - areEqualWorkingTidy - are the working and tidy text identical? - ********************************************************************/ --(bool)areEqualWorkingTidy { - return [tidyText isEqualToString:tidyText]; -} // areEqualWorkingTidy - -/******************************************************************** - areEqualOriginalTidy - are the orginal and tidy text identic - ********************************************************************/ --(bool)areEqualOriginalTidy{ - return [originalText isEqualToString:tidyText]; -} // areEqualOriginalTidy - - -//------------------------------------------------------------------------------------------------------------ -// OPTIONS - methods for dealing with options -//------------------------------------------------------------------------------------------------------------ - -/******************************************************************** - isTidyEncodingOption - convenience method just to decide if an optionId is an Tidy - encoding option. - ********************************************************************/ -+(bool)isTidyEncodingOption:(TidyOptionId)opt { - return ( (opt == TidyCharEncoding) || (opt == TidyInCharEncoding) || (opt == TidyOutCharEncoding) ); -} // isTidyEncodingOption - -/******************************************************************** - optionGetOptionInstance -- regard as PRIVATE - given an option id, return an instance of a tidy option. This - is defined because inexplicably some of the TidyLib functions - require a "real" option in order to return data. - ********************************************************************/ -+(TidyOption)optionGetOptionInstance:(TidyOptionId)idf { - TidyDoc dummyDoc = tidyCreate(); // create a dummy document. - TidyOption result = tidyGetOption( dummyDoc, idf); // get an instance of an option. - tidyRelease(dummyDoc); // release the document. - return result; // return the instance of the option. -} // optionGetOptionInstance - -/******************************************************************** - optionGetList - returns an NSArray of NSString for all options built into Tidy. - ********************************************************************/ -+(NSArray *)optionGetList { - static NSMutableArray *theArray = nil; // just do this once. - if (!theArray) { - theArray = [[NSMutableArray alloc] init]; // create an array. - TidyDoc dummyDoc = tidyCreate(); // create a dummy document (we're a CLASS method). - TidyIterator i = tidyGetOptionList( dummyDoc ); // set up an iterator - while ( i ) { // loop... - TidyOption topt = tidyGetNextOption( dummyDoc, &i ); // get an option - [theArray addObject:[NSString stringWithCString:tidyOptGetName( topt )]]; // add the name to the array - } // while - tidyRelease(dummyDoc); // release the dummy document. - } // if - return theArray; // return the array of results. -} // optionGetList - -/******************************************************************** - optionCount - returns the number of Tidy options that exist. - ********************************************************************/ -+(int)optionCount { - return N_TIDY_OPTIONS; // defined in config.c of TidyLib -} // optionCount - -/******************************************************************** - optionIdForName - returns the TidyOptionId for the given option name. - ********************************************************************/ -+(TidyOptionId)optionIdForName:(NSString *)name { - TidyOptionId optID = tidyOptGetIdForName( [name cString] ); - if (optID < N_TIDY_OPTIONS) - return optID; // return the optionId. - return TidyUnknownOption; // optionId 0 is TidyUnknownOption -} // optionIdForName - -/******************************************************************** - optionNameForId - returns the name for the given TidyOptionId. - ********************************************************************/ -+(NSString *)optionNameForId:(TidyOptionId)idf { - return [NSString stringWithCString:tidyOptGetName( [self optionGetOptionInstance:idf] )]; -} // optionNameForId - -/******************************************************************** - optionCategoryForId - returns the TidyConfigCategory for the given TidyOptionId. - ********************************************************************/ -+(TidyConfigCategory)optionCategoryForId:(TidyOptionId)idf { - return tidyOptGetCategory( [self optionGetOptionInstance:idf] ); -} // optionCategoryForId - -/******************************************************************** - optionTypeForId - returns the TidyOptionType: string, int, or bool. - ********************************************************************/ -+(TidyOptionType)optionTypeForId:(TidyOptionId)idf { - return tidyOptGetType( [self optionGetOptionInstance:idf] ); -} // optionTypeForId - -/******************************************************************** - optionDefaultValueForId - returns the factory default value for the given TidyOptionId. - all values are converted to type NSString -- that's all we deal - with because Cocoa makes it sooooo easy to convert, and it - simplifies everything else -- we can use all one datatype. - We OVERRIDE the encoding options to return our own. - ********************************************************************/ -+(NSString *)optionDefaultValueForId:(TidyOptionId)idf { - // ENCODING OPTIONS -- special case, so handle first. - if ([self isTidyEncodingOption:idf]) { // override tidy encodings with our own. - if (idf == TidyCharEncoding) return [NSString stringWithFormat:@"%hu", defaultInputEncoding]; - if (idf == TidyInCharEncoding) return [NSString stringWithFormat:@"%hu", defaultInputEncoding]; - if (idf == TidyOutCharEncoding) return [NSString stringWithFormat:@"%hu", defaultOutputEncoding]; - } // if - - TidyOptionType optType = [JSDTidyDocument optionTypeForId:idf]; // get the option type - - if (optType == TidyString) { - ctmbstr tmp = tidyOptGetDefault( [self optionGetOptionInstance:idf] ); - return ( (tmp != nil) ? [NSString stringWithCString:tmp] : @"" ); // return either the string or null. - } // string type - - if (optType == TidyBoolean) { - return [NSString stringWithFormat:@"%hu", tidyOptGetDefaultBool( [self optionGetOptionInstance:idf] )]; // return string of the bool. - } // bool type - - if (optType == TidyInteger) { - return [NSString stringWithFormat:@"%hu", tidyOptGetDefaultInt( [self optionGetOptionInstance:idf] )]; // return string of the integer. - } // integer type - - return @""; -} // optionDefaultValueForId - - -/******************************************************************** - optionIsReadOnlyForId - indicates whether the option is read-only - ********************************************************************/ -+(bool)optionIsReadOnlyForId:(TidyOptionId)idf { - return tidyOptIsReadOnly( [self optionGetOptionInstance:idf] ); -} // optionIsReadOnlyForId - -/******************************************************************** - optionPickListForId - returns an NSArray of NSString for the given TidyOptionId - ********************************************************************/ -+(NSArray *)optionPickListForId:(TidyOptionId)idf { - NSMutableArray *theArray = [[[NSMutableArray alloc] init] autorelease]; // declare our return array - // if we're an encoding option, return OUR OWN pick list. - if ([self isTidyEncodingOption:idf]) { - return [[self class] allAvailableStringEncodingsNames]; - } // if - else { - TidyIterator i = tidyOptGetPickList( [self optionGetOptionInstance:idf] ); - while ( i ) - [theArray addObject:[NSString stringWithCString:tidyOptGetNextPick([self optionGetOptionInstance:idf], &i)]]; - } // else - if - - return theArray; -} // optionPickListForId - -/******************************************************************** - optionValueForId - returns the value for the item as an NSString - ********************************************************************/ --(NSString *)optionValueForId:(TidyOptionId)idf { - - // we need to treat user-defined tags specially, 'cos TidyLib doesn't return them as config options! - if ((idf == TidyInlineTags) || (idf == TidyBlockTags) || (idf == TidyEmptyTags) || (idf == TidyPreTags)) { - NSMutableArray *theArray = [[[NSMutableArray alloc] init] autorelease]; - ctmbstr tmp; - TidyIterator i = tidyOptGetDeclTagList( prefDoc ); - while ( i ) { - tmp = tidyOptGetNextDeclTag(prefDoc, idf, &i); - if (tmp) - [theArray addObject:[NSString stringWithCString:tmp]]; - } // while - return [theArray componentsJoinedByString:@", "]; - } // if user-defined tags. - - // we need to treat encoding options specially, 'cos we're override Tidy's treatment of them. - if ( [[self class] isTidyEncodingOption:idf]) { - if (idf == TidyCharEncoding) return [[NSNumber numberWithInt:inputEncoding] stringValue]; - if (idf == TidyInCharEncoding) return [[NSNumber numberWithInt:inputEncoding] stringValue]; - if (idf == TidyOutCharEncoding) return [[NSNumber numberWithInt:outputEncoding] stringValue]; - } // if tidy coding option - - TidyOptionType optType = [JSDTidyDocument optionTypeForId:idf]; - - if (optType == TidyString) { - ctmbstr tmp = tidyOptGetValue( prefDoc, idf ); - return ( (tmp != nil) ? [NSString stringWithCString:tmp] : @"" ); - } // if string type - - if (optType == TidyBoolean) { - return [[NSNumber numberWithBool:tidyOptGetBool( prefDoc, idf )] stringValue]; - } // if bool type - - if (optType == TidyInteger) { - if (idf == TidyWrapLen) { - if (tidyOptGetInt( prefDoc, idf) == LONG_MAX) - return @"0"; - } // if - special occassion for TidyWrapLen - return [[NSNumber numberWithInt:tidyOptGetInt( prefDoc, idf )] stringValue]; - } // if integer type - - return @""; -} // optionValueForId - -/******************************************************************** - setOptionValueForId:fromObject - sets the value for the item - ********************************************************************/ --(void)setOptionValueForId:(TidyOptionId)idf fromObject:(id)value { - // we need to treat encoding options specially, 'cos we're override Tidy's treatment of them. - if ( [[self class] isTidyEncodingOption:idf]) { - if (idf == TidyCharEncoding) { - lastEncoding = inputEncoding; - inputEncoding = [value unsignedIntValue]; - outputEncoding = [value unsignedIntValue]; - [self fixSourceCoding]; - } // if TidyCharEncoding; - if (idf == TidyInCharEncoding) { - lastEncoding = inputEncoding; - inputEncoding = [value unsignedIntValue]; - [self fixSourceCoding]; - } // if TidyInCharEncoding; - if (idf == TidyOutCharEncoding) { - outputEncoding = [value unsignedIntValue]; - } // if TidyOutCharEncoding; - return; - } // if tidy coding option - - // here we could be passed any object -- hope it's a string or number or bool! - if ([value isKindOfClass:[NSString class]]) - tidyOptParseValue( prefDoc, [[JSDTidyDocument optionNameForId:idf] cString], [value cString] ); - else - if ([value isKindOfClass:[NSNumber class]]) { - if ([JSDTidyDocument optionTypeForId:idf] == TidyBoolean) - tidyOptSetBool( prefDoc, idf, [value boolValue]); - else - if ([JSDTidyDocument optionTypeForId:idf] == TidyInteger) - tidyOptSetInt( prefDoc, idf, [value unsignedIntValue]); - } // if -} // setOptionValueForId:fromObject - -/******************************************************************** - optionResetToDefaultForId - resets the designated ID to factory default - ********************************************************************/ --(void)optionResetToDefaultForId:(TidyOptionId)idf { - tidyOptResetToDefault( prefDoc, idf ); -} // optionResetToDefaultForId - -/******************************************************************** - optionResetAllToDefault - resets all options to factory default - ********************************************************************/ --(void)optionResetAllToDefault { - tidyOptResetAllToDefault( prefDoc ); -} // optionResetAllToDefault - -/******************************************************************** - optionCopyFromDocument - copies all options from theDocument - ********************************************************************/ --(void)optionCopyFromDocument:(JSDTidyDocument *)theDocument { - tidyOptCopyConfig( prefDoc, [theDocument tidyDocument] ); -} // optionCopyFromDocument - -//------------------------------------------------------------------------------------------------------------ -// RAW ACCESS EXPOSURE -//------------------------------------------------------------------------------------------------------------ - -/******************************************************************** - tidyDocument - return the address of prefDoc - ********************************************************************/ --(TidyDoc)tidyDocument { - return prefDoc; -} // tidyDocument - - -//------------------------------------------------------------------------------------------------------------ -// DIAGNOSTICS and REPAIR -//------------------------------------------------------------------------------------------------------------ - -/******************************************************************** - tidyDetectedHtmlVersion - returns 0, 2, 3 or 4 - ********************************************************************/ --(int)tidyDetectedHtmlVersion { - return tidyDetectedHtmlVersion( prefDoc ); -} // tidyDetectedHtmlVersion - -/******************************************************************** - tidyDetectedXhtml - determines whether the document is XHTML - ********************************************************************/ --(bool)tidyDetectedXhtml { - return tidyDetectedXhtml( prefDoc ); -} // tidyDetectedXhtml - -/******************************************************************** - tidyDetectedGenericXml - determines if the document is generic XML. - ********************************************************************/ --(bool)tidyDetectedGenericXml { - return tidyDetectedGenericXml( prefDoc ); -} // tidyDetectedGenericXml - -/******************************************************************** - tidyStatus - returns 0 if there are no errors, 2 for doc errors, 1 for other. - ********************************************************************/ --(int)tidyStatus { - return tidyStatus( prefDoc ); -} // tidyStatus - -/******************************************************************** - tidyErrorCount - returns number of document errors. - ********************************************************************/ --(uint)tidyErrorCount { - return tidyErrorCount( prefDoc ); -} // tidyErrorCount - -/******************************************************************** - tidyWarningCount - returns number of document warnings. - ********************************************************************/ --(uint)tidyWarningCount { - return tidyWarningCount( prefDoc ); -} // tidyWarningCount - -/******************************************************************** - tidyAccessWarningCount - returns number of document accessibility warnings. - ********************************************************************/ --(uint)tidyAccessWarningCount { - return tidyAccessWarningCount( prefDoc ); -} // tidyAccessWarningCount - -/******************************************************************** - errorFilter:Level:Line:Column:Message - This is the REAL TidyError filter, and is called by the - standard C tidyCallBackFilter function implemented at the - top of this file. We CAN'T setup standard C callbacks such - that they directly callback to an Obj-C method without - changing the C library to include Obj-C's hidden id and SEL - parameterss. So this is how it is. - ********************************************************************/ --(bool)errorFilter:(TidyDoc)tDoc Level:(TidyReportLevel)lvl Line:(uint)line Column:(uint)col Message:(ctmbstr)mssg { - NSMutableDictionary *errorDict = [[NSMutableDictionary alloc] init]; // create a dictionary to hold the error report - [errorDict setObject:[NSNumber numberWithInt:lvl] forKey:errorKeyLevel]; - [errorDict setObject:[NSNumber numberWithInt:line] forKey:errorKeyLine]; - [errorDict setObject:[NSNumber numberWithInt:col] forKey:errorKeyColumn]; - [errorDict setObject:[NSString stringWithCString:mssg] forKey:errorKeyMessage]; - [errorArray addObject:errorDict]; - return YES; // always return yes so errorText works, also. -} // errorFilter:Level:Line:Column:Message - - -//------------------------------------------------------------------------------------------------------------ -// MISCELLENEOUS - misc. Tidy methods supported -//------------------------------------------------------------------------------------------------------------ - -/******************************************************************** - tidyReleaseDate - returns the TidyLib release date - ********************************************************************/ --(NSString *)tidyReleaseDate { - return [NSString stringWithCString:tidyReleaseDate()]; -} // tidyReleaseDate - - -//------------------------------------------------------------------------------------------------------------ -// SUPPORTED CONFIG LIST SUPPORT -//------------------------------------------------------------------------------------------------------------ - -/******************************************************************** - loadConfigurationListFromResource:ofType -- CLASS method - returns an array of NSString from a file-resource. This compares - each item with the linked-in TidyLib to ensure items are support- - ed, and ensures there are no duplicates. There is nothing in - JSDTidyDocument that uses this except for the optional defaults - system support below, and it aids support of Balthisar - Tidy's preferences implementation. - ********************************************************************/ -+(NSArray *)loadConfigurationListFromResource:(NSString *)fileName ofType:(NSString *)fileType { - NSMutableArray *optionsInEffect = [[NSMutableArray alloc] init]; - NSString *contentPath = [[NSBundle mainBundle] pathForResource:fileName ofType:fileType]; - if (contentPath != nil) { - NSEnumerator *enumerator = [[[NSString stringWithContentsOfFile: contentPath] componentsSeparatedByString:@"\n"] objectEnumerator]; - NSString *tmpStr; - while (tmpStr = [enumerator nextObject]) { - if (([JSDTidyDocument optionIdForName:tmpStr] != 0) && (![optionsInEffect containsObject:tmpStr])) - [optionsInEffect addObject:tmpStr]; - } // while - } // if - return optionsInEffect; -} // loadConfigurationListFromResource:ofType - - -//------------------------------------------------------------------------------------------------------------ -// MAC OS PREFS SUPPORT -//------------------------------------------------------------------------------------------------------------ - -/******************************************************************** - addDefaultsToDictionary -- CLASS method - parses through EVERY default defined in Tidy to ascertain their - values and add them to the passed-in dictionary. Useful for - working with the Cocoa preference system. We DON'T register - the defaults because there may be other defaults to register. - The calling class can have other items in the passed-in - dictionary. - ********************************************************************/ -+(void)addDefaultsToDictionary:(NSMutableDictionary *)defaultDictionary { - NSEnumerator *enumerator = [[JSDTidyDocument optionGetList] objectEnumerator]; // uses ALL tidy options. - NSString *optionName; - while (optionName = [enumerator nextObject]) - [defaultDictionary setObject:[JSDTidyDocument optionDefaultValueForId:[JSDTidyDocument optionIdForName:optionName]] forKey:[tidyPrefPrefix stringByAppendingString:optionName]]; -} // addDefaultsToDictionary - - -/******************************************************************** - addDefaultsToDictionary:fromResource:ofType -- CLASS method - parses through EVERY default defined in the specified resource - file to ascertain their values and add them to the passed-in - dictionary. Useful for working with the Cocoa preference system. - We DON'T register the defaults because there may be other defaults - to register. The calling class can have other items in the - passed-in dictionary. Same as addDefaultsToDictionary, except - uses a resource file list of options, instead of ALL TidyLib - options. - ********************************************************************/ -+(void)addDefaultsToDictionary:(NSMutableDictionary *)defaultDictionary fromResource:(NSString *)fileName ofType:(NSString *)fileType { - NSEnumerator *enumerator = [[JSDTidyDocument loadConfigurationListFromResource:fileName ofType:fileType] objectEnumerator]; // just resource options. - NSString *optionName; - while (optionName = [enumerator nextObject]) - [defaultDictionary setObject:[JSDTidyDocument optionDefaultValueForId:[JSDTidyDocument optionIdForName:optionName]] forKey:[tidyPrefPrefix stringByAppendingString:optionName]]; -} // addDefaultsToDictionary - - -/******************************************************************** - writeOptionValuesWithDefaults - parses through the current configuration values and registers - the current value with the Cocoa preference system. We DO - register the preference changes, since the calling class can - also register its own changes when necessary. - ********************************************************************/ --(void)writeOptionValuesWithDefaults:(NSUserDefaults *)defaults { - NSEnumerator *enumerator = [[JSDTidyDocument optionGetList] objectEnumerator]; // enumerate all built-in options. - NSString *optionName; // buffer for an option name. - while (optionName = [enumerator nextObject]) { // loop the enumerator. - TidyOptionId optId = [JSDTidyDocument optionIdForName:optionName]; // get the optionId - NSString *keyName = [tidyPrefPrefix stringByAppendingString:optionName]; // get the name - [defaults setObject:[self optionValueForId:optId] forKey:keyName]; // write the default - } // while -} // writeOptionValuesWithDefaults - - -/******************************************************************** - takeOptionValuesFromDefaults - given a defaults instance, attempts to set all of its options - from what's registered in the Apple defaults system. - ********************************************************************/ --(void)takeOptionValuesFromDefaults:(NSUserDefaults *)defaults { - NSEnumerator *enumerator = [[JSDTidyDocument optionGetList] objectEnumerator]; // enumerate all built-in options. - NSString *optionName; - while (optionName = [enumerator nextObject]) { // loop the enumerator. - TidyOptionId optId = [JSDTidyDocument optionIdForName:optionName]; // get the current optionId. - TidyOptionType optType = [JSDTidyDocument optionTypeForId:optId]; // get the type. - NSString *keyName = [tidyPrefPrefix stringByAppendingString:optionName]; // get the key name - NSObject *myObj = [defaults objectForKey:keyName]; // get the object (value) from the prefs. - // we've got to convert TidyInteger items into NSNumbers to use them from here. We shouldn't HAVE to, - // but doctype-mode in TidyLib doesn't have a string parser, so we'll force integers to integers. - if (optType == TidyInteger) - [self setOptionValueForId:optId fromObject:[NSNumber numberWithInt:[(NSString *)myObj intValue]]]; - else - [self setOptionValueForId:optId fromObject:myObj]; - } -} // takeOptionValuesFromDefaults - -@end // JSDTidyDocument diff --git a/Classes/JSDTidy/JSDTidy.rtf b/Classes/JSDTidy/JSDTidy.rtf deleted file mode 100644 index 16a2b212..00000000 --- a/Classes/JSDTidy/JSDTidy.rtf +++ /dev/null @@ -1,107 +0,0 @@ -{\rtf1\mac\ansicpg10000\cocoartf102 -{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;\f1\fswiss\fcharset77 Helvetica;\f2\fswiss\fcharset77 Helvetica-Oblique; -\f3\fmodern\fcharset77 CourierNewPSMT;} -{\colortbl;\red255\green255\blue255;} -\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural - -\f0\b\fs48 \cf0 JSDTidy Documentation -\f1\b0\fs24 \ -\ - -\f0\b\fs26 Introduction -\f1\b0\fs24 \ -\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qj -\cf0 JSDTidy is a Cocoa wrapper for most of the functionality of TidyLib (see http://tidy.sf.net), the current incarnation of Dave Ragget\'d5s original HTML Tidy program. TidyLib is a pure-C library written for the most cross-platform availability possible. Since Cocoa is decidely -\f2\i not -\f1\i0 cross-platform (meaning \'d2outside of Cocoa\'d3 independent of hardware), no effort is made in this wrapper to maintain any such cross-functionality. Additionally, because of features unique to Cocoa, some parts of TidyLib have been replaced by native Mac OS X routines (particularly file-encoding handling).\ -\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural -\cf0 \ - -\f0\b\fs26 Usage -\f1\b0\fs24 \ -\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qj -\cf0 JSDTidy defines the JSDTidyDocument class, instances of which perform all of the functionality of TidyLib. For the most part, usage can be determined by browsing through the documentation and comments that are in the header file. Additionally, a good, real-world resource that indicates actual implementation can be seen by looking at the source code for Balthisar Tidy (http://www.balthisar.com/tidy). Below, however, are some important notes that will greatly ease things for you as you try to use JSDTidy. -\f2\i JSDTidy should have come distributed with Balthisar Tidy! -\f1\i0 \ -\ -\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural - -\f0\b\fs26 \cf0 Upgrading TidyLib -\f1\b0\fs24 \ -\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qj -\cf0 As much as possible I've tried to use only public interfaces into TidyLib. Therefore you should be able to get the latest version of TidyLib and successfully compile it against JSDTidy.\ - -\f0\b\fs26 \ -\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural -\cf0 Options and Data Types -\f1\b0\fs24 \ -\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qj -\cf0 In Tidy parlance, options are called the \'d2configuration.\'d3 JSDTidy implements all of these as based on NSString, including values that are represented as numbers and booleans. This \CocoaLigature0 makes implementation as transparent as possible and avoids type mismatches, and makes especially easy the ability to process tidy options arbitrarily, i.e., without knowing which options are compiled in.\ -\ -\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural - -\f0\b\fs26 \cf0 \CocoaLigature1 Options and Auto-Fixing -\f1\b0\fs24 \ -\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qj -\cf0 \CocoaLigature0 After a TidyDocument in TidyLib has processed itself (that is, the document has been Tidy\'d5d), it \'d2fixes\'d3 the configuration settings, and doesn\'d5t leave tham at the desired setting. For example, if you set -\f3 text-indent -\f1 to -\f3 5 -\f1 , and set -\f3 indent -\f1 to -\f3 no -\f1 , TidyLib will automatically reset -\f3 text-indent -\f1 to -\f3 0 -\f1 after Tidy\'d5ing the document. This isn't a very pretty sight from user interface perspective. Therefore when managing Tidying preferences with an instance of JSDTidyDocument, it\'d5s recommend that this instance be used -\f2\i exclusively -\f1\i0 for managing preferences and that it never actually Tidy anything. This will ensure that the configuration values don\'d5t seem to randomly change for you. You can then use -\f0\b optionCopyFromDocument -\f1\b0 to get the configuration options from your configuration instance into the instance that will actually do the Tidy\'d5ing.\ -\ -\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural - -\f0\b\fs26 \cf0 \CocoaLigature1 Character Encoding -\f1\b0\fs24 \ -\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qj -\cf0 \CocoaLigature0 The handling of character encoding in JSDTidy is admittedly the biggest weakness of previous JSDTidy and Balthisar Tidy releases. Both Cocoa and TidyLib offer file-encoding transformations and both can handle files are various encodings. It seems, however, that the Mac OS is more capable than Tidy when it comes to the number of encoding formats available, as well as having the benefit of being built-in to the operating system. Because of this, JSDTidy will override all use of TidyLib file encoding configuration options! Because file encoding can be quite complicated, it\'d5s essential that you know how JSDTidy expects to handle file encoding.\ - The essence of how JSDTidy handles character encoding can best be described (such are my talents) with this thought excercise: You have -\f0\b file -\f1\b0 which happens to exist using -\f0\b mac -\f1\b0 encoding. Your JSDTidyDocument is already configured such that it expects -\f0\b latin1 -\f1\b0 text. You load the file into the JSDTidyDocument as NSData, which is a binary copy of the file. JSDTidyDocument then decodes this file as if it were -\f0\b mac -\f1\b0 encoded, and builds a Unitext NSString called -\f0\b originalText -\f1\b0 . Since the -\f0\b originalText -\f1\b0 changed (you just loaded a file causing it change), the Unicode NSString -\f0\b tidyText -\f1\b0 is generated, too. The program copies the -\f0\b originalText -\f1\b0 into an NSTextView to be edited, and the user edits it. All this time, the program is keeping the sourceText in sync with the NSTextView, i.e., updating the -\f0\b originalText -\f1\b0 . The user, though, realizes the encoding is wrong, and changes the JSDTidyDocument input-encoding to the proper -\f0\b mac -\f1\b0 type for this document. JSDTidyDocument will then convert -\f0\b originalText -\f1\b0 from the Unicode NSString -\f2\i back -\f1\i0 to latin1. Note that it's not -\f2\i really -\f1\i0 converting to -\f0\b latin1 -\f1\b0 , since it was never -\f0\b latin1 -\f1\b0 in the first place, but merely reversing the bad conversion from -\f0\b latin1 -\f1\b0 . JSDTidyDocument will then convert from this reverted state to another Unicode NSString using the -\f0\b mac -\f1\b0 encoding. The only possible information loss will be whatever the user changed before setting the correct encoding.\ - Hence, our standard for internal data storage will be NSString, which is internally Unicode encoded. Once we're in this Unicode format, we can freely change between formats with little effort.\ - \ - } \ No newline at end of file diff --git a/Classes/Support Pieces/JSDTableColumn.h b/Classes/Support Pieces/JSDTableColumn.h deleted file mode 100644 index c75b864e..00000000 --- a/Classes/Support Pieces/JSDTableColumn.h +++ /dev/null @@ -1,28 +0,0 @@ -/*************************************************************************************** - JSDTableColumn.h - - implement dataCellForRow so that we can use different cells in any row of a table. - - FOR SOME REASON, you cannot implement this in IB -- you'll have to swap out the - type in awakeFromNib in the controller that you use. See these methods to assist: - initReplacingColumn: - initReplacingColumnId: - swapForTableColumn: - ***************************************************************************************/ - -#import - -@interface JSDTableColumn : NSTableColumn { - -} - -- (id)initReplacingColumn:(NSTableColumn *)aColumn; // initializer that replaces an existing column with this one. - -- (id)dataCellForRow:(int)row; // calls the delegate for each column to get the data cell. -- (void)swapForTableColumn:(NSTableColumn *)aColumn; // swaps this instance of JSDTableColumn for an existing one. - --(NSCell *)usefulCheckCell; --(NSCell *)usefulRadioCell; --(NSCell *)usefulPopUpCell:(NSArray *)picks; - -@end diff --git a/Classes/Support Pieces/JSDTableColumn.m b/Classes/Support Pieces/JSDTableColumn.m deleted file mode 100644 index 02ea0aae..00000000 --- a/Classes/Support Pieces/JSDTableColumn.m +++ /dev/null @@ -1,121 +0,0 @@ -/*************************************************************************************** - JSDTableColumn.m - - implement dataCellForRow so that we can use different cells in any row of a table. - - FOR SOME REASON, you cannot implement this in IB -- you'll have to swap out the - type in awakeFromNib in the controller that you use. You can use the method - swapForTableColumn: for this purpose. - ***************************************************************************************/ - -#import -#import "JSDTableColumn.h" - -@implementation JSDTableColumn : NSTableColumn - -/******************************************************************** - initReplacingColumn: - initialize ourself and replace "aColumn" in its table. -*********************************************************************/ -- (id)initReplacingColumn:(NSTableColumn *)aColumn { - if ([super initWithIdentifier:[aColumn identifier]]) { - [self swapForTableColumn:aColumn]; - } - return self; -} // initReplacingColumn - - -/******************************************************************** - dataCellForRow: - we're going to call the delegate for a cell, if one exists. -*********************************************************************/ -- (id)dataCellForRow:(int)row { - - // make sure there's a tableview and a delegate and that the row isn't -1. - if ( ([self tableView] == nil) || ([[self tableView] delegate] == nil) || (row == -1) ) - return [super dataCellForRow:row]; - - // see if the routine exists - if ( ! [ [ [self tableView] delegate] respondsToSelector:@selector(tableColumn:customDataCellForRow:)] ) - return [super dataCellForRow:row]; - - // try getting the cell we want from the delegate routine -- ignore the compiler warning. - id cell = [[[self tableView] delegate] tableColumn:self customDataCellForRow:row]; - if (cell != nil) - return cell; // not nil, so return what we got. - - return [super dataCellForRow:row]; // nothing there, so call the inherited method. -} // dataCellForRow - - -/******************************************************************** - swapForTableColumn: - convenience method that allows us to substitute ourself for - an existing table column. -*********************************************************************/ -- (void)swapForTableColumn:(NSTableColumn *)oldTableColumn { - NSTableView *table = [oldTableColumn tableView]; // get the tableview the old column is part of - if (table == nil) // do nothing if there's no table - return; - - // copy the old column properties. - [self setWidth:[oldTableColumn width]]; - [self setMinWidth:[oldTableColumn minWidth]]; - [self setMaxWidth:[oldTableColumn maxWidth]]; - [self setResizable:[oldTableColumn isResizable]]; - [self setEditable:[oldTableColumn isEditable]]; - [self setHeaderCell:[oldTableColumn headerCell]]; - [self setDataCell:[oldTableColumn dataCell]]; - - // Swap table column - [table addTableColumn:self]; - // put the new column in the correct spot - [table moveColumn:[[table tableColumns] indexOfObject:self] toColumn:[[table tableColumns] indexOfObject:oldTableColumn]]; - // remove the old column -- we know it's position was i - [table removeTableColumn:oldTableColumn]; -} // swapForTableColumn - - -/******************************************************************** - usefulCheckCell: - return a useful cell type. -*********************************************************************/ --(NSCell *)usefulCheckCell { - NSButtonCell *myCell = [[[NSButtonCell alloc] initTextCell: @""] autorelease]; - [myCell setEditable: YES]; - [myCell setButtonType:NSSwitchButton]; - [myCell setImagePosition:NSImageOnly]; - [myCell setControlSize:NSSmallControlSize]; - return myCell; -} // usefulCheckCell; - - -/******************************************************************** - usefulRadioCell: - return a useful cell type. -*********************************************************************/ --(NSCell *)usefulRadioCell { - NSButtonCell *myCell = [[[NSButtonCell alloc] initTextCell: @""] autorelease]; - [myCell setEditable: YES]; - [myCell setButtonType:NSRadioButton]; - [myCell setImagePosition:NSImageOnly]; - [myCell setControlSize:NSSmallControlSize]; - return myCell; -} // usefulRadioCell - - -/******************************************************************** - usefulPopUpCell: - return a useful cell type. -*********************************************************************/ --(NSCell *)usefulPopUpCell:(NSArray *)picks { - NSPopUpButtonCell *myCell = [[[NSPopUpButtonCell alloc] initTextCell: @"" pullsDown:NO] autorelease]; - [myCell setEditable: YES]; - [myCell setBordered:YES]; - [myCell addItemsWithTitles:picks]; - [myCell setControlSize:NSSmallControlSize]; - [myCell setFont:[NSFont menuFontOfSize:10]]; - return myCell; -} // usefulPopCell - -@end \ No newline at end of file diff --git a/Classes/Support Pieces/JSDTableView.h b/Classes/Support Pieces/JSDTableView.h deleted file mode 100644 index 3bdb1383..00000000 --- a/Classes/Support Pieces/JSDTableView.h +++ /dev/null @@ -1,22 +0,0 @@ -/*************************************************************************************** - JSDTableView.h - - override TextDidEndEditing so that after changing a value, the selection doesn't - advance to the next text field. - - FOR SOME REASON, you cannot implement this in IB -- you'll have to swap out the - type in awakeFromNib in the controller that you use. See these methods to assist: - initReplacingTableView: - ***************************************************************************************/ - -#import - - -@interface JSDTableView : NSTableView { - -} - -- (void)textDidEndEditing:(NSNotification *)notification; // overridden to prevent auto-advancing of cell focus - - -@end diff --git a/Classes/Support Pieces/JSDTableView.m b/Classes/Support Pieces/JSDTableView.m deleted file mode 100644 index 65767dea..00000000 --- a/Classes/Support Pieces/JSDTableView.m +++ /dev/null @@ -1,42 +0,0 @@ -/*************************************************************************************** - JSDTableView.h - - override TextDidEndEditing so that after changing a value, the selection doesn't - advance to the next text field. - - FOR SOME REASON, you cannot implement this in IB -- you'll have to swap out the - type in awakeFromNib in the controller that you use. See these methods to assist: - initReplacingTableView: - ***************************************************************************************/ - - -#import "JSDTableView.h" - - -@implementation JSDTableView - -/******************************************************************** - textDidEndEditing: - make the tableview not advance to the next focusable item unless - the user uses the tab/shift-tab key. -*********************************************************************/ -- (void)textDidEndEditing:(NSNotification *)aNotification { - //This is ugly, but just about the only way to do it. NSTableView - //is determined to select and edit something else, even the text field - //that it just finished editing, unless we mislead it about what key - //was pressed to end editing. - NSMutableDictionary *newUserInfo; - NSNotification *newNotification; - - newUserInfo = [NSMutableDictionary dictionaryWithDictionary:[aNotification userInfo]]; - [newUserInfo setObject:[NSNumber numberWithInt:0] forKey:@"NSTextMovement"]; - newNotification = [NSNotification notificationWithName:[aNotification name] object:[aNotification object] userInfo:newUserInfo]; - [super textDidEndEditing:newNotification]; - [[self window] makeFirstResponder:self]; - [NSApp sendAction:_action to:_target from:self]; // good thing the inherited _action and _target are so named! doing this - // override doesn't send the action unless we send it ourself! - -} // textDidEndEditing - - -@end diff --git a/Classes/Support Pieces/JSDTextView.h b/Classes/Support Pieces/JSDTextView.h deleted file mode 100644 index 3aa06b0a..00000000 --- a/Classes/Support Pieces/JSDTextView.h +++ /dev/null @@ -1,90 +0,0 @@ -/*************************************************************************************** - JSDTextView.h - - Modify NSTextView for a single, special purpose. We will: - o non-wrapping text with a line counter to the left. - o self contained (hence multiple classes in this header) - - We will: - o hand-build an NSScrollView, NSTextView, NSLayoutManager, NSTextContainer, - and NSTextStorage for textView, and add a JSDNumberView for numberView - o allow turning wrapping of text to YES or NO. - o allow turning line number counting to YES or NO. - o allow highlighting a given row and column. - ***************************************************************************************/ - -#import - -@class JSDTextView; - -//======================================================================================================== -// JSDTextViewSub -- this NSTextView subclass overrides drawRect: in order to force it to -// update the associated NSView in addition to the inherited method. -//======================================================================================================== -@interface JSDTextViewSub : NSTextView { - NSView *_friendView; - - int _litLine; // current line to highlight, or 0 if none. - int _litColumn; // current character to highlight, or 0 if none. -} --(NSView *)friendView; // return the associated view --(void)setFriendView:(NSView *)theView; // set the associated view - --(void)setHighlightedLine:(int)line column:(int)column; // sets current line to highlight - -@end - - -//======================================================================================================== -// JSDNumberView -- this NSView subclass draws its own line numbers in drawRect: based on the associated -// Text view in _owner. Provide accessor methods for _textView. -//======================================================================================================== -@interface JSDNumberView : NSView { - JSDTextView *_owner; - BOOL _showLineNumbers; // show line numbers or not? Default YES -} --(JSDTextView *)owner; // return the associated JSDTextView --(void)setOwner:(JSDTextView *)theView; // set the associate JSDTextView - --(BOOL)showLineNumbers; // returns whether we're showing line numbers or not. --(void)setShowLineNumbers:(BOOL)value; // set whether we're showing line numbers or not. - -@end - -//======================================================================================================== -// JSDTextView -- this NSTextView is just a REGULAR NSView subclass that does everything relates to a -// textview internally. The NSTextView is exposed so that all of the regular messages -// can be sent to it for setup without having to duplicate them in this wrapper. -//======================================================================================================== -@interface JSDTextView : NSView { - NSScrollView *_scrollView; // the enclosing scrollview. - NSLayoutManager *_layoutManager; // the layout manager - NSTextContainer *_textContainer; // the text container. - JSDTextViewSub *_textView; // the text view - JSDNumberView *_numberView; // the number view - - BOOL _wordWrap; // current word-wrap state. - - IBOutlet id delegate; // expose the NSTextView's delegate -} - --(NSScrollView *)scrollView; // expose the enclosing scrollview. --(NSLayoutManager *)layoutManager; // expose the layout manager --(NSTextContainer *)textContainer; // expose the text container. --(NSTextView *)textView; // expose the text view --(JSDNumberView *)numberView; // expose the number view - --(NSString *)string; // convenience method to get the NSTextView string --(void)setString:(NSString *)aString; // convenience method to set the NSTextView string - -- (void)setDelegate:(id)anObject; // convenience to allow setting of TextView delegate in IB -- (id)delegate; // complement to above - --(BOOL)showLineNumbers; // get this from the numberview that we're hosting. --(void)setShowLineNumbers:(BOOL)value; // set this in the numberview that we're hosting. - --(BOOL)wordWrap; // returns the word-wrap state --(void)setWordWrap:(BOOL)value; // sets the word-wrap state. - --(void)setHighlightedLine:(int)line column:(int)column; // sets current line to highlight -@end diff --git a/Classes/Support Pieces/JSDTextView.m b/Classes/Support Pieces/JSDTextView.m deleted file mode 100644 index 40a70afb..00000000 --- a/Classes/Support Pieces/JSDTextView.m +++ /dev/null @@ -1,504 +0,0 @@ -/*************************************************************************************** - JSDTextView.m - - Modify NSTextView for a single, special purpose. We will: - o non-wrapping text with a line counter to the left. - o self contained (hence multiple classes in this header) - - We will: - o hand-build an NSScrollView, NSTextView, NSLayoutManager, NSTextContainer, - and NSTextStorage for textView, and add a JSDNumberView for numberView - o allow turning wrapping of text to YES or NO. - o allow turning line number counting to YES or NO. - o allow highlighting a given row and column. -***************************************************************************************/ - -#import "JSDTextView.h" - -const float LargeNumberForText = 1.0e7; - -//======================================================================================================== -// IMPLEMENTATION JSDNumberView -//======================================================================================================== - -@implementation JSDNumberView - -/******************************************************************** - textView: - accessor get method for _owner -*********************************************************************/ --(JSDTextView *)owner { - return _owner; -} // textView - -/******************************************************************** - setTextView: - accessor set method for _owner -- NOT retained. -*********************************************************************/ --(void)setOwner:(JSDTextView *)theView { - _owner = theView; -} // setTextView - -/******************************************************************** - setWidth: - sets a new width for the number drawing. -*********************************************************************/ --(void)setWidth:(float)value { - float adjWidth = (value - [self frame].size.width); // amount to adjust -- pos=bigger, neg=smaller. - - NSRect tmpFrame = [[_owner scrollView] frame]; // get the scrollView frame. - tmpFrame.origin.x += adjWidth; // new origin position. - tmpFrame.size.width += -adjWidth; // new width. - [[_owner scrollView] setFrame:tmpFrame]; // set the new frame. - - tmpFrame = [self frame]; // get the current frame - tmpFrame.size.width += adjWidth; // new width. - [self setFrame:tmpFrame]; - - [_owner setNeedsDisplay:YES]; // flag _owner needs updated. - [self setNeedsDisplay:YES]; // flag we need updated. -} // setTextView - - -/******************************************************************** - drawRect: - overridden drawRect does the drawing of the line numbers. -*********************************************************************/ -- (void)drawRect:(NSRect)rect { - // fill in the background - [[NSColor windowBackgroundColor] set]; // use Mac OS X' background stripe - [NSBezierPath fillRect:rect]; // fill the rect - - // only draw if there's an associated _owner. This means it's assigned -- hope it's not released! Any ideas to check? - // also only draw if _showLineNumbers is true - if ((_owner) && (_showLineNumbers)) { - - // adjust rect so we won't later draw into the scrollbar area - if ([[_owner scrollView] hasHorizontalScroller]) { - float j = [[[_owner scrollView] horizontalScroller] frame].size.height / 2; // get size of the scroller - rect.origin.y += j; // shift the drawing frame reference up. - rect.size.height += -j; // and shrink it the same distance. - } // if scrollview present - - // setup drawing attributes for the font size and color. Later we could add accessors to do this dynamically. - NSMutableDictionary *attr = [[NSMutableDictionary alloc] init]; - [attr setObject:[NSFont fontWithName: @"Courier" size: 12] forKey: NSFontAttributeName]; - [attr setObject:[NSColor controlTextColor] forKey: NSForegroundColorAttributeName]; - - // setup the variables we need for the loop - NSRange aRange; // a range for counting lines - NSString *s; // a temporary string - int i = 0; // glyph counter - int j = 1; // line counter - float reqWidth; // width calculator holder -- width needed to show string - float widest = 1; // to calculate widest width needed - MIN 1! - float myWidth; // width calculator holder -- my current width - NSRect r; // rectange holder - NSPoint p; // point holder - NSLayoutManager *lm = [[_owner textView] layoutManager]; // get _owner's layout manager. - - // the line number counting and drawing loop - while ( i < [lm numberOfGlyphs] ) { - - // get the coordinates for the current glyph's entire-line rectangle, and converts to local coordinates. - r = [self convertRect:[lm lineFragmentRectForGlyphAtIndex:i effectiveRange:&aRange] fromView:[_owner textView]]; - r.origin.x = rect.origin.x; // don't care about x -- just force it into the rect - - // if true, we should draw because we're in the rectangle being updated. - if (NSPointInRect(r.origin, rect)) { - s = [NSString stringWithFormat:@"%d", j, nil]; // make a string from the line counter. - - reqWidth = [s sizeWithAttributes:attr].width; // width required to draw the string. - if (reqWidth > widest) // get widest width there is. - widest = reqWidth; - myWidth = [self frame].size.width; // get my own, current width. - if (myWidth < reqWidth) - [self setWidth:reqWidth]; // set a wider width if needed. - - p = NSMakePoint((myWidth - reqWidth), r.origin.y); // calculate to right-align and vertically place the string - [s drawAtPoint:p withAttributes:attr]; // draw the current line number. - } // if okay to draw - - i += [[[[_owner textView] string] substringWithRange:aRange] length]; // advance glyph counter to EOL - j ++; // increment the line number - } // while - [self setWidth:widest]; // set to the widest width needed, which could be narrower than before. - [attr release]; // free up the no-longer-needed attributes - } // if owner -} // drawRect - -/******************************************************************** - showLineNumbers: - we're going return _showLineNumbers -*********************************************************************/ --(BOOL)showLineNumbers { - return _showLineNumbers; -} // showLineNumbers - -/******************************************************************** - setShowLineNumbers: - we're going to set whether we're showing line numbers or not. -*********************************************************************/ --(void)setShowLineNumbers:(BOOL)value { - if (value != _showLineNumbers) { - _showLineNumbers = !_showLineNumbers; - if (!_showLineNumbers) - [self setWidth:0]; // hides it effectively. - else - [self setWidth:1]; // just to open it up. - [self setNeedsDisplay:YES]; - } // if -} // setShowLineNumbers - -@end; // JSDNumberView - - - -//======================================================================================================== -// IMPLEMENTATION JSDTextView -//======================================================================================================== - -@implementation JSDTextView - -/******************************************************************** - scrollView: - expose the enclosing scrollview. -*********************************************************************/ --(NSScrollView *)scrollView { - return _scrollView; -} // scrollView - -/******************************************************************** - layoutManager: - expose the layout manager -*********************************************************************/ --(NSLayoutManager *)layoutManager { - return _layoutManager; -} // layoutManager - -/******************************************************************** - textContainer: - expose the text container -*********************************************************************/ --(NSTextContainer *)textContainer { - return _textContainer; -} // textContainer - -/******************************************************************** - textView: - expose the text view -*********************************************************************/ --(NSTextView *)textView { - return _textView; -} // textView - -/******************************************************************** - numberView: - expose the number view -*********************************************************************/ --(JSDNumberView *)numberView { - return _numberView; -} // numberView - - -/******************************************************************** - setupViews: - let's build the text system by hand. -*********************************************************************/ --(void)setupViews { - // setup the items we need to make this work. - NSRect textFrame; // the frame for textView. - NSRect numberFrame; // the frame for numberView. - NSRect scrollFrame; // the frame for the scrollView. - - // Create our text storage for the NSTextView - NSTextStorage *textStorage = [[NSTextStorage alloc] init]; // NSTextView's text storage. - - // Create and configure the numberView - numberFrame = [self bounds]; // get our frame. - numberFrame.origin = NSMakePoint(0.0, 0.0); // set our origin. - numberFrame.size.width = 1; // default width (about invisible). - _numberView = [[JSDNumberView allocWithZone:[self zone]] initWithFrame:numberFrame];// initialize it. - [_numberView setAutoresizingMask:NSViewHeightSizable]; // set it's vertical resizing. - [_numberView setShowLineNumbers:YES]; // show line numbers by default. - [_numberView setOwner:self]; // set the numberView's owner - [self addSubview:_numberView]; // add it to us. - - // Create NSScrollView -- this will enclose everything else. - scrollFrame = [self bounds]; // get our frame. - scrollFrame.origin.x = 1+1; // adjust the origin. - scrollFrame.size.width = (scrollFrame.size.width - (1+1)); // adjust the width. - _scrollView = [[NSScrollView allocWithZone:[self zone]] initWithFrame:scrollFrame]; // create and initialize it. - [_scrollView setBorderType:NSBezelBorder]; // make the border normal. - [_scrollView setHasVerticalScroller:YES]; // put in the Vertical scroller. - [_scrollView setHasHorizontalScroller:YES]; // put in the Horizontal scroller. - [_scrollView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)]; // resize mask for the scroll view. - [[_scrollView contentView] setAutoresizesSubviews:YES]; // the contentview will autoresize subviews. - [self addSubview:_scrollView]; // add the scrollview as our subview. - - // Create NSSLayoutManager - _layoutManager = [[NSLayoutManager allocWithZone:[self zone]] init]; // create the TextView's layout manager. - [textStorage addLayoutManager:_layoutManager]; // add it to the text storage we already created. - - // Create and configure NSTextContainer - _textContainer = [[NSTextContainer allocWithZone:[self zone]] initWithContainerSize:NSMakeSize(LargeNumberForText, LargeNumberForText)]; - [_textContainer setWidthTracksTextView:NO]; // we don't want to be the same width as view! - [_textContainer setHeightTracksTextView:NO]; // we don't want to be the same height as view! - [_layoutManager addTextContainer:_textContainer]; // add the text container to the layout manager. - - // Create and configure NSTextView - textFrame.origin = NSMakePoint(0.0, 0.0); // get our origin. - textFrame.size = [_scrollView contentSize]; // frame will start at upper left. - _textView = [[JSDTextViewSub allocWithZone:[self zone]] initWithFrame:textFrame textContainer:_textContainer]; // initialize it. - [_textView setMinSize:textFrame.size]; // set the minimum size. - [_textView setMaxSize:NSMakeSize(LargeNumberForText, LargeNumberForText)]; // set the maximum size. - [_textView setHorizontallyResizable:YES]; // it's resizable horizontally. - [_textView setVerticallyResizable:YES]; // it's resizable vertically. - [_textView setAutoresizingMask:NSViewNotSizable]; // don't let it autosize, though. - [_scrollView setDocumentView:_textView]; // make this the documentview of the scroller. - - // update friend views. - [_textView setFriendView:_numberView]; // the textview will also update our friend. - - // release things retained by the system - [_textContainer release]; // release it -- already retained by adding it. - [_scrollView release]; // release the scrollview -- already retained. - [_textView release]; // decrease the reference count. -} // setupViews - -/******************************************************************** - initWithFrame: - initialize the view. -*********************************************************************/ -- (id)initWithFrame:(NSRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self setupViews]; // setup all of the views we need! - if (delegate) - [self setDelegate:delegate]; - } - return self; -} // initWithFrame; - - -/******************************************************************** - string: - we're going to pass to _textView:string (convenience) -*********************************************************************/ --(NSString *)string { - return[ _textView string]; -} // string - -/******************************************************************** - setString: - we're going to pass to _textView:setString (convenience) -*********************************************************************/ --(void)setString:(NSString *)aString { - [_textView setString:aString]; -} // setString - -/******************************************************************** - setDelegate: - set the delegate for this class, which really sets the - delegate for the TextView underneath! We only want to - support this for Interface Builder's sake. -*********************************************************************/ -- (void)setDelegate:(id)anObject { - [anObject retain]; - [delegate release]; - delegate = anObject; - [_textView setDelegate:anObject]; -} // setDelegate - -/******************************************************************** - initWithFrame: - return the current delegate of the textview underneath. - *********************************************************************/ -- (id)delegate { - return [_textView delegate]; -} // delegate - -/******************************************************************** - showLineNumbers: - pass this to the numberview we're hosting below. - *********************************************************************/ --(BOOL)showLineNumbers { - if (_numberView) - return [_numberView showLineNumbers]; - else - return NO; -} // showLineNumbers - -/******************************************************************** - setShowLineNumbers: - set this in the numberview we're hosting below. - *********************************************************************/ --(void)setShowLineNumbers:(BOOL)value { - if (_numberView) - [_numberView setShowLineNumbers:value]; -} // setShowLineNumbers - -/******************************************************************** - wordWrap: - returns the word-wrap state -*********************************************************************/ --(BOOL)wordWrap { - return _wordWrap; -} // wordWrap - -/******************************************************************** - adjustTextFrameSize: - if we're word wrapping, adjust the size of the textcontainer - to account for the presence of the numberview. Right now - it's ONLY called by setWordWrap, but it's applied here - in case I discover I need to manually force the width - adjustment at some time. - *********************************************************************/ --(void)adjustTextFrameSize { - if (_wordWrap) { - int i = [_scrollView frame].size.width; // width of the enclosing scrollview - if ([_numberView showLineNumbers]) - i -= ( [_numberView frame].size.width + 2 ); // account for numberView size if applicable - - [_textContainer setContainerSize:NSMakeSize(i, LargeNumberForText)]; // set the frame size - } // if _wordWrap -} // adjustTextFrameSize - -/******************************************************************** - setWordWrap: - sets wordwrap to YES or NO - *********************************************************************/ --(void)setWordWrap:(BOOL)value { - if (_wordWrap != value) { - _wordWrap = value; // YES = wordWrap - if (_wordWrap) { - [_scrollView setHasHorizontalScroller:NO]; // don't need horizontal scroller - [_textView setAutoresizingMask:NSViewWidthSizable]; // let it autosize. - [self adjustTextFrameSize]; - [_textContainer setWidthTracksTextView:YES]; // will follow the width of the textview. - [_textView sizeToFit]; - } // if wordwrap - else { - [_scrollView setHasHorizontalScroller:YES]; // need horizontal scroller - [_textContainer setWidthTracksTextView:NO]; // will NOT follow the width of the textview - stays static. - [_textContainer setContainerSize:NSMakeSize(LargeNumberForText, LargeNumberForText)]; // set the frame size - [_textView setAutoresizingMask:NSViewNotSizable]; // don't let it autosize, though. - } // else no wordwrap - [self setNeedsDisplay:YES]; - } //if -} // setWordWrap - -/******************************************************************** - setHighlightedLine: - sets a line to be highlighted -- passed to the textview - *********************************************************************/ --(void)setHighlightedLine:(int)line column:(int)column{ - [_textView setHighlightedLine:line column:column]; -} // setHighlightedLine - -@end // JSDTextview - - -//======================================================================================================== -// IMPLEMENTATION JSDTextViewSub -//======================================================================================================== -@implementation JSDTextViewSub - -/******************************************************************** - highlightLightedLine: - sets _litLine to be highlighted. - *********************************************************************/ --(void)highlightLightedLine { - // setup the variables we need for the loop - NSRange aRange; // a range for counting lines - NSRange lineCharRange; // a range for counting lines - int i = 0; // glyph counter - int j = 1; // line counter - int k; // column counter - NSRect r; // rectange holder - NSLayoutManager *lm = [self layoutManager]; // get layout manager. - - // Remove any existing coloring. - [lm removeTemporaryAttribute:NSBackgroundColorAttributeName forCharacterRange:NSMakeRange(0, [[self textStorage] length])]; - - // only highlight if there's a row to highlight. - if (_litLine >= 1) { - // the line number counting loop - while ( i < [lm numberOfGlyphs] ) { - r = [lm lineFragmentRectForGlyphAtIndex:i effectiveRange:&aRange]; // get the range for the current line. - // if the current line is what we're looking for, then highlight it! - if (j == _litLine) { - k = [lm characterIndexForGlyphAtIndex:i] + _litColumn - 1; // the column position - lineCharRange = [lm characterRangeForGlyphRange:aRange actualGlyphRange:NULL]; // the whole role range - // color them - [lm addTemporaryAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[NSColor cyanColor], NSBackgroundColorAttributeName, nil] forCharacterRange:lineCharRange]; - [lm addTemporaryAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[NSColor magentaColor], NSBackgroundColorAttributeName, nil] forCharacterRange:NSMakeRange(k, 1)]; - } // if - i += [[[self string] substringWithRange:aRange] length]; // advance glyph counter to EOL - j ++; // increment the line number - } // while - } // if -} // highlightLightedLine - -/******************************************************************** - scrollIntoView: - scrolls to line - *********************************************************************/ --(void)scrollIntoView:(int)line { - // setup the variables we need for the loop - NSRange aRange; // a range for counting lines - int i = 0; // glyph counter - int j = 1; // line counter - NSRect r; // rectange holder - NSLayoutManager *lm = [self layoutManager]; // layout manager. - if (line >= 1) { - // the line number counting loop - while ( i < [lm numberOfGlyphs] ) { - r = [lm lineFragmentRectForGlyphAtIndex:i effectiveRange:&aRange]; // get the range for the current line. - // if the current line is what we're looking for, then scroll to it - if (j == line) { - [self scrollRangeToVisible:aRange]; // scroll it into view - } // if - i += [[[self string] substringWithRange:aRange] length]; // advance glyph counter to EOL - j ++; // increment the line number - } // while - } // if -} // scrollIntoView - - -/******************************************************************** - get the friend view, i.e., who else to update with me. - *********************************************************************/ --(NSView *)friendView { - return _friendView; -} // friendView - -/******************************************************************** - set the friend view, i.e., who else to update with me. - *********************************************************************/ --(void)setFriendView:(NSView *)theView { - _friendView = theView; -} // setFriendView - -/******************************************************************** - also draw the friend view. - *********************************************************************/ --(void)drawRect:(NSRect)rect { -// [self highlightLightedLine]; - [super drawRect:rect]; - [_friendView setNeedsDisplay:YES]; -} // drawRect - -/******************************************************************** - setHighlightedLine: - sets a line to be highlighted. - *********************************************************************/ --(void)setHighlightedLine:(int)line column:(int)column { - _litLine = line; - _litColumn = column; - [self scrollIntoView:line]; // scroll it into view - [_friendView display]; - [self highlightLightedLine]; // highlight the line -} // setHighlightedLine - -@end // JSDTextViewSub diff --git a/Documentation/Balthisar Tidy Class Diagrams.dia b/Documentation/Balthisar Tidy Class Diagrams.dia new file mode 100644 index 0000000000000000000000000000000000000000..566d3a377f11bcff3520f5628e14a09271e783b2 GIT binary patch literal 1428 zcmV;F1#9{riwFP!000023+-H8bK*7>eQth*$9YLI#MlHjkS^J7lIe6iZIhYZw2zFi zg;7_QTuFxbrN6y0HXpVzA2udsMxF`8M%<%&t$TEJ1bqDT=3#9D8Ap`#b;~ey4HBC= zh`4?I_1n+aUH#Mj*+&O~JNf4_;A!$5ghyw6eJq53*KAIwQv-(_2+9nM0)xZmzW`&< zl#QDD{h6k%8gPIB(Y53%5Q3p$AfQHo2mAUE*xy}71LEj$tE8PxF=g5W;J$u7njLyG zG1E-h*;z&0LouXLI7F zS`=8BB1en|Z#9K0wjS1GeS$a|Vz{pNh=_xk4-aELdv|8+y?lGc(GXiJoF1Gm?7+_c z(}Noz2l6e$EZwHS(l}|>+!pn0yIlhlU&>6@GYAYq$P)7p%V}CmZg9dl8n6YL%+FS0 zLWh4tTO`iD{{EYGtvzDExxOqwWch)dzW!{cBbD_{T9PD~3zbh7gZ#3={LF(d#s#haWpPhSh4cjdrIT9>mZa*p!icZEz5OX7*?Nk@soN9XBn* zyscn<43Rq)8|)i5z4TEIEK?k%OC#TZq(m@^F=T72qhLD-)K_Y6i z4~Fu+G8eM|o95WPLKOHugPac*FYwx-sH~uYkW^6{)O@nq(W!KeRR(BBm#PCL#G z2OZLN!L1J59YXmbvk3W6(#gWoFuS4;JiKU}7eBU2znK-m#g~WAc2rwk@-dyhFgTKH z6k8+|Fz18T|sL{_P z`feoATV2C4I}PjBXw@pxm-c5Djb8TN>~v}r>1B}82| zz0&HHRrrPV8~UTO78t3Mg7enOFR$)Jm()yXS|>NvyR%sQhQj3 z*~3zVQU{^56rm_WQG}uh 0 but there's no string, tell the user that the the file + couldn't be decoded, and warn that the display might be blank. User should select new encoding + before modifying blank document. +* If input-encoding changes, then if there's original data, AND the originalText == workingText, + then try to re-decode from the original. Otherwise there's no effect. + +###Guessing Encoding + +* Try stringWithContentsOfFile:usedEncoding:error: or initWithContentsOfFile:usedEncoding:error: (or the URL-based equivalents). +* Otherwise, try to interpret it as UTF-8. You can do this by calling initWithData:data encoding:NSUTF8StringEncoding + and checking if the result is non-nil. +* If that fails, use a default 8-bit encoding, such as -[NSString defaultCStringEncoding] (which provides + a locale-appropriate guess). +* Note that once you get to MacOSRoman, you can stop checking any others, because MacOSRoman will successfully + (if not necessarily correctly) decode any sequence of bytes you throw at it. diff --git a/Documentation/TidyOptions.xlsx b/Documentation/TidyOptions.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..0df74fafd5b3b0ba9618bca8b3c8f224802ae818 GIT binary patch literal 42127 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 S@_oFiVw%8Xugd%W>AwNRQ(!Ov literal 0 HcmV?d00001 diff --git a/English.lproj/Batch.nib/classes.nib b/English.lproj/Batch.nib/classes.nib deleted file mode 100644 index 748b5874..00000000 --- a/English.lproj/Batch.nib/classes.nib +++ /dev/null @@ -1,13 +0,0 @@ -{ - IBClasses = ( - { - ACTIONS = {startBatch = id; }; - CLASS = BatchController; - LANGUAGE = ObjC; - OUTLETS = {fileList = NSOutlineView; optionPane = NSView; }; - SUPERCLASS = NSWindowController; - }, - {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; } - ); - IBVersion = 1; -} \ No newline at end of file diff --git a/English.lproj/Batch.nib/info.nib b/English.lproj/Batch.nib/info.nib deleted file mode 100644 index 63aa274b..00000000 --- a/English.lproj/Batch.nib/info.nib +++ /dev/null @@ -1,16 +0,0 @@ - - - - - IBDocumentLocation - 182 78 356 240 0 0 1152 848 - IBFramework Version - 286.0 - IBOpenObjects - - 22 - - IBSystem Version - 6I32 - - diff --git a/English.lproj/Batch.nib/keyedobjects.nib b/English.lproj/Batch.nib/keyedobjects.nib deleted file mode 100644 index 3ee30ba98d8828e4c67a33545a4deaefc4ca35bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7071 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 F{{R{%OcwwE diff --git a/English.lproj/Batch~.nib/classes.nib b/English.lproj/Batch~.nib/classes.nib deleted file mode 100644 index 748b5874..00000000 --- a/English.lproj/Batch~.nib/classes.nib +++ /dev/null @@ -1,13 +0,0 @@ -{ - IBClasses = ( - { - ACTIONS = {startBatch = id; }; - CLASS = BatchController; - LANGUAGE = ObjC; - OUTLETS = {fileList = NSOutlineView; optionPane = NSView; }; - SUPERCLASS = NSWindowController; - }, - {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; } - ); - IBVersion = 1; -} \ No newline at end of file diff --git a/English.lproj/Batch~.nib/info.nib b/English.lproj/Batch~.nib/info.nib deleted file mode 100644 index 7890d795..00000000 --- a/English.lproj/Batch~.nib/info.nib +++ /dev/null @@ -1,16 +0,0 @@ - - - - - IBDocumentLocation - 163 111 356 240 0 0 1152 848 - IBFramework Version - 286.0 - IBOpenObjects - - 22 - - IBSystem Version - 6G30 - - diff --git a/English.lproj/Batch~.nib/keyedobjects.nib b/English.lproj/Batch~.nib/keyedobjects.nib deleted file mode 100644 index f6a6194890e800fd1c84594aa2c28c478a807e11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6821 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 Rq5mXNf78_8_}?bY{|EdS=KcTx diff --git a/English.lproj/InfoPlist.strings b/English.lproj/InfoPlist.strings deleted file mode 100644 index 7a55d5704280c3082ac247b6a9da31793766f475..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 510 zcmb`D%?`m(5QWd$Q#4(6f!J7x4dO4-h>CrwmY|ikB)pNA#CJ=G#E#tD&UEJ7Gjq=M zrivU{8Y$62zP4KHtfc~KM`EgsN}`x(5ktNM{zCGy_60suPIUwNRG=I$+hX3dAU|h$jDQwQ}O^FTa7Oa9@qq2uGzBGK zOkZ$)ri`DPyxqB|rYfgSclgw5T=Q_sQm5EBeQ9&4_i<+jGS-Byk8)r0!Year57wxP MP;DH3xc0{#?z2=^fB*mh diff --git a/English.lproj/Localizable.strings b/English.lproj/Localizable.strings deleted file mode 100644 index a3ba5e52e2cdbf6938adc109ed3622c51de901ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30666 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 f4l2J+-*2q~UC@Jz*2fWnk;a;$xK=1|XX6Beeu diff --git a/English.lproj/MainMenu.nib/classes.nib b/English.lproj/MainMenu.nib/classes.nib deleted file mode 100644 index 8ff436d4..00000000 --- a/English.lproj/MainMenu.nib/classes.nib +++ /dev/null @@ -1,34 +0,0 @@ - - - - - IBClasses - - - CLASS - FirstResponder - LANGUAGE - ObjC - SUPERCLASS - NSObject - - - ACTIONS - - showBatch - id - showPreferences - id - - CLASS - AppController - LANGUAGE - ObjC - SUPERCLASS - NSObject - - - IBVersion - 1 - - diff --git a/English.lproj/MainMenu.nib/info.nib b/English.lproj/MainMenu.nib/info.nib deleted file mode 100644 index 42fbe4af..00000000 --- a/English.lproj/MainMenu.nib/info.nib +++ /dev/null @@ -1,18 +0,0 @@ - - - - - IBFramework Version - 629 - IBLastKnownRelativeProjectPath - ../../Balthisar Tidy.xcodeproj - IBOldestOS - 5 - IBOpenObjects - - IBSystem Version - 9B18 - targetFramework - IBCocoaFramework - - diff --git a/English.lproj/MainMenu.nib/keyedobjects.nib b/English.lproj/MainMenu.nib/keyedobjects.nib deleted file mode 100644 index 685b2dc9ab5057a93a17c4d453acccb9783d4216..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14121 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 Q6czquUkLwJ{Pi#TKY+A4lmGw# diff --git a/English.lproj/OptionPane.nib/classes.nib b/English.lproj/OptionPane.nib/classes.nib deleted file mode 100644 index ae0dc087..00000000 --- a/English.lproj/OptionPane.nib/classes.nib +++ /dev/null @@ -1,26 +0,0 @@ -{ - IBClasses = ( - {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, - {CLASS = JSDTableView; LANGUAGE = ObjC; SUPERCLASS = NSTableView; }, - { - ACTIONS = {optionChanged = id; }; - CLASS = OptionPaneController; - LANGUAGE = ObjC; - OUTLETS = {myView = NSView; theDescription = NSTextField; theTable = NSTableView; }; - SUPERCLASS = NSObject; - }, - { - ACTIONS = {optionChanged = id; }; - CLASS = TidyDocument; - LANGUAGE = ObjC; - OUTLETS = { - errorView = NSTextView; - optionPane = NSView; - sourceView = NSTextView; - tidyView = NSTextView; - }; - SUPERCLASS = NSDocument; - } - ); - IBVersion = 1; -} \ No newline at end of file diff --git a/English.lproj/OptionPane.nib/info.nib b/English.lproj/OptionPane.nib/info.nib deleted file mode 100644 index 75182071..00000000 --- a/English.lproj/OptionPane.nib/info.nib +++ /dev/null @@ -1,21 +0,0 @@ - - - - - IBDocumentLocation - 293 116 356 240 0 0 1152 848 - IBEditorPositions - - 21 - 408 381 335 403 0 0 1152 848 - - IBFramework Version - 286.0 - IBOpenObjects - - 21 - - IBSystem Version - 6G30 - - diff --git a/English.lproj/OptionPane.nib/keyedobjects.nib b/English.lproj/OptionPane.nib/keyedobjects.nib deleted file mode 100644 index 98215d560ec4ef9b1f0963dbde16f25a768ab6f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5484 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 - - - - IBDocumentLocation - 349 115 356 240 0 0 1152 848 - IBEditorPositions - - 21 - 408 381 335 403 0 0 1152 848 - - IBFramework Version - 286.0 - IBOpenObjects - - 21 - - IBSystem Version - 6G30 - - diff --git a/English.lproj/OptionPane~.nib/keyedobjects.nib b/English.lproj/OptionPane~.nib/keyedobjects.nib deleted file mode 100644 index 2dc040e278562336e53a28b82ab35561c2ee7b4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5407 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 I{>n@L2fHd2yZ`_I diff --git a/English.lproj/Preferences.nib/classes.nib b/English.lproj/Preferences.nib/classes.nib deleted file mode 100644 index 6699dcb0..00000000 --- a/English.lproj/Preferences.nib/classes.nib +++ /dev/null @@ -1,51 +0,0 @@ - - - - - IBClasses - - - ACTIONS - - preferenceChanged - id - radioBatchChanged - id - radioSavingChanged - id - - CLASS - PreferenceController - LANGUAGE - ObjC - OUTLETS - - batchSaving1 - NSButton - batchSaving2 - NSButton - optionPane - NSView - saving1 - NSButton - saving2 - NSButton - savingWarn - NSButton - - SUPERCLASS - NSWindowController - - - CLASS - FirstResponder - LANGUAGE - ObjC - SUPERCLASS - NSObject - - - IBVersion - 1 - - diff --git a/English.lproj/Preferences.nib/info.nib b/English.lproj/Preferences.nib/info.nib deleted file mode 100644 index 42fbe4af..00000000 --- a/English.lproj/Preferences.nib/info.nib +++ /dev/null @@ -1,18 +0,0 @@ - - - - - IBFramework Version - 629 - IBLastKnownRelativeProjectPath - ../../Balthisar Tidy.xcodeproj - IBOldestOS - 5 - IBOpenObjects - - IBSystem Version - 9B18 - targetFramework - IBCocoaFramework - - diff --git a/English.lproj/Preferences.nib/keyedobjects.nib b/English.lproj/Preferences.nib/keyedobjects.nib deleted file mode 100644 index c6af4eea67f67624c24e4eff5af0bbac8cd44c0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10225 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 Te^lFjLex*8Uj2;!?W6y10$#@b diff --git a/English.lproj/Preferences~.nib/classes.nib b/English.lproj/Preferences~.nib/classes.nib deleted file mode 100644 index 401219a5..00000000 --- a/English.lproj/Preferences~.nib/classes.nib +++ /dev/null @@ -1,20 +0,0 @@ -{ - IBClasses = ( - {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, - { - ACTIONS = {preferenceChanged = id; radioBatchChanged = id; radioSavingChanged = id; }; - CLASS = PreferenceController; - LANGUAGE = ObjC; - OUTLETS = { - batchSaving1 = NSButton; - batchSaving2 = NSButton; - optionPane = NSView; - saving1 = NSButton; - saving2 = NSButton; - savingWarn = NSButton; - }; - SUPERCLASS = NSWindowController; - } - ); - IBVersion = 1; -} \ No newline at end of file diff --git a/English.lproj/Preferences~.nib/info.nib b/English.lproj/Preferences~.nib/info.nib deleted file mode 100644 index de568cc3..00000000 --- a/English.lproj/Preferences~.nib/info.nib +++ /dev/null @@ -1,16 +0,0 @@ - - - - - IBDocumentLocation - 284 84 356 240 0 0 1152 848 - IBFramework Version - 286.0 - IBOpenObjects - - 5 - - IBSystem Version - 6G30 - - diff --git a/English.lproj/Preferences~.nib/keyedobjects.nib b/English.lproj/Preferences~.nib/keyedobjects.nib deleted file mode 100644 index 9703ce3552bf61626e629aa0d8bb87a064503d16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7621 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 diff --git a/English.lproj/TidyDocument.nib/classes.nib b/English.lproj/TidyDocument.nib/classes.nib deleted file mode 100644 index 89846f8f..00000000 --- a/English.lproj/TidyDocument.nib/classes.nib +++ /dev/null @@ -1,35 +0,0 @@ -{ - IBClasses = ( - {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, - {CLASS = JSDNumberView; LANGUAGE = ObjC; SUPERCLASS = NSView; }, - { - CLASS = JSDTextView; - LANGUAGE = ObjC; - OUTLETS = {delegate = id; }; - SUPERCLASS = NSView; - }, - {CLASS = JSDTextViewSub; LANGUAGE = ObjC; SUPERCLASS = NSTextView; }, - {CLASS = NSTextView; LANGUAGE = ObjC; SUPERCLASS = NSText; }, - { - ACTIONS = {optionChanged = id; }; - CLASS = OptionPane; - LANGUAGE = ObjC; - OUTLETS = {descriptionView = NSTextField; optionTable = NSTableView; }; - SUPERCLASS = NSView; - }, - { - ACTIONS = {errorClicked = id; optionChanged = id; }; - CLASS = TidyDocument; - LANGUAGE = ObjC; - OUTLETS = { - errorView = NSTableView; - optionPane = NSView; - sourceView = JSDTextView; - tidyView = JSDTextView; - }; - SUPERCLASS = NSDocument; - }, - {CLASS = testpane; LANGUAGE = ObjC; SUPERCLASS = NSView; } - ); - IBVersion = 1; -} \ No newline at end of file diff --git a/English.lproj/TidyDocument.nib/info.nib b/English.lproj/TidyDocument.nib/info.nib deleted file mode 100644 index 3245116c..00000000 --- a/English.lproj/TidyDocument.nib/info.nib +++ /dev/null @@ -1,18 +0,0 @@ - - - - - IBDocumentLocation - 322 73 356 240 0 0 1152 848 - IBFramework Version - 286.0 - IBLockedObjects - - IBOpenObjects - - 5 - - IBSystem Version - 6I32 - - diff --git a/English.lproj/TidyDocument.nib/keyedobjects.nib b/English.lproj/TidyDocument.nib/keyedobjects.nib deleted file mode 100644 index e43a9f218a2ec186e798456a434b20dcdc419c51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7443 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 jq8w3hp_Y0t!OC)57`Nwb9k diff --git a/English.lproj/TidyDocument~.nib/classes.nib b/English.lproj/TidyDocument~.nib/classes.nib deleted file mode 100644 index cb40a027..00000000 --- a/English.lproj/TidyDocument~.nib/classes.nib +++ /dev/null @@ -1,35 +0,0 @@ -{ - IBClasses = ( - {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, - {CLASS = JSDNumberView; LANGUAGE = ObjC; SUPERCLASS = NSView; }, - { - CLASS = JSDTextView; - LANGUAGE = ObjC; - OUTLETS = {delegate = id; }; - SUPERCLASS = NSView; - }, - {CLASS = JSDTextViewSub; LANGUAGE = ObjC; SUPERCLASS = NSTextView; }, - {CLASS = NSTextView; LANGUAGE = ObjC; SUPERCLASS = NSText; }, - { - ACTIONS = {optionChanged = id; }; - CLASS = OptionPane; - LANGUAGE = ObjC; - OUTLETS = {descriptionView = NSTextField; optionTable = NSTableView; }; - SUPERCLASS = NSView; - }, - { - ACTIONS = {erorClicked = id; optionChanged = id; }; - CLASS = TidyDocument; - LANGUAGE = ObjC; - OUTLETS = { - errorView = NSTableView; - optionPane = NSView; - sourceView = JSDTextView; - tidyView = JSDTextView; - }; - SUPERCLASS = NSDocument; - }, - {CLASS = testpane; LANGUAGE = ObjC; SUPERCLASS = NSView; } - ); - IBVersion = 1; -} \ No newline at end of file diff --git a/English.lproj/TidyDocument~.nib/info.nib b/English.lproj/TidyDocument~.nib/info.nib deleted file mode 100644 index 3245116c..00000000 --- a/English.lproj/TidyDocument~.nib/info.nib +++ /dev/null @@ -1,18 +0,0 @@ - - - - - IBDocumentLocation - 322 73 356 240 0 0 1152 848 - IBFramework Version - 286.0 - IBLockedObjects - - IBOpenObjects - - 5 - - IBSystem Version - 6I32 - - diff --git a/English.lproj/TidyDocument~.nib/keyedobjects.nib b/English.lproj/TidyDocument~.nib/keyedobjects.nib deleted file mode 100644 index fa559fbd37c7656bf8f560b430321ea92af95c61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7323 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 rN^_*SQk^tU3Q8d?|uMwwZ?hqQb0SK9bLX*Eta diff --git a/English.lproj/optionsInEffect.txt b/English.lproj/optionsInEffect.txt deleted file mode 100644 index 1a780305..00000000 --- a/English.lproj/optionsInEffect.txt +++ /dev/null @@ -1,80 +0,0 @@ -# any line that isn't valid according to TidyLib is ignored. Hence, feel free to "comment out" items we don't want to support. -# additionally, change the appearance order by rearranging them in this file. DON'T LEAVE SPACES at the ends of lines! -wrap -indent-spaces -tab-size -input-encoding -output-encoding -newline -repeated-attributes -alt-text -indent -hide-endtags -uppercase-tags -uppercase-attributes -bare -clean -doctype-mode -#doctype -input-xml -output-xml -output-xhtml -output-html -add-xml-decl -logical-emphasis -drop-proprietary-attributes -drop-font-tags -drop-empty-para -fix-bad-comments -break-before-br -numeric-entities -quote-marks -quote-nbsp -quote-ampersand -wrap-attributes -wrap-script-literals -wrap-sections -wrap-asp -wrap-jste -wrap-php -fix-backslash -indent-attributes -assume-xml-procins -add-xml-space -enclose-text -enclose-block-text -word-2000 -tidy-mark -gnu-emacs -literal-attributes -show-body-only -fix-uri -lower-literals -hide-comments -indent-cdata -force-output -show-errors -ascii-chars -join-classes -join-styles -escape-cdata -ncr -output-bom -replace-color -css-prefix -new-inline-tags -new-blocklevel-tags -new-empty-tags -new-pre-tags -accessibility-check -#char-encoding -#error-file -#write-back -#markup -#show-warnings -#quiet -#keep-time -#gnu-emacs-file -#language -#slide-style -#split \ No newline at end of file diff --git a/English.lproj/optionsTypesExceptions.txt b/English.lproj/optionsTypesExceptions.txt deleted file mode 100644 index cbad2810..00000000 --- a/English.lproj/optionsTypesExceptions.txt +++ /dev/null @@ -1,12 +0,0 @@ -# being that one of the design goals is to use TidyLib intact, we're going to define options here that have datatypes -# that are IN CONTRARY to how they are defined in TidyLib's config.c definitions. We COULD simplify matters and -# change the config.c, but purity dictates otherwise. Items listed here will be processed as STRINGS -# -# doctype takes a string for a user-specified string. Use doctype-mode for the picklist. -doctype -# the new-*-tags options have YES/NO picklists -- I don't know why. They're strings of comma-separated -# values used for teaching Tidy about new tags. Null should automatically mean NO -new-inline-tags -new-blocklevel-tags -new-empty-tags -new-pre-tags \ No newline at end of file diff --git a/Graphics, Included/iconbroom.icns b/Graphics, Included/iconbroom.icns deleted file mode 100644 index 398b8433647929f5fc4169ca8753c89ca0308ad3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53684 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ചkaZBoJ71ZKN-1nM+7ZXSM9#}lfk4A=0eeMg7tefBu#i=f+Z}J zpF$Bb5(Q9$OrwHwx@_7lUu{=0(^jC`{rOJ@lKzMk$cB^PIo@CrXa>dv5i@#&oWQ!_ zTvxgo;dN#w?>@4zbFSP&o{Ys#DP1xYWL?q=>>~X1~bL(XdogBb`K_T6wAs=Jm^K( zsKR>aR5s>M6rutj@@Ibqpy!b(0p$rJAWVg--G6$uH<<{F*<@!%2nK?P)hCLy0!A(c zN>qZP3r)pAJEN4kV;)!u`4f3ye>v|co|3o*=@|}YbuLt}@4jubtxy1psdkU)EpAW|3A{$Eu6Qu|jipgG&KPq6j zqQqDi<&UNP1QAL^fT%MTSE7o{GXlrO&i<}UnU*UZ=w?hswfnPyxB?c=O9vvktSH5^ zGA;$l5LlG}2c$s2&vCg-2#i94bLb+n$)F;mC@1mhSKlfd#n1Oc01z<+)$Y-R9QR9! zNEC1aQYc%L5rk7pA=u7FqXEz)L~>x6z-TrTl2|Sh4apoBPxA9Z=?zc|!8t2;e5R(_ z9nSb8DKQidXA;@45>4?K6PElG&vOBZ<`v1$GUcq$sX~;dBFP|$Go(MjvY}(Y0c8qK z9YKLuTX3}s3^RPh$eyz3SJsVL|RODWoaRsOJ#Y)pN<1n zga8hcW#cD+&GctKei^jiQ&H`{c(y}klTj+bMhdBn%mxaH0EJVG7*cQ{6j8W9G9DD8 z>5!60B*CjNERs($jDUMEh9ts+Ktk4C%4GmDQn_mPr5=S0Wf&n6$;f^{sl~!LCdFhH zS7JecVW3JTA;MBVCi;W%SVr-fk!(q#Sqz6^loi7P%%ZN{vu*Q+wH2v$0lGVwVA#CE z0~#(82QOJUE}(?Nf(MV45ZErld zYum>4t1DIQp3L)DvJfH#(CX(xJ~@_2hC~MEgV_khgi>)B_A8(P1IuIvLSIx#M!t&#WHE$FZ1baIK&ANzh4xhDTU|2 zO^yEF zXWOQAWx4Ofs@$yJd2BC`uARS%NdsLJYxDi9jwV zP~k)_2?u%-l*td8bSW$lvfIiAKr?9finNoI2^$)8dk6|gJyycca!~>FChLHzdEM#> zRJ(Iiub#*YggW^+t0;1exhKeS`O{rx)EF`pwA;!JH2N{K-k2h!wSTQ_f9zi#c?@m0IS zXU7I$y}f!l12@(_VKhCi@(MNK-BsiV-#o7E?rj2(^q z6EaO;CMyJ<5*f;+Zve}AZrQkg?f9x)(Aw~+bP`t*p}5S4)A^1d6HO>25{t;YP>3LG#_oM6Bsl|x&czd_8i4^wyEQ(pYWJnC zaG)!Vvq~Tk4+J9^(-B4JU>L(OSTJZP){d5Y(5Rr&a5zk~x3XcUCrX$=2vD4~*I-A@ zS{>rkH?%a=HMgjB4%V%$-hNTFdqI8sk!ttl;kb}bu>v@}C?`h!ZqRz#!P>q~*5$w) zE*XQsin>7Zj@N4gpsUla=fXTJa$2psMFpO0X_t$4)i*+vskWi1X3wEkJ9zbbWOr&@ za`$*j%!4j2?E~$W5EN`wg0XT+$Yr7RHkzPk&kWP=; zBuE76P-z_DBrl*ALPGV8I!LQ_+L{_`s#{tb+M18(9JaVxWPu^ytar*1C1NJ8-=#U+Vl=i{wGI0= z?^o?RsM10n(}?_bq$77xl{`|GKu0LZG=~J)tzl^BxnOQ%Hicfoq8N=^-yz zKG)_odWir_!r=M_ojJ+T4(7}=<)wN#U0t1~O{IgKM-CjUX*hJKuGOa6yY;+k_p0PB zcw`6$38&x@6P!0pK;}eJLS-;8gm64;v03f1&T6$lVvvJjw-pyzi8k3l1LjwFi^JEh zJ+x3tg7E%)9Qd4RJ^)sz7hnv$<_#$>qut8EY6k>6JU$k;K^hH? zmYXz-)5kNYwx-?DQn$PMpt`xG;o#=IEeAHNdT!M?s@?g+ubwGLtiq^~b#}y$X?PAc zcqGOLdr?{8af!EC9V)`uW;40HUJGbHtOlLUXth`kX2=7(Afv@)P*>ON-`iBPzvi&E zdi{#0S5Bnb?N^v+2t#p)1EnlZiGz1C)L*|%%M-s=7PbT#Xq`r(gOJb#&L7xecp(6m6cJDlJ{QOe^+j4qmL z^RSq~M1US1;)7|Cr6gB->w$K`++64I5|9RUT72#%s}It9Af16n9Q9io+godQ?OONr zcHN<}lNR_PFH`M;$C(SU0J(c2FUbMUr^B6IhSRr`w6oPgQWVKT2xvDL#-VGjb`TnM ztHXus9fTJGcK`?s1DXw*X2=26Z#vXmyJp*-=NcL|JhAKtPdu|~tZMgCEdRg1*cBEf ziZXh@TIr%y?W24uJ)%%ZNOnt#M2obpslLVoK~A;BZt)1DOV?^v8JwnOz1`AoMqE4B z9jvQfzgex`T9#5ytlAxjN-+U98&T9tp$#qyG3eY8)(Xc6l%-ff1UI(2!??|%Z?>D; zF&1&O8QTrIHdBMnX=|)?7}h+!XU~RR`rRvj@cqXoQSF{e$q6v$$p}VwVSh_2Snt?I)F;FKaR_*?zH>%`fV6`Dg zMx80AN@Q8Ml~lsC9fO?-4$(0(1hLk71E}YFn%nl-U{k9Lb3o9}eVR?HcWzwyd`@^uJ26yZJHQO~{#greu(7b)cW6K_&Ott&U@iZ5R3ovA)X&90W2G-*<>YRSj>w;k< zNHZpz8}bQ3#@!BDh68Q-dISMC#Rg6N-i^BsJ^AF$#vLmj1Jw>xh6z=>ujF|=5@7%? zEz?#OX-8ciUrUo$#z5gvqKF|zkH_VuY;KzYbv7J?buGU7TGiqG`olX`Z(6avX~#3m z9syp*$yB>NqL)(qAepG&iVJNX6yscNEsDq>up0}Km_A>3(|erix>l%31+;f< zHT9Yu>z+HY5c@km=kZOztA&pf-iap#Ih%PLNA`o~x8J^)m^NyKO;C=Y^%c&`MtA`}7n zbgi-n@`wggRP;HIc)7+l5^8L2wW=Gc8(V6&?^N$t^!$?>5ARyB?0ZWqQSCBT6UAe= zU1FT9sI_AOml-o)gu}`b^>7GG8dQ_^1|QOD)U;cg>vvZ-Y<_yzrmbuCserO`>3Kov z#HwAzZ6zogu@O9Yb7XD-%~_krZQxu+A7|530TNfM5l<`cRT$WjU13+iD25dBluhptfV&t~d1=}LdhhKb36T-2 z7Egzb`#oMmtEste)ry*$HJg^NK2o>giKXBD-ejuXQ+dkWnIs^no%5M>j7}e9DLdxf zYYU^kK*VfOlEkhi#H?y)ZaDJHk2bG6#MlZ^+(#J8b)4`u6O3SY zkb0dUdYm!V><%f0114+D{=;=gs-Jsy^8wAiRX=$6p`{b6cDqy12RHxYQF4J8~qT3Yu1Xv4adTiUhTpZ@+s4=tTowJTeag>(>gnw{X4 z78Po>QeMnybQloH)21ie4>~M(&9jGFwm-XOhp}Pvliz#jyN^t)+6~&ktO$j0y4{fg z=1HQ>0_SnJ*kK4^?M9fcZPIG$Ha}Cpb4|6jX6@tO`%YQ<3fhYi)vgApd&j7Dqt0x$ z5W$@ew-P0-qF=Aa39QY4xt)YyM_9+fEjxGYU-Q)F!)<$>`@wg=^YDbK-MBlKPDMr3 zfNIke%4?|u6_-R}%2c}7Z)Q9Vujc~=P-GmeXP_hl<7z}3|&4#vmgRbVtmR%aR zwMErtBR*2?mOZ(8;K`l$Ul&cp7hStAbw&JOmXFIsK`7&O8yk*PYr!PnCbQR|R=0cQ z3~=q1*Kaf&3%jMIp+q)Xp?_;8Z}4s@J%?M}$!vBls9w%y|wZM)~$-MMAs?)&fS z-fMk#?wQm70@fpId1wCV)4;X+cI@|M*Y4G@-L>idw4W@yb{)>Y1lR8WU(D_wuDNzc zQ?=9V+MP19d(E}`;fH@-*Y3w>cBk33dj+$5&9!^pwOjLzJ-cSj`p$wK${WA_{jW?< zeQog#bE;;|npJh(oO##Zu;`|nZ@#7S&&@aAeAA*E7cQ7LXLeONktuxofUox4hr>-P z?q9rU-gO}S+y#qnz4NZcOYZ(`#h<(HUb5sfi$8V8Cl)Q7Kj*rsW#C;9{@l6WrZvxf z{jY8VyU)G;raMOdG}V8-_v_Gi@49W#_48&=DFYY6{H9yK@!_w2{?m8fe&^yZOf~ey z-~XxW>z}&ihN)%Xz4JSN`1YGb&FV-0_t(C9-~Io1F}im7El{?&&c?R@UT zcmLy`Ph>{@Vd|S815-H#=+XZg6XS#bGv*Id{QAL)&rBf$=KOD_nEs?cpHc?ueg3m429-Hiu=xAx z<1Vr*y&Hk2EBvzXNnd3H)&+16Mwr&im9q?&jW@@e^?F+}leR zf8zSNS7cz$tzTK=9Gu}RaHKT;?Qib7dBMmS!|36G>u$W~adq;oE6QsI{!sesJ8zsf zwg9RYEdJIW=9QVd1%7lO?>uz(t=Eq&fU3E-fAx85#~)^@5Asp?bLWu1`Q()aFniJG zA3YNM=^sb`aE7*D{pyli7K|Mpsao*qZ*1|-Odoj6alG^OFWkQH$`kO3dwTIjfBRRSx0L>yPyJ(x`s!c5 z|CP_&1P1xWeCB`}SReY$pJu)Qmfg4H<||r&Syl5t^^F(s7ymHx@qh3?uNr^OE&pSs zxo;+(LdTqj$L_!TD#t(Tx`m%x)|mc(&;l&Kdi<(+cYSj&|LZZCoq?|){w?#z-T^>u zob!qM)_cy*Y&W=kILq(<>{a7mcjFhI)R$)d1dJEIYQd6+4~PF_21@+$Bp)B=_-D<% z^Bdc#*Jr#NIBxvexBUGo`@oE!fN|qj-SGM4>eL@DFRkhSHh%p1pMG$^@a9anfaAuW zHRrakuJ;VjbT@ST__J^P;uEdenZ5$Xk6*RmGY?h!e=)-+V1oE_Z~xk6m|N&;8^-?iK!J^slFXdxH40W`E+V8{k)G z_Az9l_*FN2@oCfG%-(}1j6eVG@2fI1I}|ig{8@88`QU-T%svQD7=QL{_irWsb^0sa zs1zrRUv<;H&)Q#{(Oba8@vr~n0@#oxj|9aQ(jJ%Ax zPzNTCKl`RHKCX`c>kJma#PO>ZF8S6j;@E%8+)Z$j`19`g%Cm;t>oYeRIdS}1b8h~^ zBZs6jGuH-A692k|cm2Z_-;BJDJzoJQiC;DEmcM;kpP#v2;3V;9fuW#>4~2d?s>Ph% z&B@|lH}B2|c2KWQZ_rVxO%}gu_AOs}-Z3<4kLlfg(I7QF~19W(D!@yl;bhdV`KiZSwf@Z~yz1 zrcrxL?`8$@Z~eO;s;4*TsMIQm|A~7ZJv3^M>D{a#{w-g4XwUQp9hF)o@&D?rZ?!Q)GCVqjps-0F}<6W#Q*FAE2cN-sMIQo{|`@%+GBb*D~kWMC#N^) zsMIQofBz3h?J>QZmBoL2dV`Ki?OOb+zyG-SLa^$(`L}%b{%hqws>)33=C%5Ft^Qr@ z{pYpo?|cbdYk#h_zt`?Rf9dz%<vowxn)v=R z@8%`6^<|tlhMA+jM@mZd$uy**CwmP8*A-0E zzI(~yyY9So(Sj=h^vlZsW6nRHe5QJNg8B{D&#Pc|cvaQxIdkXDn>T-YKOn`qmCcT? SDu1q<{?ACdV@iA0tp5u_wSPna diff --git a/Graphics, Included/iconhtml.icns b/Graphics, Included/iconhtml.icns deleted file mode 100644 index aa3a7c380cbd807f91390399a008f3705ee8711f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61994 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 diff --git a/README.md b/README.md new file mode 100644 index 00000000..f3d9513a --- /dev/null +++ b/README.md @@ -0,0 +1,90 @@ +Balthisar Tidy (version 0.7) +============================ + +by Jim Derry, +Copyright © 2003-2013 by Jim Derry. All rights reserved. +See “Legal Stuff†below for license details. + + +About +----- + +_Balthisar Tidy_ will clean and pretty-print format your HTML code. + +- Eliminate superfluous crud from HTML generator applications such as word processors +- Fix and/or remove document errors +- Pretty-print (nicely format) your HTML code for maximum human legibility + +Unlike the Tidy service offered by many Mac OS X text editors, _Balthisar Tidy_ gives you full control over all of Tidy’s formatting, cleanup, error-detection, and other options, and it’s all available in a highly-useful, native Mac OS X application. + + +System Requirements +------------------- + +_Balthisar Tidy_ has been release with support for Mac OS X 10.9 and newer. It may run on older versions of Mac OS X, but has not been tested. + + +Change Log +---------- + +### Balthisar Tidy 0.7 (December 2013) + +#### Visible changes +- Built for Mac OS X 10.9 (now minimum supported OS) +- Added Mac OS X full-screen support +- Added developer signature to make Gatekeeper happy +- Added Retina display App icons +- New file icons including support for Retina displays +- Improved the line numbers for the HTML and Tidy'd View +- Added and changed information in Tidy->About +- Default document window is larger. +- Tweaked the document window layout and appearance +- Tweaked the preferences window +- Adopted the most recent version of W3C TidyLib (more options!) +- Cleaned up remaining batch mode references. Will add in roadmap later. +- Cleaned up file encoding mechanism + +#### Invisible changes +- Significant source code cleanup for legibility +- Some refactorization +- Some migrration to modern Objective-C style +- Patched some memory leaks +- Removed alldeprecated calls +- Started ivar to property conversion +- Eliminated all compiler warnings (except for TidyLib proper) + + +### Balthisar Tidy 0.6 (November 2007) + +- Added support for universal binary. +- Now requires Mac OS X 10.4 or higher. + +### Balthisar Tidy 0.5 (February 2003) + +- Added support for a live error list in the document window. + +### Balthisar Tidy 0.1 (December 2002) + +- Initial release of _Balthisar Tidy_. +- Requires Mac OS X 10.2 or higher. + + +Legal Stuff +----------- + +### Open Source + +_Balthisar Tidy_ and all of its source code (including third party libraries) have been released under the MIT license. + +### The MIT License (MIT) + +by Jim Derry, +Copyright © 2003-2013 by Jim Derry. All rights reserved. + +*All files in this project are released according to the MIT license.* + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.rtf b/README.rtf deleted file mode 100644 index 2a8e13a9..00000000 --- a/README.rtf +++ /dev/null @@ -1,43 +0,0 @@ -{\rtf1\mac\ansicpg10000\cocoartf102 -{\fonttbl\f0\fswiss\fcharset77 ArialMT;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc - -\f0\fs48 \cf0 Balthisar Tidy -\fs26 \ -and\ - -\fs48 JSDTidyDocument -\fs26 (a Cocoa adaptation of TidyLib)\ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural -\cf0 \ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc -\cf0 \'a92003 by James S. Derry\ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural -\cf0 \ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li1440\ri-5020\qc -\cf0 portions \CocoaLigature0 Copyright \'a91998-2003 World Wide Web Consortium (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). All Rights Reserved.\ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural -\cf0 \ -\ - -\fs48 Welcome -\fs26 \ - Welcome to Balthisar Tidy and JSDTidyDocument. You've successfully uncovered the source code, so good luck using it. At this point you should be aware that is an almalgamation of two separate projects with very different groups working on them. TidyLib, in the "tidylib-src" group is a product of the fine people at http://tidy.sourceforge.net, and they have full responsibility for that code. The Cocoa portions are my work, and comments, suggestions, bug fixes, code contributions, and so on can be addressed to me.\ - I can't guarantee complete or prompt support, but I'll do what I can. Please try to understand the source code before you ask too many questions!\ -\ - -\fs48 TidyLib Licensing -\fs26 \ - TidyLib is licensed under the MIT license. In short, it means you can do what you want with the code providing you leave the original copyright notice in place. This covers everything in this distribution that's found in the "tidylib-src" group. For full details of the MIT license, you could see \CocoaLigature1 http://www.opensource.org/licenses/mit-license.php\CocoaLigature0 \ -\ - -\fs48 JSDTidyDocument Licensing -\fs26 \ - JSDTidyDocument files and class are also licensed under the MIT license. Do what you want with them in the bounds of the license, but please consider giving credit where it's due, and bounce any positive changes back to me. This covers the contents of the "JSDTidy" files in the "JSDTidy" group. For full details of the MIT license, you could see \CocoaLigature1 http://www.opensource.org/licenses/mit-license.php\CocoaLigature0 for the MIT license.\ -\ - -\fs48 Balthisar Tidy Licensing -\fs26 \ - With the exception of the libraries and codes listed above, the entire remaining portion of Balthisar Tidy is licensed under the Gnu GPL. Call it a viral license if you will, but it's my baby and I'd like not to let anyone big-and-fancy take it away from me. If you're big-and-fancy and are interested in Balthisar Tidy under a different license, well, then we can talk. And don't forget you can use the above-named libraries outside this license. Please see \CocoaLigature1 http://www.opensource.org/licenses/gpl-license.php for all the complex details about the Gnu General Public License.\CocoaLigature0 \ -} \ No newline at end of file diff --git a/main.m b/main.m deleted file mode 100644 index 9e40fbc0..00000000 --- a/main.m +++ /dev/null @@ -1,14 +0,0 @@ -// -// main.m -// Balthisar Tidy -// -// Created by Jim Derry on Sun Oct 20 2002. -// Copyright (c) 2002 __MyCompanyName__. All rights reserved. -// - -#import - -int main(int argc, const char *argv[]) -{ - return NSApplicationMain(argc, argv); -} diff --git a/tidylib-src/console/tidy.c b/tidylib-src/console/tidy.c deleted file mode 100644 index b2ee69ea..00000000 --- a/tidylib-src/console/tidy.c +++ /dev/null @@ -1,731 +0,0 @@ -/* - cmmdline.c - HTML Tidy command line driver - - Copyright (c) 1998-2003 World Wide Web Consortium - (Massachusetts Institute of Technology, Institut National de - Recherche en Informatique et en Automatique, Keio University). - All Rights Reserved. - - CVS Info : - - $Author: creitzel $ - $Date: 2003/02/16 19:33:04 $ - $Revision: 1.2 $ -*/ - -#include "tidy.h" - -uint contentErrors = 0; -uint contentWarnings = 0; -uint optionErrors = 0; -uint accessWarnings = 0; - -FILE* errout = null; /* set to stderr */ -FILE* txtout = null; /* set to stdout */ - -Bool samefile( ctmbstr filename1, ctmbstr filename2 ) -{ -#if FILENAMES_CASE_SENSITIVE - return ( strcmp( filename1, filename2 ) == 0 ); -#else - return ( strcasecmp( filename1, filename2 ) == 0 ); -#endif -} - -void help( TidyDoc tdoc, ctmbstr prog ) -{ - printf( "%s [option...] [file...] [option...] [file...]\n", prog ); - printf( "Utility to clean up and pretty print HTML/XHTML/XML\n"); - printf( "see http://tidy.sourgeforge.net/\n"); - printf( "\n"); - -#ifdef PLATFORM_NAME - printf( "Options for HTML Tidy for %s released on %s:\n", - PLATFORM_NAME, tidyReleaseDate() ); -#else - printf( "Options for HTML Tidy released on %s:\n", tidyReleaseDate() ); -#endif - printf( "\n"); - - printf( "File manipulation\n"); - printf( "-----------------\n"); - printf( " -out or -o specify the output markup file\n"); - printf( " -config set configuration options from the specified \n"); - printf( " -f write errors to the specified \n"); - printf( " -modify or -m modify the original input files\n"); - printf( "\n"); - - printf( "Processing directives\n"); - printf( "---------------------\n"); - printf( " -indent or -i indent element content\n"); - printf( " -wrap wrap text at the specified (default is 68)\n"); - printf( " -upper or -u force tags to upper case (default is lower case)\n"); - printf( " -clean or -c replace FONT, NOBR and CENTER tags by CSS\n"); - printf( " -bare or -b strip out smart quotes and em dashes, etc.\n"); - printf( " -numeric or -n output numeric rather than named entities\n"); - printf( " -errors or -e only show errors\n"); - printf( " -quiet or -q suppress nonessential output\n"); - printf( " -omit omit optional end tags\n"); - printf( " -xml specify the input is well formed XML\n"); - printf( " -asxml convert HTML to well formed XHTML\n"); - printf( " -asxhtml convert HTML to well formed XHTML\n"); - printf( " -ashtml force XHTML to well formed HTML\n"); - -/* TRT */ -#if SUPPORT_ACCESSIBILITY_CHECKS - printf( " -access do additional accessibility checks ( = 1, 2, 3)\n"); -#endif - - printf( "\n"); - - printf( "Character encodings\n"); - printf( "-------------------\n"); - printf( " -raw output values above 127 without conversion to entities\n"); - printf( " -ascii use US-ASCII for output, ISO-8859-1 for input\n"); - printf( " -latin0 use US-ASCII for output, ISO-8859-1 for input\n"); - printf( " -latin1 use ISO-8859-1 for both input and output\n"); - printf( " -iso2022 use ISO-2022 for both input and output\n"); - printf( " -utf8 use UTF-8 for both input and output\n"); - printf( " -mac use MacRoman for input, US-ASCII for output\n"); - printf( " -win1252 use Windows-1252 for input, US-ASCII for output\n"); - printf( " -ibm858 use IBM-858 (CP850+Euro) for input, US-ASCII for output\n"); - -#if SUPPORT_UTF16_ENCODINGS - printf( " -utf16le use UTF-16LE for both input and output\n"); - printf( " -utf16be use UTF-16BE for both input and output\n"); - printf( " -utf16 use UTF-16 for both input and output\n"); -#endif - -#if SUPPORT_ASIAN_ENCODINGS /* #431953 - RJ */ - printf( " -big5 use Big5 for both input and output\n"); - printf( " -shiftjis use Shift_JIS for both input and output\n"); - printf( " -language set the two-letter language code (for future use)\n"); -#endif - printf( "\n"); - - printf( "Miscellaneous\n"); - printf( "-------------\n"); - printf( " -version or -v show the version of Tidy\n"); - printf( " -help, -h or -? list the command line options\n"); - printf( " -help-config list all configuration options\n"); - printf( " -show-config list the current configuration settings\n"); - printf( "\n"); - printf( "Use --blah blarg for any configuration option \"blah\" with argument \"blarg\"\n"); - printf( "\n"); - - printf( "Input/Output default to stdin/stdout respectively\n"); - printf( "Single letter options apart from -f may be combined\n"); - printf( "as in: tidy -f errs.txt -imu foo.html\n"); - printf( "For further info on HTML see http://www.w3.org/MarkUp\n"); - printf( "\n"); -} - -#define kMaxValFieldWidth 40 -static const char* fmt = "%-27.27s %-9.9s %-40.40s\n"; -static const char* valfmt = "%-27.27s %-9.9s %-1.1s%-39.39s\n"; -static const char* ul - = "================================================================="; - -void optionhelp( TidyDoc tdoc, ctmbstr prog ) -{ - TidyIterator pos = tidyGetOptionList( tdoc ); - - printf( "\nHTML Tidy Configuration Settings\n\n" ); - printf( "Within a file, use the form:\n\n" ); - printf( "wrap: 72\n" ); - printf( "split: no\n\n" ); - printf( "When specified on the command line, use the form:\n\n" ); - printf( "--wrap 72 --split no\n\n"); - - printf( fmt, "Name", "Type", "Allowable values" ); - printf( fmt, ul, ul, ul ); - - while ( pos ) - { - TidyOption topt = tidyGetNextOption( tdoc, &pos ); - TidyOptionId optId = tidyOptGetId( topt ); - TidyOptionType optTyp = tidyOptGetType( topt ); - - tmbstr name = (tmbstr) tidyOptGetName( topt ); - tmbstr type = "String"; - tmbchar tempvals[80] = {0}; - tmbstr vals = &tempvals[0]; - - if ( tidyOptIsReadOnly(topt) ) - continue; - - /* Handle special cases first. - */ - switch ( optId ) - { - case TidyIndentContent: -#if SUPPORT_UTF16_ENCODINGS - case TidyOutputBOM: -#endif - type = "AutoBool"; - vals = "auto, y/n, yes/no, t/f, true/false, 1/0"; - break; - - case TidyDuplicateAttrs: - type = "enum"; - vals = "keep-first, keep-last"; - break; - - case TidyDoctype: - type = "DocType"; - vals = "auto, omit, strict, loose, transitional,"; - printf( fmt, name, type, vals ); - name = ""; - type = ""; - vals = "user specified fpi (string)"; - break; - - case TidyCSSPrefix: - type = "Name"; - vals = "CSS1 selector"; - break; - - case TidyInlineTags: - case TidyBlockTags: - case TidyEmptyTags: - case TidyPreTags: - type = "Tag names"; - vals = "tagX, tagY, ..."; - break; - - case TidyCharEncoding: - case TidyInCharEncoding: - case TidyOutCharEncoding: - type = "Encoding"; - vals = "ascii, latin0, latin1, raw, utf8, iso2022,"; - printf( fmt, name, type, vals ); - name = ""; - type = ""; - -#if SUPPORT_UTF16_ENCODINGS - vals = "utf16le, utf16be, utf16,"; - printf( fmt, name, type, vals ); -#endif -#if SUPPORT_ASIAN_ENCODINGS - vals = "mac, win1252, ibm858, big5, shiftjis"; -#else - vals = "mac, win1252, ibm858"; -#endif - break; - - case TidyNewline: - type = "enum"; - vals = "LF, CRLF, CR"; - break; - - /* General case will handle remaining */ - default: - switch ( optTyp ) - { - case TidyBoolean: - type = "Boolean"; - vals = "y/n, yes/no, t/f, true/false, 1/0"; - break; - - case TidyInteger: - type = "Integer"; - if ( optId == TidyWrapLen ) - vals = "0 (no wrapping), 1, 2, ..."; - else - vals = "0, 1, 2, ..."; - break; - - case TidyString: - type = "String"; - vals = "-"; - break; - } - } - - if ( *name || *type || *vals ) - printf( fmt, name, type, vals ); - } -} - -void optionvalues( TidyDoc tdoc, ctmbstr prog ) -{ - TidyIterator pos = tidyGetOptionList( tdoc ); - - printf( "\nConfiguration File Settings:\n\n" ); - printf( fmt, "Name", "Type", "Current Value" ); - printf( fmt, ul, ul, ul ); - - while ( pos ) - { - TidyOption topt = tidyGetNextOption( tdoc, &pos ); - TidyOptionId optId = tidyOptGetId( topt ); - TidyOptionType optTyp = tidyOptGetType( topt ); - Bool isReadOnly = tidyOptIsReadOnly( topt ); - - Bool bval = no; - ctmbstr sval = null; - uint ival = 0; - - tmbstr name = (tmbstr) tidyOptGetName( topt ); - tmbstr type = "String"; - tmbchar tempvals[80] = {0}; - tmbstr vals = &tempvals[0]; - tmbstr ro = ( isReadOnly ? "*" : "" ); - - /* Handle special cases first. - */ - switch ( optId ) - { - case TidyIndentContent: -#if SUPPORT_UTF16_ENCODINGS - case TidyOutputBOM: -#endif - type = "AutoBool"; - vals = (tmbstr) tidyOptGetCurrPick( tdoc, optId ); - break; - - case TidyDuplicateAttrs: - type = "enum"; - vals = (tmbstr) tidyOptGetCurrPick( tdoc, optId ); - break; - - case TidyDoctype: - sval = (tmbstr) tidyOptGetCurrPick( tdoc, TidyDoctypeMode ); - type = "DocType"; - if ( !sval || *sval == '*' ) - sval = (tmbstr) tidyOptGetValue( tdoc, TidyDoctype ); - vals = (tmbstr) sval; - break; - - case TidyCSSPrefix: - type = "Name"; - vals = (tmbstr) tidyOptGetValue( tdoc, TidyCSSPrefix ); - break; - - case TidyInlineTags: - case TidyBlockTags: - case TidyEmptyTags: - case TidyPreTags: - { - TidyIterator pos = tidyOptGetDeclTagList( tdoc ); - type = "Tag names"; - while ( pos ) - { - vals = (tmbstr) tidyOptGetNextDeclTag(tdoc, optId, &pos); - if ( pos ) - { - if ( *name ) - printf( valfmt, name, type, ro, vals ); - else - printf( fmt, name, type, vals ); - name = ""; - type = ""; - } - } - } - break; - - case TidyCharEncoding: - case TidyInCharEncoding: - case TidyOutCharEncoding: - type = "Encoding"; - sval = tidyOptGetEncName( tdoc, optId ); - vals = (tmbstr) sval; - break; - - case TidyNewline: - type = "enum"; - vals = (tmbstr) tidyOptGetCurrPick( tdoc, optId ); - break; - - /* General case will handle remaining */ - default: - switch ( optTyp ) - { - case TidyBoolean: - type = "Boolean"; /* curr pick handles inverse */ - vals = (tmbstr) tidyOptGetCurrPick( tdoc, optId ); - break; - - case TidyInteger: - type = "Integer"; - ival = tidyOptGetInt( tdoc, optId ); - sprintf( tempvals, "%d", ival ); - break; - - case TidyString: - type = "String"; - vals = (tmbstr) tidyOptGetValue( tdoc, optId ); - break; - } - } - - if ( *name || *type || *vals ) - { - if ( ! vals ) - vals = ""; - if ( *name ) - printf( valfmt, name, type, ro, vals ); - else - printf( fmt, name, type, vals ); - } - } - - printf( "\n\nValues marked with an *asterisk are calculated \n" - "internally by HTML Tidy\n\n" ); -} - -void version( TidyDoc tdoc, ctmbstr prog ) -{ -#ifdef PLATFORM_NAME - printf( "HTML Tidy for %s released on %s\n", - PLATFORM_NAME, tidyReleaseDate() ); -#else - printf( "HTML Tidy released on %s\n", tidyReleaseDate() ); -#endif -} - -void unknownOption( TidyDoc tdoc, uint c ) -{ - fprintf( errout, "HTML Tidy: unknown option: %c\n", c ); -} - -int main( int argc, char** argv ) -{ - ctmbstr prog = argv[0]; - ctmbstr cfgfil = null, errfil = null, htmlfil = null; - TidyDoc tdoc = tidyCreate(); - int status = 0; - - errout = stderr; /* initialize to stderr */ - -#ifdef CONFIG_FILE - tidyLoadConfig( tdoc, CONFIG_FILE ); -#endif /* CONFIG_FILE */ - - /* look for env var "HTML_TIDY" */ - /* then for ~/.tidyrc (on platforms defining $HOME) */ - - if ( cfgfil = getenv("HTML_TIDY") ) - tidyLoadConfig( tdoc, cfgfil ); -#ifdef SUPPORT_GETPWNAM - else - tidyLoadConfig( tdoc, "~/.tidyrc" ); -#endif /* SUPPORT_GETPWNAM */ - - /* read command line */ - while ( argc > 0 ) - { - if (argc > 1 && argv[1][0] == '-') - { - /* support -foo and --foo */ - ctmbstr arg = argv[1] + 1; - - if ( strcasecmp(arg, "xml") == 0) - tidyOptSetBool( tdoc, TidyXmlTags, yes ); - - else if ( strcasecmp(arg, "asxml") == 0 || - strcasecmp(arg, "asxhtml") == 0 ) - { - tidyOptSetBool( tdoc, TidyXhtmlOut, yes ); - } - else if ( strcasecmp(arg, "ashtml") == 0 ) - tidyOptSetBool( tdoc, TidyHtmlOut, yes ); - - else if ( strcasecmp(arg, "indent") == 0 ) - { - tidyOptSetInt( tdoc, TidyIndentContent, TidyYesState ); - } - else if ( strcasecmp(arg, "omit") == 0 ) - tidyOptSetBool( tdoc, TidyHideEndTags, yes ); - - else if ( strcasecmp(arg, "upper") == 0 ) - tidyOptSetBool( tdoc, TidyUpperCaseTags, yes ); - - else if ( strcasecmp(arg, "clean") == 0 ) - tidyOptSetBool( tdoc, TidyMakeClean, yes ); - - else if ( strcasecmp(arg, "bare") == 0 ) - tidyOptSetBool( tdoc, TidyMakeBare, yes ); - - else if ( strcasecmp(arg, "raw") == 0 || - strcasecmp(arg, "ascii") == 0 || - strcasecmp(arg, "latin0") == 0 || - strcasecmp(arg, "latin1") == 0 || - strcasecmp(arg, "utf8") == 0 || - strcasecmp(arg, "iso2022") == 0 || -#if SUPPORT_UTF16_ENCODINGS - strcasecmp(arg, "utf16le") == 0 || - strcasecmp(arg, "utf16be") == 0 || - strcasecmp(arg, "utf16") == 0 || -#endif -#if SUPPORT_ASIAN_ENCODINGS - strcasecmp(arg, "shiftjis") == 0 || - strcasecmp(arg, "big5") == 0 || -#endif - strcasecmp(arg, "mac") == 0 || - strcasecmp(arg, "win1252") == 0 || - strcasecmp(arg, "ibm858") == 0 ) - { - tidySetCharEncoding( tdoc, arg ); - } - else if ( strcasecmp(arg, "numeric") == 0 ) - tidyOptSetBool( tdoc, TidyNumEntities, yes ); - - else if ( strcasecmp(arg, "modify") == 0 || - strcasecmp(arg, "change") == 0 || /* obsolete */ - strcasecmp(arg, "update") == 0 ) /* obsolete */ - { - tidyOptSetBool( tdoc, TidyWriteBack, yes ); - } - else if ( strcasecmp(arg, "errors") == 0 ) - tidyOptSetBool( tdoc, TidyShowMarkup, no ); - - else if ( strcasecmp(arg, "quiet") == 0 ) - tidyOptSetBool( tdoc, TidyQuiet, yes ); - - else if ( strcasecmp(arg, "help") == 0 || - strcasecmp(arg, "h") == 0 || *arg == '?' ) - { - help( tdoc, prog ); - tidyRelease( tdoc ); - return 0; /* success */ - } - else if ( strcasecmp(arg, "help-config") == 0 ) - { - optionhelp( tdoc, prog ); - tidyRelease( tdoc ); - return 0; /* success */ - } - else if ( strcasecmp(arg, "show-config") == 0 ) - { - optionvalues( tdoc, prog ); - tidyRelease( tdoc ); - return 0; /* success */ - } - else if ( strcasecmp(arg, "config") == 0 ) - { - if ( argc >= 3 ) - { - ctmbstr post; - - tidyLoadConfig( tdoc, argv[2] ); - - /* Set new error output stream if setting changed */ - post = tidyOptGetValue( tdoc, TidyErrFile ); - if ( post && (!errfil || !samefile(errfil, post)) ) - { - errfil = post; - errout = tidySetErrorFile( tdoc, post ); - } - - --argc; - ++argv; - } - } - -#if SUPPORT_ASIAN_ENCODINGS - else if ( strcasecmp(arg, "language") == 0 || - strcasecmp(arg, "lang") == 0 ) - { - if ( argc >= 3 ) - { - tidyOptSetValue( tdoc, TidyLanguage, argv[2] ); - --argc; - ++argv; - } - } -#endif - - else if ( strcasecmp(arg, "output") == 0 || - strcasecmp(arg, "-output-file") == 0 || - strcasecmp(arg, "o") == 0 ) - { - if ( argc >= 3 ) - { - tidyOptSetValue( tdoc, TidyOutFile, argv[2] ); - --argc; - ++argv; - } - } - else if ( strcasecmp(arg, "file") == 0 || - strcasecmp(arg, "-file") == 0 || - strcasecmp(arg, "f") == 0 ) - { - if ( argc >= 3 ) - { - errfil = argv[2]; - errout = tidySetErrorFile( tdoc, errfil ); - --argc; - ++argv; - } - } - else if ( strcasecmp(arg, "wrap") == 0 || - strcasecmp(arg, "-wrap") == 0 || - strcasecmp(arg, "w") == 0 ) - { - if ( argc >= 3 ) - { - uint wraplen = 0; - sscanf( argv[2], "%d", &wraplen ); - tidyOptSetInt( tdoc, TidyWrapLen, wraplen ); - --argc; - ++argv; - } - } - else if ( strcasecmp(arg, "version") == 0 || - strcasecmp(arg, "-version") == 0 || - strcasecmp(arg, "v") == 0 ) - { - version( tdoc, prog ); - tidyRelease( tdoc ); - return 0; /* success */ - - } - else if ( strncmp(argv[1], "--", 2 ) == 0) - { - if ( tidyOptParseValue(tdoc, argv[1]+2, argv[2]) ) - { - ++argv; - --argc; - } - } - -#if SUPPORT_ACCESSIBILITY_CHECKS - else if ( strcasecmp(arg, "access") == 0 ) - { - if ( argc >= 3 ) - { - uint acclvl = 0; - sscanf( argv[2], "%d", &acclvl ); - tidyOptSetInt( tdoc, TidyAccessibilityCheckLevel, acclvl ); - --argc; - ++argv; - } - } -#endif - - else - { - uint c; - ctmbstr s = argv[1]; - - while ( c = *++s ) - { - switch ( c ) - { - case 'i': - tidyOptSetInt(tdoc, TidyIndentContent, TidyYesState); - break; - - /* Usurp -o for output file. Anyone hiding end tags? - case 'o': - tidyOptSetBool( tdoc, TidyHideEndTags, yes ); - break; - */ - - case 'u': - tidyOptSetBool( tdoc, TidyUpperCaseTags, yes ); - break; - - case 'c': - tidyOptSetBool( tdoc, TidyMakeClean, yes ); - break; - - case 'b': - tidyOptSetBool( tdoc, TidyMakeBare, yes ); - break; - - case 'n': - tidyOptSetBool( tdoc, TidyNumEntities, yes ); - break; - - case 'm': - tidyOptSetBool( tdoc, TidyWriteBack, yes ); - break; - - case 'e': - tidyOptSetBool( tdoc, TidyShowMarkup, no ); - break; - - case 'q': - tidyOptSetBool( tdoc, TidyQuiet, yes ); - break; - - default: - unknownOption( tdoc, c ); - break; - } - } - } - - --argc; - ++argv; - continue; - } - - if ( argc > 1 ) - { - htmlfil = argv[1]; - if ( tidyOptGetBool(tdoc, TidyEmacs) ) - tidyOptSetValue( tdoc, TidyEmacsFile, htmlfil ); - status = tidyParseFile( tdoc, htmlfil ); - } - else - { - htmlfil = "stdin"; - status = tidyParseStdin( tdoc ); - } - - if ( status >= 0 ) - status = tidyCleanAndRepair( tdoc ); - - if ( status >= 0 ) - status = tidyRunDiagnostics( tdoc ); - - if ( status >= 0 ) - { - if ( tidyOptGetBool(tdoc, TidyWriteBack) ) - status = tidySaveFile( tdoc, htmlfil ); - else - { - ctmbstr outfil = tidyOptGetValue( tdoc, TidyOutFile ); - if ( outfil ) - status = tidySaveFile( tdoc, outfil ); - else - status = tidySaveStdout( tdoc ); - } - } - - contentErrors += tidyErrorCount( tdoc ); - contentWarnings += tidyWarningCount( tdoc ); - accessWarnings += tidyAccessWarningCount( tdoc ); - - --argc; - ++argv; - - if ( argc <= 1 ) - break; - } - - if ( contentErrors + contentWarnings > 0 && - !tidyOptGetBool(tdoc, TidyQuiet) ) - { - tidyErrorSummary( tdoc ); - tidyGeneralInfo( tdoc ); - } - - /* called to free hash tables etc. */ - tidyRelease( tdoc ); - - /* return status can be used by scripts */ - if ( contentErrors > 0 ) - return 2; - - if ( contentWarnings > 0 ) - return 1; - - /* 0 signifies all is ok */ - return 0; -} - diff --git a/tidylib-src/include/buffio.h b/tidylib-src/include/buffio.h deleted file mode 100644 index 78bc8ff4..00000000 --- a/tidylib-src/include/buffio.h +++ /dev/null @@ -1,98 +0,0 @@ -#ifndef __BUFFIO_H__ -#define __BUFFIO_H__ - -/** @file buffio.h - Treat buffer as an I/O stream. - - (c) 1998-2002 (W3C) MIT, INRIA, Keio University - See tidy.h for the copyright notice. - - CVS Info : - - $Author: creitzel $ - $Date: 2003/02/16 19:33:08 $ - $Revision: 1.2 $ - - Requires buffer to automatically grow as bytes are added. - Must keep track of current read and write points. - -*/ - -#include "platform.h" -#include "tidy.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** TidyBuffer - A chunk of memory */ -TIDY_STRUCT -struct _TidyBuffer -{ - byte* bp; /**< Pointer to bytes */ - uint size; /**< # bytes currently in use */ - uint allocated; /**< # bytes allocated */ - uint next; /**< Offset of current input position */ -}; - -/** Zero out data structure */ -TIDY_EXPORT void tidyBufInit( TidyBuffer* buf ); - -/** Free current buffer, allocate given amount, reset input pointer */ -TIDY_EXPORT void tidyBufAlloc( TidyBuffer* buf, uint allocSize ); - -/** Expand buffer to given size. -** Chunk size is minimum growth. Pass 0 for default of 256 bytes. -*/ -TIDY_EXPORT void tidyBufCheckAlloc( TidyBuffer* buf, - uint allocSize, uint chunkSize ); - -/** Free current contents and zero out */ -TIDY_EXPORT void tidyBufFree( TidyBuffer* buf ); - -/** Set buffer bytes to 0 */ -TIDY_EXPORT void tidyBufClear( TidyBuffer* buf ); - -/** Attach to existing buffer */ -TIDY_EXPORT void tidyBufAttach( TidyBuffer* buf, void* bp, uint size ); - -/** Detach from buffer. Caller must free. */ -TIDY_EXPORT void tidyBufDetach( TidyBuffer* buf ); - - -/** Append bytes to buffer. Expand if necessary. */ -TIDY_EXPORT void tidyBufAppend( TidyBuffer* buf, void* vp, uint size ); - -/** Append one byte to buffer. Expand if necessary. */ -TIDY_EXPORT void tidyBufPutByte( TidyBuffer* buf, byte bv ); - -/** Get byte from end of buffer */ -TIDY_EXPORT int tidyBufPopByte( TidyBuffer* buf ); - - -/** Get byte from front of buffer. Increment input offset. */ -TIDY_EXPORT int tidyBufGetByte( TidyBuffer* buf ); - -/** At end of buffer? */ -TIDY_EXPORT Bool tidyBufEndOfInput( TidyBuffer* buf ); - -/** Put a byte back into the buffer. Decrement input offset. */ -TIDY_EXPORT void tidyBufUngetByte( TidyBuffer* buf, byte bv ); - - -/************** - TIDY -**************/ - -/* Forward declarations -*/ - -/** Initialize a buffer input source */ -TIDY_EXPORT void initInputBuffer( TidyInputSource* inp, TidyBuffer* buf ); - -/** Initialize a buffer output sink */ -TIDY_EXPORT void initOutputBuffer( TidyOutputSink* outp, TidyBuffer* buf ); - -#ifdef __cplusplus -} -#endif -#endif /* __BUFFIO_H__ */ diff --git a/tidylib-src/include/fileio.h b/tidylib-src/include/fileio.h deleted file mode 100644 index e8f78268..00000000 --- a/tidylib-src/include/fileio.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef __FILEIO_H__ -#define __FILEIO_H__ - -/** @file fileio.h - does standard C I/O - - Implementation of a FILE* based TidyInputSource and - TidyOutputSink. - - (c) 1998-2002 (W3C) MIT, INRIA, Keio University - See tidy.h for the copyright notice. - - CVS Info: - $Author: creitzel $ - $Date: 2003/02/16 19:33:08 $ - $Revision: 1.2 $ -*/ - -#include "buffio.h" -#ifdef __cplusplus -extern "C" { -#endif - -/** Allocate and initialize file input source */ -void initFileSource( TidyInputSource* source, FILE* fp ); - -/** Free file input source */ -void freeFileSource( TidyInputSource* source, Bool closeIt ); - -/** Initialize file output sink */ -void initFileSink( TidyOutputSink* sink, FILE* fp ); - -/* Needed for internal declarations */ -void filesink_putByte( uint sinkData, byte bv ); - -#ifdef __cplusplus -} -#endif -#endif /* __FILEIO_H__ */ diff --git a/tidylib-src/include/tidy.h b/tidylib-src/include/tidy.h deleted file mode 100644 index e0f4e673..00000000 --- a/tidylib-src/include/tidy.h +++ /dev/null @@ -1,923 +0,0 @@ -#ifndef __TIDY_H__ -#define __TIDY_H__ - -/** @file tidy.h - Defines HTML Tidy API implemented by tidy library. - - Public interface is const-correct and doesn't explicitly depend - on any globals. Thus, thread-safety may be introduced w/out - changing the interface. - - Looking ahead to a C++ wrapper, C functions always pass - this-equivalent as 1st arg. - - - Copyright (c) 1998-2002 World Wide Web Consortium - (Massachusetts Institute of Technology, Institut National de - Recherche en Informatique et en Automatique, Keio University). - All Rights Reserved. - - CVS Info : - - $Author: creitzel $ - $Date: 2003/02/16 19:33:09 $ - $Revision: 1.2 $ - - Contributing Author(s): - - Dave Raggett - - The contributing author(s) would like to thank all those who - helped with testing, bug fixes and suggestions for improvements. - This wouldn't have been possible without your help. - - COPYRIGHT NOTICE: - - This software and documentation is provided "as is," and - the copyright holders and contributing author(s) make no - representations or warranties, express or implied, including - but not limited to, warranties of merchantability or fitness - for any particular purpose or that the use of the software or - documentation will not infringe any third party patents, - copyrights, trademarks or other rights. - - The copyright holders and contributing author(s) will not be held - liable for any direct, indirect, special or consequential damages - arising out of any use of the software or documentation, even if - advised of the possibility of such damage. - - Permission is hereby granted to use, copy, modify, and distribute - this source code, or portions hereof, documentation and executables, - for any purpose, without fee, subject to the following restrictions: - - 1. The origin of this source code must not be misrepresented. - 2. Altered versions must be plainly marked as such and must - not be misrepresented as being the original source. - 3. This Copyright notice may not be removed or altered from any - source or altered source distribution. - - The copyright holders and contributing author(s) specifically - permit, without fee, and encourage the use of this source code - as a component for supporting the Hypertext Markup Language in - commercial products. If you use this source code in a product, - acknowledgment is not required but would be appreciated. - - - Created 2001-05-20 by Charles Reitzel - Updated 2002-07-01 by Charles Reitzel - 1st Implementation - -*/ - -#include "platform.h" -#include "tidyenum.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @defgroup Opaque Opaque Types -** -** Cast to implementation types within lib. -** Reduces inter-dependencies/conflicts w/ application code. -** @{ -*/ - -/** @struct TidyDoc -** Opaque document datatype -*/ -opaque( TidyDoc ); - -/** @struct TidyOption -** Opaque option datatype -*/ -opaque( TidyOption ); - -/** @struct TidyNode -** Opaque node datatype -*/ -opaque( TidyNode ); - -/** @struct TidyAttr -** Opaque attribute datatype -*/ -opaque( TidyAttr ); - -/** @} */ - -TIDY_STRUCT struct _TidyBuffer; -typedef struct _TidyBuffer TidyBuffer; - - -/** @defgroup Basic Basic Operations -** -** Tidy public interface -** -** Several functions return an integer document status: -** -**
    -** 0    -> SUCCESS
    -** >0   -> 1 == TIDY WARNING, 2 == TIDY ERROR
    -** <0   -> SEVERE ERROR
    -** 
    -** -The following is a short example program. - -
    -#include <tidy.h>
    -#include <buffio.h>
    -#include <stdio.h>
    -#include <errno.h>
    -
    -
    -int main(int argc, char **argv )
    -{
    -  const char* input = "<title>Foo</title><p>Foo!";
    -  TidyBuffer output = {0};
    -  TidyBuffer errbuf = {0};
    -  int rc = -1;
    -  Bool ok;
    -
    -  TidyDoc tdoc = tidyCreate();                     // Initialize "document"
    -  printf( "Tidying:\t\%s\\n", input );
    -
    -  ok = tidyOptSetBool( tdoc, TidyXhtmlOut, yes );  // Convert to XHTML
    -  if ( ok )
    -    rc = tidySetErrorBuffer( tdoc, &errbuf );      // Capture diagnostics
    -  if ( rc >= 0 )
    -    rc = tidyParseString( tdoc, input );           // Parse the input
    -  if ( rc >= 0 )
    -    rc = tidyCleanAndRepair( tdoc );               // Tidy it up!
    -  if ( rc >= 0 )
    -    rc = tidyRunDiagnostics( tdoc );               // Kvetch
    -  if ( rc > 1 )                                    // If error, force output.
    -    rc = ( tidyOptSetBool(tdoc, TidyForceOutput, yes) ? rc : -1 );
    -  if ( rc >= 0 )
    -    rc = tidySaveBuffer( tdoc, &output );          // Pretty Print
    -
    -  if ( rc >= 0 )
    -  {
    -    if ( rc > 0 )
    -      printf( "\\nDiagnostics:\\n\\n\%s", errbuf.bp );
    -    printf( "\\nAnd here is the result:\\n\\n\%s", output.bp );
    -  }
    -  else
    -    printf( "A severe error (\%d) occurred.\\n", rc );
    -
    -  tidyBufFree( &output );
    -  tidyBufFree( &errbuf );
    -  tidyRelease( tdoc );
    -  return rc;
    -}
    -
    -** @{ -*/ - -TIDY_EXPORT TidyDoc tidyCreate(); -TIDY_EXPORT void tidyRelease( TidyDoc tdoc ); - -/** Let application store a chunk of data w/ each Tidy instance. -** Useful for callbacks. -*/ -TIDY_EXPORT void tidySetAppData( TidyDoc tdoc, uint appData ); - -/** Get application data set previously */ -TIDY_EXPORT uint tidyGetAppData( TidyDoc tdoc ); - -/** Get release date (version) for current library */ -TIDY_EXPORT ctmbstr tidyReleaseDate(); - -/* Diagnostics and Repair -*/ - -/** Get status of current document. */ -TIDY_EXPORT int tidyStatus( TidyDoc tdoc ); - -/** Detected HTML version: 0, 2, 3 or 4 */ -TIDY_EXPORT int tidyDetectedHtmlVersion( TidyDoc tdoc ); - -/** Input is XHTML? */ -TIDY_EXPORT Bool tidyDetectedXhtml( TidyDoc tdoc ); - -/** Input is generic XML (not HTML or XHTML)? */ -TIDY_EXPORT Bool tidyDetectedGenericXml( TidyDoc tdoc ); - -/** Number of Tidy errors encountered. If > 0, output is suppressed -** unless TidyForceOutput is set. -*/ -TIDY_EXPORT uint tidyErrorCount( TidyDoc tdoc ); - -/** Number of Tidy warnings encountered. */ -TIDY_EXPORT uint tidyWarningCount( TidyDoc tdoc ); - -/** Number of Tidy accessibility warnings encountered. */ -TIDY_EXPORT uint tidyAccessWarningCount( TidyDoc tdoc ); - -/** Number of Tidy configuration errors encountered. */ -TIDY_EXPORT uint tidyConfigErrorCount( TidyDoc tdoc ); - -/* Get/Set configuration options -*/ -/** Load an ASCII Tidy configuration file */ -TIDY_EXPORT int tidyLoadConfig( TidyDoc tdoc, ctmbstr configFile ); - -/** Load a Tidy configuration file with the specified character encoding */ -TIDY_EXPORT int tidyLoadConfigEnc( TidyDoc tdoc, ctmbstr configFile, - ctmbstr charenc ); - -/** Set the input/output character encoding for parsing markup. -** Values include: ascii, latin1, raw, utf8, iso2022, mac, -** win1252, utf16le, utf16be, utf16, big5 and shiftjis. Case in-sensitive. -*/ -TIDY_EXPORT int tidySetCharEncoding( TidyDoc tdoc, ctmbstr encnam ); - -/** @} end Basic group */ - - -/** @defgroup Configuration Configuration Options -** -** Functions for getting and setting Tidy configuration options. -** @{ -*/ - -/** Applications using TidyLib may want to augment command-line and -** configuration file options. Setting this callback allows an application -** developer to examine command-line and configuration file options after -** TidyLib has examined them and failed to recognize them. -**/ - -typedef Bool (*TidyOptCallback)( ctmbstr option, ctmbstr value ); - -TIDY_EXPORT Bool tidySetOptionCallback( TidyDoc tdoc, TidyOptCallback pOptCallback ); - -/** Get option ID by name */ -TIDY_EXPORT TidyOptionId tidyOptGetIdForName( ctmbstr optnam ); - -/** Get iterator for list of option */ -/** -Example: -
    -TidyIterator itOpt = tidyGetOptionList( tdoc );
    -while ( itOpt )
    -{
    -  TidyOption opt = tidyGetNextOption( tdoc, &itOpt );
    -  .. get/set option values ..
    -}
    -
    -*/ - -TIDY_EXPORT TidyIterator tidyGetOptionList( TidyDoc tdoc ); -/** Get next Option */ -TIDY_EXPORT TidyOption tidyGetNextOption( TidyDoc tdoc, TidyIterator* pos ); - -/** Lookup option by ID */ -TIDY_EXPORT TidyOption tidyGetOption( TidyDoc tdoc, TidyOptionId optId ); -/** Lookup option by name */ -TIDY_EXPORT TidyOption tidyGetOptionByName( TidyDoc tdoc, ctmbstr optnam ); - -/** Get ID of given Option */ -TIDY_EXPORT TidyOptionId tidyOptGetId( TidyOption opt ); - -/** Get name of given Option */ -TIDY_EXPORT ctmbstr tidyOptGetName( TidyOption opt ); - -/** Get datatype of given Option */ -TIDY_EXPORT TidyOptionType tidyOptGetType( TidyOption opt ); - -/** Is Option read-only? */ -TIDY_EXPORT Bool tidyOptIsReadOnly( TidyOption opt ); - -/** Get category of given Option */ -TIDY_EXPORT TidyConfigCategory tidyOptGetCategory( TidyOption opt ); - -/** Get default value of given Option as a string */ -TIDY_EXPORT ctmbstr tidyOptGetDefault( TidyOption opt ); - -/** Get default value of given Option as an unsigned integer */ -TIDY_EXPORT uint tidyOptGetDefaultInt( TidyOption opt ); - -/** Get default value of given Option as a Boolean value */ -TIDY_EXPORT Bool tidyOptGetDefaultBool( TidyOption opt ); - -/** Iterate over Option "pick list" */ -TIDY_EXPORT TidyIterator tidyOptGetPickList( TidyOption opt ); -/** Get next string value of Option "pick list" */ -TIDY_EXPORT ctmbstr tidyOptGetNextPick( TidyOption opt, TidyIterator* pos ); - -/** Get current Option value as a string */ -TIDY_EXPORT ctmbstr tidyOptGetValue( TidyDoc tdoc, TidyOptionId optId ); -/** Set Option value as a string */ -TIDY_EXPORT Bool tidyOptSetValue( TidyDoc tdoc, TidyOptionId optId, ctmbstr val ); -/** Set named Option value as a string. Good if not sure of type. */ -TIDY_EXPORT Bool tidyOptParseValue( TidyDoc tdoc, ctmbstr optnam, ctmbstr val ); - -/** Get current Option value as an integer */ -TIDY_EXPORT uint tidyOptGetInt( TidyDoc tdoc, TidyOptionId optId ); -/** Set Option value as an integer */ -TIDY_EXPORT Bool tidyOptSetInt( TidyDoc tdoc, TidyOptionId optId, uint val ); - -/** Get current Option value as a Boolean flag */ -TIDY_EXPORT Bool tidyOptGetBool( TidyDoc tdoc, TidyOptionId optId ); -/** Set Option value as a Boolean flag */ -TIDY_EXPORT Bool tidyOptSetBool( TidyDoc tdoc, TidyOptionId optId, Bool val ); - -/** Reset option to default value by ID */ -TIDY_EXPORT Bool tidyOptResetToDefault( TidyDoc tdoc, TidyOptionId opt ); -/** Reset all options to their default values */ -TIDY_EXPORT Bool tidyOptResetAllToDefault( TidyDoc tdoc ); - -/** Take a snapshot of current config settings */ -TIDY_EXPORT Bool tidyOptSnapshot( TidyDoc tdoc ); -/** Reset config settings to snapshot (after document processing) */ -TIDY_EXPORT Bool tidyOptResetToSnapshot( TidyDoc tdoc ); - -/** Any settings different than default? */ -TIDY_EXPORT Bool tidyOptDiffThanDefault( TidyDoc tdoc ); -/** Any settings different than snapshot? */ -TIDY_EXPORT Bool tidyOptDiffThanSnapshot( TidyDoc tdoc ); - -/** Copy current configuration settings from one document to another */ -TIDY_EXPORT Bool tidyOptCopyConfig( TidyDoc tdocTo, TidyDoc tdocFrom ); - -/** Get character encoding name. Used with TidyCharEncoding, -** TidyOutCharEncoding, TidyInCharEncoding */ -TIDY_EXPORT ctmbstr tidyOptGetEncName( TidyDoc tdoc, TidyOptionId optId ); - -/** Get current pick list value for option by ID. Useful for enum types. */ -TIDY_EXPORT ctmbstr tidyOptGetCurrPick( TidyDoc tdoc, TidyOptionId optId); - -/** Iterate over user declared tags */ -TIDY_EXPORT TidyIterator tidyOptGetDeclTagList( TidyDoc tdoc ); -/** Get next declared tag of specified type: TidyInlineTags, TidyBlockTags, -** TidyEmptyTags, TidyPreTags */ -TIDY_EXPORT ctmbstr tidyOptGetNextDeclTag( TidyDoc tdoc, - TidyOptionId optId, - TidyIterator* iter ); -/** @} end Configuration group */ - -/** @defgroup IO I/O and Messages -** -** By default, Tidy will define, create and use -** instances of input and output handlers for -** standard C buffered I/O (i.e. FILE* stdin, -** FILE* stdout and FILE* stderr for content -** input, content output and diagnostic output, -** respectively. A FILE* cfgFile input handler -** will be used for config files. Command line -** options will just be set directly. -** -** @{ -*/ - -/***************** - Input Source -*****************/ -/** Input Callback: get next byte of input */ -typedef int (*TidyGetByteFunc)( uint sourceData ); - -/** Input Callback: unget a byte of input */ -typedef void (*TidyUngetByteFunc)( uint sourceData, byte bt ); - -/** Input Callback: is end of input? */ -typedef Bool (*TidyEOFFunc)( uint sourceData ); - -/** End of input "character" */ -#define EndOfStream (~0u) - -/** TidyInputSource - Delivers raw bytes of input -*/ -TIDY_STRUCT -typedef struct _TidyInputSource -{ - /* Instance data */ - uint sourceData; /**< Input context. Passed to callbacks */ - - /* Methods */ - TidyGetByteFunc getByte; /**< Pointer to "get byte" callback */ - TidyUngetByteFunc ungetByte; /**< Pointer to "unget" callback */ - TidyEOFFunc eof; /**< Pointer to "eof" callback */ -} TidyInputSource; - -/** Facilitates user defined source by providing -** an entry point to marshal pointers-to-functions. -** Needed by .NET and possibly other language bindings. -*/ -TIDY_EXPORT Bool tidyInitSource( TidyInputSource* source, - void* srcData, - TidyGetByteFunc gbFunc, - TidyUngetByteFunc ugbFunc, - TidyEOFFunc endFunc ); - -/** Helper: get next byte from input source */ -TIDY_EXPORT uint tidyGetByte( TidyInputSource* source ); - -/** Helper: unget byte back to input source */ -TIDY_EXPORT void tidyUngetByte( TidyInputSource* source, uint byteValue ); - -/** Helper: check if input source at end */ -TIDY_EXPORT Bool tidyIsEOF( TidyInputSource* source ); - - -/**************** - Output Sink -****************/ -/** Output callback: send a byte to output */ -typedef void (*TidyPutByteFunc)( uint sinkData, byte bt ); - - -/** TidyOutputSink - accepts raw bytes of output -*/ -TIDY_STRUCT -typedef struct _TidyOutputSink -{ - /* Instance data */ - uint sinkData; /**< Output context. Passed to callbacks */ - - /* Methods */ - TidyPutByteFunc putByte; /**< Pointer to "put byte" callback */ -} TidyOutputSink; - -/** Facilitates user defined sinks by providing -** an entry point to marshal pointers-to-functions. -** Needed by .NET and possibly other language bindings. -*/ -TIDY_EXPORT Bool tidyInitSink( TidyOutputSink* sink, - void* snkData, - TidyPutByteFunc pbFunc ); - -/** Helper: send a byte to output */ -TIDY_EXPORT void tidyPutByte( TidyOutputSink* sink, uint byteValue ); - - -/** Callback to filter messages by diagnostic level: -** info, warning, etc. Just set diagnostic output -** handler to redirect all diagnostics output. Return true -** to proceed with output, false to cancel. -*/ -typedef Bool (*TidyReportFilter)( TidyDoc tdoc, TidyReportLevel lvl, - uint line, uint col, ctmbstr mssg ); - -/** Give Tidy a filter callback to use */ -TIDY_EXPORT Bool tidySetReportFilter( TidyDoc tdoc, - TidyReportFilter filtCallback ); - -/** Set error sink to named file */ -TIDY_EXPORT FILE* tidySetErrorFile( TidyDoc tdoc, ctmbstr errfilnam ); -/** Set error sink to given buffer */ -TIDY_EXPORT int tidySetErrorBuffer( TidyDoc tdoc, TidyBuffer* errbuf ); -/** Set error sink to given generic sink */ -TIDY_EXPORT int tidySetErrorSink( TidyDoc tdoc, TidyOutputSink* sink ); - -/** @} end IO group */ - - -/** @defgroup Memory Memory Allocation -** -** By default, Tidy will use its own wrappers -** around standard C malloc/free calls. -** These wrappers will abort upon any failures. -** If any are set, all must be set. -** Pass NULL to clear previous setting. -** -** May be used to set environment-specific allocators -** such as used by web server plugins, etc. -** -** @{ -*/ - -/** Callback for "malloc" replacement */ -typedef void* (*TidyMalloc)( size_t len ); -/** Callback for "realloc" replacement */ -typedef void* (*TidyRealloc)( void* buf, size_t len ); -/** Callback for "free" replacement */ -typedef void (*TidyFree)( void* buf ); -/** Callback for "out of memory" panic state */ -typedef void (*TidyPanic)( ctmbstr mssg ); - -/** Give Tidy a malloc() replacement */ -TIDY_EXPORT Bool tidySetMallocCall( TidyMalloc fmalloc ); -/** Give Tidy a realloc() replacement */ -TIDY_EXPORT Bool tidySetReallocCall( TidyRealloc frealloc ); -/** Give Tidy a free() replacement */ -TIDY_EXPORT Bool tidySetFreeCall( TidyFree ffree ); -/** Give Tidy an "out of memory" handler */ -TIDY_EXPORT Bool tidySetPanicCall( TidyPanic fpanic ); - -/** @} end Memory group */ - -/* TODO: Catalog all messages for easy translation -TIDY_EXPORT ctmbstr tidyLookupMessage( int errorNo ); -*/ - - - -/** @defgroup Parse Document Parse -** -** Parse markup from a given input source. String and filename -** functions added for convenience. HTML/XHTML version determined -** from input. -** @{ -*/ - -/** Parse markup in named file */ -TIDY_EXPORT int tidyParseFile( TidyDoc tdoc, ctmbstr filename ); - -/** Parse markup from the standard input */ -TIDY_EXPORT int tidyParseStdin( TidyDoc tdoc ); - -/** Parse markup in given string */ -TIDY_EXPORT int tidyParseString( TidyDoc tdoc, ctmbstr content ); - -/** Parse markup in given buffer */ -TIDY_EXPORT int tidyParseBuffer( TidyDoc tdoc, TidyBuffer* buf ); - -/** Parse markup in given generic input source */ -TIDY_EXPORT int tidyParseSource( TidyDoc tdoc, TidyInputSource* source); - -/** @} End Parse group */ - - -/** @defgroup Clean Diagnostics and Repair -** -** @{ -*/ -/** Execute configured cleanup and repair operations on parsed markup */ -TIDY_EXPORT int tidyCleanAndRepair( TidyDoc tdoc ); - -/** Run configured diagnostics on parsed and repaired markup. -** Must call tidyCleanAndRepair() first. -*/ -TIDY_EXPORT int tidyRunDiagnostics( TidyDoc tdoc ); - -/** @} end Clean group */ - - -/** @defgroup Save Document Save Functions -** -** Save currently parsed document to the given output sink. File name -** and string/buffer functions provided for convenience. -** @{ -*/ - -/** Save to named file */ -TIDY_EXPORT int tidySaveFile( TidyDoc tdoc, ctmbstr filename ); - -/** Save to standard output (FILE*) */ -TIDY_EXPORT int tidySaveStdout( TidyDoc tdoc ); - -/** Save to given TidyBuffer object */ -TIDY_EXPORT int tidySaveBuffer( TidyDoc tdoc, TidyBuffer* buf ); - -/** Save document to application buffer. If buffer is not big enough, -** ENOMEM will be returned and the necessary buffer size will be placed -** in *buflen. -*/ -TIDY_EXPORT int tidySaveString( TidyDoc tdoc, - tmbstr buffer, uint* buflen ); - -/** Save to given generic output sink */ -TIDY_EXPORT int tidySaveSink( TidyDoc tdoc, TidyOutputSink* sink ); - -/** @} end Save group */ - - -/** @addtogroup Basic -** @{ -*/ -/** Save current settings to named file. - Only non-default values are written. */ -TIDY_EXPORT int tidyOptSaveFile( TidyDoc tdoc, ctmbstr cfgfil ); - -/** Save current settings to given output sink. - Only non-default values are written. */ -TIDY_EXPORT int tidyOptSaveSink( TidyDoc tdoc, TidyOutputSink* sink ); - - -/* Error reporting functions -*/ - -/** Write more complete information about errors to current error sink. */ -TIDY_EXPORT void tidyErrorSummary( TidyDoc tdoc ); - -/** Write more general information about markup to current error sink. */ -TIDY_EXPORT void tidyGeneralInfo( TidyDoc tdoc ); - -/** @} end Basic group (again) */ - - -/** @defgroup Tree Document Tree -** -** A parsed and, optionally, repaired document is -** represented by Tidy as a Tree, much like a W3C DOM. -** This tree may be traversed using these functions. -** The following snippet gives a basic idea how these -** functions can be used. -** -
    -void dumpNode( TidyNode tnod, int indent )
    -{
    -  TidyNode child;
    -
    -  for ( child = tidyGetChild(tnod); child; child = tidyGetNext(child) )
    -  {
    -    ctmbstr name = tidyNodeGetName( child );
    -    if ( !name )
    -    {
    -      switch ( tidyNodeGetType(child) )
    -      {
    -      case TidyNode_Root:       name = "Root";                    break;
    -      case TidyNode_DocType:    name = "DOCTYPE";                 break;
    -      case TidyNode_Comment:    name = "Comment";                 break;
    -      case TidyNode_ProcIns:    name = "Processing Instruction";  break;
    -      case TidyNode_Text:       name = "Text";                    break;
    -      case TidyNode_CDATA:      name = "CDATA";                   break;
    -      case TidyNode_Section:    name = "XML Section";             break;
    -      case TidyNode_Asp:        name = "ASP";                     break;
    -      case TidyNode_Jste:       name = "JSTE";                    break;
    -      case TidyNode_Php:        name = "PHP";                     break;
    -      case TidyNode_XmlDecl:    name = "XML Declaration";         break;
    -
    -      case TidyNode_Start:
    -      case TidyNode_End:
    -      case TidyNode_StartEnd:
    -      default:
    -        assert( name != NULL ); // Shouldn't get here
    -        break;
    -      }
    -    }
    -    assert( name != NULL );
    -    printf( "\%*.*sNode: \%s\\n", indent, indent, tidy );
    -    dumpNode( child, indent + 4 );
    -  }
    -}
    -
    -void dumpDoc( TidyDoc tdoc )
    -{
    -  dumpNode( tidyGetRoot(tdoc), 0 );
    -}
    -
    -void dumpBody( TidyDoc tdoc )
    -{
    -  dumpNode( tidyGetBody(tdoc), 0 );
    -}
    -
    - -@{ - -*/ - -TIDY_EXPORT TidyNode tidyGetRoot( TidyDoc tdoc ); -TIDY_EXPORT TidyNode tidyGetHtml( TidyDoc tdoc ); -TIDY_EXPORT TidyNode tidyGetHead( TidyDoc tdoc ); -TIDY_EXPORT TidyNode tidyGetBody( TidyDoc tdoc ); - -/* parent / child */ -TIDY_EXPORT TidyNode tidyGetParent( TidyNode tnod ); -TIDY_EXPORT TidyNode tidyGetChild( TidyNode tnod ); - -/* siblings */ -TIDY_EXPORT TidyNode tidyGetNext( TidyNode tnod ); -TIDY_EXPORT TidyNode tidyGetPrev( TidyNode tnod ); - -/* Null for non-element nodes and all pure HTML -TIDY_EXPORT ctmbstr tidyNodeNsLocal( TidyNode tnod ); -TIDY_EXPORT ctmbstr tidyNodeNsPrefix( TidyNode tnod ); -TIDY_EXPORT ctmbstr tidyNodeNsUri( TidyNode tnod ); -*/ - -/* Iterate over attribute values */ -TIDY_EXPORT TidyAttr tidyAttrFirst( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrNext( TidyAttr tattr ); - -TIDY_EXPORT ctmbstr tidyAttrName( TidyAttr tattr ); -TIDY_EXPORT ctmbstr tidyAttrValue( TidyAttr tattr ); - -/* Null for pure HTML -TIDY_EXPORT ctmbstr tidyAttrNsLocal( TidyAttr tattr ); -TIDY_EXPORT ctmbstr tidyAttrNsPrefix( TidyAttr tattr ); -TIDY_EXPORT ctmbstr tidyAttrNsUri( TidyAttr tattr ); -*/ - -/** @} end Tree group */ - - -/** @defgroup NodeAsk Node Interrogation -** -** Get information about any givent node. -** @{ -*/ - -/* Node info */ -TIDY_EXPORT TidyNodeType tidyNodeGetType( TidyNode tnod ); -TIDY_EXPORT ctmbstr tidyNodeGetName( TidyNode tnod ); - -TIDY_EXPORT Bool tidyNodeIsText( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsProp( TidyDoc tdoc, TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsHeader( TidyNode tnod ); /* h1, h2, ... */ - -TIDY_EXPORT Bool tidyNodeHasText( TidyDoc tdoc, TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeGetText( TidyDoc tdoc, TidyNode tnod, TidyBuffer* buf ); - -TIDY_EXPORT TidyTagId tidyNodeGetId( TidyNode tnod ); - -TIDY_EXPORT Bool tidyNodeIsHTML( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsHEAD( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsTITLE( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsBASE( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsMETA( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsBODY( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsFRAMESET( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsFRAME( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsIFRAME( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsNOFRAMES( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsHR( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsH1( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsH2( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsPRE( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsLISTING( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsP( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsUL( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsOL( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsDL( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsDIR( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsLI( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsDT( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsDD( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsTABLE( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsCAPTION( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsTD( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsTH( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsTR( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsCOL( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsCOLGROUP( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsBR( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsA( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsLINK( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsB( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsI( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsSTRONG( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsEM( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsBIG( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsSMALL( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsPARAM( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsOPTION( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsOPTGROUP( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsIMG( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsMAP( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsAREA( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsNOBR( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsWBR( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsFONT( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsLAYER( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsSPACER( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsCENTER( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsSTYLE( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsSCRIPT( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsNOSCRIPT( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsFORM( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsTEXTAREA( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsBLOCKQUOTE( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsAPPLET( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsOBJECT( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsDIV( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsSPAN( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsINPUT( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsQ( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsLABEL( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsH3( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsH4( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsH5( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsH6( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsADDRESS( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsXMP( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsSELECT( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsBLINK( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsMARQUEE( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsEMBED( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsBASEFONT( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsISINDEX( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsS( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsSTRIKE( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsU( TidyNode tnod ); -TIDY_EXPORT Bool tidyNodeIsMENU( TidyNode tnod ); - -/** @} End NodeAsk group */ - - -/** @defgroup Attribute Attribute Interrogation -** -** Get information about any given attribute. -** @{ -*/ - -TIDY_EXPORT TidyAttrId tidyAttrGetId( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsEvent( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsProp( TidyAttr tattr ); - -TIDY_EXPORT Bool tidyAttrIsHREF( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsSRC( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsID( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsNAME( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsSUMMARY( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsALT( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsLONGDESC( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsUSEMAP( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsISMAP( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsLANGUAGE( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsTYPE( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsVALUE( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsCONTENT( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsTITLE( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsXMLNS( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsDATAFLD( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsWIDTH( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsHEIGHT( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsFOR( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsSELECTED( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsCHECKED( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsLANG( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsTARGET( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsHTTP_EQUIV( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsREL( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsOnMOUSEMOVE( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsOnMOUSEDOWN( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsOnMOUSEUP( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsOnCLICK( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsOnMOUSEOVER( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsOnMOUSEOUT( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsOnKEYDOWN( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsOnKEYUP( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsOnKEYPRESS( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsOnFOCUS( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsOnBLUR( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsBGCOLOR( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsLINK( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsALINK( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsVLINK( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsTEXT( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsSTYLE( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsABBR( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsCOLSPAN( TidyAttr tattr ); -TIDY_EXPORT Bool tidyAttrIsROWSPAN( TidyAttr tattr ); - -/** @} end AttrAsk group */ - - -/** @defgroup AttrGet Attribute Retrieval -** -** Lookup an attribute from a given node -** @{ -*/ - - -TIDY_EXPORT TidyAttr tidyAttrGetHREF( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetSRC( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetID( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetNAME( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetSUMMARY( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetALT( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetLONGDESC( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetUSEMAP( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetISMAP( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetLANGUAGE( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetTYPE( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetVALUE( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetCONTENT( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetTITLE( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetXMLNS( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetDATAFLD( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetWIDTH( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetHEIGHT( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetFOR( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetSELECTED( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetCHECKED( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetLANG( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetTARGET( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetHTTP_EQUIV( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetREL( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetOnMOUSEMOVE( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetOnMOUSEDOWN( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetOnMOUSEUP( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetOnCLICK( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetOnMOUSEOVER( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetOnMOUSEOUT( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetOnKEYDOWN( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetOnKEYUP( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetOnKEYPRESS( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetOnFOCUS( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetOnBLUR( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetBGCOLOR( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetLINK( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetALINK( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetVLINK( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetTEXT( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetSTYLE( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetABBR( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetCOLSPAN( TidyNode tnod ); -TIDY_EXPORT TidyAttr tidyAttrGetROWSPAN( TidyNode tnod ); - - -/** @} end AttrGet group */ - -#ifdef __cplusplus -} /* extern "C" */ -#endif -#endif /* __TIDY_H__ */ diff --git a/tidylib-src/src/alloc.c b/tidylib-src/src/alloc.c deleted file mode 100644 index ce7adbb9..00000000 --- a/tidylib-src/src/alloc.c +++ /dev/null @@ -1,89 +0,0 @@ -/* alloc.c -- Default memory allocation routines. - - (c) 1998-2002 (W3C) MIT, INRIA, Keio University - See tidy.h for the copyright notice. - - CVS Info : - - $Author: creitzel $ - $Date: 2003/02/16 19:33:09 $ - $Revision: 1.2 $ - -*/ - -#include "tidy.h" - -static TidyMalloc g_malloc = null; -static TidyRealloc g_realloc = null; -static TidyFree g_free = null; -static TidyPanic g_panic = null; - -Bool tidySetMallocCall( TidyMalloc fmalloc ) -{ - g_malloc = fmalloc; - return yes; -} -Bool tidySetReallocCall( TidyRealloc frealloc ) -{ - g_realloc = frealloc; - return yes; -} -Bool tidySetFreeCall( TidyFree ffree ) -{ - g_free = ffree; - return yes; -} -Bool tidySetPanicCall( TidyPanic fpanic ) -{ - g_panic = fpanic; - return yes; -} - -void FatalError( ctmbstr msg ) -{ - if ( g_panic ) - g_panic( msg ); - else - { - /* 2 signifies a serious error */ - fprintf( stderr, "Fatal error: %s\n", msg ); - exit(2); - } -} - -void* MemAlloc( size_t size ) -{ - void *p = ( g_malloc ? g_malloc(size) : malloc(size) ); - if ( !p ) - FatalError("Out of memory!"); - return p; -} - -void* MemRealloc( void* mem, size_t newsize ) -{ - void *p; - if (mem == (void *)null) - return MemAlloc(newsize); - - p = ( g_realloc ? g_realloc(mem, newsize) : realloc(mem, newsize) ); - if (!p) - FatalError("Out of memory!"); - return p; -} - -void MemFree( void* mem ) -{ - if ( mem ) - { - if ( g_free ) - g_free( mem ); - else - free( mem ); - } -} - -void ClearMemory( void *mem, size_t size ) -{ - memset(mem, 0, size); -} - diff --git a/tidylib-src/src/attrs.c b/tidylib-src/src/attrs.c deleted file mode 100644 index a6ab4f3e..00000000 --- a/tidylib-src/src/attrs.c +++ /dev/null @@ -1,1513 +0,0 @@ -/* attrs.c -- recognize HTML attributes - - (c) 1998-2002 (W3C) MIT, INRIA, Keio University - See tidy.h for the copyright notice. - - CVS Info : - - $Author: creitzel $ - $Date: 2003/02/16 19:33:10 $ - $Revision: 1.54 $ - -*/ - -#include "tidy-int.h" -#include "attrs.h" -#include "message.h" -#include "tmbstr.h" - -#define TEXT null -#define CHARSET null -#define TYPE null -#define CHARACTER null -#define URLS null -#define URL CheckUrl -#define SCRIPT CheckScript -#define ALIGN CheckAlign -#define VALIGN CheckValign -#define COLOR CheckColor -#define CLEAR CheckClear -#define BORDER CheckBool /* kludge */ -#define LANG CheckLang -#define BOOL CheckBool -#define COLS null -#define NUMBER CheckNumber -#define LENGTH CheckLength -#define COORDS null -#define DATE null -#define TEXTDIR CheckTextDir -#define IDREFS null -#define IDREF null -#define IDDEF CheckId -#define NAME CheckName -#define TFRAME null -#define FBORDER null -#define MEDIA null -#define FSUBMIT CheckFsubmit -#define LINKTYPES null -#define TRULES null -#define SCOPE CheckScope -#define SHAPE CheckShape -#define SCROLL CheckScroll -#define TARGET CheckTarget -#define VTYPE CheckVType - -/* -*/ - -static const Attribute attribute_defs [] = -{ - {TidyAttr_UNKNOWN, "unknown!", VERS_PROPRIETARY, null}, - {TidyAttr_ABBR, "abbr", VERS_HTML40, TEXT}, - {TidyAttr_ACCEPT, "accept", VERS_ALL, TYPE}, - {TidyAttr_ACCEPT_CHARSET, "accept-charset", VERS_HTML40, CHARSET}, - {TidyAttr_ACCESSKEY, "accesskey", VERS_HTML40, CHARACTER}, - {TidyAttr_ACTION, "action", VERS_ALL, URL}, - {TidyAttr_ADD_DATE, "add_date", VERS_NETSCAPE, TEXT}, /* A */ - {TidyAttr_ALIGN, "align", VERS_ALL, ALIGN}, /* varies by element */ - {TidyAttr_ALINK, "alink", VERS_LOOSE, COLOR}, - {TidyAttr_ALT, "alt", VERS_ALL, TEXT, yes }, /* nowrap */ - {TidyAttr_ARCHIVE, "archive", VERS_HTML40, URLS}, /* space or comma separated list */ - {TidyAttr_AXIS, "axis", VERS_HTML40, TEXT}, - {TidyAttr_BACKGROUND, "background", VERS_LOOSE, URL}, - {TidyAttr_BGCOLOR, "bgcolor", VERS_LOOSE, COLOR}, - {TidyAttr_BGPROPERTIES, "bgproperties", VERS_PROPRIETARY, TEXT}, /* BODY "fixed" fixes background */ - {TidyAttr_BORDER, "border", VERS_ALL, BORDER}, /* like LENGTH + "border" */ - {TidyAttr_BORDERCOLOR, "bordercolor", VERS_MICROSOFT, COLOR}, /* used on TABLE */ - {TidyAttr_BOTTOMMARGIN, "bottommargin",VERS_MICROSOFT, NUMBER}, /* used on BODY */ - {TidyAttr_CELLPADDING, "cellpadding", VERS_FROM32, LENGTH}, /* % or pixel values */ - {TidyAttr_CELLSPACING, "cellspacing", VERS_FROM32, LENGTH}, - {TidyAttr_CHAR, "char", VERS_HTML40, CHARACTER}, - {TidyAttr_CHAROFF, "charoff", VERS_HTML40, LENGTH}, - {TidyAttr_CHARSET, "charset", VERS_HTML40, CHARSET}, - {TidyAttr_CHECKED, "checked", VERS_ALL, BOOL}, /* i.e. "checked" or absent */ - {TidyAttr_CITE, "cite", VERS_HTML40, URL}, - {TidyAttr_CLASS, "class", VERS_HTML40, TEXT}, - {TidyAttr_CLASSID, "classid", VERS_HTML40, URL}, - {TidyAttr_CLEAR, "clear", VERS_LOOSE, CLEAR}, /* BR: left, right, all */ - {TidyAttr_CODE, "code", VERS_LOOSE, TEXT}, /* APPLET */ - {TidyAttr_CODEBASE, "codebase", VERS_HTML40, URL}, /* OBJECT */ - {TidyAttr_CODETYPE, "codetype", VERS_HTML40, TYPE}, /* OBJECT */ - {TidyAttr_COLOR, "color", VERS_LOOSE, COLOR}, /* BASEFONT, FONT */ - {TidyAttr_COLS, "cols", VERS_IFRAME, COLS}, /* TABLE & FRAMESET */ - {TidyAttr_COLSPAN, "colspan", VERS_FROM32, NUMBER}, - {TidyAttr_COMPACT, "compact", VERS_ALL, BOOL}, /* lists */ - {TidyAttr_CONTENT, "content", VERS_ALL, TEXT, yes},/* META, nowrap */ - {TidyAttr_COORDS, "coords", VERS_FROM32, COORDS}, /* AREA, A */ - {TidyAttr_DATA, "data", VERS_HTML40, URL}, /* OBJECT */ - {TidyAttr_DATAFLD, "datafld", VERS_MICROSOFT, TEXT}, /* used on DIV, IMG */ - {TidyAttr_DATAFORMATAS, "dataformatas", VERS_MICROSOFT,TEXT}, /* used on DIV, IMG */ - {TidyAttr_DATAPAGESIZE, "datapagesize", VERS_MICROSOFT,NUMBER}, /* used on DIV, IMG */ - {TidyAttr_DATASRC, "datasrc", VERS_MICROSOFT, URL}, /* used on TABLE */ - {TidyAttr_DATETIME, "datetime", VERS_HTML40, DATE}, /* INS, DEL */ - {TidyAttr_DECLARE, "declare", VERS_HTML40, BOOL}, /* OBJECT */ - {TidyAttr_DEFER, "defer", VERS_HTML40, BOOL}, /* SCRIPT */ - {TidyAttr_DIR, "dir", VERS_HTML40, TEXTDIR}, /* ltr or rtl */ - {TidyAttr_DISABLED, "disabled", VERS_HTML40, BOOL}, /* form fields */ - {TidyAttr_ENCODING, "encoding", VERS_XML, TEXT}, /* */ - {TidyAttr_ENCTYPE, "enctype", VERS_ALL, TYPE}, /* FORM */ - {TidyAttr_FACE, "face", VERS_LOOSE, TEXT}, /* BASEFONT, FONT */ - {TidyAttr_FOR, "for", VERS_HTML40, IDREF}, /* LABEL */ - {TidyAttr_FRAME, "frame", VERS_HTML40, TFRAME}, /* TABLE */ - {TidyAttr_FRAMEBORDER, "frameborder", VERS_FRAMESET, FBORDER}, /* 0 or 1 */ - {TidyAttr_FRAMESPACING, "framespacing", VERS_PROPRIETARY, NUMBER},/* pixel value */ - {TidyAttr_GRIDX, "gridx", VERS_PROPRIETARY, NUMBER}, /* TABLE Adobe golive*/ - {TidyAttr_GRIDY, "gridy", VERS_PROPRIETARY, NUMBER}, /* TABLE Adobe golive */ - {TidyAttr_HEADERS, "headers", VERS_HTML40, IDREFS}, /* table cells */ - {TidyAttr_HEIGHT, "height", VERS_ALL, LENGTH}, /* pixels only for TH/TD */ - {TidyAttr_HREF, "href", VERS_ALL, URL}, /* A, AREA, LINK and BASE */ - {TidyAttr_HREFLANG, "hreflang", VERS_HTML40, LANG}, /* A, LINK */ - {TidyAttr_HSPACE, "hspace", VERS_ALL, NUMBER}, /* APPLET, IMG, OBJECT */ - {TidyAttr_HTTP_EQUIV, "http-equiv", VERS_ALL, TEXT}, /* META */ - {TidyAttr_ID, "id", VERS_HTML40, IDDEF}, - {TidyAttr_ISMAP, "ismap", VERS_ALL, BOOL}, /* IMG */ - {TidyAttr_LABEL, "label", VERS_HTML40, TEXT}, /* OPT, OPTGROUP */ - {TidyAttr_LANG, "lang", VERS_HTML40, LANG}, - {TidyAttr_LANGUAGE, "language", VERS_LOOSE, TEXT}, /* SCRIPT */ - {TidyAttr_LAST_MODIFIED, "last_modified", VERS_NETSCAPE, TEXT}, /* A */ - {TidyAttr_LAST_VISIT, "last_visit", VERS_NETSCAPE, TEXT}, /* A */ - {TidyAttr_LEFTMARGIN, "leftmargin", VERS_MICROSOFT, NUMBER}, /* used on BODY */ - {TidyAttr_LINK, "link", VERS_LOOSE, COLOR}, /* BODY */ - {TidyAttr_LONGDESC, "longdesc", VERS_HTML40, URL}, /* IMG */ - {TidyAttr_LOWSRC, "lowsrc", VERS_PROPRIETARY, URL}, /* IMG */ - {TidyAttr_MARGINHEIGHT, "marginheight", VERS_IFRAME, NUMBER}, /* FRAME, IFRAME, BODY */ - {TidyAttr_MARGINWIDTH, "marginwidth", VERS_IFRAME, NUMBER}, /* ditto */ - {TidyAttr_MAXLENGTH, "maxlength", VERS_ALL, NUMBER}, /* INPUT */ - {TidyAttr_MEDIA, "media", VERS_HTML40, MEDIA}, /* STYLE, LINK */ - {TidyAttr_METHOD, "method", VERS_ALL, FSUBMIT}, /* FORM: get or post */ - {TidyAttr_MULTIPLE, "multiple", VERS_ALL, BOOL}, /* SELECT */ - {TidyAttr_NAME, "name", VERS_ALL, NAME}, - {TidyAttr_NOHREF, "nohref", VERS_FROM32, BOOL}, /* AREA */ - {TidyAttr_NORESIZE, "noresize", VERS_FRAMESET, BOOL}, /* FRAME */ - {TidyAttr_NOSHADE, "noshade", VERS_LOOSE, BOOL}, /* HR */ - {TidyAttr_NOWRAP, "nowrap", VERS_LOOSE, BOOL}, /* table cells */ - {TidyAttr_OBJECT, "object", VERS_HTML40_LOOSE, TEXT}, /* APPLET */ - {TidyAttr_OnAFTERUPDATE, "onafterupdate", VERS_MICROSOFT, SCRIPT},/* form fields */ - {TidyAttr_OnBEFOREUNLOAD, "onbeforeunload", VERS_MICROSOFT, SCRIPT},/* form fields */ - {TidyAttr_OnBEFOREUPDATE, "onbeforeupdate", VERS_MICROSOFT, SCRIPT},/* form fields */ - {TidyAttr_OnBLUR, "onblur", VERS_EVENTS, SCRIPT}, /* event */ - {TidyAttr_OnCHANGE, "onchange", VERS_EVENTS, SCRIPT}, /* event */ - {TidyAttr_OnCLICK, "onclick", VERS_EVENTS, SCRIPT}, /* event */ - {TidyAttr_OnDATAAVAILABLE, "ondataavailable", VERS_MICROSOFT, SCRIPT}, /* object, applet */ - {TidyAttr_OnDATASETCHANGED, "ondatasetchanged", VERS_MICROSOFT, SCRIPT}, /* object, applet */ - {TidyAttr_OnDATASETCOMPLETE, "ondatasetcomplete", VERS_MICROSOFT, SCRIPT},/* object, applet */ - {TidyAttr_OnDBLCLICK, "ondblclick", VERS_EVENTS, SCRIPT}, /* event */ - {TidyAttr_OnERRORUPDATE, "onerrorupdate", VERS_MICROSOFT, SCRIPT}, /* form fields */ - {TidyAttr_OnFOCUS, "onfocus", VERS_EVENTS, SCRIPT}, /* event */ - {TidyAttr_OnKEYDOWN,"onkeydown", VERS_EVENTS, SCRIPT}, /* event */ - {TidyAttr_OnKEYPRESS, "onkeypress", VERS_EVENTS, SCRIPT}, /* event */ - {TidyAttr_OnKEYUP, "onkeyup", VERS_EVENTS, SCRIPT}, /* event */ - {TidyAttr_OnLOAD, "onload", VERS_EVENTS, SCRIPT}, /* event */ - {TidyAttr_OnMOUSEDOWN, "onmousedown", VERS_EVENTS, SCRIPT}, /* event */ - {TidyAttr_OnMOUSEMOVE, "onmousemove", VERS_EVENTS, SCRIPT}, /* event */ - {TidyAttr_OnMOUSEOUT, "onmouseout", VERS_EVENTS, SCRIPT}, /* event */ - {TidyAttr_OnMOUSEOVER, "onmouseover", VERS_EVENTS, SCRIPT}, /* event */ - {TidyAttr_OnMOUSEUP, "onmouseup", VERS_EVENTS, SCRIPT}, /* event */ - {TidyAttr_OnRESET, "onreset", VERS_EVENTS, SCRIPT}, /* event */ - {TidyAttr_OnROWENTER, "onrowenter", VERS_MICROSOFT, SCRIPT}, /* form fields */ - {TidyAttr_OnROWEXIT, "onrowexit", VERS_MICROSOFT, SCRIPT}, /* form fields */ - {TidyAttr_OnSELECT, "onselect", VERS_EVENTS, SCRIPT}, /* event */ - {TidyAttr_OnSUBMIT, "onsubmit", VERS_EVENTS, SCRIPT}, /* event */ - {TidyAttr_OnUNLOAD, "onunload", VERS_EVENTS, SCRIPT}, /* event */ - {TidyAttr_PROFILE, "profile", VERS_HTML40, URL}, /* HEAD */ - {TidyAttr_PROMPT, "prompt", VERS_LOOSE, TEXT}, /* ISINDEX */ - {TidyAttr_RBSPAN, "rbspan", VERS_XHTML11, NUMBER}, /* ruby markup */ - {TidyAttr_READONLY, "readonly", VERS_HTML40, BOOL}, /* form fields */ - {TidyAttr_REL, "rel", VERS_ALL, LINKTYPES},/* A, LINK */ - {TidyAttr_REV, "rev", VERS_ALL, LINKTYPES},/* A, LINK */ - {TidyAttr_RIGHTMARGIN, "rightmargin", VERS_MICROSOFT, NUMBER}, /* used on BODY */ - {TidyAttr_ROWS, "rows", VERS_ALL, NUMBER}, /* TEXTAREA */ - {TidyAttr_ROWSPAN, "rowspan", VERS_ALL, NUMBER}, /* table cells */ - {TidyAttr_RULES, "rules", VERS_HTML40, TRULES}, /* TABLE */ - {TidyAttr_SCHEME, "scheme", VERS_HTML40, TEXT}, /* META */ - {TidyAttr_SCOPE, "scope", VERS_HTML40, SCOPE}, /* table cells */ - {TidyAttr_SCROLLING, "scrolling", VERS_IFRAME, SCROLL}, /* yes, no or auto */ - {TidyAttr_SELECTED, "selected", VERS_ALL, BOOL}, /* OPTION */ - {TidyAttr_SHAPE, "shape", VERS_FROM32, SHAPE}, /* AREA, A */ - {TidyAttr_SHOWGRID, "showgrid", VERS_PROPRIETARY, BOOL}, /* TABLE Adobe golive */ - {TidyAttr_SHOWGRIDX,"showgridx", VERS_PROPRIETARY, BOOL}, /* TABLE Adobe golive*/ - {TidyAttr_SHOWGRIDY,"showgridy", VERS_PROPRIETARY, BOOL}, /* TABLE Adobe golive*/ - {TidyAttr_SIZE, "size", VERS_LOOSE, NUMBER}, /* HR, FONT, BASEFONT, SELECT */ - {TidyAttr_SPAN, "span", VERS_HTML40, NUMBER}, /* COL, COLGROUP */ - {TidyAttr_SRC, "src", VERS_ALL, URL}, /* IMG, FRAME, IFRAME */ - {TidyAttr_STANDBY, "standby", VERS_HTML40, TEXT}, /* OBJECT */ - {TidyAttr_START, "start", VERS_ALL, NUMBER}, /* OL */ - {TidyAttr_STYLE, "style", VERS_HTML40, TEXT}, - {TidyAttr_SUMMARY, "summary", VERS_HTML40, TEXT}, /* TABLE */ - {TidyAttr_TABINDEX, "tabindex", VERS_HTML40, NUMBER}, /* fields, OBJECT and A */ - {TidyAttr_TARGET, "target", VERS_HTML40, TARGET}, /* names a frame/window */ - {TidyAttr_TEXT, "text", VERS_LOOSE, COLOR}, /* BODY */ - {TidyAttr_TITLE, "title", VERS_HTML40, TEXT}, /* text tool tip */ - {TidyAttr_TOPMARGIN,"topmargin", VERS_MICROSOFT, NUMBER}, /* used on BODY */ - {TidyAttr_TYPE, "type", VERS_FROM32, TYPE}, /* also used by SPACER */ - {TidyAttr_USEMAP, "usemap", VERS_ALL, BOOL}, /* things with images */ - {TidyAttr_VALIGN, "valign", VERS_FROM32, VALIGN}, - {TidyAttr_VALUE, "value", VERS_ALL, TEXT, yes},/* nowrap, OPTION, PARAM */ - {TidyAttr_VALUETYPE,"valuetype", VERS_HTML40, VTYPE}, /* PARAM: data, ref, object */ - {TidyAttr_VERSION, "version", VERS_ALL|VERS_XML, TEXT}, /* HTML */ - {TidyAttr_VLINK, "vlink", VERS_LOOSE, COLOR}, /* BODY */ - {TidyAttr_VSPACE, "vspace", VERS_LOOSE, NUMBER}, /* IMG, OBJECT, APPLET */ - {TidyAttr_WIDTH, "width", VERS_ALL, LENGTH}, /* pixels only for TD/TH */ - {TidyAttr_WRAP, "wrap", VERS_NETSCAPE, TEXT}, /* textarea */ - {TidyAttr_XML_LANG, "xml:lang", VERS_XML, TEXT}, /* XML language */ - {TidyAttr_XML_SPACE,"xml:space", VERS_XML, TEXT}, /* XML language */ - {TidyAttr_XMLNS, "xmlns", VERS_ALL, TEXT}, /* name space */ - - /* this must be the final entry */ - {N_TIDY_ATTRIBS, null} -}; - -/* used by CheckColor() */ -struct _colors -{ - ctmbstr name; - ctmbstr hex; -}; - -static const struct _colors colors[] = -{ - {"black", "#000000"}, - {"green", "#008000"}, - {"silver", "#C0C0C0"}, - {"lime", "#00FF00"}, - {"gray", "#808080"}, - {"olive", "#808000"}, - {"white", "#FFFFFF"}, - {"yellow", "#FFFF00"}, - {"maroon", "#800000"}, - {"navy", "#000080"}, - {"red", "#FF0000"}, - {"blue", "#0000FF"}, - {"purple", "#800080"}, - {"teal", "#008080"}, - {"fuchsia", "#FF00FF"}, - {"aqua", "#00FFFF"}, - {null, null} -}; - -static const struct _colors fancy_colors[] = -{ - { "darkgreen", "#006400" }, - { "antiquewhite", "#FAEBD7" }, - { "aqua", "#00FFFF" }, - { "aquamarine", "#7FFFD4" }, - { "azure", "#F0FFFF" }, - { "beige", "#F5F5DC" }, - { "bisque", "#FFE4C4" }, - { "black", "#000000" }, - { "blanchedalmond", "#FFEBCD" }, - { "blue", "#0000FF" }, - { "blueviolet", "#8A2BE2" }, - { "brown", "#A52A2A" }, - { "burlywood", "#DEB887" }, - { "cadetblue", "#5F9EA0" }, - { "chartreuse", "#7FFF00" }, - { "chocolate", "#D2691E" }, - { "coral", "#FF7F50" }, - { "cornflowerblue", "#6495ED" }, - { "cornsilk", "#FFF8DC" }, - { "crimson", "#DC143C" }, - { "cyan", "#00FFFF" }, - { "darkblue", "#00008B" }, - { "darkcyan", "#008B8B" }, - { "darkgoldenrod", "#B8860B" }, - { "darkgray", "#A9A9A9" }, - { "darkgreen", "#006400" }, - { "darkkhaki", "#BDB76B" }, - { "darkmagenta", "#8B008B" }, - { "darkolivegreen", "#556B2F" }, - { "darkorange", "#FF8C00" }, - { "darkorchid", "#9932CC" }, - { "darkred", "#8B0000" }, - { "darksalmon", "#E9967A" }, - { "darkseagreen", "#8FBC8F" }, - { "darkslateblue", "#483D8B" }, - { "darkslategray", "#2F4F4F" }, - { "darkturquoise", "#00CED1" }, - { "darkviolet", "#9400D3" }, - { "deeppink", "#FF1493" }, - { "deepskyblue", "#00BFFF" }, - { "dimgray", "#696969" }, - { "dodgerblue", "#1E90FF" }, - { "firebrick", "#B22222" }, - { "floralwhite", "#FFFAF0" }, - { "forestgreen", "#228B22" }, - { "fuchsia", "#FF00FF" }, - { "gainsboro", "#DCDCDC" }, - { "ghostwhite", "#F8F8FF" }, - { "gold", "#FFD700" }, - { "goldenrod", "#DAA520" }, - { "gray", "#808080" }, - { "green", "#008000" }, - { "greenyellow", "#ADFF2F" }, - { "honeydew", "#F0FFF0" }, - { "hotpink", "#FF69B4" }, - { "indianred", "#CD5C5C" }, - { "indigo", "#4B0082" }, - { "ivory", "#FFFFF0" }, - { "khaki", "#F0E68C" }, - { "lavender", "#E6E6FA" }, - { "lavenderblush", "#FFF0F5" }, - { "lawngreen", "#7CFC00" }, - { "lemonchiffon", "#FFFACD" }, - { "lightblue", "#ADD8E6" }, - { "lightcoral", "#F08080" }, - { "lightcyan", "#E0FFFF" }, - { "lightgoldenrodyellow", "#FAFAD2" }, - { "lightgreen", "#90EE90" }, - { "lightgrey", "#D3D3D3" }, - { "lightpink", "#FFB6C1" }, - { "lightsalmon", "#FFA07A" }, - { "lightseagreen", "#20B2AA" }, - { "lightskyblue", "#87CEFA" }, - { "lightslategray", "#778899" }, - { "lightsteelblue", "#B0C4DE" }, - { "lightyellow", "#FFFFE0" }, - { "lime", "#00FF00" }, - { "limegreen", "#32CD32" }, - { "linen", "#FAF0E6" }, - { "magenta", "#FF00FF" }, - { "maroon", "#800000" }, - { "mediumaquamarine", "#66CDAA" }, - { "mediumblue", "#0000CD" }, - { "mediumorchid", "#BA55D3" }, - { "mediumpurple", "#9370DB" }, - { "mediumseagreen", "#3CB371" }, - { "mediumslateblue", "#7B68EE" }, - { "mediumspringgreen", "#00FA9A" }, - { "mediumturquoise", "#48D1CC" }, - { "mediumvioletred", "#C71585" }, - { "midnightblue", "#191970" }, - { "mintcream", "#F5FFFA" }, - { "mistyrose", "#FFE4E1" }, - { "moccasin", "#FFE4B5" }, - { "navajowhite", "#FFDEAD" }, - { "navy", "#000080" }, - { "oldlace", "#FDF5E6" }, - { "olive", "#808000" }, - { "olivedrab", "#6B8E23" }, - { "orange", "#FFA500" }, - { "orangered", "#FF4500" }, - { "orchid", "#DA70D6" }, - { "palegoldenrod", "#EEE8AA" }, - { "palegreen", "#98FB98" }, - { "paleturquoise", "#AFEEEE" }, - { "palevioletred", "#DB7093" }, - { "papayawhip", "#FFEFD5" }, - { "peachpuff", "#FFDAB9" }, - { "peru", "#CD853F" }, - { "pink", "#FFC0CB" }, - { "plum", "#DDA0DD" }, - { "powderblue", "#B0E0E6" }, - { "purple", "#800080" }, - { "red", "#FF0000" }, - { "rosybrown", "#BC8F8F" }, - { "royalblue", "#4169E1" }, - { "saddlebrown", "#8B4513" }, - { "salmon", "#FA8072" }, - { "sandybrown", "#F4A460" }, - { "seagreen", "#2E8B57" }, - { "seashell", "#FFF5EE" }, - { "sienna", "#A0522D" }, - { "silver", "#C0C0C0" }, - { "skyblue", "#87CEEB" }, - { "slateblue", "#6A5ACD" }, - { "slategray", "#708090" }, - { "snow", "#FFFAFA" }, - { "springgreen", "#00FF7F" }, - { "steelblue", "#4682B4" }, - { "tan", "#D2B48C" }, - { "teal", "#008080" }, - { "thistle", "#D8BFD8" }, - { "tomato", "#FF6347" }, - { "turquoise", "#40E0D0" }, - { "violet", "#EE82EE" }, - { "wheat", "#F5DEB3" }, - { "white", "#FFFFFF" }, - { "whitesmoke", "#F5F5F5" }, - { "yellow", "#FFFF00" }, - { "yellowgreen", "#9ACD32" }, - { null, null } -}; - - -static const Attribute* lookup( ctmbstr atnam ) -{ - if ( atnam ) - { - const Attribute *np = attribute_defs; - for ( /**/; np && np->name; ++np ) - if ( tmbstrcmp(atnam, np->name) == 0 ) - return np; - } - return null; -} - - -/* Locate attributes by type -*/ - -AttVal* AttrGetById( Node* node, TidyAttrId id ) -{ - AttVal* av; - for ( av = node->attributes; av; av = av->next ) - { - if ( AttrIsId(av, id) ) - return av; - } - return null; -} - -/* public method for finding attribute definition by name */ -const Attribute* FindAttribute( TidyDocImpl* doc, AttVal *attval ) -{ - if ( attval ) - return lookup( attval->attribute ); - return null; -} - -AttVal* GetAttrByName( Node *node, ctmbstr name ) -{ - AttVal *attr; - for (attr = node->attributes; attr != null; attr = attr->next) - { - if (attr->attribute && tmbstrcmp(attr->attribute, name) == 0) - break; - } - return attr; -} - -AttVal* AddAttribute( TidyDocImpl* doc, - Node *node, ctmbstr name, ctmbstr value ) -{ - AttVal *av = NewAttribute(); - av->delim = '"'; - av->attribute = tmbstrdup( name ); - av->value = tmbstrdup( value ); - av->dict = lookup( name ); - - if ( node->attributes == null ) - node->attributes = av; - else /* append to end of attributes */ - { - AttVal *here = node->attributes; - while (here->next) - here = here->next; - here->next = av; - } - return av; -} - -static Bool CheckAttrType( TidyDocImpl* doc, - ctmbstr attrname, AttrCheck type ) -{ - const Attribute* np = lookup( attrname ); - return (Bool)( np && np->attrchk == type ); -} - -Bool IsUrl( TidyDocImpl* doc, ctmbstr attrname ) -{ - return CheckAttrType( doc, attrname, URL ); -} - -Bool IsBool( TidyDocImpl* doc, ctmbstr attrname ) -{ - return CheckAttrType( doc, attrname, BOOL ); -} - -Bool IsScript( TidyDocImpl* doc, ctmbstr attrname ) -{ - return CheckAttrType( doc, attrname, SCRIPT ); -} - -Bool IsLiteralAttribute( TidyDocImpl* doc, ctmbstr attrname ) -{ - const Attribute* np = lookup( attrname ); - return (Bool)( np && np->literal ); -} - -/* may id or name serve as anchor? */ -Bool IsAnchorElement( TidyDocImpl* doc, Node *node) -{ - TidyTagImpl* tags = &doc->tags; - TidyTagId tid = TagId( node ); - if ( tid == TidyTag_A || - tid == TidyTag_APPLET || - tid == TidyTag_FORM || - tid == TidyTag_FRAME || - tid == TidyTag_IFRAME || - tid == TidyTag_IMG || - tid == TidyTag_MAP ) - return yes; - - return no; -} - -/* - In CSS1, selectors can contain only the characters A-Z, 0-9, and Unicode characters 161-255, plus dash (-); - they cannot start with a dash or a digit; they can also contain escaped characters and any Unicode character - as a numeric code (see next item). - - The backslash followed by at most four hexadecimal digits (0..9A..F) stands for the Unicode character with that number. - - Any character except a hexadecimal digit can be escaped to remove its special meaning, by putting a backslash in front. - - #508936 - CSS class naming for -clean option -*/ -Bool IsCSS1Selector( ctmbstr buf ) -{ - Bool valid = yes; - int esclen = 0; - byte c; - int pos; - - for ( pos=0; valid && (c = *buf++); ++pos ) - { - if ( c == '\\' ) - { - esclen = 1; /* ab\555\444 is 4 chars {'a', 'b', \555, \444} */ - } - else if ( isxdigit( c ) ) - { - /* Digit not 1st, unless escaped (Max length "\112F") */ - if ( esclen > 0 ) - valid = ( ++esclen < 6 ); - if ( valid ) - valid = ( pos>0 || esclen>0 ); - } - else - { - valid = ( - esclen > 0 /* Escaped? Anything goes. */ - || ( pos>0 && c == '-' ) /* Dash cannot be 1st char */ - || isalpha(c) /* a-z, A-Z anywhere */ - || ( c >= 161 && c <= 255 ) /* Unicode 161-255 anywhere */ - ); - esclen = 0; - } - } - return valid; -} - - - - - -/* free single anchor */ -static void FreeAnchor(Anchor *a) -{ - if ( a ) - MemFree( a->name ); - MemFree( a ); -} - -/* removes anchor for specific node */ -void RemoveAnchorByNode( TidyDocImpl* doc, Node *node ) -{ - TidyAttribImpl* attribs = &doc->attribs; - Anchor *delme = null, *curr, *prev = null; - - for ( curr=attribs->anchor_list; curr!=null; curr=curr->next ) - { - if ( curr->node == node ) - { - if ( prev ) - prev->next = curr->next; - else - attribs->anchor_list = curr->next; - delme = curr; - break; - } - prev = curr; - } - FreeAnchor( delme ); -} - -/* initialize new anchor */ -static Anchor* NewAnchor( ctmbstr name, Node* node ) -{ - Anchor *a = (Anchor*) MemAlloc( sizeof(Anchor) ); - - a->name = tmbstrdup( name ); - a->node = node; - a->next = null; - - return a; -} - -/* add new anchor to namespace */ -Anchor* AddAnchor( TidyDocImpl* doc, ctmbstr name, Node *node ) -{ - TidyAttribImpl* attribs = &doc->attribs; - Anchor *a = NewAnchor( name, node ); - - if ( attribs->anchor_list == null) - attribs->anchor_list = a; - else - { - Anchor *here = attribs->anchor_list; - while (here->next) - here = here->next; - here->next = a; - } - - return attribs->anchor_list; -} - -/* return node associated with anchor */ -Node* GetNodeByAnchor( TidyDocImpl* doc, ctmbstr name ) -{ - TidyAttribImpl* attribs = &doc->attribs; - Anchor *found; - for ( found = attribs->anchor_list; found != null; found = found->next ) - { - if ( tmbstrcasecmp(found->name, name) == 0 ) - break; - } - - if ( found ) - return found->node; - return null; -} - -/* free all anchors */ -void FreeAnchors( TidyDocImpl* doc ) -{ - TidyAttribImpl* attribs = &doc->attribs; - Anchor* a; - while ( a = attribs->anchor_list ) - { - attribs->anchor_list = a->next; - MemFree( a->name ); - MemFree( a ); - } -} - -/* public method for inititializing attribute dictionary */ -void InitAttrs( TidyDocImpl* doc ) -{ - ClearMemory( &doc->attribs, sizeof(TidyAttribImpl) ); - -#ifdef _DEBUG - { - ctmbstr prev = null; - TidyAttrId id; - for ( id=1; id < N_TIDY_ATTRIBS; ++id ) - { - const Attribute* dict = &attribute_defs[ id ]; - assert( dict->id == id ); - if ( prev ) - assert( tmbstrcmp( prev, dict->name ) < 0 ); - prev = dict->name; - } - } -#endif -} - -/* -Henry Zrepa reports that some folk are -using embed with script attributes where -newlines are signficant. These need to be -declared and handled specially! -*/ -static void DeclareAttribute( TidyDocImpl* doc, ctmbstr name, - uint versions, Bool nowrap, Bool isliteral ) -{ - const Attribute *exist = lookup( name ); - if ( exist == null ) - { - TidyAttribImpl* attribs = &doc->attribs; - Attribute* dict = (Attribute*) MemAlloc( sizeof(Attribute) ); - ClearMemory( dict, sizeof(Attribute) ); - - dict->name = tmbstrdup( name ); - dict->versions = versions; - dict->nowrap = nowrap; - dict->literal = isliteral; - - dict->next = attribs->declared_attr_list; - attribs->declared_attr_list = dict; - } -} - - -/* free all declared attributes */ -static void FreeDeclaredAttributes( TidyDocImpl* doc ) -{ - TidyAttribImpl* attribs = &doc->attribs; - Attribute* dict; - while ( dict = attribs->declared_attr_list ) - { - attribs->declared_attr_list = dict->next; - MemFree( dict->name ); - MemFree( dict ); - } -} - -void DeclareLiteralAttrib( TidyDocImpl* doc, ctmbstr name ) -{ - DeclareAttribute( doc, name, VERS_PROPRIETARY, no, yes ); -} - -void FreeAttrTable( TidyDocImpl* doc ) -{ - FreeAnchors( doc ); - FreeDeclaredAttributes( doc ); -} - -/* - the same attribute name can't be used - more than once in each element -*/ - -void RepairDuplicateAttributes( TidyDocImpl* doc, Node *node) -{ - AttVal *attval; - - for (attval = node->attributes; attval != null;) - { - if (attval->asp == null && attval->php == null) - { - AttVal *current; - - for (current = attval->next; current != null;) - { - if (current->asp == null && current->php == null && - tmbstrcasecmp(attval->attribute, current->attribute) == 0) - { - AttVal *temp; - - if ( tmbstrcasecmp(current->attribute, "class") == 0 - && cfgBool(doc, TidyJoinClasses) ) - { - /* concatenate classes */ - - current->value = (tmbstr) MemRealloc(current->value, tmbstrlen(current->value) + - tmbstrlen(attval->value) + 2); - tmbstrcat(current->value, " "); - tmbstrcat(current->value, attval->value); - - temp = attval->next; - - if (temp->next == null) - current = null; - else - current = current->next; - - ReportAttrError( doc, node, attval, JOINING_ATTRIBUTE); - - RemoveAttribute(node, attval); - attval = temp; - } - else if ( tmbstrcasecmp(current->attribute, "style") == 0 - && cfgBool(doc, TidyJoinStyles) ) - { - /* concatenate styles */ - - /* - this doesn't handle CSS comments and - leading/trailing white-space very well - see http://www.w3.org/TR/css-style-attr - */ - - size_t end = strlen(current->value); - - if (current->value[end] == ';') - { - /* attribute ends with declaration seperator */ - - current->value = (tmbstr) MemRealloc(current->value, - end + tmbstrlen(attval->value) + 2); - - tmbstrcat(current->value, " "); - tmbstrcat(current->value, attval->value); - } - else if (current->value[end] == '}') - { - /* attribute ends with rule set */ - - current->value = (tmbstr) MemRealloc(current->value, - end + tmbstrlen(attval->value) + 6); - - tmbstrcat(current->value, " { "); - tmbstrcat(current->value, attval->value); - tmbstrcat(current->value, " }"); - } - else - { - /* attribute ends with property value */ - - current->value = (tmbstr) MemRealloc(current->value, - end + tmbstrlen(attval->value) + 3); - - tmbstrcat(current->value, "; "); - tmbstrcat(current->value, attval->value); - } - - temp = attval->next; - - if (temp->next == null) - current = null; - else - current = current->next; - - ReportAttrError( doc, node, attval, JOINING_ATTRIBUTE); - - RemoveAttribute(node, attval); - attval = temp; - - } - else if ( cfg(doc, TidyDuplicateAttrs) == TidyKeepLast ) - { - temp = current->next; - ReportAttrError( doc, node, current, REPEATED_ATTRIBUTE); - RemoveAttribute(node, current); - current = temp; - } - else - { - temp = attval->next; - if (attval->next == null) - current = null; - else - current = current->next; - - ReportAttrError( doc, node, attval, REPEATED_ATTRIBUTE); - RemoveAttribute(node, attval); - attval = temp; - } - } - else - current = current->next; - } - attval = attval->next; - } - else - attval = attval->next; - } -} - - -/* ignore unknown attributes for proprietary elements */ -const Attribute* CheckAttribute( TidyDocImpl* doc, Node *node, AttVal *attval ) -{ - const Attribute* attribute = attval->dict; - - if ( attribute != null ) - { - /* if attribute looks like check XML is ok */ - if ( attribute->versions & VERS_XML ) - { - if ( !(cfgBool(doc, TidyXmlTags) || cfgBool(doc, TidyXmlOut)) ) - ReportAttrError( doc, node, attval, XML_ATTRIBUTE_VALUE); - } /* title first appeared in HTML 4.0 except for a/link */ - else if ( attribute->id != TidyAttr_TITLE || - !(nodeIsA(node) || nodeIsLINK(node)) ) - { - ConstrainVersion( doc, attribute->versions ); - } - - if (attribute->attrchk) - attribute->attrchk( doc, node, attval ); - else if ( attval->dict->versions & VERS_PROPRIETARY ) - ReportAttrError( doc, node, attval, PROPRIETARY_ATTRIBUTE); - } - else if ( !cfgBool(doc, TidyXmlTags) - && attval->asp == null - && node->tag != null - && !(node->tag->versions & VERS_PROPRIETARY) ) - { - ReportAttrError( doc, node, attval, UNKNOWN_ATTRIBUTE ); - } - - return attribute; -} - -Bool IsBoolAttribute(AttVal *attval) -{ - const Attribute *attribute = ( attval ? attval->dict : null ); - if ( attribute && attribute->attrchk == CheckBool ) - return yes; - return no; -} - -Bool attrIsEvent( AttVal* attval ) -{ - TidyAttrId atid = AttrId( attval ); - return ( atid == TidyAttr_OnMOUSEMOVE || - atid == TidyAttr_OnMOUSEDOWN || - atid == TidyAttr_OnMOUSEUP || - atid == TidyAttr_OnCLICK || - atid == TidyAttr_OnMOUSEOVER || - atid == TidyAttr_OnMOUSEOUT || - atid == TidyAttr_OnKEYDOWN || - atid == TidyAttr_OnKEYUP || - atid == TidyAttr_OnKEYPRESS || - atid == TidyAttr_OnFOCUS || - atid == TidyAttr_OnBLUR ); -} - -static void CheckLowerCaseAttrValue( TidyDocImpl* doc, Node *node, AttVal *attval) -{ - tmbstr p; - Bool hasUpper = no; - - if (attval == null || attval->value == null) - return; - - p = attval->value; - - while (*p) - { - if (IsUpper(*p)) /* #501230 - fix by Terry Teague - 09 Jan 02 */ - { - hasUpper = yes; - break; - } - p++; - } - - if (hasUpper) - { - Lexer* lexer = doc->lexer; - if (lexer->isvoyager) - ReportAttrError( doc, node, attval, ATTR_VALUE_NOT_LCASE); - - if ( lexer->isvoyager || cfgBool(doc, TidyLowerLiterals) ) - attval->value = tmbstrtolower(attval->value); - } -} - -/* methods for checking value of a specific attribute */ - -void CheckUrl( TidyDocImpl* doc, Node *node, AttVal *attval) -{ - tmbchar c; - tmbstr dest, p; - uint escape_count = 0, backslash_count = 0; - uint i, pos = 0; - size_t len; - - if (attval == null || attval->value == null) - { - ReportAttrError( doc, node, attval, MISSING_ATTR_VALUE); - return; - } - - p = attval->value; - - for (i = 0; c = p[i]; ++i) - { - if (c == '\\') - { - ++backslash_count; - if ( cfgBool(doc, TidyFixBackslash) ) - p[i] = '/'; - } - else if ((c > 0x7e) || (c <= 0x20) || (strchr("<>", c))) - ++escape_count; - } - - if ( cfgBool(doc, TidyFixUri) && escape_count ) - { - len = tmbstrlen(p) + escape_count * 2 + 1; - dest = (tmbstr) MemAlloc(len); - - for (i = 0; c = p[i]; ++i) - { - if ((c > 0x7e) || (c <= 0x20) || (strchr("<>", c))) - pos += sprintf( dest + pos, "%%%02X", (byte)c ); - else - dest[pos++] = c; - } - dest[pos++] = 0; - - MemFree(attval->value); - attval->value = dest; - } - if ( backslash_count ) - { - if ( cfgBool(doc, TidyFixBackslash) ) - ReportAttrError( doc, node, attval, FIXED_BACKSLASH ); - else - ReportAttrError( doc, node, attval, BACKSLASH_IN_URI ); - } - if ( escape_count ) - { - if ( cfgBool(doc, TidyFixUri) ) - ReportAttrError( doc, node, attval, ESCAPED_ILLEGAL_URI); - else - ReportAttrError( doc, node, attval, ILLEGAL_URI_REFERENCE); - - doc->badChars |= INVALID_URI; - } -} - -void CheckScript( TidyDocImpl* doc, Node *node, AttVal *attval) -{ -} - -void CheckName( TidyDocImpl* doc, Node *node, AttVal *attval) -{ - Node *old; - - if (attval == null || attval->value == null) - { - ReportAttrError( doc, node, attval, MISSING_ATTR_VALUE); - return; - } - - if ( IsAnchorElement(doc, node) ) - { - ConstrainVersion( doc, ~VERS_XHTML11 ); - - if ((old = GetNodeByAnchor(doc, attval->value)) && old != node) - { - ReportAttrError( doc, node, attval, ANCHOR_NOT_UNIQUE); - } - else - AddAnchor( doc, attval->value, node ); - } -} - -void CheckId( TidyDocImpl* doc, Node *node, AttVal *attval ) -{ - Lexer* lexer = doc->lexer; - tmbstr p; - Node *old; - uint s; - - if (attval == null || attval->value == null) - { - ReportAttrError( doc, node, attval, MISSING_ATTR_VALUE); - return; - } - - p = attval->value; - s = *p++; - - - if (!IsLetter(s)) - { - if (lexer->isvoyager && (IsXMLLetter(s) || s == '_' || s == ':')) - ReportAttrError( doc, node, attval, XML_ID_SYNTAX); - else - ReportAttrError( doc, node, attval, BAD_ATTRIBUTE_VALUE); - } - else - { - while(s = *p++) /* #559774 tidy version rejects all id values */ - { - if (!IsNamechar(s)) - { - if (lexer->isvoyager && IsXMLNamechar(s)) - ReportAttrError( doc, node, attval, XML_ID_SYNTAX); - else - ReportAttrError( doc, node, attval, BAD_ATTRIBUTE_VALUE); - break; - } - } - } - - if ((old = GetNodeByAnchor(doc, attval->value)) && old != node) - { - ReportAttrError( doc, node, attval, ANCHOR_NOT_UNIQUE); - } - else - AddAnchor( doc, attval->value, node ); -} - -void CheckBool( TidyDocImpl* doc, Node *node, AttVal *attval) -{ - if (attval == null || attval->value == null) - return; - - CheckLowerCaseAttrValue( doc, node, attval ); -} - -void CheckAlign( TidyDocImpl* doc, Node *node, AttVal *attval) -{ - tmbstr value; - - /* IMG, OBJECT, APPLET and EMBED use align for vertical position */ - if (node->tag && (node->tag->model & CM_IMG)) - { - CheckValign( doc, node, attval ); - return; - } - - if (attval == null || attval->value == null) - { - ReportAttrError( doc, node, attval, MISSING_ATTR_VALUE); - return; - } - - CheckLowerCaseAttrValue( doc, node, attval); - - value = attval->value; - - if (! (tmbstrcasecmp(value, "left") == 0 || - tmbstrcasecmp(value, "center") == 0 || - tmbstrcasecmp(value, "right") == 0 || - tmbstrcasecmp(value, "justify") == 0)) - ReportAttrError( doc, node, attval, BAD_ATTRIBUTE_VALUE); -} - -void CheckValign( TidyDocImpl* doc, Node *node, AttVal *attval) -{ - tmbstr value; - - if (attval == null || attval->value == null) - { - ReportAttrError( doc, node, attval, MISSING_ATTR_VALUE); - return; - } - - CheckLowerCaseAttrValue( doc, node, attval ); - - value = attval->value; - - if (tmbstrcasecmp(value, "top") == 0 || - tmbstrcasecmp(value, "middle") == 0 || - tmbstrcasecmp(value, "bottom") == 0 || - tmbstrcasecmp(value, "baseline") == 0) - { - /* all is fine */ - } - else if (tmbstrcasecmp(value, "left") == 0 || - tmbstrcasecmp(value, "right") == 0) - { - if (!(node->tag && (node->tag->model & CM_IMG))) - ReportAttrError( doc, node, attval, BAD_ATTRIBUTE_VALUE); - } - else if (tmbstrcasecmp(value, "texttop") == 0 || - tmbstrcasecmp(value, "absmiddle") == 0 || - tmbstrcasecmp(value, "absbottom") == 0 || - tmbstrcasecmp(value, "textbottom") == 0) - { - ConstrainVersion( doc, VERS_PROPRIETARY ); - ReportAttrError( doc, node, attval, PROPRIETARY_ATTR_VALUE); - } - else - ReportAttrError( doc, node, attval, BAD_ATTRIBUTE_VALUE); -} - -void CheckLength( TidyDocImpl* doc, Node *node, AttVal *attval) -{ - tmbstr p; - - if (attval == null || attval->value == null) - { - ReportAttrError( doc, node, attval, MISSING_ATTR_VALUE); - return; - } - - /* don't check for and */ - if ( tmbstrcmp(attval->attribute, "width") == 0 && - (nodeIsCOL(node) || nodeIsCOLGROUP(node)) ) - return; - - p = attval->value; - - if (!IsDigit(*p++)) - { - ReportAttrError( doc, node, attval, BAD_ATTRIBUTE_VALUE); - } - else - { - while (*p) - { - if (!IsDigit(*p) && *p != '%') - { - ReportAttrError( doc, node, attval, BAD_ATTRIBUTE_VALUE); - break; - } - ++p; - } - } -} - -void CheckTarget( TidyDocImpl* doc, Node *node, AttVal *attval) -{ - tmbstr value; - - if (attval == null || attval->value == null) - { - ReportAttrError( doc, node, attval, MISSING_ATTR_VALUE); - return; - } - - /* No target attribute in strict HTML versions */ - ConstrainVersion( doc, ~VERS_HTML40_STRICT); - - /* - target names must begin with A-Za-z or be one of - _blank, _self, _parent and _top - */ - - value = attval->value; - - if (IsLetter(value[0])) - return; - - if (! (tmbstrcasecmp(value, "_blank") == 0 || - tmbstrcasecmp(value, "_self") == 0 || - tmbstrcasecmp(value, "_parent") == 0 || - tmbstrcasecmp(value, "_top") == 0)) - ReportAttrError( doc, node, attval, BAD_ATTRIBUTE_VALUE); -} - -void CheckFsubmit( TidyDocImpl* doc, Node *node, AttVal *attval) -{ - tmbstr value; - - if (attval == null || attval->value == null) - { - ReportAttrError( doc, node, attval, MISSING_ATTR_VALUE); - return; - } - - value = attval->value; - - CheckLowerCaseAttrValue( doc, node, attval); - - if (! (tmbstrcasecmp(value, "get") == 0 || - tmbstrcasecmp(value, "post") == 0)) - ReportAttrError( doc, node, attval, BAD_ATTRIBUTE_VALUE); -} - -void CheckClear( TidyDocImpl* doc, Node *node, AttVal *attval) -{ - tmbstr value; - - if (attval == null || attval->value == null) - { - ReportAttrError( doc, node, attval, MISSING_ATTR_VALUE); - if (attval->value == null) - attval->value = tmbstrdup( "none" ); - return; - } - - CheckLowerCaseAttrValue( doc, node, attval ); - - value = attval->value; - - if (! (tmbstrcasecmp(value, "none") == 0 || - tmbstrcasecmp(value, "left") == 0 || - tmbstrcasecmp(value, "right") == 0 || - tmbstrcasecmp(value, "all") == 0)) - ReportAttrError( doc, node, attval, BAD_ATTRIBUTE_VALUE); -} - -void CheckShape( TidyDocImpl* doc, Node *node, AttVal *attval) -{ - tmbstr value; - - if (attval == null || attval->value == null) - { - ReportAttrError( doc, node, attval, MISSING_ATTR_VALUE); - return; - } - - CheckLowerCaseAttrValue( doc, node, attval ); - - value = attval->value; - - if (! (tmbstrcasecmp(value, "rect") == 0 || - tmbstrcasecmp(value, "default") == 0 || - tmbstrcasecmp(value, "circle") == 0 || - tmbstrcasecmp(value, "poly") == 0)) - ReportAttrError( doc, node, attval, BAD_ATTRIBUTE_VALUE); -} - -void CheckScope( TidyDocImpl* doc, Node *node, AttVal *attval) -{ - tmbstr value; - - if (attval == null || attval->value == null) - { - ReportAttrError( doc, node, attval, MISSING_ATTR_VALUE); - return; - } - - CheckLowerCaseAttrValue( doc, node, attval); - - value = attval->value; - - if (! (tmbstrcasecmp(value, "row") == 0 || - tmbstrcasecmp(value, "rowgroup") == 0 || - tmbstrcasecmp(value, "col") == 0 || - tmbstrcasecmp(value, "colgroup") == 0)) - ReportAttrError( doc, node, attval, BAD_ATTRIBUTE_VALUE); -} - -void CheckNumber( TidyDocImpl* doc, Node *node, AttVal *attval) -{ - tmbstr p; - - if (attval == null || attval->value == null) - { - ReportAttrError( doc, node, attval, MISSING_ATTR_VALUE); - return; - } - - /* don't check */ - if ( nodeIsFRAMESET(node) && - ( tmbstrcmp(attval->attribute, "cols") == 0 || - tmbstrcmp(attval->attribute, "rows") == 0 ) ) - return; - - p = attval->value; - - /* font size may be preceded by + or - */ - if ( nodeIsFONT(node) && (*p == '+' || *p == '-') ) - ++p; - - while (*p) - { - if (!IsDigit(*p)) - { - ReportAttrError( doc, node, attval, BAD_ATTRIBUTE_VALUE); - break; - } - ++p; - } -} - -/* check color syntax and beautify value by option */ -void CheckColor( TidyDocImpl* doc, Node *node, AttVal *attval) -{ - /* Bool ReplaceColor = yes; */ /* #477643 - replace hex color attribute values with names */ - Bool HexUppercase = yes; - Bool invalid = no; - Bool found = no; - tmbstr given; - const struct _colors *color; - uint i = 0; - - if (attval == null || attval->value == null) - { - ReportAttrError( doc, node, attval, MISSING_ATTR_VALUE); - return; - } - - given = attval->value; - - for (color = colors; color->name; ++color) - { - if (given[0] == '#') - { - if (tmbstrlen(given) != 7) - { - ReportAttrError( doc, node, attval, BAD_ATTRIBUTE_VALUE); - invalid = yes; - break; - } - else if (tmbstrcasecmp(given, color->hex) == 0) - { - if ( cfgBool(doc, TidyReplaceColor) ) - { - MemFree(attval->value); - attval->value = tmbstrdup(color->name); - } - found = yes; - break; - } - } - else if (IsLetter(given[0])) - { - if (tmbstrcasecmp(given, color->name) == 0) - { - if ( cfgBool(doc, TidyReplaceColor) ) - { - MemFree(attval->value); - attval->value = tmbstrdup(color->name); - } - found = yes; - break; - } - } - else - { - ReportAttrError( doc, node, attval, BAD_ATTRIBUTE_VALUE); - invalid = yes; - break; - } - } - - if (!found && !invalid) - { - if (given[0] == '#') - { - /* check if valid hex digits and letters */ - for (i = 1; i < 7; ++i) - { - if (!IsDigit(given[i]) && - !strchr("abcdef", ToLower(given[i]))) - { - ReportAttrError( doc, node, attval, BAD_ATTRIBUTE_VALUE); - invalid = yes; - break; - } - } - - /* convert hex letters to uppercase */ - if (!invalid && HexUppercase) - { - for (i = 1; i < 7; ++i) - { - given[i] = (tmbchar) ToUpper( given[i] ); - } - } - } - else - { - /* we could search for more colors and mark the file as HTML - Proprietary, but I don't thinks it's worth the effort, - so values not in HTML 4.01 are invalid */ - - ReportAttrError( doc, node, attval, BAD_ATTRIBUTE_VALUE); - } - } -} - -/* check valuetype attribute for element param */ -void CheckVType( TidyDocImpl* doc, Node *node, AttVal *attval) -{ - tmbstr value; - - if (attval == null || attval->value == null) - { - ReportAttrError( doc, node, attval, MISSING_ATTR_VALUE); - return; - } - - CheckLowerCaseAttrValue( doc, node, attval ); - - value = attval->value; - - if (! (tmbstrcasecmp(value, "data") == 0 || - tmbstrcasecmp(value, "object") == 0 || - tmbstrcasecmp(value, "ref") == 0)) - ReportAttrError( doc, node, attval, BAD_ATTRIBUTE_VALUE); -} - -/* checks scrolling attribute */ -void CheckScroll( TidyDocImpl* doc, Node *node, AttVal *attval) -{ - tmbstr value; - - if (attval == null || attval->value == null) - { - ReportAttrError( doc, node, attval, MISSING_ATTR_VALUE); - return; - } - - CheckLowerCaseAttrValue( doc, node, attval ); - - value = attval->value; - - if (! (tmbstrcasecmp(value, "no") == 0 || - tmbstrcasecmp(value, "auto") == 0 || - tmbstrcasecmp(value, "yes") == 0)) - ReportAttrError( doc, node, attval, BAD_ATTRIBUTE_VALUE); -} - -/* checks dir attribute */ -void CheckTextDir( TidyDocImpl* doc, Node *node, AttVal *attval) -{ - tmbstr value; - - if (attval == null || attval->value == null) - { - ReportAttrError( doc, node, attval, MISSING_ATTR_VALUE); - return; - } - - CheckLowerCaseAttrValue( doc, node, attval); - - value = attval->value; - - if (! (tmbstrcasecmp(value, "rtl") == 0 || - tmbstrcasecmp(value, "ltr") == 0)) - ReportAttrError( doc, node, attval, BAD_ATTRIBUTE_VALUE); -} - -/* checks lang and xml:lang attributes */ -void CheckLang( TidyDocImpl* doc, Node *node, AttVal *attval) -{ - if ( attval == null || attval->value == null ) - { - if ( cfg(doc, TidyAccessibilityCheckLevel) == 0 ) - { - ReportAttrError( doc, node, attval, MISSING_ATTR_VALUE ); - } - return; - } - - if (tmbstrcasecmp(attval->attribute, "lang") == 0) - ConstrainVersion( doc, ~VERS_XHTML11 ); -} - - - diff --git a/tidylib-src/src/buffio.c b/tidylib-src/src/buffio.c deleted file mode 100644 index 39ec2758..00000000 --- a/tidylib-src/src/buffio.c +++ /dev/null @@ -1,192 +0,0 @@ -/* buffio.c -- Treat buffer as an I/O stream. - - (c) 1998-2002 (W3C) MIT, INRIA, Keio University - See tidy.h for the copyright notice. - - CVS Info : - - $Author: creitzel $ - $Date: 2003/02/16 19:33:10 $ - $Revision: 1.2 $ - - Requires buffer to automatically grow as bytes are added. - Must keep track of current read and write points. - -*/ - -#include -#include - - -/************** - TIDY -**************/ - -static int insrc_getByte( uint appData ) -{ - TidyBuffer* buf = (TidyBuffer*) appData; - return tidyBufGetByte( buf ); -} -static Bool insrc_eof( uint appData ) -{ - TidyBuffer* buf = (TidyBuffer*) appData; - return tidyBufEndOfInput( buf ); -} -static void insrc_ungetByte( uint appData, byte bv ) -{ - TidyBuffer* buf = (TidyBuffer*) appData; - tidyBufUngetByte( buf, bv ); -} - -void initInputBuffer( TidyInputSource* inp, TidyBuffer* buf ) -{ - inp->getByte = insrc_getByte; - inp->eof = insrc_eof; - inp->ungetByte = insrc_ungetByte; - inp->sourceData = (uint) buf; -} - -static void outsink_putByte( uint appData, byte bv ) -{ - TidyBuffer* buf = (TidyBuffer*) appData; - tidyBufPutByte( buf, bv ); -} - -void initOutputBuffer( TidyOutputSink* outp, TidyBuffer* buf ) -{ - outp->putByte = outsink_putByte; - outp->sinkData = (uint) buf; -} - - -void tidyBufInit( TidyBuffer* buf ) -{ - assert( buf != null ); - ClearMemory( buf, sizeof(TidyBuffer) ); -} - -void tidyBufAlloc( TidyBuffer* buf, uint allocSize ) -{ - tidyBufInit( buf ); - tidyBufCheckAlloc( buf, allocSize, 0 ); - buf->next = 0; -} -void tidyBufFree( TidyBuffer* buf ) -{ - assert( buf != null ); - MemFree( buf->bp ); - tidyBufInit( buf ); -} - -void tidyBufClear( TidyBuffer* buf ) -{ - assert( buf != null ); - if ( buf->bp ) - { - ClearMemory( buf->bp, buf->allocated ); - buf->size = 0; - } - buf->next = 0; -} - -/* Avoid thrashing memory by doubling buffer size -** until larger than requested size. -*/ -void tidyBufCheckAlloc( TidyBuffer* buf, uint allocSize, uint chunkSize ) -{ - assert( buf != null ); - if ( 0 == chunkSize ) - chunkSize = 256; - if ( allocSize > buf->allocated ) - { - byte* bp; - uint allocAmt = chunkSize; - if ( buf->allocated > 0 ) - allocAmt = buf->allocated; - while ( allocAmt < allocSize ) - allocAmt *= 2; - - bp = MemRealloc( buf->bp, allocAmt ); - if ( bp != null ) - { - ClearMemory( bp + buf->allocated, allocAmt - buf->allocated ); - buf->bp = bp; - buf->allocated = allocAmt; - } - } -} - -/* Attach buffer to a chunk O' memory w/out allocation */ -void tidyBufAttach( TidyBuffer* buf, void* bp, uint size ) -{ - assert( buf != null ); - buf->bp = bp; - buf->size = buf->allocated = size; - buf->next = 0; -} - -/* Clear pointer to memory w/out deallocation */ -void tidyBufDetach( TidyBuffer* buf ) -{ - tidyBufInit( buf ); -} - - -/************** - OUTPUT -**************/ - -void tidyBufAppend( TidyBuffer* buf, void* vp, uint size ) -{ - assert( buf != null ); - if ( vp != null && size > 0 ) - { - tidyBufCheckAlloc( buf, buf->size + size, 0 ); - memcpy( buf->bp + buf->size, vp, size ); - buf->size += size; - } -} - -void tidyBufPutByte( TidyBuffer* buf, byte bv ) -{ - assert( buf != null ); - tidyBufCheckAlloc( buf, buf->size + 1, 0 ); - buf->bp[ buf->size++ ] = bv; -} - - -int tidyBufPopByte( TidyBuffer* buf ) -{ - int bv = EOF; - assert( buf != null ); - if ( buf->size > 0 ) - bv = buf->bp[ --buf->size ]; - return bv; -} - -/************** - INPUT -**************/ - -int tidyBufGetByte( TidyBuffer* buf ) -{ - int bv = EOF; - if ( ! tidyBufEndOfInput(buf) ) - bv = buf->bp[ buf->next++ ]; - return bv; -} - -Bool tidyBufEndOfInput( TidyBuffer* buf ) -{ - return ( buf->next >= buf->size ); -} - -void tidyBufUngetByte( TidyBuffer* buf, byte bv ) -{ - if ( buf->next > 0 ) - { - --buf->next; - assert( bv == buf->bp[ buf->next ] ); - } -} - diff --git a/tidylib-src/src/clean.c b/tidylib-src/src/clean.c deleted file mode 100644 index 0917b8c4..00000000 --- a/tidylib-src/src/clean.c +++ /dev/null @@ -1,2410 +0,0 @@ -/* - clean.c -- clean up misuse of presentation markup - - (c) 1998-2002 (W3C) MIT, INRIA, Keio University - See tidy.h for the copyright notice. - - CVS Info : - - $Author: creitzel $ - $Date: 2003/02/16 19:33:10 $ - $Revision: 1.20 $ - - Filters from other formats such as Microsoft Word - often make excessive use of presentation markup such - as font tags, B, I, and the align attribute. By applying - a set of production rules, it is straight forward to - transform this to use CSS. - - Some rules replace some of the children of an element by - style properties on the element, e.g. - -

    ...

    ->

    ...

    - - Such rules are applied to the element's content and then - to the element itself until none of the rules more apply. - Having applied all the rules to an element, it will have - a style attribute with one or more properties. - - Other rules strip the element they apply to, replacing - it by style properties on the contents, e.g. - -
  • ...

  • ->

    ... - - These rules are applied to an element before processing - its content and replace the current element by the first - element in the exposed content. - - After applying both sets of rules, you can replace the - style attribute by a class value and style rule in the - document head. To support this, an association of styles - and class names is built. - - A naive approach is to rely on string matching to test - when two property lists are the same. A better approach - would be to first sort the properties before matching. - -*/ - -#include -#include -#include - -#include "tidy-int.h" -#include "clean.h" -#include "lexer.h" -#include "parser.h" -#include "attrs.h" -#include "message.h" -#include "tmbstr.h" -#include "utf8.h" - -void RenameElem( Node* node, TidyTagId tid ) -{ - const Dict* dict = LookupTagDef( tid ); - MemFree( node->element ); - node->element = tmbstrdup( dict->name ); - node->tag = dict; -} - -static void FreeStyleProps(StyleProp *props) -{ - StyleProp *next; - - while (props) - { - next = props->next; - MemFree(props->name); - MemFree(props->value); - MemFree(props); - props = next; - } -} - -static StyleProp *InsertProperty( StyleProp* props, ctmbstr name, ctmbstr value ) -{ - StyleProp *first, *prev, *prop; - int cmp; - - prev = null; - first = props; - - while (props) - { - cmp = tmbstrcmp(props->name, name); - - if (cmp == 0) - { - /* this property is already defined, ignore new value */ - return first; - } - - if (cmp > 0) - { - /* insert before this */ - - prop = (StyleProp *)MemAlloc(sizeof(StyleProp)); - prop->name = tmbstrdup(name); - prop->value = tmbstrdup(value); - prop->next = props; - - if (prev) - prev->next = prop; - else - first = prop; - - return first; - } - - prev = props; - props = props->next; - } - - prop = (StyleProp *)MemAlloc(sizeof(StyleProp)); - prop->name = tmbstrdup(name); - prop->value = tmbstrdup(value); - prop->next = null; - - if (prev) - prev->next = prop; - else - first = prop; - - return first; -} - -/* - Create sorted linked list of properties from style string - It temporarily places nulls in place of ':' and ';' to - delimit the strings for the property name and value. - Some systems don't allow you to null literal strings, - so to avoid this, a copy is made first. -*/ -static StyleProp* CreateProps( StyleProp* prop, ctmbstr style ) -{ - tmbstr name, value = null, name_end, value_end, line; - Bool more; - - line = tmbstrdup(style); - name = line; - - while (*name) - { - while (*name == ' ') - ++name; - - name_end = name; - - while (*name_end) - { - if (*name_end == ':') - { - value = name_end + 1; - break; - } - - ++name_end; - } - - if (*name_end != ':') - break; - - while ( value && *value == ' ') - ++value; - - value_end = value; - more = no; - - while (*value_end) - { - if (*value_end == ';') - { - more = yes; - break; - } - - ++value_end; - } - - *name_end = '\0'; - *value_end = '\0'; - - prop = InsertProperty(prop, name, value); - *name_end = ':'; - - if (more) - { - *value_end = ';'; - name = value_end + 1; - continue; - } - - break; - } - - MemFree(line); /* free temporary copy */ - return prop; -} - -static tmbstr CreatePropString(StyleProp *props) -{ - tmbstr style, p, s; - int len; - StyleProp *prop; - - /* compute length */ - - for (len = 0, prop = props; prop; prop = prop->next) - { - len += tmbstrlen(prop->name) + 2; - if (prop->value) - len += tmbstrlen(prop->value) + 2; - } - - style = (tmbstr) MemAlloc(len+1); - - for (p = style, prop = props; prop; prop = prop->next) - { - s = prop->name; - - while((*p++ = *s++)); - - if (prop->value) - { - *--p = ':'; - *++p = ' '; - ++p; - - s = prop->value; - while((*p++ = *s++)); - } - if (prop->next == null) - break; - - *--p = ';'; - *++p = ' '; - ++p; - } - - return style; -} - -/* - create string with merged properties -static tmbstr AddProperty( ctmbstr style, ctmbstr property ) -{ - tmbstr line; - StyleProp *prop; - - prop = CreateProps(null, style); - prop = CreateProps(prop, property); - line = CreatePropString(prop); - FreeStyleProps(prop); - return line; -} -*/ - -void FreeStyles( TidyDocImpl* doc ) -{ - Lexer* lexer = doc->lexer; - if ( lexer ) - { - Style *style, *next; - for ( style = lexer->styles; style; style = next ) - { - next = style->next; - MemFree( style->tag ); - MemFree( style->tag_class ); - MemFree( style->properties ); - MemFree( style ); - } - } -} - -static tmbstr GensymClass( TidyDocImpl* doc ) -{ - tmbchar buf[512]; /* CSSPrefix is limited to 256 characters */ - ctmbstr pfx = cfgStr(doc, TidyCSSPrefix); - if ( pfx == null || *pfx == 0 ) - pfx = "c"; - - sprintf( buf, "%s%d", pfx, ++doc->nClassId ); - return tmbstrdup(buf); -} - -static ctmbstr FindStyle( TidyDocImpl* doc, ctmbstr tag, ctmbstr properties ) -{ - Lexer* lexer = doc->lexer; - Style* style; - - for (style = lexer->styles; style; style=style->next) - { - if (tmbstrcmp(style->tag, tag) == 0 && - tmbstrcmp(style->properties, properties) == 0) - return style->tag_class; - } - - style = (Style *)MemAlloc( sizeof(Style) ); - style->tag = tmbstrdup(tag); - style->tag_class = GensymClass( doc ); - style->properties = tmbstrdup( properties ); - style->next = lexer->styles; - lexer->styles = style; - return style->tag_class; -} - -/* - Add class="foo" to node -*/ -void AddClass( TidyDocImpl* doc, Node* node, ctmbstr classname ) -{ - AttVal *classattr = GetAttrByName(node, "class"); - - /* - if there already is a class attribute - then append class name after an underscore. - */ - if (classattr) - { - int len = tmbstrlen(classattr->value) + - tmbstrlen(classname) + 2; - tmbstr s = (tmbstr) MemAlloc( len ); - tmbstrcpy( s, classattr->value ); - tmbstrcat( s, "_" ); - tmbstrcat( s, classname ); - MemFree( classattr->value ); - classattr->value = s; - } - else /* create new class attribute */ - AddAttribute( doc, node, "class", classname ); -} - - -/* - Find style attribute in node, and replace it - by corresponding class attribute. Search for - class in style dictionary otherwise gensym - new class and add to dictionary. - - Assumes that node doesn't have a class attribute -*/ -static void Style2Rule( TidyDocImpl* doc, Node *node) -{ - Lexer *lexer = doc->lexer; - AttVal *styleattr, *classattr; - ctmbstr classname; - - styleattr = GetAttrByName(node, "style"); - - if (styleattr) - { - classname = FindStyle( doc, node->element, styleattr->value ); - classattr = GetAttrByName(node, "class"); - - /* - if there already is a class attribute - then append class name after an underscore - */ - if (classattr) - { - int len = tmbstrlen(classattr->value) + - tmbstrlen(classname) + 2; - tmbstr s = (tmbstr) MemAlloc( len ); - tmbstrcpy(s, classattr->value); - tmbstrcat(s, "_"); - tmbstrcat(s, classname); - MemFree(classattr->value); - classattr->value = s; - RemoveAttribute( node, styleattr); - } - else /* reuse style attribute for class attribute */ - { - MemFree(styleattr->attribute); - MemFree(styleattr->value); - styleattr->attribute = tmbstrdup("class"); - styleattr->value = tmbstrdup(classname); - } - } -} - -static void AddColorRule( Lexer* lexer, ctmbstr selector, ctmbstr color ) -{ - if ( selector && color ) - { - AddStringLiteral(lexer, selector); - AddStringLiteral(lexer, " { color: "); - AddStringLiteral(lexer, color); - AddStringLiteral(lexer, " }\n"); - } -} - -/* - move presentation attribs from body to style element - - background="foo" -> body { background-image: url(foo) } - bgcolor="foo" -> body { background-color: foo } - text="foo" -> body { color: foo } - link="foo" -> :link { color: foo } - vlink="foo" -> :visited { color: foo } - alink="foo" -> :active { color: foo } -*/ -static void CleanBodyAttrs( TidyDocImpl* doc, Node* body ) -{ - Lexer* lexer = doc->lexer; - tmbstr bgurl = null; - tmbstr bgcolor = null; - tmbstr color = null; - AttVal* attr; - - if ( attr = GetAttrByName(body, "background") ) - { - bgurl = attr->value; - attr->value = null; - RemoveAttribute( body, attr ); - } - - if ( attr = GetAttrByName(body, "bgcolor") ) - { - bgcolor = attr->value; - attr->value = null; - RemoveAttribute( body, attr ); - } - - if ( attr = GetAttrByName(body, "text") ) - { - color = attr->value; - attr->value = null; - RemoveAttribute(body, attr); - } - - if ( bgurl || bgcolor || color ) - { - AddStringLiteral(lexer, " body {\n"); - if (bgurl) - { - AddStringLiteral(lexer, " background-image: url("); - AddStringLiteral(lexer, bgurl); - AddStringLiteral(lexer, ");\n"); - MemFree(bgurl); - } - if (bgcolor) - { - AddStringLiteral(lexer, " background-color: "); - AddStringLiteral(lexer, bgcolor); - AddStringLiteral(lexer, ";\n"); - MemFree(bgcolor); - } - if (color) - { - AddStringLiteral(lexer, " color: "); - AddStringLiteral(lexer, color); - AddStringLiteral(lexer, ";\n"); - MemFree(color); - } - - AddStringLiteral(lexer, " }\n"); - } - - if ( attr = GetAttrByName(body, "link") ) - { - AddColorRule(lexer, " :link", attr->value); - RemoveAttribute(body, attr); - } - - if ( attr = GetAttrByName(body, "vlink") ) - { - AddColorRule(lexer, " :visited", attr->value); - RemoveAttribute(body, attr); - } - - if ( attr = GetAttrByName(body, "alink") ) - { - AddColorRule(lexer, " :active", attr->value); - RemoveAttribute(body, attr); - } -} - -static Bool NiceBody( TidyDocImpl* doc ) -{ - Node* body = FindBody( doc ); - if ( body ) - { - if ( GetAttrByName(body, "background") || - GetAttrByName(body, "bgcolor") || - GetAttrByName(body, "text") || - GetAttrByName(body, "link") || - GetAttrByName(body, "vlink") || - GetAttrByName(body, "alink") - ) - { - doc->badLayout |= USING_BODY; - return no; - } - } - - return yes; -} - -/* create style element using rules from dictionary */ -static void CreateStyleElement( TidyDocImpl* doc ) -{ - Lexer* lexer = doc->lexer; - Node *node, *head, *body; - Style *style; - AttVal *av; - - if ( lexer->styles == null && NiceBody(doc) ) - return; - - node = NewNode( lexer ); - node->type = StartTag; - node->implicit = yes; - node->element = tmbstrdup("style"); - FindTag( doc, node ); - - /* insert type attribute */ - av = NewAttribute(); - av->attribute = tmbstrdup("type"); - av->value = tmbstrdup("text/css"); - av->delim = '"'; - av->dict = FindAttribute( doc, av ); - node->attributes = av; - - body = FindBody( doc ); - lexer->txtstart = lexer->lexsize; - if ( body ) - CleanBodyAttrs( doc, body ); - - for (style = lexer->styles; style; style = style->next) - { - AddCharToLexer(lexer, ' '); - AddStringLiteral(lexer, style->tag); - AddCharToLexer(lexer, '.'); - AddStringLiteral(lexer, style->tag_class); - AddCharToLexer(lexer, ' '); - AddCharToLexer(lexer, '{'); - AddStringLiteral(lexer, style->properties); - AddCharToLexer(lexer, '}'); - AddCharToLexer(lexer, '\n'); - } - - lexer->txtend = lexer->lexsize; - - InsertNodeAtEnd( node, TextToken(lexer) ); - - /* - now insert style element into document head - - doc is root node. search its children for html node - the head node should be first child of html node - */ - if ( head = FindHEAD( doc ) ) - InsertNodeAtEnd( head, node ); -} - - -/* ensure bidirectional links are consistent */ -static void FixNodeLinks(Node *node) -{ - Node *child; - - if (node->prev) - node->prev->next = node; - else - node->parent->content = node; - - if (node->next) - node->next->prev = node; - else - node->parent->last = node; - - for (child = node->content; child; child = child->next) - child->parent = node; -} - -/* - used to strip child of node when - the node has one and only one child -*/ -static void StripOnlyChild(TidyDocImpl* doc, Node *node) -{ - Node *child; - - child = node->content; - node->content = child->content; - node->last = child->last; - child->content = null; - FreeNode(doc, child); - - for (child = node->content; child; child = child->next) - child->parent = node; -} - -/* used to strip font start and end tags */ -static void DiscardContainer( TidyDocImpl* doc, Node *element, Node **pnode) -{ - Node *node, *parent = element->parent; - - if (element->content) - { - element->last->next = element->next; - - if (element->next) - { - element->next->prev = element->last; - element->last->next = element->next; - } - else - parent->last = element->last; - - if (element->prev) - { - element->content->prev = element->prev; - element->prev->next = element->content; - } - else - parent->content = element->content; - - for (node = element->content; node; node = node->next) - node->parent = parent; - - *pnode = element->content; - } - else - { - if (element->next) - element->next->prev = element->prev; - else - parent->last = element->prev; - - if (element->prev) - element->prev->next = element->next; - else - parent->content = element->next; - - *pnode = element->next; - } - - element->next = element->content = null; - FreeNode(doc, element); -} - -/* - Create new string that consists of the - combined style properties in s1 and s2 - - To merge property lists, we build a linked - list of property/values and insert properties - into the list in order, merging values for - the same property name. -*/ -static tmbstr MergeProperties( ctmbstr s1, ctmbstr s2 ) -{ - tmbstr s; - StyleProp *prop; - - prop = CreateProps(null, s1); - prop = CreateProps(prop, s2); - s = CreatePropString(prop); - FreeStyleProps(prop); - return s; -} - -/* - Add style property to element, creating style - attribute as needed and adding ; delimiter -*/ -static void AddStyleProperty(TidyDocImpl* doc, Node *node, ctmbstr property ) -{ - AttVal *av = GetAttrByName( node, "style" ); - - - /* if style attribute already exists then insert property */ - - if ( av ) - { - tmbstr s = MergeProperties( av->value, property ); - MemFree( av->value ); - av->value = s; - } - else /* else create new style attribute */ - { - av = NewAttribute(); - av->attribute = tmbstrdup("style"); - av->value = tmbstrdup(property); - av->delim = '"'; - av->dict = FindAttribute( doc, av ); - av->next = node->attributes; - node->attributes = av; - } -} - -static void MergeClasses(TidyDocImpl* doc, Node *node, Node *child) -{ - AttVal *av; - tmbstr s1, s2, names; - - for (s2 = null, av = child->attributes; av; av = av->next) - { - if (tmbstrcmp(av->attribute, "class") == 0) - { - s2 = av->value; - break; - } - } - - for (s1 = null, av = node->attributes; av; av = av->next) - { - if (tmbstrcmp(av->attribute, "class") == 0) - { - s1 = av->value; - break; - } - } - - if (s1) - { - if (s2) /* merge class names from both */ - { - int l1, l2; - l1 = tmbstrlen(s1); - l2 = tmbstrlen(s2); - names = (tmbstr) MemAlloc(l1 + l2 + 2); - tmbstrcpy(names, s1); - names[l1] = ' '; - tmbstrcpy(names+l1+1, s2); - MemFree(av->value); - av->value = names; - } - } - else if (s2) /* copy class names from child */ - { - av = NewAttribute(); - av->attribute = tmbstrdup("class"); - av->value = tmbstrdup(s2); - av->delim = '"'; - av->dict = FindAttribute(doc, av); - av->next = node->attributes; - node->attributes = av; - } -} - -static void MergeStyles(TidyDocImpl* doc, Node *node, Node *child) -{ - AttVal *av; - tmbstr s1, s2, style; - - /* - the child may have a class attribute used - for attaching styles, if so the class name - needs to be copied to node's class - */ - MergeClasses(doc, node, child); - - for (s2 = null, av = child->attributes; av; av = av->next) - { - if (tmbstrcmp(av->attribute, "style") == 0) - { - s2 = av->value; - break; - } - } - - for (s1 = null, av = node->attributes; av; av = av->next) - { - if (tmbstrcmp(av->attribute, "style") == 0) - { - s1 = av->value; - break; - } - } - - if (s1) - { - if (s2) /* merge styles from both */ - { - style = MergeProperties(s1, s2); - MemFree(av->value); - av->value = style; - } - } - else if (s2) /* copy style of child */ - { - av = NewAttribute(); - av->attribute = tmbstrdup("style"); - av->value = tmbstrdup(s2); - av->delim = '"'; - av->dict = FindAttribute(doc, av); - av->next = node->attributes; - node->attributes = av; - } -} - -static ctmbstr FontSize2Name( ctmbstr size, tmbstr buf ) -{ - static const ctmbstr sizes[7] = - { - "60%", "70%", "80%", null, - "120%", "150%", "200%" - }; - - if ('0' <= size[0] && size[0] <= '6') - { - int n = size[0] - '0'; - return sizes[n]; - } - - if (size[0] == '-') - { - if ('0' <= size[1] && size[1] <= '6') - { - int n = size[1] - '0'; - double x; - - for (x = 1; n > 0; --n) - x *= 0.8; - - x *= 100; - sprintf(buf, "%d%%", (int)(x)); - return buf; - } - return "smaller"; /*"70%"; */ - } - - if ('0' <= size[1] && size[1] <= '6') - { - int n = size[1] - '0'; - double x; - - for (x = 1; n > 0; --n) - x *= 1.2; - - x *= 100; - sprintf(buf, "%d%%", (int)(x)); - return buf; - } - - return "larger"; /* "140%" */ -} - -static void AddFontFace( TidyDocImpl* doc, Node *node, ctmbstr face ) -{ - tmbchar buf[256]; - sprintf( buf, "font-family: %s", face ); - AddStyleProperty( doc, node, buf ); -} - -static void AddFontSize( TidyDocImpl* doc, Node* node, ctmbstr size ) -{ - tmbchar work[ 32 ] = {0}; - ctmbstr value = null; - - if ( nodeIsP(node) ) - { - if ( tmbstrcmp(size, "6") == 0 ) - value = "h1"; - else if (tmbstrcmp(size, "5") == 0 ) - value = "h2"; - else if (tmbstrcmp(size, "4") == 0 ) - value = "h3"; - - if ( value ) - { - MemFree( node->element ); - node->element = tmbstrdup( value ); - FindTag( doc, node ); - } - } - else if ( value = FontSize2Name(size, work) ) - { - tmbchar buf[64]; - sprintf(buf, "font-size: %s", value); - AddStyleProperty( doc, node, buf ); - } -} - -static void AddFontColor( TidyDocImpl* doc, Node *node, ctmbstr color) -{ - tmbchar buf[128]; - sprintf(buf, "color: %s", color); - AddStyleProperty( doc, node, buf ); -} - -/* force alignment value to lower case */ -static void AddAlign( TidyDocImpl* doc, Node *node, ctmbstr align ) -{ - tmbchar buf[128], *p; - - tmbstrcpy( buf, "text-align: " ); - for ( p = buf + 12; *p++ = (tmbchar)ToLower(*align++); /**/ ) - /**/; - AddStyleProperty( doc, node, buf ); -} - -/* - add style properties to node corresponding to - the font face, size and color attributes -*/ -static void AddFontStyles( TidyDocImpl* doc, Node *node, AttVal *av) -{ - while (av) - { - if (tmbstrcmp(av->attribute, "face") == 0) - AddFontFace( doc, node, av->value ); - else if (tmbstrcmp(av->attribute, "size") == 0) - AddFontSize( doc, node, av->value ); - else if (tmbstrcmp(av->attribute, "color") == 0) - AddFontColor( doc, node, av->value ); - - av = av->next; - } -} - -/* - Symptom:

    - Action:

    -*/ -static void TextAlign( TidyDocImpl* doc, Node* node ) -{ - AttVal *av, *prev; - - prev = null; - - for (av = node->attributes; av; av = av->next) - { - if (tmbstrcmp(av->attribute, "align") == 0) - { - if (prev) - prev->next = av->next; - else - node->attributes = av->next; - - MemFree(av->attribute); - - if (av->value) - { - AddAlign( doc, node, av->value ); - MemFree(av->value); - } - - MemFree(av); - break; - } - - prev = av; - } -} - -/* - The clean up rules use the pnode argument to return the - next node when the original node has been deleted -*/ - -/* - Symptom:

  • where
  • is only child - Action: coerce
  • to
    with indent. -*/ - -static Bool Dir2Div( TidyDocImpl* doc, Node *node, Node **pnode) -{ - Node *child; - - if ( nodeIsDIR(node) || nodeIsUL(node) || nodeIsOL(node) ) - { - child = node->content; - - if (child == null) - return no; - - /* check child has no peers */ - - if (child->next) - return no; - - if ( !nodeIsLI(child) ) - return no; - - if ( !child->implicit ) - return no; - - /* coerce dir to div */ - node->tag = LookupTagDef( TidyTag_DIV ); - MemFree( node->element ); - node->element = tmbstrdup("div"); - AddStyleProperty( doc, node, "margin-left: 2em" ); - StripOnlyChild( doc, node ); - return yes; - } - - return no; -} - -/* - Symptom:
    - Action: replace
    by
    -*/ - -static Bool Center2Div( TidyDocImpl* doc, Node *node, Node **pnode) -{ - Lexer *lexer = doc->lexer; - - if ( nodeIsCENTER(node) ) - { - if ( cfgBool(doc, TidyDropFontTags) ) - { - if (node->content) - { - Node *last = node->last, *parent = node->parent; - DiscardContainer( doc, node, pnode ); - node = InferredTag( doc, "br" ); - - if (last->next) - last->next->prev = node; - - node->next = last->next; - last->next = node; - node->prev = last; - - if (parent->last == last) - parent->last = node; - - node->parent = parent; - } - else - { - Node *prev = node->prev, *next = node->next, *parent = node->parent; - DiscardContainer( doc, node, pnode ); - - node = InferredTag( doc, "br" ); - node->next = next; - node->prev = prev; - node->parent = parent; - - if (next) - next->prev = node; - else - parent->last = node; - - if (prev) - prev->next = node; - else - parent->content = node; - } - - return yes; - } - - RenameElem( node, TidyTag_DIV ); - AddStyleProperty( doc, node, "text-align: center" ); - return yes; - } - - return no; -} - -/* - Symptom
    ...
    - Action: merge the two divs - - This is useful after nested
    s used by Word - for indenting have been converted to
    s -*/ -static Bool MergeDivs( TidyDocImpl* doc, Node *node, Node **pnode) -{ - Node *child; - - if ( !nodeIsDIV(node) ) - return no; - - child = node->content; - - if (!child) - return no; - - if ( !nodeIsDIV(child) ) - return no; - - if (child->next != null) - return no; - - MergeStyles( doc, node, child ); - StripOnlyChild( doc, node ); - return yes; -} - -/* - Symptom:
      • ...
    - Action: discard outer list -*/ - -static Bool NestedList( TidyDocImpl* doc, Node *node, Node **pnode ) -{ - Node *child, *list; - - if ( nodeIsUL(node) || nodeIsOL(node) ) - { - child = node->content; - - if (child == null) - return no; - - /* check child has no peers */ - - if (child->next) - return no; - - list = child->content; - - if (!list) - return no; - - if (list->tag != node->tag) - return no; - - *pnode = list; /* Set node to resume iteration */ - - /* move inner list node into position of outer node */ - list->prev = node->prev; - list->next = node->next; - list->parent = node->parent; - FixNodeLinks(list); - - /* get rid of outer ul and its li */ - /* XXX: Are we leaking the child node? -creitzel 7 Jun, 01 */ - child->content = null; - node->content = null; - node->next = null; - FreeNode( doc, node ); - node = null; - - /* - If prev node was a list the chances are this node - should be appended to that list. Word has no way of - recognizing nested lists and just uses indents - */ - - if (list->prev) - { - if ( nodeIsUL(list->prev) || nodeIsOL(list->prev) ) - { - node = list; - list = node->prev; - list->next = node->next; - - if (list->next) - list->next->prev = list; - - child = list->last; /*
  • */ - - node->parent = child; - node->next = null; - node->prev = child->last; - FixNodeLinks(node); - CleanNode( doc, node ); - } - } - - return yes; - } - - return no; -} - -/* - Symptom: the only child of a block-level element is a - presentation element such as B, I or FONT - - Action: add style "font-weight: bold" to the block and - strip the element, leaving its children. - - example: - -

    - Draft Recommended Practice -

    - - becomes: - -

    - Draft Recommended Practice -

    - - This code also replaces the align attribute by a style attribute. - However, to avoid CSS problems with Navigator 4, this isn't done - for the elements: caption, tr and table -*/ -static Bool BlockStyle( TidyDocImpl* doc, Node *node, Node **pnode ) -{ - Node *child; - - if (node->tag->model & (CM_BLOCK | CM_LIST | CM_DEFLIST | CM_TABLE)) - { - if ( !nodeIsTABLE(node) && !nodeIsTR(node) && !nodeIsLI(node) ) - { - /* check for align attribute */ - if ( !nodeIsCAPTION(node) ) - TextAlign( doc, node ); - - child = node->content; - if (child == null) - return no; - - /* check child has no peers */ - if (child->next) - return no; - - if ( nodeIsB(child) ) - { - MergeStyles( doc, node, child ); - AddStyleProperty( doc, node, "font-weight: bold" ); - StripOnlyChild( doc, node ); - return yes; - } - - if ( nodeIsI(child) ) - { - MergeStyles( doc, node, child ); - AddStyleProperty( doc, node, "font-style: italic" ); - StripOnlyChild( doc, node ); - return yes; - } - - if ( nodeIsFONT(child) ) - { - MergeStyles( doc, node, child ); - AddFontStyles( doc, node, child->attributes ); - StripOnlyChild( doc, node ); - return yes; - } - } - } - - return no; -} - -/* the only child of table cell or an inline element such as em */ -static Bool InlineStyle( TidyDocImpl* doc, Node *node, Node **pnode ) -{ - Node *child; - - if ( !nodeIsFONT(node) && nodeHasCM(node, CM_INLINE|CM_ROW) ) - { - child = node->content; - - if (child == null) - return no; - - /* check child has no peers */ - - if (child->next) - return no; - - if ( nodeIsB(child) && cfgBool(doc, TidyLogicalEmphasis) ) - { - MergeStyles( doc, node, child ); - AddStyleProperty( doc, node, "font-weight: bold" ); - StripOnlyChild( doc, node ); - return yes; - } - - if ( nodeIsI(child) && cfgBool(doc, TidyLogicalEmphasis) ) - { - MergeStyles( doc, node, child ); - AddStyleProperty( doc, node, "font-style: italic" ); - StripOnlyChild( doc, node ); - return yes; - } - - if ( nodeIsFONT(child) ) - { - MergeStyles( doc, node, child ); - AddFontStyles( doc, node, child->attributes ); - StripOnlyChild( doc, node ); - return yes; - } - } - - return no; -} - -/* - Replace font elements by span elements, deleting - the font element's attributes and replacing them - by a single style attribute. -*/ -static Bool Font2Span( TidyDocImpl* doc, Node *node, Node **pnode ) -{ - AttVal *av, *style, *next; - - if ( nodeIsFONT(node) ) - { - if ( cfgBool(doc, TidyDropFontTags) ) - { - DiscardContainer( doc, node, pnode ); - return no; - } - - /* if FONT is only child of parent element then leave alone */ - if ( node->parent->content == node && node->next == null ) - return no; - - AddFontStyles( doc, node, node->attributes ); - - /* extract style attribute and free the rest */ - av = node->attributes; - style = null; - - while (av) - { - next = av->next; - - if ( tmbstrcmp(av->attribute, "style") == 0 ) - { - av->next = null; - style = av; - } - else - { - FreeAttribute( av ); - } - av = next; - } - - node->attributes = style; - RenameElem( node, TidyTag_SPAN ); - return yes; - } - - return no; -} - -static Bool IsElement(Node *node) -{ - return (node->type == StartTag || node->type == StartEndTag ? yes : no); -} - -/* - Applies all matching rules to a node. -*/ -Node* CleanNode( TidyDocImpl* doc, Node *node ) -{ - Node *next = null; - - for (next = node; node && IsElement(node); node = next) - { - if ( Dir2Div(doc, node, &next) ) - continue; - - /* Special case: true result means - ** that arg node and its parent no longer exist. - ** So we must jump back up the CreateStyleProperties() - ** call stack until we have a valid node reference. - */ - if ( NestedList(doc, node, &next) ) - return next; - - if ( Center2Div(doc, node, &next) ) - continue; - - if ( MergeDivs(doc, node, &next) ) - continue; - - if ( BlockStyle(doc, node, &next) ) - continue; - - if ( InlineStyle(doc, node, &next) ) - continue; - - if ( Font2Span(doc, node, &next) ) - continue; - - break; - } - - return next; -} - -/* Special case: if the current node is destroyed by -** CleanNode() lower in the tree, this node and its parent -** no longer exist. So we must jump back up the CleanTree() -** call stack until we have a valid node reference. -*/ - -static Node* CleanTree( TidyDocImpl* doc, Node *node, Node** prepl) -{ - if (node->content) - { - Node *child, *repl = node; - for (child = node->content; child != null; child = child->next) - { - child = CleanTree( doc, child, &repl ); - if ( repl != node ) - return repl; - if ( !child ) - break; - } - } - - return CleanNode( doc, node ); -} - -static void DefineStyleRules( TidyDocImpl* doc, Node *node ) -{ - Node *child; - - if (node->content) - { - for (child = node->content; - child != null; child = child->next) - { - DefineStyleRules( doc, child ); - } - } - - Style2Rule( doc, node ); -} - -void CleanDocument( TidyDocImpl* doc ) -{ - /* placeholder. CleanTree()/CleanNode() will not - ** zap root element - */ - Node* repl = doc->root; - CleanTree( doc, doc->root, &repl ); - - if ( cfgBool(doc, TidyMakeClean) ) - { - DefineStyleRules( doc, doc->root ); - CreateStyleElement( doc ); - } -} - -/* simplifies ... ... etc. */ -void NestedEmphasis( TidyDocImpl* doc, Node* node ) -{ - Node *next; - - while (node) - { - next = node->next; - - if ( (nodeIsB(node) || nodeIsI(node)) - && node->parent && node->parent->tag == node->tag) - { - /* strip redundant inner element */ - DiscardContainer( doc, node, &next ); - node = next; - continue; - } - - if ( node->content ) - NestedEmphasis( doc, node->content ); - - node = next; - } -} - - - -/* replace i by em and b by strong */ -void EmFromI( TidyDocImpl* doc, Node* node ) -{ - while (node) - { - if ( nodeIsI(node) ) - RenameElem( node, TidyTag_EM ); - else if ( nodeIsB(node) ) - RenameElem( node, TidyTag_STRONG ); - - if ( node->content ) - EmFromI( doc, node->content ); - - node = node->next; - } -} - -static Bool HasOneChild(Node *node) -{ - return (node->content && node->content->next == null); -} - -/* - Some people use dir or ul without an li - to indent the content. The pattern to - look for is a list with a single implicit - li. This is recursively replaced by an - implicit blockquote. -*/ -void List2BQ( TidyDocImpl* doc, Node* node ) -{ - while (node) - { - if (node->content) - List2BQ( doc, node->content ); - - if ( node->tag && node->tag->parser == ParseList && - HasOneChild(node) && node->content->implicit ) - { - StripOnlyChild( doc, node ); - RenameElem( node, TidyTag_BLOCKQUOTE ); - node->implicit = yes; - } - - node = node->next; - } -} - - -/* - Replace implicit blockquote by div with an indent - taking care to reduce nested blockquotes to a single - div with the indent set to match the nesting depth -*/ -void BQ2Div( TidyDocImpl* doc, Node *node ) -{ - tmbchar indent_buf[ 32 ]; - int indent; - size_t len; - AttVal *attval; - - while (node) - { - if ( nodeIsBLOCKQUOTE(node) && node->implicit ) - { - indent = 1; - - while( HasOneChild(node) && - nodeIsBLOCKQUOTE(node->content) && - node->implicit) - { - ++indent; - StripOnlyChild( doc, node ); - } - - if (node->content) - BQ2Div( doc, node->content ); - - len = sprintf(indent_buf, "margin-left: %dem", 2*indent); - - RenameElem( node, TidyTag_DIV ); - - attval = GetAttrByName( node, "style" ); - if (attval) - { - tmbstr s = (tmbstr) MemAlloc(len + 3 + tmbstrlen(attval->value)); - tmbstrcpy(s, indent_buf); - tmbstrcat(s, "; "); - tmbstrcat(s, attval->value); - - MemFree(attval->value); - attval->value = s; - } - else - { - AddAttribute( doc, node, "style", indent_buf ); - } - } - else if (node->content) - BQ2Div( doc, node->content ); - - node = node->next; - } -} - - -Node* FindEnclosingCell( TidyDocImpl* doc, Node *node) -{ - Node *check; - - for ( check=node; check; check = check->parent ) - { - if ( nodeIsTD(check) ) - return check; - } - return null; -} - -/* node is prune up to */ -static Node* PruneSection( TidyDocImpl* doc, Node *node ) -{ - Lexer* lexer = doc->lexer; - - for (;;) - { - ctmbstr lexbuf = lexer->lexbuf + node->start; - if ( tmbstrncmp(lexbuf, "if !supportEmptyParas", 21) == 0 ) - { - Node* cell = FindEnclosingCell( doc, node ); - if ( cell ) - { - /* Need to put   into cell so it doesn't look weird - */ - Node* nbsp = NewLiteralTextNode( lexer, "\240" ); - assert( (byte)'\240' == (byte)160 ); - InsertNodeBeforeElement( node, nbsp ); - } - } - - /* discard node and returns next */ - node = DiscardElement( doc, node ); - - if (node == null) - return null; - - if (node->type == SectionTag) - { - if (tmbstrncmp(lexer->lexbuf + node->start, "if", 2) == 0) - { - node = PruneSection( doc, node ); - continue; - } - - if (tmbstrncmp(lexer->lexbuf + node->start, "endif", 5) == 0) - { - node = DiscardElement( doc, node ); - break; - } - } - } - - return node; -} - -void DropSections( TidyDocImpl* doc, Node* node ) -{ - Lexer* lexer = doc->lexer; - while (node) - { - if (node->type == SectionTag) - { - /* prune up to matching endif */ - if ((tmbstrncmp(lexer->lexbuf + node->start, "if", 2) == 0) && - (tmbstrncmp(lexer->lexbuf + node->start, "if !vml", 7) != 0)) /* #444394 - fix 13 Sep 01 */ - { - node = PruneSection( doc, node ); - continue; - } - - /* discard others as well */ - node = DiscardElement( doc, node ); - continue; - } - - if (node->content) - DropSections( doc, node->content ); - - node = node->next; - } -} - -static void PurgeWord2000Attributes( TidyDocImpl* doc, Node* node ) -{ - AttVal *attr, *next, *prev = null; - - for ( attr = node->attributes; attr; attr = next ) - { - next = attr->next; - - /* special check for class="Code" denoting pre text */ - /* Pass thru user defined styles as HTML class names */ - if (tmbstrcmp(attr->attribute, "class") == 0) - { - if ( tmbstrcmp(attr->value, "Code") == 0 || - tmbstrncmp(attr->value, "Mso", 3) != 0 ) - { - prev = attr; - continue; - } - } - - if ( tmbstrcmp(attr->attribute, "class") == 0 || - tmbstrcmp(attr->attribute, "style") == 0 || - tmbstrcmp(attr->attribute, "lang") == 0 || - tmbstrncmp(attr->attribute, "x:", 2) == 0 || - ( ( tmbstrcmp(attr->attribute, "height") == 0 || - tmbstrcmp(attr->attribute, "width") == 0 ) && - ( nodeIsTD(node) || nodeIsTR(node) || nodeIsTH(node) ) - ) - ) - { - if (prev) - prev->next = next; - else - node->attributes = next; - - FreeAttribute( attr ); - } - else - prev = attr; - } -} - -/* Word2000 uses span excessively, so we strip span out */ -static Node* StripSpan( TidyDocImpl* doc, Node* span ) -{ - Node *node, *prev = null, *content; - - /* - deal with span elements that have content - by splicing the content in place of the span - after having processed it - */ - - CleanWord2000( doc, span->content ); - content = span->content; - - if (span->prev) - prev = span->prev; - else if (content) - { - node = content; - content = content->next; - RemoveNode(node); - InsertNodeBeforeElement(span, node); - prev = node; - } - - while (content) - { - node = content; - content = content->next; - RemoveNode(node); - InsertNodeAfterElement(prev, node); - prev = node; - } - - if (span->next == null) - span->parent->last = prev; - - node = span->next; - span->content = null; - DiscardElement( doc, span ); - return node; -} - -/* map non-breaking spaces to regular spaces */ -static void NormalizeSpaces( Lexer *lexer, Node *node ) -{ - while ( node ) - { - if ( node->content ) - NormalizeSpaces( lexer, node->content ); - - if (node->type == TextNode) - { - uint i, c; - tmbstr p = lexer->lexbuf + node->start; - - for (i = node->start; i < node->end; ++i) - { - c = (byte) lexer->lexbuf[i]; - - /* look for UTF-8 multibyte character */ - if ( c > 0x7F ) - i += GetUTF8( lexer->lexbuf + i, &c ); - - if ( c == 160 ) - c = ' '; - - p = PutUTF8(p, c); - } - } - - node = node->next; - } -} - -/* used to hunt for hidden preformatted sections */ -Bool NoMargins(Node *node) -{ - AttVal *attval = GetAttrByName(node, "style"); - - if ( !AttrHasValue(attval) ) - return no; - - /* search for substring "margin-top: 0" */ - if (!tmbsubstr(attval->value, "margin-top: 0")) - return no; - - /* search for substring "margin-bottom: 0" */ - if (!tmbsubstr(attval->value, "margin-bottom: 0")) - return no; - - return yes; -} - -/* does element have a single space as its content? */ -Bool SingleSpace( Lexer* lexer, Node* node ) -{ - if ( node->content ) - { - node = node->content; - - if ( node->next != null ) - return no; - - if ( node->type != TextNode ) - return no; - - if ( (node->end - node->start) == 1 && - lexer->lexbuf[node->start] == ' ' ) - return yes; - - if ( (node->end - node->start) == 2 ) - { - uint c = 0; - GetUTF8( lexer->lexbuf + node->start, &c ); - if ( c == 160 ) - return yes; - } - } - - return no; -} - -/* - This is a major clean up to strip out all the extra stuff you get - when you save as web page from Word 2000. It doesn't yet know what - to do with VML tags, but these will appear as errors unless you - declare them as new tags, such as o:p which needs to be declared - as inline. -*/ -void CleanWord2000( TidyDocImpl* doc, Node *node) -{ - /* used to a list from a sequence of bulletted p's */ - Lexer* lexer = doc->lexer; - Node* list = null; - - while ( node ) - { - /* get rid of Word's xmlns attributes */ - if ( nodeIsHTML(node) ) - { - /* check that it's a Word 2000 document */ - if ( !GetAttrByName(node, "xmlns:o") && - !cfgBool(doc, TidyMakeBare) ) - return; - - FreeAttrs( doc, node ); - } - - /* fix up preformatted sections by looking for a - ** sequence of paragraphs with zero top/bottom margin - */ - if ( nodeIsP(node) ) - { - if (NoMargins(node)) - { - Node *pre, *next; - CoerceNode( doc, node, TidyTag_PRE ); - - PurgeWord2000Attributes( doc, node ); - - if (node->content) - CleanWord2000( doc, node->content ); - - pre = node; - node = node->next; - - /* continue to strip p's */ - - while ( nodeIsP(node) && NoMargins(node) ) - { - next = node->next; - RemoveNode(node); - InsertNodeAtEnd(pre, NewLineNode(lexer)); - InsertNodeAtEnd(pre, node); - StripSpan( doc, node ); - node = next; - } - - if (node == null) - break; - } - } - - if (node->tag && (node->tag->model & CM_BLOCK) - && SingleSpace(lexer, node)) - { - node = StripSpan( doc, node ); - continue; - } - /* discard Word's style verbiage */ - if ( nodeIsSTYLE(node) || nodeIsMETA(node) || - node->type == CommentTag ) - { - node = DiscardElement( doc, node ); - continue; - } - - /* strip out all span and font tags Word scatters so liberally! */ - if ( nodeIsSPAN(node) || nodeIsFONT(node) ) - { - node = StripSpan( doc, node ); - continue; - } - - if ( nodeIsLINK(node) ) - { - AttVal *attr = GetAttrByName(node, "rel"); - - if (attr && tmbstrcmp(attr->value, "File-List") == 0) - { - node = DiscardElement( doc, node ); - continue; - } - } - - /* discard empty paragraphs */ - - if ( node->content == null && nodeIsP(node) ) - { - /* Use the existing function to ensure consistency */ - node = TrimEmptyElement( doc, node ); - continue; - } - - if ( nodeIsP(node) ) - { - AttVal *attr, *atrStyle; - - attr = GetAttrByName(node, "class"); - atrStyle = GetAttrByName(node, "style"); - /* - (JES) Sometimes Word marks a list item with the following hokie syntax -

    to

      ...
    */ - /* map

    to

      ...
    */ - if ( AttrMatches(attr, "MsoListBullet") || - AttrMatches(attr, "MsoListNumber") || - AttrContains(atrStyle, "mso-list:") ) - { - TidyTagId listType = TidyTag_UL; - if ( attr && tmbstrcmp(attr->value, "MsoListNumber") == 0 ) - listType = TidyTag_OL; - - CoerceNode( doc, node, TidyTag_LI ); - - if ( !list || TagId(list) != listType ) - { - const Dict* tag = LookupTagDef( listType ); - list = InferredTag( doc, tag->name ); - InsertNodeBeforeElement(node, list); - } - - PurgeWord2000Attributes( doc, node ); - - if ( node->content ) - CleanWord2000( doc, node->content ); - - /* remove node and append to contents of list */ - RemoveNode(node); - InsertNodeAtEnd(list, node); - node = list; - } - /* map sequence of

    to

    ...
    */ - else if (attr && tmbstrcmp(attr->value, "Code") == 0) - { - Node *br = NewLineNode(lexer); - NormalizeSpaces(lexer, node); - - if ( !list || TagId(list) != TidyTag_PRE ) - { - list = InferredTag( doc, "pre" ); - InsertNodeBeforeElement(node, list); - } - - /* remove node and append to contents of list */ - RemoveNode(node); - InsertNodeAtEnd(list, node); - StripSpan( doc, node ); - InsertNodeAtEnd(list, br); - node = list->next; - } - else - list = null; - } - else - list = null; - - /* strip out style and class attributes */ - if (node->type == StartTag || node->type == StartEndTag) - PurgeWord2000Attributes( doc, node ); - - if (node->content) - CleanWord2000( doc, node->content ); - - node = node->next; - } -} - -Bool IsWord2000( TidyDocImpl* doc ) -{ - AttVal *attval; - Node *node, *head; - Node *html = FindHTML( doc ); - - if (html && GetAttrByName(html, "xmlns:o")) - return yes; - - /* search for */ - head = FindHEAD( doc ); - - if (head) - { - for (node = head->content; node; node = node->next) - { - if ( !nodeIsMETA(node) ) - continue; - - attval = AttrGetById( node, TidyAttr_NAME ); - - if ( !AttrMatches(attval, "generator") ) - continue; - - attval = AttrGetById( node, TidyAttr_CONTENT ); - - if ( AttrContains(attval, "Microsoft") ) - return yes; - } - } - - return no; -} - -/* where appropriate move object elements from head to body */ -void BumpObject( TidyDocImpl* doc, Node *html ) -{ - Node *node, *next, *head = null, *body = null; - - if (!html) - return; - - for ( node = html->content; node != null; node = node->next ) - { - if ( nodeIsHEAD(node) ) - head = node; - - if ( nodeIsBODY(node) ) - body = node; - } - - if ( head != null && body != null ) - { - for (node = head->content; node != null; node = next) - { - next = node->next; - - if ( nodeIsOBJECT(node) ) - { - Node *child; - Bool bump = no; - - for (child = node->content; child != null; child = child->next) - { - /* bump to body unless content is param */ - if ( (child->type == TextNode && !IsBlank(doc->lexer, node)) - || !nodeIsPARAM(child) ) - { - bump = yes; - break; - } - } - - if ( bump ) - { - RemoveNode( node ); - InsertNodeAtStart( body, node ); - } - } - } - } -} - -void FixBrakes( TidyDocImpl* pDoc, Node *pParent ) -{ - Node *pNode; - Bool bBRDeleted = no; - - if (NULL == pParent) - return; - - /* First, check the status of All My Children */ - for ( pNode = pParent->content; NULL != pNode; pNode = pNode->next ) - { - FixBrakes( pDoc, pNode ); - } - - /* As long as my last child is a
    , move it to my last peer */ - if ( nodeCMIsBlock( pParent )) - { - for ( pNode = pParent->last; - NULL != pNode && nodeIsBR( pNode ); - pNode = pParent->last ) - { - if ( NULL == pNode->attributes && no == bBRDeleted ) - { - DiscardElement( pDoc, pNode ); - bBRDeleted = yes; - } - else - { - RemoveNode( pNode ); - InsertNodeAfterElement( pParent, pNode ); - } - } - TrimEmptyElement( pDoc, pParent ); - } -} - -void VerifyHTTPEquiv( TidyDocImpl* pDoc, Node *pHead ) -{ - if (!nodeIsHEAD( pHead )) - pHead = FindHEAD( pDoc ); - if (NULL != pHead) - { - /* Find any meta tag which has an http-equiv tag - where value is content-type */ - Node *pNode; - - for (pNode = pHead->content; NULL != pNode; pNode = pNode->next) - { - if (nodeIsMETA( pNode )) - { - AttVal *pAttVal; - if (NULL != (pAttVal = GetAttrByName( pNode, "http-equiv" ))) - { - if (0 != tmbstrcasecmp( pAttVal->value, "CONTENT-TYPE" )) - continue; - if (NULL != (pAttVal = GetAttrByName( pNode, "content" ))) - { - StyleProp *pFirstProp = null, *pLastProp = null, *prop = null; - tmbstr s, pszBegin, pszEnd; - - pszBegin = s = tmbstrdup( pAttVal->value ); - while ('\0' != *pszBegin) - { - while (isspace( *pszBegin )) - pszBegin++; - pszEnd = pszBegin; - while ('\0' != *pszEnd && ';' != *pszEnd) - pszEnd++; - if (';' == *pszEnd ) - *(pszEnd++) = '\0'; - if (pszEnd > pszBegin) - { - prop = (StyleProp *)MemAlloc(sizeof(StyleProp)); - prop->name = tmbstrdup( pszBegin ); - prop->value = null; - prop->next = null; - - if (null != pLastProp) - pLastProp->next = prop; - else - pFirstProp = prop; - pLastProp = prop; - pszBegin = pszEnd; - } - } - MemFree( s ); - - /* find the charset property */ - for (prop = pFirstProp; null != prop; prop = prop->next) - { - if (0 == tmbstrncasecmp( prop->name, "charset", 7 )) - { - ctmbstr enc = null; - - MemFree( prop->name ); - prop->name = MemAlloc( 32 ); - switch ( cfg( pDoc, TidyOutCharEncoding) ) - { - case RAW: enc = "raw"; break; - case ASCII: enc = "us-ascii"; break; - case LATIN1: enc = "iso-8859-1"; break; - case UTF8: enc = "UTF8"; break; - case ISO2022: enc = "iso-2022"; break; - case MACROMAN: enc = "mac"; break; - case WIN1252: enc = "windows-1252"; break; -#if SUPPORT_UTF16_ENCODINGS - case UTF16LE: enc = "UTF-16LE"; break; - case UTF16BE: enc = "UTF-16BE"; break; - case UTF16: enc = "UTF-16"; break; -#endif -#if SUPPORT_ASIAN_ENCODINGS - case BIG5: enc = "big5"; break; - case SHIFTJIS: enc = "shiftjis"; break; -#endif - } - sprintf( prop->name, "charset=%s", enc ); - s = CreatePropString( pFirstProp ); - MemFree( pAttVal->value ); - pAttVal->value = s; - FreeStyleProps(prop); - break; - } - } - } - } - } - } - } -} - -#define MissingVersion(ver, verWanted) (!(ver & verWanted) && !(ver & VERS_PROPRIETARY)) - -static Bool AttrCompliance( TidyDocImpl* doc, Node* node, uint versWanted ) -{ - Bool compliant = yes; - AttVal* attr = node->attributes; - for ( /**/; attr; attr = attr->next ) - { - uint attrVer = AttrVersions( attr ); - if ( MissingVersion(attrVer, versWanted) ) - { - ReportNonCompliantAttr( doc, node, attr, versWanted ); - compliant = no; - } - - /* No align, except on: , , , , - ** , , , - */ - if ( attrIsALIGN(attr) && VERS_HTML40_STRICT==versWanted ) - { - switch ( TagId(node) ) - { - case TidyTag_COL: - case TidyTag_COLGROUP: - case TidyTag_TBODY: - case TidyTag_TD: - case TidyTag_TFOOT: - case TidyTag_TH: - case TidyTag_THEAD: - case TidyTag_TR: - break; - - default: - ReportNonCompliantAttr( doc, node, attr, versWanted ); - compliant = no; - break; - } - } - } - return compliant; -} - -static Bool NodeCompliance( TidyDocImpl* doc, Node* node, uint versWanted ) -{ - Bool compliant = yes; - Bool checkCM = no; - - if ( !node ) - return no; - - switch ( node->type ) - { -#if 0 - case TidyNode_Root: /* Root */ - case TidyNode_DocType: /* DOCTYPE */ - case TidyNode_Comment: /* Comment */ - case TidyNode_ProcIns: /* Processing Instruction */ - break; -#endif - - case TidyNode_Text: /* Text */ - checkCM = yes; - break; - - case TidyNode_Start: /* Start Tag */ - case TidyNode_StartEnd: /* Start/End (empty) Tag */ - checkCM = !nodeCMIsBlock( node ); - compliant = AttrCompliance( doc, node, versWanted ); - if ( compliant ) - { - uint nodeVer = node->tag->versions; - if ( MissingVersion(nodeVer, versWanted) ) - { - ReportNonCompliantNode( doc, node, - OBSOLETE_ELEMENT, versWanted ); - compliant = no; - } - } - if ( compliant && VERS_HTML40_STRICT == versWanted ) - { - AttVal* attr = null; - switch ( TagId(node) ) - { - case TidyTag_BR: /* no clear */ - attr = AttrGetById( node, TidyAttr_CLEAR ); - break; - - case TidyTag_HR: /* no size, shade */ - attr = AttrGetById( node, TidyAttr_SIZE ); - if ( !attr ) - attr = AttrGetById( node, TidyAttr_NOSHADE ); - break; - - case TidyTag_IMG: /* no border */ - attr = AttrGetById( node, TidyAttr_BORDER ); - break; - - case TidyTag_LI: /* no value, type */ - attr = AttrGetById( node, TidyAttr_TYPE ); - if ( !attr ) - attr = AttrGetById( node, TidyAttr_VALUE ); - break; - - case TidyTag_OL: /* no start, type */ - attr = AttrGetById( node, TidyAttr_TYPE ); - if ( !attr ) - attr = AttrGetById( node, TidyAttr_START ); - break; - - case TidyTag_PRE: /* no width */ - attr = AttrGetById( node, TidyAttr_WIDTH ); - break; - - case TidyTag_SCRIPT: /* no language */ - attr = AttrGetById( node, TidyAttr_LANGUAGE ); - break; - - case TidyTag_TD: /* no width, height */ - case TidyTag_TH: - attr = AttrGetById( node, TidyAttr_WIDTH ); - if ( !attr ) - attr = AttrGetById( node, TidyAttr_HEIGHT ); - break; - - case TidyTag_UL: /* no type */ - attr = AttrGetById( node, TidyAttr_TYPE ); - break; - } - if ( attr ) - { - ReportNonCompliantAttr( doc, node, attr, versWanted ); - compliant = no; - } - } - break; - -#if 0 - case TidyNode_End: /* End Tag */ - case TidyNode_CDATA: /* Unparsed Text */ - case TidyNode_Section: /* XML Section */ - case TidyNode_Asp: /* ASP Source */ - case TidyNode_Jste: /* JSTE Source */ - case TidyNode_Php: /* PHP Source */ - case TidyNode_XmlDecl: /* XML Declaration */ - break; -#endif - } - - /* Check inline elements and text nodes - ** not a child of %block content model. - */ - if ( compliant && checkCM ) - { - Node* parent = node->parent; - if ( nodeIsBODY(parent) || - nodeIsMAP(parent) || - nodeIsBLOCKQUOTE(parent) || - nodeIsFORM(parent) || - nodeIsNOSCRIPT(parent) ) - { - ReportNonCompliantNode( doc, parent, - MIXED_CONTENT_IN_BLOCK, versWanted ); - } - } - - /* Scan all child nodes */ - for ( node=node->content; node; node = node->next ) - { - Bool comply = NodeCompliance( doc, node, versWanted ); - if ( compliant && !comply ) - compliant = no; - } - - return compliant; -} - -Bool HTMLVersionCompliance( TidyDocImpl* doc ) -{ - Bool compliant = no; - uint versWanted = VERS_HTML32; - uint dtmode = cfg( doc, TidyDoctypeMode ); - uint contver = (uint) doc->lexer->versions; - uint dtver = (uint) doc->lexer->doctype; - - if ( TidyDoctypeStrict == dtmode || VERS_HTML40_STRICT == dtver ) - versWanted = VERS_HTML40_STRICT; - else if ( TidyDoctypeLoose == dtmode || VERS_HTML40_LOOSE == dtver ) - versWanted = VERS_HTML40_LOOSE; - - compliant = ( (versWanted & contver) != 0 ); - if ( !compliant ) - NodeCompliance( doc, doc->root, versWanted ); - return compliant; -} - diff --git a/tidylib-src/src/clean.h b/tidylib-src/src/clean.h deleted file mode 100644 index 1a061b56..00000000 --- a/tidylib-src/src/clean.h +++ /dev/null @@ -1,82 +0,0 @@ -#ifndef __CLEAN_H__ -#define __CLEAN_H__ - -/* clean.h -- clean up misuse of presentation markup - - (c) 1998-2002 (W3C) MIT, INRIA, Keio University - See tidy.h for the copyright notice. - - CVS Info: - $Author: creitzel $ - $Date: 2003/02/16 19:33:10 $ - $Revision: 1.2 $ - -*/ - -void RenameElem( Node* node, TidyTagId tid ); - -Node* CleanNode( TidyDocImpl* doc, Node* node ); - -void FreeStyles( TidyDocImpl* doc ); - -/* Add class="foo" to node -*/ -void AddClass( TidyDocImpl* doc, Node* node, ctmbstr classname ); - -void CleanDocument( TidyDocImpl* doc ); - -/* simplifies ... ... etc. */ -void NestedEmphasis( TidyDocImpl* doc, Node* node ); - -/* replace i by em and b by strong */ -void EmFromI( TidyDocImpl* doc, Node* node ); - -/* - Some people use dir or ul without an li - to indent the content. The pattern to - look for is a list with a single implicit - li. This is recursively replaced by an - implicit blockquote. -*/ -void List2BQ( TidyDocImpl* doc, Node* node ); - -/* - Replace implicit blockquote by div with an indent - taking care to reduce nested blockquotes to a single - div with the indent set to match the nesting depth -*/ -void BQ2Div( TidyDocImpl* doc, Node* node ); - - -Node *FindEnclosingCell( TidyDocImpl* doc, Node* node ); - -void DropSections( TidyDocImpl* doc, Node* node ); - -/* used to hunt for hidden preformatted sections */ -Bool NoMargins(Node *node); - -/* does element have a single space as its content? */ -Bool IsSingleSpace(Lexer *lexer, Node *node); - - -/* - This is a major clean up to strip out all the extra stuff you get - when you save as web page from Word 2000. It doesn't yet know what - to do with VML tags, but these will appear as errors unless you - declare them as new tags, such as o:p which needs to be declared - as inline. -*/ -void CleanWord2000( TidyDocImpl* doc, Node *node); - -Bool IsWord2000( TidyDocImpl* doc ); - -/* where appropriate move object elements from head to body */ -void BumpObject( TidyDocImpl* doc, Node *html ); - -void FixBrakes( TidyDocImpl* pDoc, Node *pParent ); - -void VerifyHTTPEquiv( TidyDocImpl* pDoc, Node *pParent ); - -Bool HTMLVersionCompliance( TidyDocImpl* doc ); - -#endif /* __CLEAN_H__ */ diff --git a/tidylib-src/src/config.c b/tidylib-src/src/config.c deleted file mode 100644 index 93417afa..00000000 --- a/tidylib-src/src/config.c +++ /dev/null @@ -1,1554 +0,0 @@ -/* - config.c -- read config file and manage config properties - - (c) 1998-2003 (W3C) MIT, INRIA, Keio University - See tidy.h for the copyright notice. - - CVS Info : - - $Author: terry_teague $ - $Date: 2003/02/18 07:13:08 $ - $Revision: 1.46 $ - -*/ - -/* - config files associate a property name with a value. - - // comments can start at the beginning of a line - # comments can start at the beginning of a line - name: short values fit onto one line - name: a really long value that - continues on the next line - - property names are case insensitive and should be less than - 60 characters in length and must start at the begining of - the line, as whitespace at the start of a line signifies a - line continuation. -*/ - -#include "config.h" -#include "tidy-int.h" -#include "message.h" -#include "tmbstr.h" -#include "tags.h" - -int CharEncodingId( ctmbstr charenc ); /* returns -1 if not recognized */ - -void InitConfig( TidyDocImpl* doc ) -{ - ClearMemory( &doc->config, sizeof(TidyConfigImpl) ); - ResetConfigToDefault( doc ); -} - -void FreeConfig( TidyDocImpl* doc ) -{ - ResetConfigToDefault( doc ); - TakeConfigSnapshot( doc ); -} - - -/* Arrange so index can be cast to enum -*/ -static const ctmbstr boolPicks[] = -{ - "no", - "yes", - null -}; - -static const ctmbstr invBoolPicks[] = -{ - "yes", - "no", - null -}; - -static const ctmbstr autoBoolPicks[] = -{ - "no", - "yes", - "auto", - null -}; - -static const ctmbstr repeatAttrPicks[] = -{ - "keep-first", - "keep-last", - null -}; - -static const ctmbstr accessPicks[] = -{ - "0 - Tidy Classic", - "1 - Priority 1 Checks", - "2 - Priority 2 Checks", - "3 - Priority 3 Checks", - null -}; - -static const ctmbstr charEncPicks[] = -{ - "raw", - "ascii", - "latin0", - "latin1", - "utf8", - "iso2022", - "mac", - "win1252", - "ibm858", - -#if SUPPORT_UTF16_ENCODINGS - "utf16le", - "utf16be", - "utf16", -#endif - -#if SUPPORT_ASIAN_ENCODINGS - "big5", - "shiftjis", -#endif - - null -}; - -static const ctmbstr newlinePicks[] = -{ - "LF", - "CRLF", - "CR", - null -}; - -static const ctmbstr doctypePicks[] = -{ - "omit", - "auto", - "strict", - "transitional", - "user", - null -}; - -#define MU TidyMarkup -#define DG TidyDiagnostics -#define PP TidyPrettyPrint -#define CE TidyEncoding -#define MS TidyMiscellaneous - -#define IN TidyInteger -#define BL TidyBoolean -#define ST TidyString - -#define DLF DEFAULT_NL_CONFIG - -/* If Accessibility checks not supported, make config setting read-only */ -#if SUPPORT_ACCESSIBILITY_CHECKS -#define ParseAcc ParseInt -#else -#define ParseAcc null -#endif - -static const TidyOptionImpl option_defs[] = -{ - { TidyUnknownOption, MS, "unknown!", IN, 0, null, null }, - { TidyIndentSpaces, PP, "indent-spaces", IN, 2, ParseInt, null }, - { TidyWrapLen, PP, "wrap", IN, 68, ParseInt, null }, - { TidyTabSize, PP, "tab-size", IN, 8, ParseInt, null }, - - { TidyCharEncoding, CE, "char-encoding", IN, ASCII, ParseCharEnc, charEncPicks }, - { TidyInCharEncoding, CE, "input-encoding", IN, LATIN1, ParseCharEnc, charEncPicks }, - { TidyOutCharEncoding,CE, "output-encoding", IN, ASCII, ParseCharEnc, charEncPicks }, - { TidyNewline, CE, "newline", IN, DLF, ParseNewline, newlinePicks }, - - { TidyDoctypeMode, MU, "doctype-mode", IN, TidyDoctypeAuto, null, doctypePicks }, - { TidyDoctype, MU, "doctype", ST, null, ParseDocType, doctypePicks }, - - { TidyDuplicateAttrs, MU, "repeated-attributes", IN, 0, ParseRepeatAttr, repeatAttrPicks }, - { TidyAltText, MU, "alt-text", ST, null, ParseString, null }, - { TidySlideStyle, MS, "slide-style", ST, null, ParseName, null }, - { TidyErrFile, MS, "error-file", ST, null, ParseString, null }, - { TidyOutFile, MS, "output-file", ST, null, ParseString, null }, - { TidyWriteBack, MS, "write-back", BL, no, ParseBool, boolPicks }, - { TidyShowMarkup, PP, "markup", BL, yes, ParseBool, boolPicks }, - { TidyShowWarnings, DG, "show-warnings", BL, yes, ParseBool, boolPicks }, - { TidyQuiet, MS, "quiet", BL, no, ParseBool, boolPicks }, - { TidyIndentContent, PP, "indent", IN, TidyNoState, ParseIndent, autoBoolPicks }, - { TidyHideEndTags, MU, "hide-endtags", BL, no, ParseBool, boolPicks }, - { TidyXmlTags, MU, "input-xml", BL, no, ParseBool, boolPicks }, - { TidyXmlOut, MU, "output-xml", BL, no, ParseBool, boolPicks }, - { TidyXhtmlOut, MU, "output-xhtml", BL, no, ParseBool, boolPicks }, - { TidyHtmlOut, MU, "output-html", BL, no, ParseBool, boolPicks }, - { TidyXmlDecl, MU, "add-xml-decl", BL, no, ParseBool, boolPicks }, - { TidyUpperCaseTags, MU, "uppercase-tags", BL, no, ParseBool, boolPicks }, - { TidyUpperCaseAttrs, MU, "uppercase-attributes", BL, no, ParseBool, boolPicks }, - { TidyMakeBare, MU, "bare", BL, no, ParseBool, boolPicks }, - { TidyMakeClean, MU, "clean", BL, no, ParseBool, boolPicks }, - { TidyLogicalEmphasis,MU, "logical-emphasis", BL, no, ParseBool, boolPicks }, - { TidyDropPropAttrs, MU, "drop-proprietary-attributes", BL,no, ParseBool, boolPicks }, - { TidyDropFontTags, MU, "drop-font-tags", BL, no, ParseBool, boolPicks }, - { TidyDropEmptyParas, MU, "drop-empty-paras", BL, yes, ParseBool, boolPicks }, - { TidyFixComments, MU, "fix-bad-comments", BL, yes, ParseBool, boolPicks }, - { TidyBreakBeforeBR, PP, "break-before-br", BL, no, ParseBool, boolPicks }, - { TidyBurstSlides, PP, "split", BL, no, ParseBool, boolPicks }, - { TidyNumEntities, MU, "numeric-entities", BL, no, ParseBool, boolPicks }, - { TidyQuoteMarks, MU, "quote-marks", BL, no, ParseBool, boolPicks }, - { TidyQuoteNbsp, MU, "quote-nbsp", BL, yes, ParseBool, boolPicks }, - { TidyQuoteAmpersand, MU, "quote-ampersand", BL, yes, ParseBool, boolPicks }, - { TidyWrapAttVals, PP, "wrap-attributes", BL, no, ParseBool, boolPicks }, - { TidyWrapScriptlets, PP, "wrap-script-literals", BL, no, ParseBool, boolPicks }, - { TidyWrapSection, PP, "wrap-sections", BL, yes, ParseBool, boolPicks }, - { TidyWrapAsp, PP, "wrap-asp", BL, yes, ParseBool, boolPicks }, - { TidyWrapJste, PP, "wrap-jste", BL, yes, ParseBool, boolPicks }, - { TidyWrapPhp, PP, "wrap-php", BL, yes, ParseBool, boolPicks }, - { TidyFixBackslash, MU, "fix-backslash", BL, yes, ParseBool, boolPicks }, - { TidyIndentAttributes,PP,"indent-attributes", BL, no, ParseBool, boolPicks }, - { TidyXmlPIs, MU, "assume-xml-procins", BL, no, ParseBool, boolPicks }, - { TidyXmlSpace, MU, "add-xml-space", BL, no, ParseBool, boolPicks }, - { TidyEncloseBodyText,MU, "enclose-text", BL, no, ParseBool, boolPicks }, - { TidyEncloseBlockText,MU,"enclose-block-text", BL, no, ParseBool, boolPicks }, - { TidyKeepFileTimes, MS, "keep-time", BL, yes, ParseBool, boolPicks }, - { TidyWord2000, MU, "word-2000", BL, no, ParseBool, boolPicks }, - { TidyMark, MS, "tidy-mark", BL, yes, ParseBool, boolPicks }, - { TidyEmacs, MS, "gnu-emacs", BL, no, ParseBool, boolPicks }, - { TidyEmacsFile, MS, "gnu-emacs-file", ST, null, ParseString, null }, - { TidyLiteralAttribs, MU, "literal-attributes", BL, no, ParseBool, boolPicks }, - { TidyBodyOnly, MU, "show-body-only", BL, no, ParseBool, boolPicks }, - { TidyFixUri, MU, "fix-uri", BL, yes, ParseBool, boolPicks }, - { TidyLowerLiterals, MU, "lower-literals", BL, yes, ParseBool, boolPicks }, - { TidyHideComments, MU, "hide-comments", BL, no, ParseBool, boolPicks }, - { TidyIndentCdata, MU, "indent-cdata", BL, no, ParseBool, boolPicks }, - { TidyForceOutput, MS, "force-output", BL, no, ParseBool, boolPicks }, - { TidyShowErrors, DG, "show-errors", IN, 6, ParseInt, null }, - { TidyAsciiChars, CE, "ascii-chars", BL, yes, ParseBool, boolPicks }, - { TidyJoinClasses, MU, "join-classes", BL, no, ParseBool, boolPicks }, - { TidyJoinStyles, MU, "join-styles", BL, yes, ParseBool, boolPicks }, - { TidyEscapeCdata, MU, "escape-cdata", BL, no, ParseBool, boolPicks }, - -#if SUPPORT_ASIAN_ENCODINGS - { TidyLanguage, CE, "language", ST, null, ParseName, null }, - { TidyNCR, MU, "ncr", BL, yes, ParseBool, boolPicks }, -#endif -#if SUPPORT_UTF16_ENCODINGS - { TidyOutputBOM, CE, "output-bom", IN, TidyAutoState, ParseBOM, autoBoolPicks }, -#endif - - { TidyReplaceColor, MU, "replace-color", BL, no, ParseBool, boolPicks }, - { TidyCSSPrefix, MU, "css-prefix", ST, null, ParseCSS1Selector, null }, - - { TidyInlineTags, MU, "new-inline-tags", ST, null, ParseTagNames, NULL }, - { TidyBlockTags, MU, "new-blocklevel-tags", ST, null, ParseTagNames, NULL }, - { TidyEmptyTags, MU, "new-empty-tags", ST, null, ParseTagNames, NULL }, - { TidyPreTags, MU, "new-pre-tags", ST, null, ParseTagNames, NULL }, - - { TidyAccessibilityCheckLevel, DG, "accessibility-check", IN, 0, ParseAcc, accessPicks }, - { N_TIDY_OPTIONS, null } -}; - -/* Should only be called by options set by name -** thus, it is cheaper to do a few scans than set -** up every option in a hash table. -*/ -const TidyOptionImpl* lookupOption( ctmbstr s ) -{ - const TidyOptionImpl* np = option_defs; - for ( /**/; np < option_defs + N_TIDY_OPTIONS; ++np ) - { - if ( tmbstrcasecmp(s, np->name) == 0 ) - return np; - } - return null; -} - -const TidyOptionImpl* getOption( TidyOptionId optId ) -{ - if ( optId < N_TIDY_OPTIONS ) - return option_defs + optId; - return null; -} - - -static void FreeOptionValue( const TidyOptionImpl* option, uint value ) -{ - if ( value && option->type == TidyString && value != option->dflt ) - { - MemFree( (void*) value ); - } -} - -static void CopyOptionValue( const TidyOptionImpl* option, - uint* oldval, uint newval ) -{ - assert( oldval != null ); - FreeOptionValue( option, *oldval ); - - if ( newval && option->type == TidyString && newval != option->dflt ) - *oldval = (uint) tmbstrdup( (ctmbstr) newval ); - else - *oldval = newval; -} - - -Bool SetOptionValue( TidyDocImpl* doc, TidyOptionId optId, ctmbstr val ) -{ - const TidyOptionImpl* option = &option_defs[ optId ]; - Bool ok = ( optId < N_TIDY_OPTIONS ); - if ( ok ) - { - assert( option->id == optId && option->type == TidyString ); - FreeOptionValue( option, doc->config.value[ optId ] ); - doc->config.value[ optId ] = (uint) tmbstrdup( val ); - } - return ok; -} - -Bool SetOptionInt( TidyDocImpl* doc, TidyOptionId optId, uint val ) -{ - Bool ok = ( optId < N_TIDY_OPTIONS ); - if ( ok ) - { - assert( option_defs[ optId ].type == TidyInteger ); - doc->config.value[ optId ] = val; - } - return ok; -} - -Bool SetOptionBool( TidyDocImpl* doc, TidyOptionId optId, Bool val ) -{ - Bool ok = ( optId < N_TIDY_OPTIONS ); - if ( ok ) - { - assert( option_defs[ optId ].type == TidyBoolean ); - doc->config.value[ optId ] = val; - } - return ok; -} - -Bool ResetOptionToDefault( TidyDocImpl* doc, TidyOptionId optId ) -{ - Bool ok = ( optId > 0 && optId < N_TIDY_OPTIONS ); - if ( ok ) - { - const TidyOptionImpl* option = option_defs + optId; - uint* value = &doc->config.value[ optId ]; - assert( optId == option->id ); - CopyOptionValue( option, value, option->dflt ); - } - return ok; -} - -static void ReparseTagType( TidyDocImpl* doc, TidyOptionId optId ) -{ - ctmbstr tagdecl = cfgStr( doc, optId ); - tmbstr dupdecl = tmbstrdup( tagdecl ); - ParseConfigValue( doc, optId, dupdecl ); - MemFree( dupdecl ); -} - -/* Not efficient, but effective */ -static void ReparseTagDecls( TidyDocImpl* doc ) -{ - ctmbstr tagdecl = null; - FreeDeclaredTags( doc, 0 ); - if ( cfg(doc, TidyInlineTags) ) - ReparseTagType( doc, TidyInlineTags ); - if ( cfg(doc, TidyBlockTags) ) - ReparseTagType( doc, TidyBlockTags ); - if ( cfg(doc, TidyEmptyTags) ) - ReparseTagType( doc, TidyEmptyTags ); - if ( cfg(doc, TidyPreTags) ) - ReparseTagType( doc, TidyPreTags ); -} - -void ResetConfigToDefault( TidyDocImpl* doc ) -{ - uint ixVal; - const TidyOptionImpl* option = option_defs; - uint* value = &doc->config.value[ 0 ]; - for ( ixVal=0; ixVal < N_TIDY_OPTIONS; ++option, ++ixVal ) - { - assert( ixVal == (uint) option->id ); - CopyOptionValue( option, &value[ixVal], option->dflt ); - } - FreeDeclaredTags( doc, 0 ); -} - -void TakeConfigSnapshot( TidyDocImpl* doc ) -{ - uint ixVal; - const TidyOptionImpl* option = option_defs; - uint* value = &doc->config.value[ 0 ]; - uint* snap = &doc->config.snapshot[ 0 ]; - - AdjustConfig( doc ); /* Make sure it's consistent */ - for ( ixVal=0; ixVal < N_TIDY_OPTIONS; ++option, ++ixVal ) - { - assert( ixVal == (uint) option->id ); - CopyOptionValue( option, &snap[ixVal], value[ixVal] ); - } -} - -void ResetConfigToSnapshot( TidyDocImpl* doc ) -{ - uint ixVal; - const TidyOptionImpl* option = option_defs; - uint* value = &doc->config.value[ 0 ]; - uint* snap = &doc->config.snapshot[ 0 ]; - - for ( ixVal=0; ixVal < N_TIDY_OPTIONS; ++option, ++ixVal ) - { - assert( ixVal == (uint) option->id ); - CopyOptionValue( option, &value[ixVal], snap[ixVal] ); - } - FreeDeclaredTags( doc, 0 ); - ReparseTagDecls( doc ); -} - -void CopyConfig( TidyDocImpl* docTo, TidyDocImpl* docFrom ) -{ - if ( docTo != docFrom ) - { - uint ixVal; - const TidyOptionImpl* option = option_defs; - uint* from = &docFrom->config.value[ 0 ]; - uint* to = &docTo->config.value[ 0 ]; - - TakeConfigSnapshot( docTo ); - for ( ixVal=0; ixVal < N_TIDY_OPTIONS; ++option, ++ixVal ) - { - assert( ixVal == (uint) option->id ); - CopyOptionValue( option, &to[ixVal], from[ixVal] ); - } - ReparseTagDecls( docTo ); - AdjustConfig( docTo ); /* Make sure it's consistent */ - } -} - - -#ifdef _DEBUG - -/* Debug accessor functions will be type-safe and assert option type match */ -uint _cfgGet( TidyDocImpl* doc, TidyOptionId optId ) -{ - assert( 0 <= optId && optId < N_TIDY_OPTIONS ); - return doc->config.value[ optId ]; -} - -Bool _cfgGetBool( TidyDocImpl* doc, TidyOptionId optId ) -{ - uint val = _cfgGet( doc, optId ); - const TidyOptionImpl* opt = &option_defs[ optId ]; - assert( opt && opt->type == TidyBoolean ); - return (Bool) val; -} - -ctmbstr _cfgGetString( TidyDocImpl* doc, TidyOptionId optId ) -{ - uint val = _cfgGet( doc, optId ); - const TidyOptionImpl* opt = &option_defs[ optId ]; - assert( opt && opt->type == TidyString ); - return (ctmbstr) val; -} -#endif - - -/* for use with Gnu Emacs */ -void SetEmacsFilename( TidyDocImpl* doc, ctmbstr filename ) -{ - SetOptionValue( doc, TidyEmacsFile, filename ); -} - - -static tchar GetC( TidyConfigImpl* config ) -{ - if ( config->cfgIn ) - return ReadChar( config->cfgIn ); - return EndOfStream; -} - -static tchar FirstChar( TidyConfigImpl* config ) -{ - config->c = GetC( config ); - return config->c; -} - -static tchar AdvanceChar( TidyConfigImpl* config ) -{ - if ( config->c != EOF ) - config->c = GetC( config ); - return config->c; -} - -static tchar SkipWhite( TidyConfigImpl* config ) -{ - while ( IsWhite(config->c) && !IsNewline(config->c) ) - config->c = GetC( config ); - return config->c; -} - -/* skip until end of line -static tchar SkipToEndofLine( TidyConfigImpl* config ) -{ - while ( config->c != EOF ) - { - config->c = GetC( config ); - if ( config->c == '\n' || config->c == '\r' ) - break; - } - return config->c; -} -*/ - -/* - skip over line continuations - to start of next property -*/ -static uint NextProperty( TidyConfigImpl* config ) -{ - do - { - /* skip to end of line */ - while ( config->c != '\n' && config->c != '\r' && config->c != EOF ) - config->c = GetC( config ); - - /* treat \r\n \r or \n as line ends */ - if ( config->c == '\r' ) - config->c = GetC( config ); - - if ( config->c == '\n' ) - config->c = GetC( config ); - } - while ( IsWhite(config->c) ); /* line continuation? */ - - return config->c; -} - -/* - Tod Lewis contributed this code for expanding - ~/foo or ~your/foo according to $HOME and your - user name. This will only work on Unix systems. -*/ -ctmbstr ExpandTilde(ctmbstr filename) -{ -#ifdef SUPPORT_GETPWNAM - static char *expanded_filename; - - char *home_dir, *p; - struct passwd *passwd = null; - - if (!filename) return(null); - - if (filename[0] != '~') - return(filename); - - if (filename[1] == '/') - { - home_dir = getenv("HOME"); - if ( ! home_dir ) - return filename; - filename++; - } - else - { - ctmbstr s = filename + 1; - tmbstr t; - - while(*s && *s != '/') - s++; - - if (t = MemAlloc(s - filename)) - { - memcpy(t, filename+1, s-filename-1); - t[s-filename-1] = 0; - - passwd = getpwnam(t); - - MemFree(t); - } - - if (!passwd) - return(filename); - - filename = s; - home_dir = passwd->pw_dir; - } - - if ( p=MemRealloc(expanded_filename, tmbstrlen(filename)+tmbstrlen(home_dir)+1) ) - { - tmbstrcpy( expanded_filename = p, home_dir ); - tmbstrcat( expanded_filename, filename ); - return expanded_filename; - } -#endif /* SUPPORT_GETPWNAM */ - - return (ctmbstr) filename; -} - -#ifndef TIDY_MAX_NAME -#define TIDY_MAX_NAME 64 -#endif - -int ParseConfigFile( TidyDocImpl* doc, ctmbstr file ) -{ - return ParseConfigFileEnc( doc, file, "ascii" ); -} - -/* open the file and parse its contents -*/ -int ParseConfigFileEnc( TidyDocImpl* doc, ctmbstr file, ctmbstr charenc ) -{ - uint opterrs = doc->optionErrors; - tmbstr fname = (tmbstr) ExpandTilde( file ); - TidyConfigImpl* cfg = &doc->config; - FILE* fin = fopen( fname, "r" ); - int enc = CharEncodingId( charenc ); - - if ( fin == null || enc < 0 ) - FileError( doc, fname ); - else - { - tchar c; - cfg->cfgIn = FileInput( doc, fin, enc ); - c = FirstChar( cfg ); - - for ( c = SkipWhite(cfg); c != EOF; c = NextProperty(cfg) ) - { - uint ix = 0; - tmbchar name[ TIDY_MAX_NAME ] = {0}; - - /* // or # start a comment */ - if ( c == '/' || c == '#' ) - continue; - - while ( ix < sizeof(name)-1 && c != '\n' && c != EOF && c != ':' ) - { - name[ ix++ ] = (tmbchar) c; /* Option names all ASCII */ - c = AdvanceChar( cfg ); - } - - if ( c == ':' ) - { - const TidyOptionImpl* option = lookupOption( name ); - c = AdvanceChar( cfg ); - if ( option ) - option->parser( doc, option ); - else - { - if (null != doc->pOptCallback) - { - TidyConfigImpl* cfg = &doc->config; - tmbchar buf[8192]; - int i = 0; - tchar delim = 0; - Bool waswhite = yes; - - tchar c = SkipWhite( cfg ); - - if ( c == '"' || c == '\'' ) - { - delim = c; - c = AdvanceChar( cfg ); - } - - while ( i < sizeof(buf)-2 && c != EOF && c != '\r' && c != '\n' ) - { - if ( delim && c == delim ) - break; - - if ( IsWhite(c) ) - { - if ( waswhite ) - { - c = AdvanceChar( cfg ); - continue; - } - c = ' '; - } - else - waswhite = no; - - buf[i++] = (tmbchar) c; - c = AdvanceChar( cfg ); - } - buf[i] = '\0'; - if (no == (*doc->pOptCallback)( name, buf )) - ReportUnknownOption( doc, name ); - } - else - ReportUnknownOption( doc, name ); - } - } - } - - fclose( fin ); - MemFree( cfg->cfgIn ); - cfg->cfgIn = null; - } - - if ( fname != (tmbstr) file ) - MemFree( fname ); - - AdjustConfig( doc ); - - /* any new config errors? If so, return warning status. */ - return (doc->optionErrors > opterrs ? 1 : 0); -} - -/* returns false if unknown option, missing parameter, -** or option doesn't use parameter -*/ -Bool ParseConfigOption( TidyDocImpl* doc, ctmbstr optnam, ctmbstr optval ) -{ - const TidyOptionImpl* option = lookupOption( optnam ); - Bool ok = ( option != NULL ); - if ( !ok ) - { - /* Not a standard tidy option. Check to see if the user application - recognizes it */ - if (null != doc->pOptCallback) - ok = (*doc->pOptCallback)( optnam, optval ); - if (!ok) - ReportUnknownOption( doc, optnam ); - } - else - ok = ParseConfigValue( doc, option->id, optval ); - return ok; -} - -/* returns false if unknown option, missing parameter, -** or option doesn't use parameter -*/ -Bool ParseConfigValue( TidyDocImpl* doc, TidyOptionId optId, ctmbstr optval ) -{ - const TidyOptionImpl* option = option_defs + optId; - Bool ok = ( optId < N_TIDY_OPTIONS && optval != null ); - - if ( !ok ) - ReportBadArgument( doc, option->name ); - else - { - TidyBuffer inbuf = {0}; /* Set up input source */ - tidyBufAttach( &inbuf, (void*)optval, strlen(optval)+1 ); - doc->config.cfgIn = BufferInput( doc, &inbuf, ASCII ); - doc->config.c = GetC( &doc->config ); - - ok = option->parser( doc, option ); - - MemFree( doc->config.cfgIn ); /* Release input source */ - doc->config.cfgIn = null; - tidyBufDetach( &inbuf ); - } - return ok; -} - - -/* ensure that char encodings are self consistent */ -Bool AdjustCharEncoding( TidyDocImpl* doc, int encoding ) -{ - int outenc = -1; - int inenc = -1; - - switch( encoding ) - { - case MACROMAN: - inenc = MACROMAN; - outenc = ASCII; - break; - - case WIN1252: - inenc = WIN1252; - outenc = ASCII; - break; - - case IBM858: - inenc = IBM858; - outenc = ASCII; - break; - - case ASCII: - inenc = LATIN1; - outenc = ASCII; - break; - - case LATIN0: - inenc = LATIN0; - outenc = ASCII; - break; - - case RAW: - case LATIN1: - case UTF8: - case ISO2022: - -#if SUPPORT_UTF16_ENCODINGS - case UTF16LE: - case UTF16BE: - case UTF16: -#endif -#if SUPPORT_ASIAN_ENCODINGS - case SHIFTJIS: - case BIG5: -#endif - inenc = outenc = encoding; - break; - } - - if ( inenc >= 0 ) - { - SetOptionInt( doc, TidyCharEncoding, encoding ); - SetOptionInt( doc, TidyInCharEncoding, inenc ); - SetOptionInt( doc, TidyOutCharEncoding, outenc ); - return yes; - } - return no; -} - -/* ensure that config is self consistent */ -void AdjustConfig( TidyDocImpl* doc ) -{ - if ( cfgBool(doc, TidyEncloseBlockText) ) - SetOptionBool( doc, TidyEncloseBodyText, yes ); - - if ( !cfg(doc, TidyIndentContent) ) - SetOptionInt( doc, TidyIndentSpaces, 0 ); - - /* disable wrapping */ - if ( cfg(doc, TidyWrapLen) == 0 ) - SetOptionInt( doc, TidyWrapLen, 0x7FFFFFFF ); - - /* Word 2000 needs o:p to be declared as inline */ - if ( cfgBool(doc, TidyWord2000) ) - { - doc->config.defined_tags |= tagtype_inline; - DefineTag( doc, tagtype_inline, "o:p" ); - } - - /* #480701 disable XHTML output flag if both output-xhtml and xml input are set */ - if ( cfgBool(doc, TidyXmlTags) ) - SetOptionBool( doc, TidyXhtmlOut, no ); - - /* XHTML is written in lower case */ - if ( cfgBool(doc, TidyXhtmlOut) ) - { - SetOptionBool( doc, TidyXmlOut, yes ); - SetOptionBool( doc, TidyUpperCaseTags, no ); - SetOptionBool( doc, TidyUpperCaseAttrs, no ); - SetOptionBool( doc, TidyXmlPIs, yes ); - } - - /* if XML in, then XML out */ - if ( cfgBool(doc, TidyXmlTags) ) - { - SetOptionBool( doc, TidyXmlOut, yes ); - SetOptionBool( doc, TidyXmlPIs, yes ); - } - - /* #427837 - fix by Dave Raggett 02 Jun 01 - ** generate - ** if the output character encoding is Latin-1 etc. - */ - if ( cfg(doc, TidyOutCharEncoding) != ASCII && - cfg(doc, TidyOutCharEncoding) != UTF8 && -#if SUPPORT_UTF16_ENCODINGS - cfg(doc, TidyOutCharEncoding) != UTF16 && - cfg(doc, TidyOutCharEncoding) != UTF16BE && - cfg(doc, TidyOutCharEncoding) != UTF16LE && -#endif - cfgBool(doc, TidyXmlOut) ) - { - SetOptionBool( doc, TidyXmlDecl, yes ); - } - - /* XML requires end tags */ - if ( cfgBool(doc, TidyXmlOut) ) - { -#if SUPPORT_UTF16_ENCODINGS - /* XML requires a BOM on output if using UTF-16 encoding */ - uint enc = cfg( doc, TidyOutCharEncoding ); - if ( enc == UTF16LE || enc == UTF16BE || enc == UTF16 ) - SetOptionInt( doc, TidyOutputBOM, yes ); -#endif - SetOptionBool( doc, TidyQuoteAmpersand, yes ); - SetOptionBool( doc, TidyHideEndTags, no ); - } -} - -/* unsigned integers */ -Bool ParseInt( TidyDocImpl* doc, const TidyOptionImpl* entry ) -{ - uint number = 0; - Bool digits = no; - TidyConfigImpl* cfg = &doc->config; - tchar c = SkipWhite( cfg ); - - while ( IsDigit(c) ) - { - number = c - '0' + (10 * number); - digits = yes; - c = AdvanceChar( cfg ); - } - - if ( !digits ) - ReportBadArgument( doc, entry->name ); - else - SetOptionInt( doc, entry->id, number ); - return digits; -} - -/* true/false or yes/no or 0/1 or "auto" only looks at 1st char */ -Bool ParseTriState( TidyTriState theState, TidyDocImpl* doc, - const TidyOptionImpl* entry, uint* flag ) -{ - TidyConfigImpl* cfg = &doc->config; - tchar c = SkipWhite( cfg ); - - if (c == 't' || c == 'T' || c == 'y' || c == 'Y' || c == '1') - *flag = yes; - else if (c == 'f' || c == 'F' || c == 'n' || c == 'N' || c == '0') - *flag = no; - else if (theState == TidyAutoState && (c == 'a' || c =='A')) - *flag = TidyAutoState; - else - { - ReportBadArgument( doc, entry->name ); - return no; - } - - return yes; -} - -/* cr, lf or crlf */ -Bool ParseNewline( TidyDocImpl* doc, const TidyOptionImpl* entry ) -{ - int nl = -1; - tmbchar work[ 16 ] = {0}; - tmbstr cp = work, end = work + sizeof(work); - TidyConfigImpl* cfg = &doc->config; - tchar c = SkipWhite( cfg ); - - while ( c!=EndOfStream && cp < end && !IsWhite(c) && c != '\r' && c != '\n' ) - { - *cp++ = (tmbchar) c; - c = AdvanceChar( cfg ); - } - *cp = 0; - - if ( tmbstrcasecmp(work, "lf") == 0 ) - nl = TidyLF; - else if ( tmbstrcasecmp(work, "crlf") == 0 ) - nl = TidyCRLF; - else if ( tmbstrcasecmp(work, "cr") == 0 ) - nl = TidyCR; - - if ( nl < TidyLF || nl > TidyCR ) - ReportBadArgument( doc, entry->name ); - else - SetOptionInt( doc, entry->id, nl ); - return ( nl >= TidyLF && nl <= TidyCR ); -} - -Bool ParseBool( TidyDocImpl* doc, const TidyOptionImpl* entry ) -{ - uint flag = 0; - Bool ok = ParseTriState( TidyNoState, doc, entry, &flag ); - if ( ok ) - SetOptionBool( doc, entry->id, (Bool) flag ); - return ok; -} - -/* a string excluding whitespace */ -Bool ParseName( TidyDocImpl* doc, const TidyOptionImpl* option ) -{ - tmbchar buf[ 1024 ] = {0}; - int i = 0; - uint c = SkipWhite( &doc->config ); - - while ( i < sizeof(buf)-2 && c != EOF && !IsWhite(c) ) - { - buf[i++] = (tmbchar) c; - c = AdvanceChar( &doc->config ); - } - buf[i] = 0; - - if ( i == 0 ) - ReportBadArgument( doc, option->name ); - else - SetOptionValue( doc, option->id, buf ); - return ( i > 0 ); -} - -/* #508936 - CSS class naming for -clean option */ -Bool ParseCSS1Selector( TidyDocImpl* doc, const TidyOptionImpl* option ) -{ - char buf[256] = {0}; - int i = 0; - uint c = SkipWhite( &doc->config ); - - while ( i < sizeof(buf)-2 && c != EOF && !IsWhite(c) ) - { - buf[i++] = (tmbchar) c; - c = AdvanceChar( &doc->config ); - } - buf[i] = '\0'; - - if ( i == 0 || !IsCSS1Selector(buf) ) { - ReportBadArgument( doc, option->name ); - return no; - } - - buf[i++] = '-'; /* Make sure any escaped Unicode is terminated */ - buf[i] = 0; /* so valid class names are generated after */ - /* Tidy appends last digits. */ - - SetOptionValue( doc, option->id, buf ); - return yes; -} - -/* Coordinates Config update and Tags data */ -static void DeclareUserTag( TidyDocImpl* doc, TidyOptionId optId, int tagType, tmbstr name ) -{ - ctmbstr prvval = cfgStr( doc, optId ); - tmbstr catval = name; - if ( prvval ) - { - uint len = tmbstrlen(name) + tmbstrlen(prvval) + 3; - catval = tmbstrndup( prvval, len ); - tmbstrcat( catval, ", " ); - tmbstrcat( catval, name ); - } - DefineTag( doc, tagType, name ); - SetOptionValue( doc, optId, catval ); - if ( prvval ) - MemFree( catval ); -} - -/* a space or comma separated list of tag names */ -Bool ParseTagNames( TidyDocImpl* doc, const TidyOptionImpl* option ) -{ - TidyConfigImpl* cfg = &doc->config; - tmbchar buf[1024]; - int i = 0, nTags = 0; - uint c = SkipWhite( cfg ); - uint ttyp = 0; - - switch ( option->id ) - { - case TidyInlineTags: ttyp = tagtype_inline; break; - case TidyBlockTags: ttyp = tagtype_block; break; - case TidyEmptyTags: ttyp = tagtype_empty; break; - case TidyPreTags: ttyp = tagtype_pre; break; - default: - ReportUnknownOption( doc, option->name ); - return no; - } - - SetOptionValue( doc, option->id, null ); - FreeDeclaredTags( doc, ttyp ); - cfg->defined_tags |= ttyp; - - do - { - if (c == ' ' || c == '\t' || c == ',') - { - c = AdvanceChar( cfg ); - continue; - } - - if ( c == '\r' || c == '\n' ) - { - uint c2 = AdvanceChar( cfg ); - if ( c == '\r' && c2 == '\n' ) - c = AdvanceChar( cfg ); - else - c = c2; - - if ( !IsWhite(c) ) - { - buf[i] = 0; - UngetChar( c, cfg->cfgIn ); - UngetChar( '\n', cfg->cfgIn ); - break; - } - } - - /* - if ( c == '\n' ) - { - c = AdvanceChar( cfg ); - if ( !IsWhite(c) ) - { - buf[i] = 0; - UngetChar( c, cfg->cfgIn ); - UngetChar( '\n', cfg->cfgIn ); - break; - } - } - */ - - while ( i < sizeof(buf)-2 && c != EOF && !IsWhite(c) && c != ',' ) - { - buf[i++] = (tmbchar) c; - c = AdvanceChar( cfg ); - } - - buf[i] = '\0'; - if (i == 0) /* Skip empty tag definition. Possible when */ - continue; /* there is a trailing space on the line. */ - - /* add tag to dictionary */ - DeclareUserTag( doc, option->id, ttyp, buf ); - i = 0; - ++nTags; - } - while ( c != EOF ); - - if ( i > 0 ) - DeclareUserTag( doc, option->id, ttyp, buf ); - return ( nTags > 0 ); -} - -/* a string including whitespace */ -/* munges whitespace sequences */ - -Bool ParseString( TidyDocImpl* doc, const TidyOptionImpl* option ) -{ - TidyConfigImpl* cfg = &doc->config; - tmbchar buf[8192]; - int i = 0; - tchar delim = 0; - Bool waswhite = yes; - - tchar c = SkipWhite( cfg ); - - if ( c == '"' || c == '\'' ) - { - delim = c; - c = AdvanceChar( cfg ); - } - - while ( i < sizeof(buf)-2 && c != EOF && c != '\r' && c != '\n' ) - { - if ( delim && c == delim ) - break; - - if ( IsWhite(c) ) - { - if ( waswhite ) - { - c = AdvanceChar( cfg ); - continue; - } - c = ' '; - } - else - waswhite = no; - - buf[i++] = (tmbchar) c; - c = AdvanceChar( cfg ); - } - buf[i] = '\0'; - - SetOptionValue( doc, option->id, buf ); - return yes; -} - -Bool ParseCharEnc( TidyDocImpl* doc, const TidyOptionImpl* option ) -{ - tmbchar buf[64] = {0}; - int i = 0, enc = ASCII; - Bool validEncoding = yes; - tchar c = SkipWhite( &doc->config ); - - while ( i < sizeof(buf)-2 && c != EOF && !IsWhite(c) ) - { - buf[i++] = (tmbchar) ToLower( c ); - c = AdvanceChar( &doc->config ); - } - buf[i] = 0; - - if ( (enc = CharEncodingId( buf )) < 0 ) - { - validEncoding = no; - ReportBadArgument( doc, option->name ); - } - else - SetOptionInt( doc, option->id, enc ); - - if ( validEncoding && option->id == TidyCharEncoding ) - AdjustCharEncoding( doc, enc ); - return validEncoding; -} - - -int CharEncodingId( ctmbstr charenc ) -{ - int enc = -1; - if ( tmbstrcasecmp(charenc, "ascii") == 0 ) - enc = ASCII; - else if ( tmbstrcasecmp(charenc, "latin0") == 0 ) - enc = LATIN0; - else if ( tmbstrcasecmp(charenc, "latin1") == 0 ) - enc = LATIN1; - else if ( tmbstrcasecmp(charenc, "raw") == 0 ) - enc = RAW; - else if ( tmbstrcasecmp(charenc, "utf8") == 0 ) - enc = UTF8; - else if ( tmbstrcasecmp(charenc, "iso2022") == 0 ) - enc = ISO2022; - else if ( tmbstrcasecmp(charenc, "mac") == 0 ) - enc = MACROMAN; - else if ( tmbstrcasecmp(charenc, "win1252") == 0 ) - enc = WIN1252; - else if ( tmbstrcasecmp(charenc, "ibm858") == 0 ) - enc = IBM858; - -#if SUPPORT_UTF16_ENCODINGS - else if ( tmbstrcasecmp(charenc, "utf16le") == 0 ) - enc = UTF16LE; - else if ( tmbstrcasecmp(charenc, "utf16be") == 0 ) - enc = UTF16BE; - else if ( tmbstrcasecmp(charenc, "utf16") == 0 ) - enc = UTF16; -#endif - -#if SUPPORT_ASIAN_ENCODINGS - else if ( tmbstrcasecmp(charenc, "big5") == 0 ) - enc = BIG5; - else if ( tmbstrcasecmp(charenc, "shiftjis") == 0 ) - enc = SHIFTJIS; -#endif - - return enc; -} - -ctmbstr CharEncodingName( int encoding ) -{ - ctmbstr encodingName = "unknown"; - - switch ( encoding ) - { - case ASCII: encodingName = "ascii"; break; - case LATIN0: encodingName = "latin0"; break; - case LATIN1: encodingName = "latin1"; break; - case RAW: encodingName = "raw"; break; - case UTF8: encodingName = "utf8"; break; - case ISO2022: encodingName = "iso2022"; break; - case MACROMAN: encodingName = "mac"; break; - case WIN1252: encodingName = "win1252"; break; - case IBM858: encodingName = "ibm858"; break; - -#if SUPPORT_UTF16_ENCODINGS - case UTF16LE: encodingName = "utf16le"; break; - case UTF16BE: encodingName = "utf16be"; break; - case UTF16: encodingName = "utf16"; break; -#endif - -#if SUPPORT_ASIAN_ENCODINGS - case BIG5: encodingName = "big5"; break; - case SHIFTJIS: encodingName = "shiftjis"; break; -#endif - } - - return encodingName; -} - -Bool ParseIndent( TidyDocImpl* doc, const TidyOptionImpl* option ) -{ - uint flag = 0; - Bool ok = ParseTriState( TidyAutoState, doc, option, &flag ); - - if ( ok ) - { - SetOptionInt( doc, TidyIndentContent, flag ); - } - return ok; -} - -/* - doctype: omit | auto | strict | loose | - - where the fpi is a string similar to - - "-//ACME//DTD HTML 3.14159//EN" -*/ -Bool ParseDocType( TidyDocImpl* doc, const TidyOptionImpl* option ) -{ - tmbchar buf[ 32 ] = {0}; - int i = 0; - Bool ok = yes; - TidyDoctypeModes dtmode = TidyDoctypeAuto; - - TidyConfigImpl* cfg = &doc->config; - tchar c = SkipWhite( cfg ); - - /* "-//ACME//DTD HTML 3.14159//EN" or similar */ - - if ( c == '"' || c == '\'' ) - { - if ( ok = ParseString(doc, option) ) - SetOptionInt( doc, TidyDoctypeMode, TidyDoctypeUser ); - return ok; - } - - /* read first word */ - while ( i < sizeof(buf)-1 && c != EOF && !IsWhite(c) ) - { - buf[i++] = (tmbchar) c; - c = AdvanceChar( cfg ); - } - buf[i] = '\0'; - - if ( tmbstrcasecmp(buf, "auto") == 0 ) - dtmode = TidyDoctypeAuto; - else if ( tmbstrcasecmp(buf, "omit") == 0 ) - dtmode = TidyDoctypeOmit; - else if ( tmbstrcasecmp(buf, "strict") == 0 ) - dtmode = TidyDoctypeStrict; - else if ( tmbstrcasecmp(buf, "loose") == 0 || - tmbstrcasecmp(buf, "transitional") == 0 ) - dtmode = TidyDoctypeLoose; - else - { - ReportBadArgument( doc, option->name ); - ok = no; - } - - if ( ok ) - SetOptionInt( doc, TidyDoctypeMode, dtmode ); - return ok; -} - -Bool ParseRepeatAttr( TidyDocImpl* doc, const TidyOptionImpl* option ) -{ - Bool ok = yes; - tmbchar buf[64] = {0}; - int i = 0; - - TidyConfigImpl* cfg = &doc->config; - tchar c = SkipWhite( cfg ); - - while (i < sizeof(buf)-1 && c != EOF && !IsWhite(c)) - { - buf[i++] = (tmbchar) c; - c = AdvanceChar( cfg ); - } - buf[i] = '\0'; - - if ( tmbstrcasecmp(buf, "keep-first") == 0 ) - cfg->value[ TidyDuplicateAttrs ] = TidyKeepFirst; - else if ( tmbstrcasecmp(buf, "keep-last") == 0 ) - cfg->value[ TidyDuplicateAttrs ] = TidyKeepLast; - else - { - ReportBadArgument( doc, option->name ); - ok = no; - } - return ok; -} - -#if SUPPORT_UTF16_ENCODINGS -Bool ParseBOM( TidyDocImpl* doc, const TidyOptionImpl* option ) -{ - uint flag = 0; - Bool ok = ParseTriState( TidyAutoState, doc, option, &flag ); - if ( ok ) - { - SetOptionInt( doc, TidyOutputBOM, flag ); - } - return ok; -} -#endif - -/* Use TidyOptionId as iterator. -** Send index of 1st option after TidyOptionUnknown as start of list. -*/ -TidyIterator getOptionList( TidyDocImpl* doc ) -{ - return (TidyIterator) 1; -} - -/* Check if this item is last valid option. -** If so, zero out iterator. -*/ -const TidyOptionImpl* getNextOption( TidyDocImpl* doc, TidyIterator* iter ) -{ - const TidyOptionImpl* option = null; - TidyOptionId optId; - assert( iter != null ); - optId = *(TidyOptionId *) iter; - if ( optId > TidyUnknownOption && optId < N_TIDY_OPTIONS ) - { - option = &option_defs[ optId ]; - optId++; - } - *iter = (TidyIterator) ( optId < N_TIDY_OPTIONS ? optId : 0 ); - return option; -} - -/* Use a 1-based array index as iterator: 0 == end-of-list -*/ -TidyIterator getOptionPickList( const TidyOptionImpl* option ) -{ - uint ix = 0; - if ( option && option->pickList ) - ix = 1; - return (TidyIterator) ix; -} - -ctmbstr getNextOptionPick( const TidyOptionImpl* option, - TidyIterator* iter ) -{ - uint ix; - ctmbstr val = null; - assert( option!=null && iter != null ); - - ix = (uint) *iter; - if ( ix > 0 && ix < 16 && option->pickList ) - val = option->pickList[ ix-1 ]; - *iter = (TidyIterator) ( val && option->pickList[ix] ? ix + 1 : 0 ); - return val; -} - -static int WriteOptionString( const TidyOptionImpl* option, - ctmbstr sval, StreamOut* out ) -{ - ctmbstr cp = option->name; - while ( *cp ) - WriteChar( *cp++, out ); - WriteChar( ':', out ); - WriteChar( ' ', out ); - cp = sval; - while ( *cp ) - WriteChar( *cp++, out ); - WriteChar( '\n', out ); - return 0; -} - -static int WriteOptionInt( const TidyOptionImpl* option, uint ival, StreamOut* out ) -{ - tmbchar sval[ 32 ] = {0}; - sprintf( sval, "%d", ival ); - return WriteOptionString( option, sval, out ); -} - -static int WriteOptionBool( const TidyOptionImpl* option, Bool bval, StreamOut* out ) -{ - ctmbstr sval = bval ? "yes" : "no"; - return WriteOptionString( option, sval, out ); -} - -static int WriteOptionPick( const TidyOptionImpl* option, uint ival, StreamOut* out ) -{ - uint ix; - const ctmbstr* val = option->pickList; - for ( ix=0; val[ix] && ixconfig.value, &doc->config.snapshot, - N_TIDY_OPTIONS * sizeof(uint) ); - return ( diff != 0 ); -} - -Bool ConfigDiffThanDefault( TidyDocImpl* doc ) -{ - Bool diff = no; - const TidyOptionImpl* option = option_defs + 1; - uint* ival = doc->config.value; - for ( /**/; !diff && option && option->name; ++option, ++ival ) - { - diff = ( *ival != option->dflt ); - } - return diff; -} - - -int SaveConfigToStream( TidyDocImpl* doc, StreamOut* out ) -{ - int rc = 0; - const TidyOptionImpl* option; - for ( option=option_defs+1; 0==rc && option && option->name; ++option ) - { - uint ival = doc->config.value[ option->id ]; - if ( option->parser == null ) - continue; - if ( ival == option->dflt && option->id != TidyDoctype) - continue; - - if ( option->id == TidyDoctype ) /* Special case */ - { - uint dtmode = cfg( doc, TidyDoctypeMode ); - if ( dtmode == TidyDoctypeUser ) - { - tmbstr t; - - if (( t = MemAlloc( tmbstrlen( (ctmbstr)ival) + 2 ) )) /* add 2 double quotes */ - { - t[0] = '\"'; t[1] = 0; - - tmbstrcat( t, (ctmbstr)ival ); - tmbstrcat( t, "\"" ); - rc = WriteOptionString( option, (ctmbstr)t, out ); - - MemFree( t ); - } - } - else if ( dtmode == option_defs[TidyDoctypeMode].dflt ) - continue; - else - rc = WriteOptionPick( option, dtmode, out ); - } - else if ( option->pickList ) - rc = WriteOptionPick( option, ival, out ); - else - { - switch ( option->type ) - { - case TidyString: - rc = WriteOptionString( option, (ctmbstr) ival, out ); - break; - case TidyInteger: - rc = WriteOptionInt( option, ival, out ); - break; - case TidyBoolean: - rc = WriteOptionBool( option, ival ? yes : no, out ); - break; - } - } - } - return rc; -} - -int SaveConfigFile( TidyDocImpl* doc, ctmbstr cfgfil ) -{ - int status = -1; - StreamOut* out = null; - uint outenc = cfg( doc, TidyOutCharEncoding ); - uint nl = cfg( doc, TidyNewline ); - FILE* fout = fopen( cfgfil, "wb" ); - if ( fout ) - { - out = FileOutput( fout, outenc, nl ); - status = SaveConfigToStream( doc, out ); - fclose( fout ); - MemFree( out ); - } - return status; -} - -int SaveConfigSink( TidyDocImpl* doc, TidyOutputSink* sink ) -{ - uint outenc = cfg( doc, TidyOutCharEncoding ); - uint nl = cfg( doc, TidyNewline ); - StreamOut* out = UserOutput( sink, outenc, nl ); - int status = SaveConfigToStream( doc, out ); - MemFree( out ); - return status; -} diff --git a/tidylib-src/src/config.h b/tidylib-src/src/config.h deleted file mode 100644 index 536a28b6..00000000 --- a/tidylib-src/src/config.h +++ /dev/null @@ -1,184 +0,0 @@ -#ifndef __CONFIG_H__ -#define __CONFIG_H__ - -/* config.h -- read config file and manage config properties - - (c) 1998-2002 (W3C) MIT, INRIA, Keio University - See tidy.h for the copyright notice. - - CVS Info : - - $Author: creitzel $ - $Date: 2003/02/16 19:33:10 $ - $Revision: 1.2 $ - - config files associate a property name with a value. - - // comments can start at the beginning of a line - # comments can start at the beginning of a line - name: short values fit onto one line - name: a really long value that - continues on the next line - - property names are case insensitive and should be less than - 60 characters in length and must start at the begining of - the line, as whitespace at the start of a line signifies a - line continuation. - -*/ - -#include "forward.h" -#include "tidy.h" -#include "streamio.h" - -struct _tidy_option; -typedef struct _tidy_option TidyOptionImpl; - -typedef Bool (ParseProperty)( TidyDocImpl* doc, const TidyOptionImpl* opt ); - -struct _tidy_option -{ - TidyOptionId id; - TidyConfigCategory category; /* put 'em in groups */ - ctmbstr name; /* property name */ - TidyOptionType type; /* string, int or bool */ - uint dflt; /* factory default */ - ParseProperty* parser; /* parsing method, read-only if null */ - const ctmbstr* pickList; /* pick list */ -}; - - -typedef struct _tidy_config -{ - uint value[ N_TIDY_OPTIONS + 1 ]; /* current config values */ - uint snapshot[ N_TIDY_OPTIONS + 1 ]; /* Snapshot of values to be restored later */ - - /* track what tags user has defined to eliminate unnecessary searches */ - uint defined_tags; - - uint c; /* current char in input stream */ - StreamIn* cfgIn; /* current input source */ - -} TidyConfigImpl; - - -const TidyOptionImpl* lookupOption( ctmbstr optnam ); -const TidyOptionImpl* getOption( TidyOptionId optId ); - -TidyIterator getOptionList( TidyDocImpl* doc ); -const TidyOptionImpl* getNextOption( TidyDocImpl* doc, TidyIterator* iter ); - -TidyIterator getOptionPickList( const TidyOptionImpl* option ); -ctmbstr getNextOptionPick( const TidyOptionImpl* option, TidyIterator* iter ); - -void InitConfig( TidyDocImpl* doc ); -void FreeConfig( TidyDocImpl* doc ); - -Bool SetOptionValue( TidyDocImpl* doc, TidyOptionId optId, ctmbstr val ); -Bool SetOptionInt( TidyDocImpl* doc, TidyOptionId optId, uint val ); -Bool SetOptionBool( TidyDocImpl* doc, TidyOptionId optId, Bool val ); - -Bool ResetOptionToDefault( TidyDocImpl* doc, TidyOptionId optId ); -void ResetConfigToDefault( TidyDocImpl* doc ); -void TakeConfigSnapshot( TidyDocImpl* doc ); -void ResetConfigToSnapshot( TidyDocImpl* doc ); - -void CopyConfig( TidyDocImpl* docTo, TidyDocImpl* docFrom ); - - -#ifdef SUPPORT_GETPWNAM -/* - Tod Lewis contributed this code for expanding - ~/foo or ~your/foo according to $HOME and your - user name. This will only work on Unix systems. -*/ -ctmbstr ExpandTilde(ctmbstr filename); -#endif /* SUPPORT_GETPWNAM */ - -int ParseConfigFile( TidyDocImpl* doc, ctmbstr cfgfil ); -int ParseConfigFileEnc( TidyDocImpl* doc, - ctmbstr cfgfil, ctmbstr charenc ); - -int SaveConfigFile( TidyDocImpl* doc, ctmbstr cfgfil ); -int SaveConfigSink( TidyDocImpl* doc, TidyOutputSink* sink ); - -/* returns false if unknown option, missing parameter, or - option doesn't use parameter -*/ -Bool ParseConfigOption( TidyDocImpl* doc, ctmbstr optnam, ctmbstr optVal ); -Bool ParseConfigValue( TidyDocImpl* doc, TidyOptionId optId, ctmbstr optVal ); - -/* ensure that char encodings are self consistent */ -Bool AdjustCharEncoding( TidyDocImpl* doc, int encoding ); - -/* ensure that config is self consistent */ -void AdjustConfig( TidyDocImpl* doc ); - -Bool ConfigDiffThanDefault( TidyDocImpl* doc ); -Bool ConfigDiffThanSnapshot( TidyDocImpl* doc ); - -int CharEncodingId( ctmbstr charenc ); -ctmbstr CharEncodingName( int encoding ); - -void SetEmacsFilename( TidyDocImpl* doc, ctmbstr filename ); - - -#ifdef _DEBUG - -/* Debug lookup functions will be type-safe and assert option type match */ -uint _cfgGet( TidyDocImpl* doc, TidyOptionId optId ); -Bool _cfgGetBool( TidyDocImpl* doc, TidyOptionId optId ); -ctmbstr _cfgGetString( TidyDocImpl* doc, TidyOptionId optId ); - -#define cfg(doc, id) _cfgGet( (doc), (id) ) -#define cfgBool(doc, id) _cfgGetBool( (doc), (id) ) -#define cfgStr(doc, id) _cfgGetString( (doc), (id) ) - -#else - -/* Release build macros for speed */ -#define cfg(doc, id) ((doc)->config.value[ (id) ]) -#define cfgBool(doc, id) ((Bool) cfg(doc, id)) -#define cfgStr(doc, id) ((ctmbstr) cfg(doc, id)) - -#endif /* _DEBUG */ - - - -/* parser for integer values */ -ParseProperty ParseInt; - -/* parser for 't'/'f', 'true'/'false', 'y'/'n', 'yes'/'no' or '1'/'0' */ -ParseProperty ParseBool; - -/* a string excluding whitespace */ -ParseProperty ParseName; - -/* a CSS1 selector - CSS class naming for -clean option */ -ParseProperty ParseCSS1Selector; - -/* a string including whitespace */ -ParseProperty ParseString; - -/* a space or comma separated list of tag names */ -ParseProperty ParseTagNames; - -/* RAW, ASCII, LATIN0, LATIN1, UTF8, ISO2022, MACROMAN, - WIN1252, IBM858, UTF16LE, UTF16BE, UTF16, BIG5, SHIFTJIS -*/ -ParseProperty ParseCharEnc; -ParseProperty ParseNewline; - -/* specific to the indent option - Bool and 'auto' */ -ParseProperty ParseIndent; - -/* omit | auto | strict | loose | */ -ParseProperty ParseDocType; - -/* keep-first or keep-last? */ -ParseProperty ParseRepeatAttr; - -/* specific to the output-bom option - Bool and 'auto' */ -ParseProperty ParseBOM; - -#endif /* __CONFIG_H__ */ diff --git a/tidylib-src/src/entities.h b/tidylib-src/src/entities.h deleted file mode 100644 index 901f31ba..00000000 --- a/tidylib-src/src/entities.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef __ENTITIES_H__ -#define __ENTITIES_H__ - -/* entities.h -- recognize character entities - - (c) 1998-2002 (W3C) MIT, INRIA, Keio University - See tidy.h for the copyright notice. - - CVS Info : - - $Author: creitzel $ - $Date: 2003/02/16 19:33:10 $ - $Revision: 1.2 $ - -*/ - -#include "forward.h" - -void InitEntities(); -void FreeEntities(); - -/* entity starting with "&" returns zero on error */ -uint EntityCode( ctmbstr name, uint versions ); -ctmbstr EntityName( uint charCode, uint versions ); - -#endif /* __ENTITIES_H__ */ diff --git a/tidylib-src/src/fileio.c b/tidylib-src/src/fileio.c deleted file mode 100644 index c31309e9..00000000 --- a/tidylib-src/src/fileio.c +++ /dev/null @@ -1,87 +0,0 @@ -/* fileio.c -- does standard I/O - - (c) 1998-2002 (W3C) MIT, INRIA, Keio University - See tidy.h for the copyright notice. - - CVS Info : - - $Author: creitzel $ - $Date: 2003/02/16 19:33:10 $ - $Revision: 1.2 $ - - Default implementations of Tidy input sources - and output sinks based on standard C FILE*. - -*/ - -#include - -#include "fileio.h" -#include "tidy.h" - - -typedef struct _fp_input_source -{ - FILE* fp; - TidyBuffer unget; -} FileSource; - -int filesrc_getByte( uint sourceData ) -{ - FileSource* fin = (FileSource*) sourceData; - int bv; - if ( fin->unget.size > 0 ) - bv = tidyBufPopByte( &fin->unget ); - else - bv = fgetc( fin->fp ); - return bv; -} -Bool filesrc_eof( uint sourceData ) -{ - FileSource* fin = (FileSource*) sourceData; - Bool isEOF = ( fin->unget.size == 0 ); - if ( isEOF ) - isEOF = feof( fin->fp ); - return isEOF; -} -void filesrc_ungetByte( uint sourceData, byte bv ) -{ - FileSource* fin = (FileSource*) sourceData; - tidyBufPutByte( &fin->unget, bv ); -} - -void initFileSource( TidyInputSource* inp, FILE* fp ) -{ - FileSource* fin = null; - - inp->getByte = filesrc_getByte; - inp->eof = filesrc_eof; - inp->ungetByte = filesrc_ungetByte; - - fin = (FileSource*) MemAlloc( sizeof(FileSource) ); - ClearMemory( fin, sizeof(FileSource) ); - fin->fp = fp; - inp->sourceData = (uint) fin; -} - -void freeFileSource( TidyInputSource* inp, Bool closeIt ) -{ - FileSource* fin = (FileSource*) inp->sourceData; - if ( closeIt && fin && fin->fp ) - fclose( fin->fp ); - tidyBufFree( &fin->unget ); - MemFree( fin ); -} - -void filesink_putByte( uint sinkData, byte bv ) -{ - FILE* fout = (FILE*) sinkData; - fputc( bv, fout ); -} - -void initFileSink( TidyOutputSink* outp, FILE* fp ) -{ - outp->putByte = filesink_putByte; - outp->sinkData = (uint) fp; -} - diff --git a/tidylib-src/src/istack.c b/tidylib-src/src/istack.c deleted file mode 100644 index f17f5a92..00000000 --- a/tidylib-src/src/istack.c +++ /dev/null @@ -1,287 +0,0 @@ -/* istack.c -- inline stack for compatibility with Mosaic - - (c) 1998-2002 (W3C) MIT, INRIA, Keio University - See tidy.h for the copyright notice. - - CVS Info : - - $Author: creitzel $ - $Date: 2003/02/16 19:33:10 $ - $Revision: 1.8 $ - -*/ - -#include "tidy-int.h" -#include "lexer.h" -#include "attrs.h" -#include "streamio.h" -#include "tmbstr.h" - -extern Bool debug_flag; -extern Node *debug_element; -extern Lexer *debug_lexer; - -/* duplicate attributes */ -AttVal *DupAttrs( TidyDocImpl* doc, AttVal *attrs) -{ - AttVal *newattrs; - - if (attrs == null) - return attrs; - - newattrs = NewAttribute(); - *newattrs = *attrs; - newattrs->next = DupAttrs( doc, attrs->next ); - newattrs->attribute = tmbstrdup(attrs->attribute); - newattrs->value = tmbstrdup(attrs->value); - newattrs->dict = FindAttribute(doc, newattrs); - return newattrs; -} - -/* - push a copy of an inline node onto stack - but don't push if implicit or OBJECT or APPLET - (implicit tags are ones generated from the istack) - - One issue arises with pushing inlines when - the tag is already pushed. For instance: - -

    text -

    more text - - Shouldn't be mapped to - -

    text

    -

    more text -*/ -void PushInline( TidyDocImpl* doc, Node *node) -{ - Lexer* lexer = doc->lexer; - IStack *istack; - - if (node->implicit) - return; - - if (node->tag == null) - return; - - if (!(node->tag->model & CM_INLINE)) - return; - - if (node->tag->model & CM_OBJECT) - return; - - if ( !nodeIsFONT(node) && IsPushed(doc, node) ) - return; - - /* make sure there is enough space for the stack */ - if (lexer->istacksize + 1 > lexer->istacklength) - { - if (lexer->istacklength == 0) - lexer->istacklength = 6; /* this is perhaps excessive */ - - lexer->istacklength = lexer->istacklength * 2; - lexer->istack = (IStack *)MemRealloc(lexer->istack, - sizeof(IStack)*(lexer->istacklength)); - } - - istack = &(lexer->istack[lexer->istacksize]); - istack->tag = node->tag; - - istack->element = tmbstrdup(node->element); - istack->attributes = DupAttrs( doc, node->attributes ); - ++(lexer->istacksize); -} - -/* pop inline stack */ -void PopInline( TidyDocImpl* doc, Node *node ) -{ - Lexer* lexer = doc->lexer; - AttVal *av; - IStack *istack; - - if (node) - { - if (node->tag == null) - return; - - if (!(node->tag->model & CM_INLINE)) - return; - - if (node->tag->model & CM_OBJECT) - return; - - /* if node is then pop until we find an */ - if ( nodeIsA(node) ) - { - while (lexer->istacksize > 0) - { - --(lexer->istacksize); - istack = &(lexer->istack[lexer->istacksize]); - - while (istack->attributes) - { - av = istack->attributes; - - if (av->attribute) - MemFree(av->attribute); - if (av->value) - MemFree(av->value); - - istack->attributes = av->next; - MemFree(av); - } - - if ( istack->tag->id == TidyTag_A ) - { - MemFree(istack->element); - break; - } - - MemFree(istack->element); - } - - return; - } - } - - if (lexer->istacksize > 0) - { - --(lexer->istacksize); - istack = &(lexer->istack[lexer->istacksize]); - - while (istack->attributes) - { - av = istack->attributes; - - if (av->attribute) - MemFree(av->attribute); - if (av->value) - MemFree(av->value); - - istack->attributes = av->next; - MemFree(av); - } - - MemFree(istack->element); - - /* #427822 - fix by Randy Waki 7 Aug 00 */ - if (lexer->insert >= lexer->istack + lexer->istacksize) - lexer->insert = null; - } -} - -Bool IsPushed( TidyDocImpl* doc, Node *node) -{ - Lexer* lexer = doc->lexer; - int i; - - for (i = lexer->istacksize - 1; i >= 0; --i) - { - if (lexer->istack[i].tag == node->tag) - return yes; - } - - return no; -} - -/* - This has the effect of inserting "missing" inline - elements around the contents of blocklevel elements - such as P, TD, TH, DIV, PRE etc. This procedure is - called at the start of ParseBlock. when the inline - stack is not empty, as will be the case in: - -

    italic heading

    - - which is then treated as equivalent to - -

    italic heading

    - - This is implemented by setting the lexer into a mode - where it gets tokens from the inline stack rather than - from the input stream. -*/ -int InlineDup( TidyDocImpl* doc, Node* node ) -{ - Lexer* lexer = doc->lexer; - int n; - - if ((n = lexer->istacksize - lexer->istackbase) > 0) - { - lexer->insert = &(lexer->istack[lexer->istackbase]); - lexer->inode = node; - } - - return n; -} - -/* - defer duplicates when entering a table or other - element where the inlines shouldn't be duplicated -*/ -void DeferDup( TidyDocImpl* doc ) -{ - doc->lexer->insert = null; - doc->lexer->inode = null; -} - -Node *InsertedToken( TidyDocImpl* doc ) -{ - Lexer* lexer = doc->lexer; - Node *node; - IStack *istack; - uint n; - - /* this will only be null if inode != null */ - if (lexer->insert == null) - { - node = lexer->inode; - lexer->inode = null; - return node; - } - - /* - - is this is the "latest" node then update - the position, otherwise use current values - */ - - if (lexer->inode == null) - { - lexer->lines = doc->docIn->curline; - lexer->columns = doc->docIn->curcol; - } - - node = NewNode(lexer); - node->type = StartTag; - node->implicit = yes; - node->start = lexer->txtstart; - /* #431734 [JTidy bug #226261 (was 126261)] - fix by Gary Peskin 20 Dec 00 */ - node->end = lexer->txtend; /* was : lexer->txtstart; */ - istack = lexer->insert; - -#if 0 && defined(_DEBUG) - if ( lexer->istacksize == 0 ) - fprintf( stderr, "0-size istack!\n" ); -#endif - - node->element = tmbstrdup(istack->element); - node->tag = istack->tag; - node->attributes = DupAttrs( doc, istack->attributes ); - - /* advance lexer to next item on the stack */ - n = lexer->insert - &(lexer->istack[0]); - - /* and recover state if we have reached the end */ - if (++n < lexer->istacksize) - lexer->insert = &(lexer->istack[n]); - else - lexer->insert = null; - - return node; -} - - - - diff --git a/tidylib-src/src/localize.c b/tidylib-src/src/localize.c deleted file mode 100644 index 56957658..00000000 --- a/tidylib-src/src/localize.c +++ /dev/null @@ -1,1232 +0,0 @@ -/* localize.c -- text strings and routines to handle errors and general messages - - (c) 1998-2003 (W3C) MIT, INRIA, Keio University - See tidy.h for the copyright notice. - - You should only need to edit this file and tidy.c - to localize HTML tidy. *** This needs checking *** - - CVS Info : - - $Author: terry_teague $ - $Date: 2003/03/02 04:30:09 $ - $Revision: 1.68 $ - -*/ - -#include "tidy-int.h" -#include "lexer.h" -#include "streamio.h" -#include "message.h" -#include "tmbstr.h" -#include "utf8.h" - -/* used to point to Web Accessibility Guidelines */ -#define ACCESS_URL "http://www.w3.org/WAI/GL" - -/* points to the Adaptive Technology Resource Centre at the -** University of Toronto -*/ -#define ATRC_ACCESS_URL "http://www.aprompt.ca/Tidy/accessibilitychecks.html" - -const static char *release_date = "1st March 2003"; - -ctmbstr ReleaseDate() -{ - return release_date; -} - - -static char* LevelPrefix( TidyReportLevel level, char* buf ) -{ - *buf = 0; - switch ( level ) - { - case TidyInfo: - tmbstrcpy( buf, "Info: " ); - break; - case TidyWarning: - tmbstrcpy( buf, "Warning: " ); - break; - case TidyConfig: - tmbstrcpy( buf, "Config: " ); - break; - case TidyAccess: - tmbstrcpy( buf, "Access: " ); - break; - case TidyError: - tmbstrcpy( buf, "Error: " ); - break; - case TidyBadDocument: - tmbstrcpy( buf, "Document: " ); - break; - case TidyFatal: - tmbstrcpy( buf, "panic: " ); - break; - } - return buf + tmbstrlen( buf ); -} - -/* Updates document message counts and -** compares counts to options to see if message -** display should go forward. -*/ -static Bool UpdateCount( TidyDocImpl* doc, TidyReportLevel level ) -{ - /* keep quiet after errors */ - Bool go = ( doc->errors < cfg(doc, TidyShowErrors) ); - - switch ( level ) - { - case TidyInfo: - doc->infoMessages++; - break; - case TidyWarning: - doc->warnings++; - go = go && cfgBool( doc, TidyShowWarnings ); - break; - case TidyConfig: - doc->optionErrors++; - break; - case TidyAccess: - doc->accessErrors++; - break; - case TidyError: - doc->errors++; - break; - case TidyBadDocument: - doc->docErrors++; - break; - case TidyFatal: - /* Ack! */; - break; - } - - return go; -} - -static char* ReportPosition( TidyDocImpl* doc, int line, int col, char* buf ) -{ - *buf = 0; - - /* Change formatting to be parsable by GNU Emacs */ - if ( cfgBool(doc, TidyEmacs) && cfgStr(doc, TidyEmacsFile) ) - sprintf( buf, "%s:%d:%d: ", - cfgStr(doc, TidyEmacsFile), line, col ); - else /* traditional format */ - sprintf( buf, "line %d column %d - ", line, col ); - return buf + tmbstrlen( buf ); -} - -/* General message writing routine. -** Each message is a single warning, error, etc. -** -** This routine will keep track of counts and, -** if the caller has set a filter, it will be -** called. The new preferred way of handling -** Tidy diagnostics output is either a) define -** a new output sink or b) install a message -** filter routine. -*/ - -static void messagePos( TidyDocImpl* doc, TidyReportLevel level, - int line, int col, ctmbstr msg, va_list args ) -{ - char message[ 2048 ]; - Bool go = UpdateCount( doc, level ); - - if ( go ) - { - vsprintf( message, msg, args ); - if ( doc->mssgFilt ) - { - TidyDoc tdoc = tidyImplToDoc( doc ); - go = doc->mssgFilt( tdoc, level, line, col, message ); - } - } - - if ( go ) - { - char buf[ 64 ], *cp; - if ( line > 0 && col > 0 ) - { - ReportPosition( doc, line, col, buf ); - for ( cp = buf; *cp; ++cp ) - WriteChar( *cp, doc->errout ); - } - - LevelPrefix( level, buf ); - for ( cp = buf; *cp; ++cp ) - WriteChar( *cp, doc->errout ); - - for ( cp = message; *cp; ++cp ) - WriteChar( *cp, doc->errout ); - WriteChar( '\n', doc->errout ); - } -} - -void message( TidyDocImpl* doc, TidyReportLevel level, ctmbstr msg, ... ) -{ - va_list args; - va_start( args, msg ); - messagePos( doc, level, 0, 0, msg, args ); - va_end( args ); -} - - -void messageLexer( TidyDocImpl* doc, TidyReportLevel level, ctmbstr msg, ... ) -{ - int line = ( doc->lexer ? doc->lexer->lines : 0 ); - int col = ( doc->lexer ? doc->lexer->columns : 0 ); - - va_list args; - va_start( args, msg ); - messagePos( doc, level, line, col, msg, args ); - va_end( args ); -} - -void messageNode( TidyDocImpl* doc, TidyReportLevel level, Node* node, - ctmbstr msg, ... ) -{ - int line = ( node ? node->line : - ( doc->lexer ? doc->lexer->lines : 0 ) ); - int col = ( node ? node->column : - ( doc->lexer ? doc->lexer->columns : 0 ) ); - - va_list args; - va_start( args, msg ); - messagePos( doc, level, line, col, msg, args ); - va_end( args ); -} - -void tidy_out( TidyDocImpl* doc, ctmbstr msg, ... ) -{ - if ( !cfgBool(doc, TidyQuiet) ) - { - ctmbstr cp; - char buf[ 2048 ]; - - va_list args; - va_start( args, msg ); - vsprintf( buf, msg, args ); - va_end( args ); - - for ( cp=buf; *cp; ++cp ) - WriteChar( *cp, doc->errout ); - } -} - -void ShowVersion( TidyDocImpl* doc ) -{ - ctmbstr platform = "", helper = ""; - -#ifdef PLATFORM_NAME - platform = PLATFORM_NAME; - helper = " for "; -#endif - - tidy_out( doc, "\nHTML Tidy%s%s (release date: %s; built on %s, at %s)\n" - "See http://tidy.sourceforge.net/ for details.\n", - helper, platform, release_date, __DATE__, __TIME__ ); -} - -void FileError( TidyDocImpl* doc, ctmbstr file ) -{ - message( doc, TidyError, "Can't open \"%s\"\n", file ); -} - -static char* TagToString( Node* tag, char* buf ) -{ - *buf = 0; - if ( tag ) - { - if ( tag->type == StartTag || tag->type == StartEndTag ) - sprintf( buf, "<%s>", tag->element ); - else if ( tag->type == EndTag ) - sprintf( buf, "", tag->element ); - else if ( tag->type == DocTypeTag ) - strcpy( buf, "" ); - else if ( tag->type == TextNode ) - strcpy( buf, "plain text" ); - else if ( tag->element ) - strcpy( buf, tag->element ); - } - return buf + tmbstrlen( buf ); -} - -/* lexer is not defined when this is called */ -void ReportUnknownOption( TidyDocImpl* doc, ctmbstr option ) -{ - assert( option != null ); - message( doc, TidyConfig, "unknown option: %s", option ); -} - -/* lexer is not defined when this is called */ -void ReportBadArgument( TidyDocImpl* doc, ctmbstr option ) -{ - assert( option != null ); - message( doc, TidyConfig, - "missing or malformed argument for option: %s", option ); -} - -static void NtoS(int n, tmbstr str) -{ - tmbchar buf[40]; - int i; - - for (i = 0;; ++i) - { - buf[i] = (tmbchar)( (n % 10) + '0' ); - - n = n / 10; - - if (n == 0) - break; - } - - n = i; - - while (i >= 0) - { - str[n-i] = buf[i]; - --i; - } - - str[n+1] = '\0'; -} - - -void ReportEncodingError( TidyDocImpl* doc, uint code, uint c ) -{ - Lexer* lexer = doc->lexer; - char buf[ 32 ]; - - uint reason = code & ~DISCARDED_CHAR; - ctmbstr action = code & DISCARDED_CHAR ? "discarding" : "replacing"; - ctmbstr fmt = null; - - doc->warnings++; - - /* An encoding mismatch is currently treated as a non-fatal error */ - switch ( reason ) - { - case ENCODING_MISMATCH: - /* actual encoding passed in "c" */ - messageLexer( doc, TidyWarning, - "specified input encoding (%s) does " - "not match actual input encoding (%s)", - CharEncodingName( doc->docIn->encoding ), - CharEncodingName(c) ); - break; - - case VENDOR_SPECIFIC_CHARS: - NtoS(c, buf); - fmt = "Warning: %s invalid character code %s"; - break; - - case INVALID_SGML_CHARS: - NtoS(c, buf); - fmt = "Warning: %s invalid character code %s"; - break; - - case INVALID_UTF8: - sprintf( buf, "U+%04X", c ); - fmt = "Warning: %s invalid UTF-8 bytes (char. code %s)"; - break; - -#if SUPPORT_UTF16_ENCODINGS - case INVALID_UTF16: - sprintf( buf, "U+%04X", c ); - fmt = "Warning: %s invalid UTF-16 surrogate pair (char. code %s)"; - break; -#endif - -#if SUPPORT_ASIAN_ENCODINGS - case INVALID_NCR: - NtoS(c, buf); - fmt = "Warning: %s invalid numeric character reference %s"; - break; -#endif - default: - reason = 0; - break; - } - - if ( fmt ) - messageLexer( doc, TidyWarning, fmt, action, buf ); - if ( reason ) - doc->badChars |= reason; -} - -void ReportEntityError( TidyDocImpl* doc, uint code, ctmbstr entity, int c ) -{ - ctmbstr entityname = ( entity ? entity : "NULL" ); - ctmbstr fmt = null; - - switch ( code ) - { - case MISSING_SEMICOLON: - fmt = "entity \"%s\" doesn't end in ';'"; - break; - case MISSING_SEMICOLON_NCR: - fmt = "numeric character reference \"%s\" doesn't end in ';'"; - break; - case UNKNOWN_ENTITY: - fmt = "unescaped & or unknown entity \"%s\""; - break; - case UNESCAPED_AMPERSAND: - fmt = "unescaped & which should be written as &"; - break; - case APOS_UNDEFINED: - fmt = "named entity ' only defined in XML/XHTML"; - break; - } - - if ( fmt ) - messageLexer( doc, TidyWarning, fmt, entityname ); -} - -void ReportAttrError( TidyDocImpl* doc, Node *node, AttVal *av, uint code) -{ - char *name = "NULL", *value = "NULL", tagdesc[ 64 ]; - - TagToString( node, tagdesc ); - if ( av ) - { - if ( av->attribute ) - name = av->attribute; - if ( av->value ) - value = av->value; - } - - switch ( code ) - { - case UNKNOWN_ATTRIBUTE: - messageNode( doc, TidyWarning, node, - "unknown attribute \"%s\"", name ); - break; - - case INSERTING_ATTRIBUTE: - messageNode( doc, TidyWarning, node, - "inserting \"%s\" attribute for %s element", name, tagdesc ); - break; - - case MISSING_ATTR_VALUE: - messageNode( doc, TidyWarning, node, - "%s attribute \"%s\" lacks value", tagdesc, name ); - break; - - case MISSING_IMAGEMAP: /* this is not used anywhere */ - messageNode( doc, TidyWarning, node, - "%s should use client-side image map", tagdesc ); - doc->badAccess |= MISSING_IMAGE_MAP; - break; - - case BAD_ATTRIBUTE_VALUE: - messageNode( doc, TidyWarning, node, - "%s attribute \"%s\" has invalid value \"%s\"", - tagdesc, name, value ); - break; - - case INVALID_ATTRIBUTE: - messageNode( doc, TidyWarning, node, - "%s attribute name \"%s\" (value=\"%s\") is invalid", - tagdesc, name, value ); - break; - case XML_ID_SYNTAX: - messageNode( doc, TidyWarning, node, - "%s ID \"%s\" uses XML ID syntax", tagdesc, value ); - break; - - case XML_ATTRIBUTE_VALUE: - messageNode( doc, TidyWarning, node, - "%s has XML attribute \"%s\"", tagdesc, name ); - break; - - case UNEXPECTED_QUOTEMARK: - messageNode( doc, TidyWarning, node, - "%s unexpected or duplicate quote mark", tagdesc ); - break; - - case MISSING_QUOTEMARK: - messageNode( doc, TidyWarning, node, - "%s attribute with missing trailing quote mark", - tagdesc ); - break; - - case REPEATED_ATTRIBUTE: - messageNode( doc, TidyWarning, node, - "%s dropping value \"%s\" for repeated attribute \"%s\"", - tagdesc, value, name ); - break; - - case PROPRIETARY_ATTR_VALUE: - messageNode( doc, TidyWarning, node, - "%s proprietary attribute value \"%s\"", tagdesc, value ); - break; - - case PROPRIETARY_ATTRIBUTE: - messageNode( doc, TidyWarning, node, - "%s proprietary attribute \"%s\"", tagdesc, name ); - break; - - case UNEXPECTED_END_OF_FILE: - /* on end of file adjust reported position to end of input */ - doc->lexer->lines = doc->docIn->curline; - doc->lexer->columns = doc->docIn->curcol; - messageLexer( doc, TidyWarning, - "end of file while parsing attributes" ); - break; - - case ID_NAME_MISMATCH: - messageNode( doc, TidyWarning, node, - "%s id and name attribute value mismatch", tagdesc ); - break; - - case BACKSLASH_IN_URI: - messageNode( doc, TidyWarning, node, - "%s URI reference contains backslash. Typo?", tagdesc ); - break; - - case FIXED_BACKSLASH: - messageNode( doc, TidyWarning, node, - "%s converting backslash in URI to slash", tagdesc ); - break; - - case ILLEGAL_URI_REFERENCE: - messageNode( doc, TidyWarning, node, - "%s improperly escaped URI reference", tagdesc ); - break; - - case ESCAPED_ILLEGAL_URI: - messageNode( doc, TidyWarning, node, - "%s escaping malformed URI reference", tagdesc ); - break; - - case NEWLINE_IN_URI: - messageNode( doc, TidyWarning, node, - "%s discarding newline in URI reference", tagdesc ); - break; - - case ANCHOR_NOT_UNIQUE: - messageNode( doc, TidyWarning, node, - "%s Anchor \"%s\" already defined", tagdesc, value); - break; - - case ENTITY_IN_ID: - messageNode( doc, TidyWarning, node, - "No entities allowed in id attribute, discarding \"&\"" ); - break; - - case JOINING_ATTRIBUTE: - messageNode( doc, TidyWarning, node, - "%s joining values of repeated attribute \"%s\"", - tagdesc, name ); - break; - - case UNEXPECTED_EQUALSIGN: - messageNode( doc, TidyWarning, node, - "%s unexpected '=', expected attribute name", tagdesc ); - break; - - case ATTR_VALUE_NOT_LCASE: - messageNode( doc, TidyWarning, node, - "%s attribute value \"%s\" must be lower case for XHTML", - tagdesc, value ); - break; - - case UNEXPECTED_GT: - messageNode( doc, TidyWarning, node, - "%s missing '>' for end of tag", tagdesc ); - break; - } -} - - -void ReportNonCompliantAttr( TidyDocImpl* doc, Node* node, AttVal* attr, uint versWanted ) -{ - ctmbstr attrnam = ( attr && attr->attribute ? attr->attribute : "Unknown" ); - ctmbstr htmlVer = HTMLVersionNameFromCode( versWanted, doc->lexer->isvoyager ); - messageNode( doc, TidyWarning, node, - "Attribute \"%s\" not supported in %s", attrnam, htmlVer ); -} - -void ReportNonCompliantNode( TidyDocImpl* doc, Node* node, uint code, uint versWanted ) -{ - char desc[ 256 ] = {0}; - ctmbstr htmlVer = HTMLVersionNameFromCode( versWanted, doc->lexer->isvoyager ); - TagToString( node, desc ); - - switch ( code ) - { - case MIXED_CONTENT_IN_BLOCK: - messageNode( doc, TidyWarning, node, - "Text node in %s in %s", desc, htmlVer ); - break; - - case OBSOLETE_ELEMENT: - messageNode( doc, TidyWarning, node, - "Element %s not supported in %s", desc, htmlVer ); - break; - } -} - -void ReportMissingAttr( TidyDocImpl* doc, Node* node, ctmbstr name ) -{ - /* ReportAttrError( doc, node, null, MISSING_ATTRIBUTE ); */ - char tagdesc[ 64 ]; - TagToString( node, tagdesc ); - messageNode( doc, TidyWarning, node, - "%s lacks \"%s\" attribute", tagdesc, name ); -} - -void ReportWarning( TidyDocImpl* doc, Node *element, Node *node, uint code ) -{ - char nodedesc[ 256 ] = {0}; - char elemdesc[ 256 ] = {0}; - Node* rpt = ( element ? element : node ); - TagToString( node, nodedesc ); - - switch ( code ) - { - case MISSING_ENDTAG_FOR: - messageNode( doc, TidyWarning, rpt, - "missing ", element->element ); - break; - - case MISSING_ENDTAG_BEFORE: - messageNode( doc, TidyWarning, rpt, - "missing before %s", - element->element, nodedesc ); - break; - - case DISCARDING_UNEXPECTED: - /* Force error if in a bad form */ - messageNode( doc, doc->badForm ? TidyError : TidyWarning, node, - "discarding unexpected %s", nodedesc ); - break; - - case NESTED_EMPHASIS: - messageNode( doc, TidyWarning, rpt, - "nested emphasis %s", nodedesc ); - break; - - case COERCE_TO_ENDTAG: - messageNode( doc, TidyWarning, rpt, - "<%s> is probably intended as ", - node->element, node->element ); - break; - - case NON_MATCHING_ENDTAG: - messageNode( doc, TidyWarning, rpt, - "replacing unexpected %s by ", - node->element, node->element ); - break; - - case TAG_NOT_ALLOWED_IN: - messageNode( doc, TidyWarning, rpt, - "%s isn't allowed in <%s> elements", - nodedesc, element->element ); - break; - - case DOCTYPE_AFTER_TAGS: - messageNode( doc, TidyWarning, rpt, - " isn't allowed after elements" ); - break; - - case MISSING_STARTTAG: - messageNode( doc, TidyWarning, node, - "missing <%s>", node->element ); - break; - - case UNEXPECTED_ENDTAG: - if ( element ) - messageNode( doc, TidyWarning, node, - "unexpected in <%s>", - node->element, element->element ); - else - messageNode( doc, TidyWarning, node, - "unexpected ", node->element ); - break; - - case TOO_MANY_ELEMENTS: - if ( element ) - messageNode( doc, TidyWarning, node, - "too many %s elements in <%s>", - node->element, element->element ); - else - messageNode( doc, TidyWarning, node, - "too many %s elements", - node->element ); - break; - - case USING_BR_INPLACE_OF: - messageNode( doc, TidyWarning, node, - "using
    in place of %s", nodedesc ); - break; - - case INSERTING_TAG: - messageNode( doc, TidyWarning, node, - "inserting implicit <%s>", node->element ); - break; - - case CANT_BE_NESTED: - messageNode( doc, TidyWarning, node, - "%s can't be nested", nodedesc ); - break; - - case PROPRIETARY_ELEMENT: - messageNode( doc, TidyWarning, node, - "%s is not approved by W3C", nodedesc ); - break; - - case OBSOLETE_ELEMENT: - { - ctmbstr obsolete = ""; - if ( element->tag && (element->tag->model & CM_OBSOLETE) ) - obsolete = " obsolete"; - - TagToString( element, elemdesc ); - messageNode( doc, TidyWarning, rpt, - "replacing %s element %s by %s", - obsolete, elemdesc, nodedesc ); - } - break; - - case UNESCAPED_ELEMENT: - messageNode( doc, TidyWarning, node, - "unescaped %s in pre content", nodedesc ); - break; - - case TRIM_EMPTY_ELEMENT: - TagToString( element, elemdesc ); - messageNode( doc, TidyWarning, element, - "trimming empty %s", elemdesc ); - break; - - case MISSING_TITLE_ELEMENT: - messageNode( doc, TidyWarning, rpt, - "inserting missing 'title' element" ); - break; - - case ILLEGAL_NESTING: - TagToString( element, elemdesc ); - messageNode( doc, TidyWarning, element, - "%s shouldn't be nested", elemdesc ); - break; - - case NOFRAMES_CONTENT: - messageNode( doc, TidyWarning, node, - "%s not inside 'noframes' element", nodedesc ); - break; - - case INCONSISTENT_VERSION: - messageNode( doc, TidyWarning, rpt, - "HTML DOCTYPE doesn't match content" ); - break; - - case MALFORMED_DOCTYPE: - messageNode( doc, TidyWarning, rpt, - "expected \"html PUBLIC\" or \"html SYSTEM\"" ); - break; - - case CONTENT_AFTER_BODY: - messageNode( doc, TidyWarning, rpt, - "content occurs after end of body" ); - break; - - case MALFORMED_COMMENT: - messageNode( doc, TidyWarning, rpt, - "adjacent hyphens within comment" ); - break; - - case BAD_COMMENT_CHARS: - messageNode( doc, TidyWarning, rpt, - "expecting -- or >" ); - break; - - case BAD_XML_COMMENT: - messageNode( doc, TidyWarning, rpt, - "XML comments can't contain --" ); - break; - - case BAD_CDATA_CONTENT: - messageNode( doc, TidyWarning, rpt, - "'<' + '/' + letter not allowed here" ); - break; - - case INCONSISTENT_NAMESPACE: - messageNode( doc, TidyWarning, rpt, - "HTML namespace doesn't match content" ); - break; - - case DTYPE_NOT_UPPER_CASE: - messageNode( doc, TidyWarning, rpt, - "SYSTEM, PUBLIC, W3C, DTD, EN must be upper case" ); - break; - - case UNEXPECTED_END_OF_FILE: - /* on end of file report position at end of input */ - TagToString( element, elemdesc ); - messageNode( doc, TidyWarning, element, - "unexpected end of file %s", elemdesc ); - break; - - case NESTED_QUOTATION: - messageNode( doc, TidyWarning, rpt, - "nested q elements, possible typo." ); - break; - - case ELEMENT_NOT_EMPTY: - TagToString( element, elemdesc ); - messageNode( doc, TidyWarning, element, - "%s element not empty or not closed", elemdesc ); - break; - - case ENCODING_IO_CONFLICT: - messageNode( doc, TidyWarning, node, - "Output encoding does not work with standard output" ); - break; - } -} - -void ReportError( TidyDocImpl* doc, Node *element, Node *node, uint code) -{ - char nodedesc[ 256 ] = {0}; - Node* rpt = ( element ? element : node ); - - switch ( code ) - { - case SUSPECTED_MISSING_QUOTE: - messageNode( doc, TidyError, rpt, - "missing quote mark for attribute value" ); - break; - - case DUPLICATE_FRAMESET: - messageNode( doc, TidyError, rpt, "repeated FRAMESET element" ); - break; - - case UNKNOWN_ELEMENT: - TagToString( node, nodedesc ); - messageNode( doc, TidyError, node, "%s is not recognized!", nodedesc ); - break; - - case UNEXPECTED_ENDTAG: /* generated by XML docs */ - if (element) - messageNode( doc, TidyError, node, "unexpected in <%s>", - node->element, element->element ); -#if defined(__arm) - if (!element) -#else - else -#endif - messageNode( doc, TidyError, node, "unexpected ", - node->element ); - break; - } -} - -void ErrorSummary( TidyDocImpl* doc ) -{ - /* adjust badAccess to that its null if frames are ok */ - ctmbstr encnam = "specified"; - int charenc = cfg( doc, TidyCharEncoding ); - if ( charenc == WIN1252 ) - encnam = "Windows-1252"; - else if ( charenc == MACROMAN ) - encnam = "MacRoman"; - else if ( charenc == IBM858 ) - encnam = "ibm858"; - else if ( charenc == LATIN0 ) - encnam = "latin0"; - - if ( doc->badAccess & (USING_FRAMES | USING_NOFRAMES) ) - { - if (!((doc->badAccess & USING_FRAMES) && !(doc->badAccess & USING_NOFRAMES))) - doc->badAccess &= ~(USING_FRAMES | USING_NOFRAMES); - } - - if (doc->badChars) - { -#if 0 - if ( doc->badChars & WINDOWS_CHARS ) - { - tidy_out(doc, "Characters codes for the Microsoft Windows fonts in the range\n"); - tidy_out(doc, "128 - 159 may not be recognized on other platforms. You are\n"); - tidy_out(doc, "instead recommended to use named entities, e.g. ™ rather\n"); - tidy_out(doc, "than Windows character code 153 (0x2122 in Unicode). Note that\n"); - tidy_out(doc, "as of February 1998 few browsers support the new entities.\n\n"); - } -#endif - if (doc->badChars & VENDOR_SPECIFIC_CHARS) - { - - tidy_out(doc, "It is unlikely that vendor-specific, system-dependent encodings\n"); - tidy_out(doc, "work widely enough on the World Wide Web; you should avoid using the \n"); - tidy_out(doc, encnam ); - tidy_out(doc, " character encoding, instead you are recommended to\n" ); - tidy_out(doc, "use named entities, e.g. ™.\n\n"); - } - if ((doc->badChars & INVALID_SGML_CHARS) || (doc->badChars & INVALID_NCR)) - { - tidy_out(doc, "Character codes 128 to 159 (U+0080 to U+009F) are not allowed in HTML;\n"); - tidy_out(doc, "even if they were, they would likely be unprintable control characters.\n"); - tidy_out(doc, "Tidy assumed you wanted to refer to a character with the same byte value in the \n"); - tidy_out(doc, encnam ); - tidy_out(doc, " encoding and replaced that reference with the Unicode equivalent.\n\n" ); - } - if (doc->badChars & INVALID_UTF8) - { - tidy_out(doc, "Character codes for UTF-8 must be in the range: U+0000 to U+10FFFF.\n"); - tidy_out(doc, "The definition of UTF-8 in Annex D of ISO/IEC 10646-1:2000 also\n"); - tidy_out(doc, "allows for the use of five- and six-byte sequences to encode\n"); - tidy_out(doc, "characters that are outside the range of the Unicode character set;\n"); - tidy_out(doc, "those five- and six-byte sequences are illegal for the use of\n"); - tidy_out(doc, "UTF-8 as a transformation of Unicode characters. ISO/IEC 10646\n"); - tidy_out(doc, "does not allow mapping of unpaired surrogates, nor U+FFFE and U+FFFF\n"); - tidy_out(doc, "(but it does allow other noncharacters). For more information please refer to\n"); - tidy_out(doc, "http://www.unicode.org/unicode and http://www.cl.cam.ac.uk/~mgk25/unicode.html\n\n"); - } - -#if SUPPORT_UTF16_ENCODINGS - - if (doc->badChars & INVALID_UTF16) - { - tidy_out(doc, "Character codes for UTF-16 must be in the range: U+0000 to U+10FFFF.\n"); - tidy_out(doc, "The definition of UTF-16 in Annex C of ISO/IEC 10646-1:2000 does not allow the\n"); - tidy_out(doc, "mapping of unpaired surrogates. For more information please refer to\n"); - tidy_out(doc, "http://www.unicode.org/unicode and http://www.cl.cam.ac.uk/~mgk25/unicode.html\n\n"); - } - -#endif - - if (doc->badChars & INVALID_URI) - { - tidy_out(doc, "URIs must be properly escaped, they must not contain unescaped\n"); - tidy_out(doc, "characters below U+0021 including the space character and not\n"); - tidy_out(doc, "above U+007E. Tidy escapes the URI for you as recommended by\n"); - tidy_out(doc, "HTML 4.01 section B.2.1 and XML 1.0 section 4.2.2. Some user agents\n"); - tidy_out(doc, "use another algorithm to escape such URIs and some server-sided\n"); - tidy_out(doc, "scripts depend on that. If you want to depend on that, you must\n"); - tidy_out(doc, "escape the URI by your own. For more information please refer to\n"); - tidy_out(doc, "http://www.w3.org/International/O-URL-and-ident.html\n\n"); - } - } - - if (doc->badForm) - { - tidy_out(doc, "You may need to move one or both of the
    and
    \n"); - tidy_out(doc, "tags. HTML elements should be properly nested and form elements\n"); - tidy_out(doc, "are no exception. For instance you should not place the
    \n"); - tidy_out(doc, "in one table cell and the
    in another. If the
    is\n"); - tidy_out(doc, "placed before a table, the
    cannot be placed inside the\n"); - tidy_out(doc, "table! Note that one form can't be nested inside another!\n\n"); - } - - if (doc->badAccess) - { - if ( cfg(doc, TidyAccessibilityCheckLevel) > 0 ) - { - tidy_out(doc, "For further advice on how to make your pages accessible, see\n"); - tidy_out(doc, ACCESS_URL ); - tidy_out(doc, "and\n" ); - tidy_out(doc, ATRC_ACCESS_URL ); - tidy_out(doc, ".\n" ); - tidy_out(doc, "You may also want to try \"http://www.cast.org/bobby/\" which is a free Web-based\n"); - tidy_out(doc, "service for checking URLs for accessibility.\n\n"); - } - else - { - if (doc->badAccess & MISSING_SUMMARY) - { - tidy_out(doc, "The table summary attribute should be used to describe\n"); - tidy_out(doc, "the table structure. It is very helpful for people using\n"); - tidy_out(doc, "non-visual browsers. The scope and headers attributes for\n"); - tidy_out(doc, "table cells are useful for specifying which headers apply\n"); - tidy_out(doc, "to each table cell, enabling non-visual browsers to provide\n"); - tidy_out(doc, "a meaningful context for each cell.\n\n"); - } - - if (doc->badAccess & MISSING_IMAGE_ALT) - { - tidy_out(doc, "The alt attribute should be used to give a short description\n"); - tidy_out(doc, "of an image; longer descriptions should be given with the\n"); - tidy_out(doc, "longdesc attribute which takes a URL linked to the description.\n"); - tidy_out(doc, "These measures are needed for people using non-graphical browsers.\n\n"); - } - - if (doc->badAccess & MISSING_IMAGE_MAP) - { - tidy_out(doc, "Use client-side image maps in preference to server-side image\n"); - tidy_out(doc, "maps as the latter are inaccessible to people using non-\n"); - tidy_out(doc, "graphical browsers. In addition, client-side maps are easier\n"); - tidy_out(doc, "to set up and provide immediate feedback to users.\n\n"); - } - - if (doc->badAccess & MISSING_LINK_ALT) - { - tidy_out(doc, "For hypertext links defined using a client-side image map, you\n"); - tidy_out(doc, "need to use the alt attribute to provide a textual description\n"); - tidy_out(doc, "of the link for people using non-graphical browsers.\n\n"); - } - - if ((doc->badAccess & USING_FRAMES) && !(doc->badAccess & USING_NOFRAMES)) - { - tidy_out(doc, "Pages designed using frames presents problems for\n"); - tidy_out(doc, "people who are either blind or using a browser that\n"); - tidy_out(doc, "doesn't support frames. A frames-based page should always\n"); - tidy_out(doc, "include an alternative layout inside a NOFRAMES element.\n\n"); - } - - tidy_out(doc, "For further advice on how to make your pages accessible\n"); - tidy_out(doc, "see " ); - tidy_out(doc, ACCESS_URL ); - tidy_out(doc, ". You may also want to try\n" ); - tidy_out(doc, "\"http://www.cast.org/bobby/\" which is a free Web-based\n"); - tidy_out(doc, "service for checking URLs for accessibility.\n\n"); - } - } - - if (doc->badLayout) - { - if (doc->badLayout & USING_LAYER) - { - tidy_out(doc, "The Cascading Style Sheets (CSS) Positioning mechanism\n"); - tidy_out(doc, "is recommended in preference to the proprietary \n"); - tidy_out(doc, "element due to limited vendor support for LAYER.\n\n"); - } - - if (doc->badLayout & USING_SPACER) - { - tidy_out(doc, "You are recommended to use CSS for controlling white\n"); - tidy_out(doc, "space (e.g. for indentation, margins and line spacing).\n"); - tidy_out(doc, "The proprietary element has limited vendor support.\n\n"); - } - - if (doc->badLayout & USING_FONT) - { - tidy_out(doc, "You are recommended to use CSS to specify the font and\n"); - tidy_out(doc, "properties such as its size and color. This will reduce\n"); - tidy_out(doc, "the size of HTML files and make them easier to maintain\n"); - tidy_out(doc, "compared with using elements.\n\n"); - } - - if (doc->badLayout & USING_NOBR) - { - tidy_out(doc, "You are recommended to use CSS to control line wrapping.\n"); - tidy_out(doc, "Use \"white-space: nowrap\" to inhibit wrapping in place\n"); - tidy_out(doc, "of inserting ... into the markup.\n\n"); - } - - if (doc->badLayout & USING_BODY) - { - tidy_out(doc, "You are recommended to use CSS to specify page and link colors\n"); - } - } -} - -void UnknownOption( TidyDocImpl* doc, char c ) -{ - message( doc, TidyConfig, - "unrecognized option -%c use -help to list options\n", c ); -} - -void UnknownFile( TidyDocImpl* doc, ctmbstr program, ctmbstr file ) -{ - message( doc, TidyConfig, - "%s: can't open file \"%s\"\n", program, file ); -} - -void NeedsAuthorIntervention( TidyDocImpl* doc ) -{ - tidy_out(doc, "This document has errors that must be fixed before\n"); - tidy_out(doc, "using HTML Tidy to generate a tidied up version.\n\n"); -} - -void MissingBody( TidyDocImpl* doc ) -{ - tidy_out( doc, "Can't create slides - document is missing a body element.\n" ); -} - -void ReportNumberOfSlides( TidyDocImpl* doc, int count) -{ - tidy_out( doc, "%d Slides found", count ); -} - -void GeneralInfo( TidyDocImpl* doc ) -{ - tidy_out(doc, "To learn more about HTML Tidy see http://tidy.sourceforge.net\n"); - tidy_out(doc, "Please send bug reports to html-tidy@w3.org\n"); - tidy_out(doc, "HTML and CSS specifications are available from http://www.w3.org/\n"); - tidy_out(doc, "Lobby your company to join W3C, see http://www.w3.org/Consortium\n"); -} - - -void HelloMessage( TidyDocImpl* doc, ctmbstr date, ctmbstr filename ) -{ - tmbchar buf[ 2048 ]; - ctmbstr platform = "", helper = ""; - ctmbstr msgfmt = "\nHTML Tidy for %s (vers %s; built on %s, at %s)\n" - "Parsing \"%s\"\n"; - -#ifdef PLATFORM_NAME - platform = PLATFORM_NAME; - helper = " for "; -#endif - - if ( tmbstrcmp(filename, "stdin") == 0 ) - { - /* Filename will be ignored at end of varargs */ - msgfmt = "\nHTML Tidy for %s (vers %s; built on %s, at %s)\n" - "Parsing console input (stdin)\n"; - } - - sprintf( buf, msgfmt, helper, platform, - date, __DATE__, __TIME__, filename ); - tidy_out( doc, buf ); -} - -void ReportMarkupVersion( TidyDocImpl* doc ) -{ - Node* doctype = doc->givenDoctype; - - if ( doctype ) - { - Lexer* lexer = doc->lexer; - uint ix; - int quoteCount = 0; - tmbchar buf[ 2048 ] = {0}; - tmbstr cp = buf; - - for ( ix = doctype->start; ix < doctype->end; ++ix ) - { - uint c = (byte) lexer->lexbuf[ix]; - - /* look for UTF-8 multibyte character */ - if ( c > 0x7F ) - ix += GetUTF8( lexer->lexbuf + ix, &c ); - - if ( c == '"' ) - ++quoteCount; - else if ( quoteCount == 1 ) - *cp++ = (tmbchar) c; - } - - *cp = 0; - message( doc, TidyInfo, "Doctype given is \"%s\"", buf ); - } - - if ( ! cfgBool(doc, TidyXmlTags) ) - { - uint apparentVers = HTMLVersion( doc ); - Bool isXhtml = doc->lexer->isvoyager; - ctmbstr vers = HTMLVersionNameFromCode( apparentVers, isXhtml ); - message( doc, TidyInfo, "Document content looks like %s", vers ); - } -} - -void ReportNumWarnings( TidyDocImpl* doc ) -{ - if ( doc->warnings > 0 || doc->errors > 0 ) - { - tidy_out( doc, "%d %s, %d %s were found!", - doc->warnings, doc->warnings == 1 ? "warning" : "warnings", - doc->errors, doc->errors == 1 ? "error" : "errors" ); - - if ( doc->errors > cfg(doc, TidyShowErrors) || - !cfgBool(doc, TidyShowWarnings) ) - tidy_out( doc, " Not all warnings/errors were shown.\n\n" ); - else - tidy_out( doc, "\n\n" ); - } - else - tidy_out( doc, "No warnings or errors were found.\n\n" ); -} - -void HelpText( TidyDocImpl* doc, ctmbstr prog ) -{ - tidy_out(doc, "%s [option...] [file...] [option...] [file...]\n", prog ); - tidy_out(doc, "Utility to clean up and pretty print HTML/XHTML/XML\n"); - tidy_out(doc, "see http://tidy.sourgeforge.net/\n"); - tidy_out(doc, "\n"); - -#ifdef PLATFORM_NAME - tidy_out(doc, "Options for HTML Tidy for %s released on %s:\n", - PLATFORM_NAME, release_date); -#else - tidy_out(doc, "Options for HTML Tidy released on %s:\n", release_date); -#endif - tidy_out(doc, "\n"); - - tidy_out(doc, "File manipulation\n"); - tidy_out(doc, "-----------------\n"); - tidy_out(doc, " -o to write output markup to specified \n"); - tidy_out(doc, " -config to set configuration options from the specified \n"); - tidy_out(doc, " -f to write errors to the specified \n"); - tidy_out(doc, " -modify or -m to modify the original input files\n"); - tidy_out(doc, "\n"); - - tidy_out(doc, "Processing directives\n"); - tidy_out(doc, "---------------------\n"); - tidy_out(doc, " -asxhtml to convert HTML to well formed XHTML\n"); - tidy_out(doc, " -ashtml to force XHTML to (non-XML) HTML\n"); - tidy_out(doc, " -xml to specify the input is XML\n"); - tidy_out(doc, " -asxml to convert input to well formed XML\n"); - tidy_out(doc, " -indent or -i to indent element content\n"); - tidy_out(doc, " -wrap to wrap text at the specified (default is 68)\n"); - tidy_out(doc, " -upper or -u to force tags to upper case (default is lower case)\n"); - tidy_out(doc, " -clean or -c to replace FONT, NOBR and CENTER tags by CSS\n"); - tidy_out(doc, " -bare or -b to strip out smart quotes and em dashes, etc.\n"); - tidy_out(doc, " -numeric or -n to output numeric rather than named entities\n"); - tidy_out(doc, " -errors or -e to only show errors\n"); - tidy_out(doc, " -quiet or -q to suppress nonessential output\n"); - tidy_out(doc, " -omit to omit optional end tags\n"); - -/* TRT */ -#if SUPPORT_ACCESSIBILITY_CHECKS - tidy_out(doc, " -access to do additional accessibility checks ( = 1, 2, 3)\n"); -#endif - - tidy_out(doc, "\n"); - - tidy_out(doc, "Character encodings\n"); - tidy_out(doc, "-------------------\n"); - tidy_out(doc, " -raw to output values above 127 without conversion to entities\n"); - tidy_out(doc, " -ascii to use US-ASCII for output, ISO-8859-1 for input\n"); - tidy_out(doc, " -latin0 to use ISO-8859-15 for input and US-ASCII for output\n"); - tidy_out(doc, " -latin1 to use ISO-8859-1 for both input and output\n"); - tidy_out(doc, " -iso2022 to use ISO-2022 for both input and output\n"); - tidy_out(doc, " -utf8 to use UTF-8 for both input and output\n"); - tidy_out(doc, " -mac to use MacRoman for input, US-ASCII for output\n"); - tidy_out(doc, " -win1252 to use Windows-1252 for input, US-ASCII for output\n"); - tidy_out(doc, " -ibm858 to use IBM-858 (CP850+Euro) for input, US-ASCII for output\n"); - -#if SUPPORT_UTF16_ENCODINGS - tidy_out(doc, " -utf16le to use UTF-16LE for both input and output\n"); - tidy_out(doc, " -utf16be to use UTF-16BE for both input and output\n"); - tidy_out(doc, " -utf16 to use UTF-16 for both input and output\n"); -#endif - -#if SUPPORT_ASIAN_ENCODINGS - tidy_out(doc, " -big5 to use Big5 for both input and output\n"); /* #431953 - RJ */ - tidy_out(doc, " -shiftjis to use Shift_JIS for both input and output\n"); /* #431953 - RJ */ - tidy_out(doc, " -language to set the two-letter language code (for future use)\n"); /* #431953 - RJ */ -#endif - tidy_out(doc, "\n"); - - tidy_out(doc, "Miscellaneous\n"); - tidy_out(doc, "-------------\n"); - tidy_out(doc, " -version or -v to show the version of Tidy\n"); - tidy_out(doc, " -help, -h or -? to list the command line options\n"); - tidy_out(doc, " -help-config to list all configuration options\n"); - tidy_out(doc, " -show-config to list the current configuration settings\n"); - tidy_out(doc, "\n"); - tidy_out(doc, "Use --blah blarg for any configuration option \"blah\" with argument \"blarg\"\n"); - tidy_out(doc, "\n"); - - tidy_out(doc, "Input/Output default to stdin/stdout respectively\n"); - tidy_out(doc, "Single letter options apart from -f may be combined\n"); - tidy_out(doc, "as in: tidy -f errs.txt -imu foo.html\n"); - tidy_out(doc, "For further info on HTML see http://www.w3.org/MarkUp\n"); - tidy_out(doc, "\n"); -} diff --git a/tidylib-src/src/message.h b/tidylib-src/src/message.h deleted file mode 100644 index 399f4867..00000000 --- a/tidylib-src/src/message.h +++ /dev/null @@ -1,218 +0,0 @@ -#ifndef __MESSAGE_H__ -#define __MESSAGE_H__ - -/* message.h -- general message writing routines - - (c) 1998-2002 (W3C) MIT, INRIA, Keio University - See tidy.h for the copyright notice. - - CVS Info : - - $Author: creitzel $ - $Date: 2003/02/16 19:33:10 $ - $Revision: 1.2 $ - -*/ - -#include "forward.h" -#include "tidy.h" /* For TidyReportLevel */ - -/* General message writing routines. -** Each message is a single warning, error, etc. -** -** This routine will keep track of counts and, -** if the caller has set a filter, it will be -** called. The new preferred way of handling -** Tidy diagnostics output is either a) define -** a new output sink or b) install a message -** filter routine. -** -** Keeps track of ShowWarnings, ShowErrors, etc. -*/ - -ctmbstr ReleaseDate(); - -/* Reports error at current Lexer line/column. */ -void message( TidyDocImpl* doc, TidyReportLevel level, ctmbstr msg, ... ); - -/* Reports error at node line/column. */ -void messageNode( TidyDocImpl* doc, TidyReportLevel level, - Node* node, ctmbstr msg, ... ); - -/* Reports error at given line/column. */ -void messageLexer( TidyDocImpl* doc, TidyReportLevel level, - ctmbstr msg, ... ); - -/* For general reporting. Emits nothing if --quiet yes */ -void tidy_out( TidyDocImpl* doc, ctmbstr msg, ... ); - - -void ShowVersion( TidyDocImpl* doc ); -void ReportUnknownOption( TidyDocImpl* doc, ctmbstr option ); -void ReportBadArgument( TidyDocImpl* doc, ctmbstr option ); -void NeedsAuthorIntervention( TidyDocImpl* doc ); -void MissingBody( TidyDocImpl* doc ); -void ReportNumberOfSlides( TidyDocImpl* doc, int count ); - -void HelloMessage( TidyDocImpl* doc, ctmbstr date, ctmbstr filename ); -void ReportMarkupVersion( TidyDocImpl* doc ); -void ReportNumWarnings( TidyDocImpl* doc ); - -void HelpText( TidyDocImpl* doc, ctmbstr prog ); -void GeneralInfo( TidyDocImpl* doc ); -void UnknownOption( TidyDocImpl* doc, char c ); -void UnknownFile( TidyDocImpl* doc, ctmbstr program, ctmbstr file ); -void FileError( TidyDocImpl* doc, ctmbstr file ); - -void ErrorSummary( TidyDocImpl* doc ); -void ReportEncodingError( TidyDocImpl* doc, uint code, uint c ); -void ReportEntityError( TidyDocImpl* doc, uint code, ctmbstr entity, int c ); -void ReportAttrError( TidyDocImpl* doc, Node* node, AttVal* av, uint code ); -void ReportMissingAttr( TidyDocImpl* doc, Node* node, ctmbstr name ); -void ReportWarning( TidyDocImpl* doc, Node* element, Node* node, uint code ); -void ReportError( TidyDocImpl* doc, Node* element, Node* node, uint code ); - -void ReportNonCompliantAttr( TidyDocImpl* doc, Node* node, AttVal* attr, uint versWanted ); -void ReportNonCompliantNode( TidyDocImpl* doc, Node* node, uint code, uint versWanted ); - -/* error codes for entities/numeric character references */ - -#define MISSING_SEMICOLON 1 -#define MISSING_SEMICOLON_NCR 2 -#define UNKNOWN_ENTITY 3 -#define UNESCAPED_AMPERSAND 4 -#define APOS_UNDEFINED 5 - -/* error codes for element messages */ - -#define MISSING_ENDTAG_FOR 1 -#define MISSING_ENDTAG_BEFORE 2 -#define DISCARDING_UNEXPECTED 3 -#define NESTED_EMPHASIS 4 -#define NON_MATCHING_ENDTAG 5 -#define TAG_NOT_ALLOWED_IN 6 -#define MISSING_STARTTAG 7 -#define UNEXPECTED_ENDTAG 8 -#define USING_BR_INPLACE_OF 9 -#define INSERTING_TAG 10 -#define SUSPECTED_MISSING_QUOTE 11 -#define MISSING_TITLE_ELEMENT 12 -#define DUPLICATE_FRAMESET 13 -#define CANT_BE_NESTED 14 -#define OBSOLETE_ELEMENT 15 -#define PROPRIETARY_ELEMENT 16 -#define UNKNOWN_ELEMENT 17 -#define TRIM_EMPTY_ELEMENT 18 -#define COERCE_TO_ENDTAG 19 -#define ILLEGAL_NESTING 20 -#define NOFRAMES_CONTENT 21 -#define CONTENT_AFTER_BODY 22 -#define INCONSISTENT_VERSION 23 -#define MALFORMED_COMMENT 24 -#define BAD_COMMENT_CHARS 25 -#define BAD_XML_COMMENT 26 -#define BAD_CDATA_CONTENT 27 -#define INCONSISTENT_NAMESPACE 28 -#define DOCTYPE_AFTER_TAGS 29 -#define MALFORMED_DOCTYPE 30 -#define UNEXPECTED_END_OF_FILE 31 -#define DTYPE_NOT_UPPER_CASE 32 -#define TOO_MANY_ELEMENTS 33 -#define UNESCAPED_ELEMENT 34 -#define NESTED_QUOTATION 35 -#define ELEMENT_NOT_EMPTY 36 -#define ENCODING_IO_CONFLICT 37 -#define MIXED_CONTENT_IN_BLOCK 38 - -/* error codes used for attribute messages */ - -#define UNKNOWN_ATTRIBUTE 1 -#define INSERTING_ATTRIBUTE 2 -#define MISSING_ATTR_VALUE 3 -#define BAD_ATTRIBUTE_VALUE 4 -#define UNEXPECTED_GT 5 -#define PROPRIETARY_ATTRIBUTE 6 -#define PROPRIETARY_ATTR_VALUE 7 -#define REPEATED_ATTRIBUTE 8 -#define MISSING_IMAGEMAP 9 -#define XML_ATTRIBUTE_VALUE 10 -#define UNEXPECTED_QUOTEMARK 11 -#define MISSING_QUOTEMARK 12 -#define ID_NAME_MISMATCH 13 - -#define BACKSLASH_IN_URI 14 -#define FIXED_BACKSLASH 15 -#define ILLEGAL_URI_REFERENCE 16 -#define ESCAPED_ILLEGAL_URI 17 - -#define NEWLINE_IN_URI 18 -#define ANCHOR_NOT_UNIQUE 19 -#define ENTITY_IN_ID 20 -#define JOINING_ATTRIBUTE 21 -#define UNEXPECTED_EQUALSIGN 22 -#define ATTR_VALUE_NOT_LCASE 23 -#define XML_ID_SYNTAX 24 - -#define INVALID_ATTRIBUTE 25 - -/* page transition effects */ - -#define EFFECT_BLEND -1 -#define EFFECT_BOX_IN 0 -#define EFFECT_BOX_OUT 1 -#define EFFECT_CIRCLE_IN 2 -#define EFFECT_CIRCLE_OUT 3 -#define EFFECT_WIPE_UP 4 -#define EFFECT_WIPE_DOWN 5 -#define EFFECT_WIPE_RIGHT 6 -#define EFFECT_WIPE_LEFT 7 -#define EFFECT_VERT_BLINDS 8 -#define EFFECT_HORZ_BLINDS 9 -#define EFFECT_CHK_ACROSS 10 -#define EFFECT_CHK_DOWN 11 -#define EFFECT_RND_DISSOLVE 12 -#define EFFECT_SPLIT_VIRT_IN 13 -#define EFFECT_SPLIT_VIRT_OUT 14 -#define EFFECT_SPLIT_HORZ_IN 15 -#define EFFECT_SPLIT_HORZ_OUT 16 -#define EFFECT_STRIPS_LEFT_DOWN 17 -#define EFFECT_STRIPS_LEFT_UP 18 -#define EFFECT_STRIPS_RIGHT_DOWN 19 -#define EFFECT_STRIPS_RIGHT_UP 20 -#define EFFECT_RND_BARS_HORZ 21 -#define EFFECT_RND_BARS_VERT 22 -#define EFFECT_RANDOM 23 - -/* accessibility flaws */ - -#define MISSING_IMAGE_ALT 1 -#define MISSING_LINK_ALT 2 -#define MISSING_SUMMARY 4 -#define MISSING_IMAGE_MAP 8 -#define USING_FRAMES 16 -#define USING_NOFRAMES 32 - -/* presentation flaws */ - -#define USING_SPACER 1 -#define USING_LAYER 2 -#define USING_NOBR 4 -#define USING_FONT 8 -#define USING_BODY 16 - -/* character encoding errors */ -/* "or" DISCARDED_CHAR with the other errors if discarding char; -** otherwise default is replacing -*/ -#define REPLACED_CHAR 0 -#define DISCARDED_CHAR 1 - -#define VENDOR_SPECIFIC_CHARS 2 -#define INVALID_SGML_CHARS 4 -#define INVALID_UTF8 8 -#define INVALID_UTF16 16 -#define ENCODING_MISMATCH 32 /* fatal error */ -#define INVALID_URI 64 -#define INVALID_NCR 128 - -#endif /* __MESSAGE_H__ */ diff --git a/tidylib-src/src/parser.c b/tidylib-src/src/parser.c deleted file mode 100644 index 1a42bc48..00000000 --- a/tidylib-src/src/parser.c +++ /dev/null @@ -1,3782 +0,0 @@ -/* parser.c -- HTML Parser - - (c) 1998-2002 (W3C) MIT, INRIA, Keio University - See tidy.h for the copyright notice. - - CVS Info : - - $Author: creitzel $ - $Date: 2003/02/16 19:33:10 $ - $Revision: 1.56 $ - -*/ - -#include "tidy-int.h" -#include "lexer.h" -#include "parser.h" -#include "message.h" -#include "clean.h" -#include "tags.h" -#include "tmbstr.h" - -Bool CheckNodeIntegrity(Node *node) -{ - if (node->prev) - { - if (node->prev->next != node) - return no; - } - - if (node->next) - { - if (node->next->prev != node) - return no; - } - - if (node->parent) - { - Node *child = null; - if (node->prev == null && node->parent->content != node) - return no; - - if (node->next == null && node->parent->last != node) - return no; - - for (child = node->parent->content; child; child = child->next) - { - if (child == node) - break; - } - if ( node != child ) - return no; - } - - for (node = node->content; node; node = node->next) - if ( !CheckNodeIntegrity(node) ) - return no; - - return yes; -} - -/* - used to determine how attributes - without values should be printed - this was introduced to deal with - user defined tags e.g. Cold Fusion -*/ -Bool IsNewNode(Node *node) -{ - if (node && node->tag) - { - return (node->tag->model & CM_NEW); - } - return yes; -} - -void CoerceNode( TidyDocImpl* doc, Node *node, TidyTagId tid ) -{ - const Dict* tag = LookupTagDef( tid ); - Node* tmp = InferredTag( doc, tag->name ); - ReportWarning( doc, node, tmp, OBSOLETE_ELEMENT ); - MemFree( tmp->element ); - MemFree( tmp ); - - node->was = node->tag; - node->tag = tag; - node->type = StartTag; - node->implicit = yes; - MemFree( node->element ); - node->element = tmbstrdup( tag->name ); -} - -/* extract a node and its children from a markup tree */ -Node *RemoveNode(Node *node) -{ - if (node->prev) - node->prev->next = node->next; - - if (node->next) - node->next->prev = node->prev; - - if (node->parent) - { - if (node->parent->content == node) - node->parent->content = node->next; - - if (node->parent->last == node) - node->parent->last = node->prev; - } - - node->parent = node->prev = node->next = null; - return node; -} - -/* remove node from markup tree and discard it */ -Node *DiscardElement( TidyDocImpl* doc, Node *element ) -{ - Node *next = null; - - if (element) - { - next = element->next; - RemoveNode(element); - FreeNode( doc, element); - } - - return next; -} - -/* insert node into markup tree */ -void InsertNodeAtStart(Node *element, Node *node) -{ - node->parent = element; - - if (element->content == null) - element->last = node; - else - element->content->prev = node; - - node->next = element->content; - node->prev = null; - element->content = node; -} - -/* insert node into markup tree */ -void InsertNodeAtEnd(Node *element, Node *node) -{ - node->parent = element; - node->prev = element->last; - - if (element->last != null) - element->last->next = node; - else - element->content = node; - - element->last = node; -} - -/* - insert node into markup tree in place of element - which is moved to become the child of the node -*/ -static void InsertNodeAsParent(Node *element, Node *node) -{ - node->content = element; - node->last = element; - node->parent = element->parent; - element->parent = node; - - if (node->parent->content == element) - node->parent->content = node; - - if (node->parent->last == element) - node->parent->last = node; - - node->prev = element->prev; - element->prev = null; - - if (node->prev) - node->prev->next = node; - - node->next = element->next; - element->next = null; - - if (node->next) - node->next->prev = node; -} - -/* insert node into markup tree before element */ -void InsertNodeBeforeElement(Node *element, Node *node) -{ - Node *parent; - - parent = element->parent; - node->parent = parent; - node->next = element; - node->prev = element->prev; - element->prev = node; - - if (node->prev) - node->prev->next = node; - - if (parent->content == element) - parent->content = node; -} - -/* insert node into markup tree after element */ -void InsertNodeAfterElement(Node *element, Node *node) -{ - Node *parent; - - parent = element->parent; - node->parent = parent; - - /* AQ - 13 Jan 2000 fix for parent == null */ - if (parent != null && parent->last == element) - parent->last = node; - else - { - node->next = element->next; - /* AQ - 13 Jan 2000 fix for node->next == null */ - if (node->next != null) - node->next->prev = node; - } - - element->next = node; - node->prev = element; -} - -static Bool CanPrune( TidyDocImpl* doc, Node *element ) -{ - if (element->type == TextNode) - return yes; - - if (element->content) - return no; - - if ( element->tag->model & CM_BLOCK && element->attributes != null ) - return no; - - if ( nodeIsA(element) && element->attributes != null ) - return no; - - if ( nodeIsP(element) && !cfgBool(doc, TidyDropEmptyParas) ) - return no; - - if ( element->tag == null ) - return no; - - if ( element->tag->model & CM_ROW ) - return no; - - if ( element->tag->model & CM_EMPTY ) - return no; - - if ( nodeIsAPPLET(element) ) - return no; - - if ( nodeIsOBJECT(element) ) - return no; - - if ( nodeIsSCRIPT(element) && attrGetSRC(element) ) - return no; - - if ( nodeIsTITLE(element) ) - return no; - - /* #433359 - fix by Randy Waki 12 Mar 01 */ - if ( nodeIsIFRAME(element) ) - return no; - - if ( attrGetID(element) || attrGetNAME(element) ) - return no; - - return yes; -} - -Node *TrimEmptyElement( TidyDocImpl* doc, Node *element ) -{ - if ( CanPrune(doc, element) ) - { - if ( element->type != TextNode ) - ReportWarning( doc, element, null, TRIM_EMPTY_ELEMENT); - return DiscardElement(doc, element); - } - else if ( nodeIsP(element) && element->content == null ) - { - /* Put a non-breaking space into empty paragraphs. - ** Contrary to intent, replacing empty paragraphs - ** with two

    does not preserve formatting. - */ - char onesixty[2] = { '\240', 0 }; - InsertNodeAtStart( element, NewLiteralTextNode(doc->lexer, onesixty) ); - } - return element; -} - -/* - errors in positioning of form start or end tags - generally require human intervention to fix -*/ -static void BadForm( TidyDocImpl* doc ) -{ - doc->badForm = yes; - /* doc->errors++; */ -} - -/* - This maps - hello world - to - hello world - - If last child of element is a text node - then trim trailing white space character - moving it to after element's end tag. -*/ -static void TrimTrailingSpace( TidyDocImpl* doc, Node *element, Node *last ) -{ - Lexer* lexer = doc->lexer; - byte c; - - if (last != null && last->type == TextNode) - { - if (last->end > last->start) - { - c = (byte) lexer->lexbuf[ last->end - 1 ]; - - if ( c == ' ' -#ifdef COMMENT_NBSP_FIX - || c == 160 -#endif - ) - { -#ifdef COMMENT_NBSP_FIX - /* take care with   */ - if ( c == 160 && - ( element->tag == doc->tags.tag_td || - element->tag == doc->tags.tag_th ) - ) - { - if (last->end > last->start + 1) - last->end -= 1; - } - else -#endif - { - last->end -= 1; - if ( (element->tag->model & CM_INLINE) && - !(element->tag->model & CM_FIELD) ) - lexer->insertspace = yes; - } - } - } - /* if empty string then delete from parse tree */ - if ( last->start == last->end -#ifdef COMMENT_NBSP_FIX - && tag != doc->tags.tag_td - && tag != doc->tags.tag_th -#endif - ) - TrimEmptyElement( doc, last ); - } -} - -static Node *EscapeTag(Lexer *lexer, Node *element) -{ - Node *node = NewNode(lexer); - - node->start = lexer->lexsize; - AddByte(lexer, '<'); - - if (element->type == EndTag) - AddByte(lexer, '/'); - - if (element->element) - { - char *p; - for (p = element->element; *p != '\0'; ++p) - AddByte(lexer, *p); - } - else if (element->type == DocTypeTag) - { - uint i; - AddStringLiteral( lexer, "!DOCTYPE " ); - for (i = element->start; i < element->end; ++i) - AddByte(lexer, lexer->lexbuf[i]); - } - - if (element->type == StartEndTag) - AddByte(lexer, '/'); - - AddByte(lexer, '>'); - node->end = lexer->lexsize; - - return node; -} - -/* Only true for text nodes. */ -Bool IsBlank(Lexer *lexer, Node *node) -{ - Bool isBlank = ( node->type == TextNode ); - if ( isBlank ) - isBlank = ( node->end == node->start || /* Zero length */ - ( node->end == node->start+1 /* or one blank. */ - && lexer->lexbuf[node->start] == ' ' ) ); - return isBlank; -} - -/* - This maps -

    hello world - to -

    hello world - - Trims initial space, by moving it before the - start tag, or if this element is the first in - parent's content, then by discarding the space -*/ -static void TrimInitialSpace( TidyDocImpl* doc, Node *element, Node *text ) -{ - Lexer* lexer = doc->lexer; - Node *prev, *node; - - if ( text->type == TextNode && - lexer->lexbuf[text->start] == ' ' && - text->start < text->end ) - { - if ( (element->tag->model & CM_INLINE) && - !(element->tag->model & CM_FIELD) && - element->parent->content != element ) - { - prev = element->prev; - - if (prev && prev->type == TextNode) - { - if (lexer->lexbuf[prev->end - 1] != ' ') - lexer->lexbuf[(prev->end)++] = ' '; - - ++(element->start); - } - else /* create new node */ - { - node = NewNode(lexer); - node->start = (element->start)++; - node->end = element->start; - lexer->lexbuf[node->start] = ' '; - node->prev = prev; - - if (prev) - prev->next = node; - - node->next = element; - element->prev = node; - node->parent = element->parent; - } - } - - /* discard the space in current node */ - ++(text->start); - } -} - -/* - Move initial and trailing space out. - This routine maps: - - hello world - to - hello world - and - hello world - to - hello world -*/ -static void TrimSpaces( TidyDocImpl* doc, Node *element) -{ - Node* text = element->content; - if ( nodeIsText(text) && !nodeIsPRE(element) ) - TrimInitialSpace( doc, element, text ); - - text = element->last; - if ( nodeIsText(text) ) - TrimTrailingSpace( doc, element, text ); -} - -Bool DescendantOf( Node *element, TidyTagId tid ) -{ - Node *parent; - for ( parent = element->parent; - parent != null; - parent = parent->parent ) - { - if ( TagIsId(parent, tid) ) - return yes; - } - return no; -} - -static Bool InsertMisc(Node *element, Node *node) -{ - if (node->type == CommentTag || - node->type == ProcInsTag || - node->type == CDATATag || - node->type == SectionTag || - node->type == AspTag || - node->type == JsteTag || - node->type == PhpTag ) - { - InsertNodeAtEnd(element, node); - return yes; - } - - if ( node->type == XmlDecl ) - { - Node* root = element; - while ( root && root->parent ) - root = root->parent; - if ( root ) - { - InsertNodeAtStart( root, node ); - return yes; - } - } - - /* Declared empty tags seem to be slipping through - ** the cracks. This is an experiment to figure out - ** a decent place to pick them up. - */ - if ( node->tag && - (node->type == StartTag || node->type == StartEndTag) && - nodeCMIsEmpty(node) && TagId(node) == TidyTag_UNKNOWN && - (node->tag->versions & VERS_PROPRIETARY) != 0 ) - { - InsertNodeAtEnd(element, node); - return yes; - } - - return no; -} - - -static void ParseTag( TidyDocImpl* doc, Node *node, uint mode ) -{ - Lexer* lexer = doc->lexer; - /* - Fix by GLP 2000-12-21. Need to reset insertspace if this - is both a non-inline and empty tag (base, link, meta, isindex, hr, area). - */ - if (node->tag->model & CM_EMPTY) - { - lexer->waswhite = no; - if (node->tag->parser == null) - return; - } - else if (!(node->tag->model & CM_INLINE)) - lexer->insertspace = no; - - if (node->tag->parser == null) - return; - - if (node->type == StartEndTag) - { - TrimEmptyElement( doc, node ); - return; - } - - (*node->tag->parser)( doc, node, mode ); -} - -/* - the doctype has been found after other tags, - and needs moving to before the html element -*/ -static void InsertDocType( TidyDocImpl* doc, Node *element, Node *doctype ) -{ - Node* existing = FindDocType( doc ); - if ( existing ) - { - ReportWarning( doc, element, doctype, DISCARDING_UNEXPECTED ); - FreeNode( doc, doctype ); - } - else - { - ReportWarning( doc, element, doctype, DOCTYPE_AFTER_TAGS ); - while ( !nodeIsHTML(element) ) - element = element->parent; - InsertNodeBeforeElement( element, doctype ); - } -} - -/* - duplicate name attribute as an id - and check if id and name match -*/ -void FixId( TidyDocImpl* doc, Node *node ) -{ - AttVal *name = GetAttrByName(node, "name"); - AttVal *id = GetAttrByName(node, "id"); - - if (name) - { - if (id) - { - if ( name->value != null && id->value != null && - tmbstrcmp(id->value, name->value) != 0 ) - ReportAttrError( doc, node, name, ID_NAME_MISMATCH ); - } - else if ( cfgBool(doc, TidyXmlOut) ) - AddAttribute( doc, node, "id", name->value ); - } -} - -/* - move node to the head, where element is used as starting - point in hunt for head. normally called during parsing -*/ -static void MoveToHead( TidyDocImpl* doc, Node *element, Node *node ) -{ - Node *head; - - RemoveNode( node ); /* make sure that node is isolated */ - - if ( node->type == StartTag || node->type == StartEndTag ) - { - ReportWarning( doc, element, node, TAG_NOT_ALLOWED_IN ); - - while ( !nodeIsHTML(element) ) - element = element->parent; - - for (head = element->content; head; head = head->next) - { - if ( nodeIsHEAD(head) ) - { - InsertNodeAtEnd(head, node); - break; - } - } - - if ( node->tag->parser ) - ParseTag( doc, node, IgnoreWhitespace ); - } - else - { - ReportWarning( doc, element, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node ); - } -} - -/* moves given node to end of body element */ -static void MoveNodeToBody( TidyDocImpl* doc, Node* node ) -{ - Node* body = FindBody( doc ); - RemoveNode( node ); - InsertNodeAtEnd( body, node ); -} - -/* - element is node created by the lexer - upon seeing the start tag, or by the - parser when the start tag is inferred -*/ -void ParseBlock( TidyDocImpl* doc, Node *element, uint mode) -{ - Lexer* lexer = doc->lexer; - Node *node, *parent; - Bool checkstack = yes; - uint istackbase = 0; - - if ( element->tag->model & CM_EMPTY ) - return; - - if ( nodeIsFORM(element) && - DescendantOf(element, TidyTag_FORM) ) - ReportWarning( doc, element, null, ILLEGAL_NESTING ); - - /* - InlineDup() asks the lexer to insert inline emphasis tags - currently pushed on the istack, but take care to avoid - propagating inline emphasis inside OBJECT or APPLET. - For these elements a fresh inline stack context is created - and disposed of upon reaching the end of the element. - They thus behave like table cells in this respect. - */ - if (element->tag->model & CM_OBJECT) - { - istackbase = lexer->istackbase; - lexer->istackbase = lexer->istacksize; - } - - if (!(element->tag->model & CM_MIXED)) - InlineDup( doc, null ); - - mode = IgnoreWhitespace; - - while ((node = GetToken(doc, mode /*MixedContent*/)) != null) - { - /* end tag for this element */ - if (node->type == EndTag && node->tag && - (node->tag == element->tag || element->was == node->tag)) - { - FreeNode( doc, node ); - - if (element->tag->model & CM_OBJECT) - { - /* pop inline stack */ - while (lexer->istacksize > lexer->istackbase) - PopInline( doc, null ); - lexer->istackbase = istackbase; - } - - element->closed = yes; - TrimSpaces( doc, element ); - TrimEmptyElement( doc, element ); - return; - } - - if ( nodeIsHTML(node) || nodeIsHEAD(node) || nodeIsBODY(node) ) - { - if ( node->type == StartTag || node->type == StartEndTag ) - ReportWarning( doc, element, node, DISCARDING_UNEXPECTED ); - FreeNode( doc, node ); - continue; - } - - - if (node->type == EndTag) - { - if (node->tag == null) - { - ReportWarning( doc, element, node, DISCARDING_UNEXPECTED ); - FreeNode( doc, node ); - continue; - } - else if ( nodeIsBR(node) ) - node->type = StartTag; - else if ( nodeIsP(node) ) - { - CoerceNode( doc, node, TidyTag_BR ); - FreeAttrs( doc, node ); /* discard align attribute etc. */ - InsertNodeAtEnd( element, node ); - node = InferredTag( doc, "br" ); - } - else - { - /* - if this is the end tag for an ancestor element - then infer end tag for this element - */ - for ( parent = element->parent; - parent != null; - parent = parent->parent ) - { - if (node->tag == parent->tag) - { - if (!(element->tag->model & CM_OPT)) - ReportWarning( doc, element, node, MISSING_ENDTAG_BEFORE ); - - UngetToken( doc ); - - if (element->tag->model & CM_OBJECT) - { - /* pop inline stack */ - while (lexer->istacksize > lexer->istackbase) - PopInline( doc, null ); - lexer->istackbase = istackbase; - } - - TrimSpaces( doc, element ); - TrimEmptyElement( doc, element ); - return; - } - } - - /* special case etc. for stuff moved in front of table */ - if ( lexer->exiled - && node->tag->model - && (node->tag->model & CM_TABLE) ) - { - UngetToken( doc ); - TrimSpaces( doc, element ); - TrimEmptyElement( doc, element ); - return; - } - } - } - - /* mixed content model permits text */ - if (node->type == TextNode) - { - Bool iswhitenode = ( node->type == TextNode && - node->end <= node->start + 1 && - lexer->lexbuf[node->start] == ' ' ); - - if ( cfgBool(doc, TidyEncloseBlockText) && !iswhitenode ) - { - UngetToken( doc ); - node = InferredTag( doc, "p" ); - InsertNodeAtEnd( element, node ); - ParseTag( doc, node, MixedContent ); - continue; - } - - if ( checkstack ) - { - checkstack = no; - if (!(element->tag->model & CM_MIXED)) - { - if ( InlineDup(doc, node) > 0 ) - continue; - } - } - - InsertNodeAtEnd(element, node); - mode = MixedContent; - - /* - HTML4 strict doesn't allow mixed content for - elements with %block; as their content model - */ - /* - But only body, map, blockquote, form and - noscript have content model %block; - */ - if ( nodeIsBODY(element) || - nodeIsMAP(element) || - nodeIsBLOCKQUOTE(element) || - nodeIsFORM(element) || - nodeIsNOSCRIPT(element) ) - ConstrainVersion( doc, ~VERS_HTML40_STRICT ); - continue; - } - - if ( InsertMisc(element, node) ) - continue; - - /* allow PARAM elements? */ - if ( nodeIsPARAM(node) ) - { - if ( nodeHasCM(element, CM_PARAM) && - (node->type == StartEndTag || node->type == StartTag) ) - { - InsertNodeAtEnd(element, node); - continue; - } - - /* otherwise discard it */ - ReportWarning( doc, element, node, DISCARDING_UNEXPECTED ); - FreeNode( doc, node ); - continue; - } - - /* allow AREA elements? */ - if ( nodeIsAREA(node) ) - { - if ( nodeIsMAP(element) && - (node->type == StartTag || node->type == StartEndTag) ) - { - InsertNodeAtEnd(element, node); - continue; - } - - /* otherwise discard it */ - ReportWarning( doc, element, node, DISCARDING_UNEXPECTED ); - FreeNode( doc, node ); - continue; - } - - /* ignore unknown start/end tags */ - if ( node->tag == null ) - { - ReportWarning( doc, element, node, DISCARDING_UNEXPECTED ); - FreeNode( doc, node ); - continue; - } - - /* - Allow CM_INLINE elements here. - - Allow CM_BLOCK elements here unless - lexer->excludeBlocks is yes. - - LI and DD are special cased. - - Otherwise infer end tag for this element. - */ - - if ( !nodeHasCM(node, CM_INLINE) ) - { - if (node->type != StartTag && node->type != StartEndTag) - { - if ( nodeIsFORM(node) ) - BadForm( doc ); - - ReportWarning( doc, element, node, DISCARDING_UNEXPECTED ); - FreeNode( doc, node ); - continue; - } - - /* #427671 - Fix by Randy Waki - 10 Aug 00 */ - /* - If an LI contains an illegal FRAME, FRAMESET, OPTGROUP, or OPTION - start tag, discard the start tag and let the subsequent content get - parsed as content of the enclosing LI. This seems to mimic IE and - Netscape, and avoids an infinite loop: without this check, - ParseBlock (which is parsing the LI's content) and ParseList (which - is parsing the LI's parent's content) repeatedly defer to each - other to parse the illegal start tag, each time inferring a missing -

  • or
  • respectively. - - NOTE: This check is a bit fragile. It specifically checks for the - four tags that happen to weave their way through the current series - of tests performed by ParseBlock and ParseList to trigger the - infinite loop. - */ - if ( nodeIsLI(element) ) - { - if ( nodeIsFRAME(node) || - nodeIsFRAMESET(node) || - nodeIsOPTGROUP(node) || - nodeIsOPTION(node) ) - { - ReportWarning( doc, element, node, DISCARDING_UNEXPECTED ); - FreeNode( doc, node ); /* DSR - 27Apr02 avoid memory leak */ - continue; - } - } - - if ( nodeIsTD(element) || nodeIsTH(element) ) - { - /* if parent is a table cell, avoid inferring the end of the cell */ - - if ( nodeHasCM(node, CM_HEAD) ) - { - MoveToHead( doc, element, node ); - continue; - } - - if ( nodeHasCM(node, CM_LIST) ) - { - UngetToken( doc ); - node = InferredTag( doc, "ul" ); - AddClass( doc, node, "noindent" ); - lexer->excludeBlocks = yes; - } - else if ( nodeHasCM(node, CM_DEFLIST) ) - { - UngetToken( doc ); - node = InferredTag( doc, "dl" ); - lexer->excludeBlocks = yes; - } - - /* infer end of current table cell */ - if ( !nodeHasCM(node, CM_BLOCK) ) - { - UngetToken( doc ); - TrimSpaces( doc, element ); - TrimEmptyElement( doc, element ); - return; - } - } - else if ( nodeHasCM(node, CM_BLOCK) ) - { - if ( lexer->excludeBlocks ) - { - if ( !nodeHasCM(element, CM_OPT) ) - ReportWarning( doc, element, node, MISSING_ENDTAG_BEFORE ); - - UngetToken( doc ); - - if ( nodeHasCM(element, CM_OBJECT) ) - lexer->istackbase = istackbase; - - TrimSpaces( doc, element ); - TrimEmptyElement( doc, element ); - return; - } - } - else /* things like list items */ - { - if (node->tag->model & CM_HEAD) - { - MoveToHead( doc, element, node ); - continue; - } - - /* - special case where a form start tag - occurs in a tr and is followed by td or th - */ - - if ( nodeIsFORM(element) && - nodeIsTD(element->parent) && - element->parent->implicit ) - { - if ( nodeIsTD(node) ) - { - ReportWarning( doc, element, node, DISCARDING_UNEXPECTED ); - FreeNode( doc, node ); - continue; - } - - if ( nodeIsTH(node) ) - { - ReportWarning( doc, element, node, DISCARDING_UNEXPECTED ); - FreeNode( doc, node ); - node = element->parent; - MemFree(node->element); - node->element = tmbstrdup("th"); - node->tag = LookupTagDef( TidyTag_TH ); - continue; - } - } - - if ( !nodeHasCM(element, CM_OPT) && !element->implicit ) - ReportWarning( doc, element, node, MISSING_ENDTAG_BEFORE ); - - UngetToken( doc ); - - if ( nodeHasCM(node, CM_LIST) ) - { - if ( element->parent && element->parent->tag && - element->parent->tag->parser == ParseList ) - { - TrimSpaces( doc, element ); - TrimEmptyElement( doc, element ); - return; - } - - node = InferredTag( doc, "ul" ); - AddClass( doc, node, "noindent" ); - } - else if ( nodeHasCM(node, CM_DEFLIST) ) - { - if ( nodeIsDL(element->parent) ) - { - TrimSpaces( doc, element ); - TrimEmptyElement( doc, element ); - return; - } - - node = InferredTag( doc, "dl" ); - } - else if ( nodeHasCM(node, CM_TABLE) || nodeHasCM(node, CM_ROW) ) - { - node = InferredTag( doc, "table" ); - } - else if ( nodeHasCM(element, CM_OBJECT) ) - { - /* pop inline stack */ - while ( lexer->istacksize > lexer->istackbase ) - PopInline( doc, null ); - lexer->istackbase = istackbase; - TrimSpaces( doc, element ); - TrimEmptyElement( doc, element ); - return; - - } - else - { - TrimSpaces( doc, element ); - TrimEmptyElement( doc, element ); - return; - } - } - } - - /* parse known element */ - if (node->type == StartTag || node->type == StartEndTag) - { - if (node->tag->model & CM_INLINE) - { - /* DSR - 27Apr02 ensure we wrap anchors and other inline content */ - if ( cfgBool(doc, TidyEncloseBlockText) ) - { - UngetToken( doc ); - node = InferredTag( doc, "p" ); - InsertNodeAtEnd( element, node ); - ParseTag( doc, node, MixedContent ); - continue; - } - - if (checkstack && !node->implicit) - { - checkstack = no; - - if (!(element->tag->model & CM_MIXED)) /* #431731 - fix by Randy Waki 25 Dec 00 */ - { - if ( InlineDup(doc, node) > 0 ) - continue; - } - } - - mode = MixedContent; - } - else - { - checkstack = yes; - mode = IgnoreWhitespace; - } - - /* trim white space before
    */ - if ( nodeIsBR(node) ) - TrimSpaces( doc, element ); - - InsertNodeAtEnd(element, node); - - if (node->implicit) - ReportWarning( doc, element, node, INSERTING_TAG ); - - ParseTag( doc, node, IgnoreWhitespace /*MixedContent*/ ); - continue; - } - - /* discard unexpected tags */ - if (node->type == EndTag) - PopInline( doc, node ); /* if inline end tag */ - - ReportWarning( doc, element, node, DISCARDING_UNEXPECTED ); - FreeNode( doc, node ); - continue; - } - - if (!(element->tag->model & CM_OPT)) - ReportWarning( doc, element, node, MISSING_ENDTAG_FOR); - - if (element->tag->model & CM_OBJECT) - { - /* pop inline stack */ - while ( lexer->istacksize > lexer->istackbase ) - PopInline( doc, null ); - lexer->istackbase = istackbase; - } - - TrimSpaces( doc, element ); - TrimEmptyElement( doc, element ); -} - -void ParseInline( TidyDocImpl* doc, Node *element, uint mode ) -{ - Lexer* lexer = doc->lexer; - Node *node, *parent; - - if (element->tag->model & CM_EMPTY) - return; - - /* - ParseInline is used for some block level elements like H1 to H6 - For such elements we need to insert inline emphasis tags currently - on the inline stack. For Inline elements, we normally push them - onto the inline stack provided they aren't implicit or OBJECT/APPLET. - This test is carried out in PushInline and PopInline, see istack.c - We don't push SPAN to replicate current browser behavior - */ - if ( nodeHasCM(element, CM_BLOCK) || nodeIsDT(element) ) - InlineDup( doc, null ); - else if ( nodeHasCM(element, CM_INLINE) ) - PushInline( doc, element ); - - if ( nodeIsNOBR(element) ) - doc->badLayout |= USING_NOBR; - else if ( nodeIsFONT(element) ) - doc->badLayout |= USING_FONT; - - /* Inline elements may or may not be within a preformatted element */ - if (mode != Preformatted) - mode = MixedContent; - - while ((node = GetToken(doc, mode)) != null) - { - /* end tag for current element */ - if (node->tag == element->tag && node->type == EndTag) - { - if (element->tag->model & CM_INLINE) - PopInline( doc, node ); - - FreeNode( doc, node ); - - if (!(mode & Preformatted)) - TrimSpaces(doc, element); - - /* - if a font element wraps an anchor and nothing else - then move the font element inside the anchor since - otherwise it won't alter the anchor text color - */ - if ( nodeIsFONT(element) && - element->content && element->content == element->last ) - { - Node *child = element->content; - - if ( nodeIsA(child) ) - { - child->parent = element->parent; - child->next = element->next; - child->prev = element->prev; - - if (child->prev) - child->prev->next = child; - else - child->parent->content = child; - - if (child->next) - child->next->prev = child; - else - child->parent->last = child; - - element->next = null; - element->prev = null; - element->parent = child; - element->content = child->content; - element->last = child->last; - child->content = child->last = element; - - for (child = element->content; child; child = child->next) - child->parent = element; - } - } - - element->closed = yes; - TrimSpaces( doc, element ); - TrimEmptyElement( doc, element ); - return; - } - - /* ... map 2nd to if 1st is explicit */ - /* otherwise emphasis nesting is probably unintentional */ - /* big and small have cumulative effect to leave them alone */ - if ( node->type == StartTag - && node->tag == element->tag - && IsPushed( doc, node ) - && !node->implicit - && !element->implicit - && node->tag && (node->tag->model & CM_INLINE) - && !nodeIsA(node) - && !nodeIsFONT(node) - && !nodeIsBIG(node) - && !nodeIsSMALL(node) - && !nodeIsQ(node) - ) - { - if ( element->content != null && node->attributes == null ) - { - ReportWarning( doc, element, node, COERCE_TO_ENDTAG ); - node->type = EndTag; - UngetToken( doc ); - continue; - } - - ReportWarning( doc, element, node, NESTED_EMPHASIS ); - } - else if ( IsPushed(doc, node) && node->type == StartTag && - nodeIsQ(node) ) - { - ReportWarning( doc, element, node, NESTED_QUOTATION ); - } - - if ( node->type == TextNode ) - { - /* only called for 1st child */ - if ( element->content == null && !(mode & Preformatted) ) - TrimSpaces( doc, element ); - - if ( node->start >= node->end ) - { - FreeNode( doc, node ); - continue; - } - - InsertNodeAtEnd(element, node); - continue; - } - - /* mixed content model so allow text */ - if (InsertMisc(element, node)) - continue; - - /* deal with HTML tags */ - if ( nodeIsHTML(node) ) - { - if ( node->type == StartTag || node->type == StartEndTag ) - { - ReportWarning( doc, element, node, DISCARDING_UNEXPECTED ); - FreeNode( doc, node ); - continue; - } - - /* otherwise infer end of inline element */ - UngetToken( doc ); - - if (!(mode & Preformatted)) - TrimSpaces(doc, element); - - TrimEmptyElement(doc, element); - return; - } - - /* within
    or
     map 

    to
    */ - if ( nodeIsP(node) && - node->type == StartTag && - ( (mode & Preformatted) || - nodeIsDT(element) || - DescendantOf(element, TidyTag_DT ) - ) - ) - { - node->tag = LookupTagDef( TidyTag_BR ); - MemFree(node->element); - node->element = tmbstrdup("br"); - TrimSpaces(doc, element); - InsertNodeAtEnd(element, node); - continue; - } - - /* ignore unknown and PARAM tags */ - if ( node->tag == null || nodeIsPARAM(node) ) - { - ReportWarning( doc, element, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node ); - continue; - } - - if ( nodeIsBR(node) && node->type == EndTag ) - node->type = StartTag; - - if ( node->type == EndTag ) - { - /* coerce
    to
    */ - if ( nodeIsBR(node) ) - node->type = StartTag; - else if ( nodeIsP(node) ) - { - /* coerce unmatched

    to

    */ - if ( !DescendantOf(element, TidyTag_P) ) - { - CoerceNode( doc, node, TidyTag_BR ); - TrimSpaces( doc, element ); - InsertNodeAtEnd( element, node ); - node = InferredTag(doc, "br"); - continue; - } - } - else if ( nodeHasCM(node, CM_INLINE) - && !nodeIsA(node) - && !nodeHasCM(node, CM_OBJECT) - && nodeHasCM(element, CM_INLINE) ) - { - /* allow any inline end tag to end current element */ - PopInline( doc, element ); - - if ( !nodeIsA(element) ) - { - if ( nodeIsA(node) && node->tag != element->tag ) - { - ReportWarning( doc, element, node, MISSING_ENDTAG_BEFORE ); - UngetToken( doc ); - } - else - { - ReportWarning( doc, element, node, NON_MATCHING_ENDTAG); - FreeNode( doc, node); - } - - if (!(mode & Preformatted)) - TrimSpaces(doc, element); - - TrimEmptyElement(doc, element); - return; - } - - /* if parent is
    then discard unexpected inline end tag */ - ReportWarning( doc, element, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } /* special case etc. for stuff moved in front of table */ - else if ( lexer->exiled - && node->tag->model - && (node->tag->model & CM_TABLE) ) - { - UngetToken( doc ); - TrimSpaces(doc, element); - TrimEmptyElement(doc, element); - return; - } - } - - /* allow any header tag to end current header */ - if ( nodeHasCM(node, CM_HEADING) && nodeHasCM(element, CM_HEADING) ) - { - - if ( node->tag == element->tag ) - { - ReportWarning( doc, element, node, NON_MATCHING_ENDTAG ); - FreeNode( doc, node); - } - else - { - ReportWarning( doc, element, node, MISSING_ENDTAG_BEFORE ); - UngetToken( doc ); - } - - if (!(mode & Preformatted)) - TrimSpaces(doc, element); - - TrimEmptyElement(doc, element); - return; - } - - /* - an tag to ends any open element - but is mapped to - */ - /* #427827 - fix by Randy Waki and Bjoern Hoehrmann 23 Aug 00 */ - /* if (node->tag == doc->tags.tag_a && !node->implicit && IsPushed(doc, node)) */ - if ( nodeIsA(node) && !node->implicit && - (nodeIsA(element) || DescendantOf(element, TidyTag_A)) ) - { - /* coerce to unless it has some attributes */ - /* #427827 - fix by Randy Waki and Bjoern Hoehrmann 23 Aug 00 */ - /* other fixes by Dave Raggett */ - /* if (node->attributes == null) */ - if (node->type != EndTag && node->attributes == null) - { - node->type = EndTag; - ReportWarning( doc, element, node, COERCE_TO_ENDTAG); - /* PopInline( doc, node ); */ - UngetToken( doc ); - continue; - } - - UngetToken( doc ); - ReportWarning( doc, element, node, MISSING_ENDTAG_BEFORE); - /* PopInline( doc, element ); */ - - if (!(mode & Preformatted)) - TrimSpaces(doc, element); - - TrimEmptyElement(doc, element); - return; - } - - if (element->tag->model & CM_HEADING) - { - if ( nodeIsCENTER(node) || nodeIsDIV(node) ) - { - if (node->type != StartTag && node->type != StartEndTag) - { - ReportWarning( doc, element, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } - - ReportWarning( doc, element, node, TAG_NOT_ALLOWED_IN); - - /* insert center as parent if heading is empty */ - if (element->content == null) - { - InsertNodeAsParent(element, node); - continue; - } - - /* split heading and make center parent of 2nd part */ - InsertNodeAfterElement(element, node); - - if (!(mode & Preformatted)) - TrimSpaces(doc, element); - - element = CloneNode( doc, element ); - InsertNodeAtEnd(node, element); - continue; - } - - if ( nodeIsHR(node) ) - { - if ( node->type != StartTag && node->type != StartEndTag ) - { - ReportWarning( doc, element, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } - - ReportWarning( doc, element, node, TAG_NOT_ALLOWED_IN); - - /* insert hr before heading if heading is empty */ - if (element->content == null) - { - InsertNodeBeforeElement(element, node); - continue; - } - - /* split heading and insert hr before 2nd part */ - InsertNodeAfterElement(element, node); - - if (!(mode & Preformatted)) - TrimSpaces(doc, element); - - element = CloneNode( doc, element ); - InsertNodeAfterElement(node, element); - continue; - } - } - - if ( nodeIsDT(element) ) - { - if ( nodeIsHR(node) ) - { - Node *dd; - if (node->type != StartTag && node->type != StartEndTag) - { - ReportWarning( doc, element, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } - - ReportWarning( doc, element, node, TAG_NOT_ALLOWED_IN); - dd = InferredTag(doc, "dd"); - - /* insert hr within dd before dt if dt is empty */ - if (element->content == null) - { - InsertNodeBeforeElement(element, dd); - InsertNodeAtEnd(dd, node); - continue; - } - - /* split dt and insert hr within dd before 2nd part */ - InsertNodeAfterElement(element, dd); - InsertNodeAtEnd(dd, node); - - if (!(mode & Preformatted)) - TrimSpaces(doc, element); - - element = CloneNode( doc, element ); - InsertNodeAfterElement(dd, element); - continue; - } - } - - - /* - if this is the end tag for an ancestor element - then infer end tag for this element - */ - if (node->type == EndTag) - { - for (parent = element->parent; - parent != null; parent = parent->parent) - { - if (node->tag == parent->tag) - { - if (!(element->tag->model & CM_OPT) && !element->implicit) - ReportWarning( doc, element, node, MISSING_ENDTAG_BEFORE); - - PopInline( doc, element ); - UngetToken( doc ); - - if (!(mode & Preformatted)) - TrimSpaces(doc, element); - - TrimEmptyElement(doc, element); - return; - } - } - } - - /* block level tags end this element */ - if (!(node->tag->model & CM_INLINE)) - { - if (node->type != StartTag) - { - ReportWarning( doc, element, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } - - if (!(element->tag->model & CM_OPT)) - ReportWarning( doc, element, node, MISSING_ENDTAG_BEFORE); - - if (node->tag->model & CM_HEAD && !(node->tag->model & CM_BLOCK)) - { - MoveToHead(doc, element, node); - continue; - } - - /* - prevent anchors from propagating into block tags - except for headings h1 to h6 - */ - if ( nodeIsA(element) ) - { - if (node->tag && !(node->tag->model & CM_HEADING)) - PopInline( doc, element ); - else if (!(element->content)) - { - DiscardElement( doc, element ); - UngetToken( doc ); - return; - } - } - - UngetToken( doc ); - - if (!(mode & Preformatted)) - TrimSpaces(doc, element); - - TrimEmptyElement(doc, element); - return; - } - - /* parse inline element */ - if (node->type == StartTag || node->type == StartEndTag) - { - if (node->implicit) - ReportWarning( doc, element, node, INSERTING_TAG); - - /* trim white space before
    */ - if ( nodeIsBR(node) ) - TrimSpaces(doc, element); - - InsertNodeAtEnd(element, node); - ParseTag(doc, node, mode); - continue; - } - - /* discard unexpected tags */ - ReportWarning( doc, element, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } - - if (!(element->tag->model & CM_OPT)) - ReportWarning( doc, element, node, MISSING_ENDTAG_FOR); - - TrimEmptyElement(doc, element); -} - -void ParseEmpty(TidyDocImpl* doc, Node *element, uint mode) -{ - Lexer* lexer = doc->lexer; - if ( lexer->isvoyager ) - { - Node *node = GetToken( doc, mode); - if (!(node->type == EndTag && node->tag == element->tag)) - { - ReportWarning( doc, element, node, ELEMENT_NOT_EMPTY); - UngetToken( doc ); - } - } -} - -void ParseDefList(TidyDocImpl* doc, Node *list, uint mode) -{ - Lexer* lexer = doc->lexer; - Node *node, *parent; - - if (list->tag->model & CM_EMPTY) - return; - - lexer->insert = null; /* defer implicit inline start tags */ - - while ((node = GetToken( doc, IgnoreWhitespace)) != null) - { - if (node->tag == list->tag && node->type == EndTag) - { - FreeNode( doc, node); - list->closed = yes; - TrimEmptyElement( doc, list); - return; - } - - /* deal with comments etc. */ - if (InsertMisc(list, node)) - continue; - - if (node->type == TextNode) - { - UngetToken( doc ); - node = InferredTag( doc, "dt"); - ReportWarning( doc, list, node, MISSING_STARTTAG); - } - - if (node->tag == null) - { - ReportWarning( doc, list, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } - - /* - if this is the end tag for an ancestor element - then infer end tag for this element - */ - if (node->type == EndTag) - { - if ( nodeIsFORM(node) ) - { - BadForm( doc ); - ReportWarning( doc, list, node, DISCARDING_UNEXPECTED); - continue; - } - - for (parent = list->parent; - parent != null; parent = parent->parent) - { - if (node->tag == parent->tag) - { - ReportWarning( doc, list, node, MISSING_ENDTAG_BEFORE); - - UngetToken( doc ); - TrimEmptyElement( doc, list); - return; - } - } - } - - /* center in a dt or a dl breaks the dl list in two */ - if ( nodeIsCENTER(node) ) - { - if (list->content) - InsertNodeAfterElement(list, node); - else /* trim empty dl list */ - { - InsertNodeBeforeElement(list, node); - -/* #540296 tidy dumps with empty definition list */ -#if 0 - DiscardElement(list); -#endif - } - - /* #426885 - fix by Glenn Carroll 19 Apr 00, and - Gary Dechaines 11 Aug 00 */ - /* ParseTag can destroy node, if it finds that - * this
    is followed immediately by
    . - * It's awkward but necessary to determine if this - * has happened. - */ - parent = node->parent; - - /* and parse contents of center */ - lexer->excludeBlocks = no; - ParseTag( doc, node, mode); - lexer->excludeBlocks = yes; - - /* now create a new dl element, - * unless node has been blown away because the - * center was empty, as above. - */ - if (parent->last == node) - { - list = InferredTag( doc, "dl"); - InsertNodeAfterElement(node, list); - } - continue; - } - - if ( !(nodeIsDT(node) || nodeIsDD(node)) ) - { - UngetToken( doc ); - - if (!(node->tag->model & (CM_BLOCK | CM_INLINE))) - { - ReportWarning( doc, list, node, TAG_NOT_ALLOWED_IN); - TrimEmptyElement( doc, list); - return; - } - - /* if DD appeared directly in BODY then exclude blocks */ - if (!(node->tag->model & CM_INLINE) && lexer->excludeBlocks) - { - TrimEmptyElement( doc, list); - return; - } - - node = InferredTag( doc, "dd"); - ReportWarning( doc, list, node, MISSING_STARTTAG); - } - - if (node->type == EndTag) - { - ReportWarning( doc, list, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } - - /* node should be
    or
    */ - InsertNodeAtEnd(list, node); - ParseTag( doc, node, IgnoreWhitespace); - } - - ReportWarning( doc, list, node, MISSING_ENDTAG_FOR); - TrimEmptyElement( doc, list); -} - -void ParseList(TidyDocImpl* doc, Node *list, uint mode) -{ - Lexer* lexer = doc->lexer; - Node *node, *parent; - - if (list->tag->model & CM_EMPTY) - return; - - lexer->insert = null; /* defer implicit inline start tags */ - - while ((node = GetToken( doc, IgnoreWhitespace)) != null) - { - if (node->tag == list->tag && node->type == EndTag) - { - FreeNode( doc, node); - - if (list->tag->model & CM_OBSOLETE) - CoerceNode( doc, list, TidyTag_UL ); - - list->closed = yes; - TrimEmptyElement( doc, list); - return; - } - - /* deal with comments etc. */ - if (InsertMisc(list, node)) - continue; - - if (node->type != TextNode && node->tag == null) - { - ReportWarning( doc, list, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } - - /* - if this is the end tag for an ancestor element - then infer end tag for this element - */ - if (node->type == EndTag) - { - if ( nodeIsFORM(node) ) - { - BadForm( doc ); - ReportWarning( doc, list, node, DISCARDING_UNEXPECTED); - continue; - } - - if (node->tag && node->tag->model & CM_INLINE) - { - ReportWarning( doc, list, node, DISCARDING_UNEXPECTED); - PopInline( doc, node ); - FreeNode( doc, node); - continue; - } - - for (parent = list->parent; - parent != null; parent = parent->parent) - { - if (node->tag == parent->tag) - { - ReportWarning( doc, list, node, MISSING_ENDTAG_BEFORE); - UngetToken( doc ); - - if (list->tag->model & CM_OBSOLETE) - CoerceNode( doc, list, TidyTag_UL ); - - TrimEmptyElement( doc, list); - return; - } - } - - ReportWarning( doc, list, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } - - if ( !nodeIsLI(node) ) - { - UngetToken( doc ); - - if (node->tag && (node->tag->model & CM_BLOCK) && lexer->excludeBlocks) - { - ReportWarning( doc, list, node, MISSING_ENDTAG_BEFORE); - TrimEmptyElement( doc, list); - return; - } - - node = InferredTag( doc, "li" ); - AddAttribute( doc, node, "style", "list-style: none" ); - ReportWarning( doc, list, node, MISSING_STARTTAG ); - } - - /* node should be
  • */ - InsertNodeAtEnd(list,node); - ParseTag( doc, node, IgnoreWhitespace); - } - - if (list->tag->model & CM_OBSOLETE) - CoerceNode( doc, list, TidyTag_UL ); - - ReportWarning( doc, list, node, MISSING_ENDTAG_FOR); - TrimEmptyElement( doc, list); -} - -/* - unexpected content in table row is moved to just before - the table in accordance with Netscape and IE. This code - assumes that node hasn't been inserted into the row. -*/ -static void MoveBeforeTable( TidyDocImpl* doc, Node *row, Node *node ) -{ - Node *table; - - /* first find the table element */ - for (table = row->parent; table; table = table->parent) - { - if ( nodeIsTABLE(table) ) - { - if (table->parent->content == table) - table->parent->content = node; - - node->prev = table->prev; - node->next = table; - table->prev = node; - node->parent = table->parent; - - if (node->prev) - node->prev->next = node; - - break; - } - } -} - -/* - if a table row is empty then insert an empty cell - this practice is consistent with browser behavior - and avoids potential problems with row spanning cells -*/ -static void FixEmptyRow(TidyDocImpl* doc, Node *row) -{ - Node *cell; - - if (row->content == null) - { - cell = InferredTag( doc, "td"); - InsertNodeAtEnd(row, cell); - ReportWarning( doc, row, cell, MISSING_STARTTAG); - } -} - -void ParseRow(TidyDocImpl* doc, Node *row, uint mode) -{ - Lexer* lexer = doc->lexer; - Node *node; - Bool exclude_state; - - if (row->tag->model & CM_EMPTY) - return; - - while ((node = GetToken(doc, IgnoreWhitespace)) != null) - { - if (node->tag == row->tag) - { - if (node->type == EndTag) - { - FreeNode( doc, node); - row->closed = yes; - FixEmptyRow( doc, row); - return; - } - - /* New row start implies end of current row */ - UngetToken( doc ); - FixEmptyRow( doc, row); - return; - } - - /* - if this is the end tag for an ancestor element - then infer end tag for this element - */ - if ( node->type == EndTag ) - { - if ( DescendantOf(row, TagId(node)) ) - { - UngetToken( doc ); - TrimEmptyElement( doc, row); - return; - } - - if ( nodeIsFORM(node) || nodeHasCM(node, CM_BLOCK|CM_INLINE) ) - { - if ( nodeIsFORM(node) ) - BadForm( doc ); - - ReportWarning( doc, row, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } - - if ( nodeIsTD(node) || nodeIsTH(node) ) - { - ReportWarning( doc, row, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } - } - - /* deal with comments etc. */ - if (InsertMisc(row, node)) - continue; - - /* discard unknown tags */ - if (node->tag == null && node->type != TextNode) - { - ReportWarning( doc, row, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } - - /* discard unexpected element */ - if ( nodeIsTABLE(node) ) - { - ReportWarning( doc, row, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } - - /* THEAD, TFOOT or TBODY */ - if ( nodeHasCM(node, CM_ROWGRP) ) - { - UngetToken( doc ); - TrimEmptyElement( doc, row); - return; - } - - if (node->type == EndTag) - { - ReportWarning( doc, row, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } - - /* - if text or inline or block move before table - if head content move to head - */ - - if (node->type != EndTag) - { - if ( nodeIsFORM(node) ) - { - UngetToken( doc ); - node = InferredTag( doc, "td"); - ReportWarning( doc, row, node, MISSING_STARTTAG); - } - else if ( nodeIsText(node) - || nodeHasCM(node, CM_BLOCK | CM_INLINE) ) - { - MoveBeforeTable( doc, row, node ); - ReportWarning( doc, row, node, TAG_NOT_ALLOWED_IN); - lexer->exiled = yes; - - if (node->type != TextNode) - ParseTag( doc, node, IgnoreWhitespace); - - lexer->exiled = no; - continue; - } - else if (node->tag->model & CM_HEAD) - { - ReportWarning( doc, row, node, TAG_NOT_ALLOWED_IN); - MoveToHead( doc, row, node); - continue; - } - } - - if ( !(nodeIsTD(node) || nodeIsTH(node)) ) - { - ReportWarning( doc, row, node, TAG_NOT_ALLOWED_IN); - FreeNode( doc, node); - continue; - } - - /* node should be
    or */ - InsertNodeAtEnd(row, node); - exclude_state = lexer->excludeBlocks; - lexer->excludeBlocks = no; - ParseTag( doc, node, IgnoreWhitespace); - lexer->excludeBlocks = exclude_state; - - /* pop inline stack */ - - while ( lexer->istacksize > lexer->istackbase ) - PopInline( doc, null ); - } - - TrimEmptyElement( doc, row); -} - -void ParseRowGroup(TidyDocImpl* doc, Node *rowgroup, uint mode) -{ - Lexer* lexer = doc->lexer; - Node *node, *parent; - - if (rowgroup->tag->model & CM_EMPTY) - return; - - while ((node = GetToken(doc, IgnoreWhitespace)) != null) - { - if (node->tag == rowgroup->tag) - { - if (node->type == EndTag) - { - rowgroup->closed = yes; - TrimEmptyElement(doc, rowgroup); - FreeNode( doc, node); - return; - } - - UngetToken( doc ); - return; - } - - /* if
    infer end tag */ - if ( nodeIsTABLE(node) && node->type == EndTag ) - { - UngetToken( doc ); - TrimEmptyElement(doc, rowgroup); - return; - } - - /* deal with comments etc. */ - if (InsertMisc(rowgroup, node)) - continue; - - /* discard unknown tags */ - if (node->tag == null && node->type != TextNode) - { - ReportWarning( doc, rowgroup, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } - - /* - if TD or TH then infer - if text or inline or block move before table - if head content move to head - */ - - if (node->type != EndTag) - { - if ( nodeIsTD(node) || nodeIsTH(node) ) - { - UngetToken( doc ); - node = InferredTag(doc, "tr"); - ReportWarning( doc, rowgroup, node, MISSING_STARTTAG); - } - else if ( nodeIsText(node) - || nodeHasCM(node, CM_BLOCK|CM_INLINE) ) - { - MoveBeforeTable( doc, rowgroup, node ); - ReportWarning( doc, rowgroup, node, TAG_NOT_ALLOWED_IN); - lexer->exiled = yes; - - if (node->type != TextNode) - ParseTag(doc, node, IgnoreWhitespace); - - lexer->exiled = no; - continue; - } - else if (node->tag->model & CM_HEAD) - { - ReportWarning( doc, rowgroup, node, TAG_NOT_ALLOWED_IN); - MoveToHead(doc, rowgroup, node); - continue; - } - } - - /* - if this is the end tag for ancestor element - then infer end tag for this element - */ - if (node->type == EndTag) - { - if ( nodeIsFORM(node) || nodeHasCM(node, CM_BLOCK|CM_INLINE) ) - { - if ( nodeIsFORM(node) ) - BadForm( doc ); - - ReportWarning( doc, rowgroup, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } - - if ( nodeIsTR(node) || nodeIsTD(node) || nodeIsTH(node) ) - { - ReportWarning( doc, rowgroup, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } - - for ( parent = rowgroup->parent; - parent != null; - parent = parent->parent ) - { - if (node->tag == parent->tag) - { - UngetToken( doc ); - TrimEmptyElement(doc, rowgroup); - return; - } - } - } - - /* - if THEAD, TFOOT or TBODY then implied end tag - - */ - if (node->tag->model & CM_ROWGRP) - { - if (node->type != EndTag) - UngetToken( doc ); - - TrimEmptyElement(doc, rowgroup); - return; - } - - if (node->type == EndTag) - { - ReportWarning( doc, rowgroup, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } - - if ( !nodeIsTR(node) ) - { - node = InferredTag(doc, "tr"); - ReportWarning( doc, rowgroup, node, MISSING_STARTTAG); - UngetToken( doc ); - } - - /* node should be */ - InsertNodeAtEnd(rowgroup, node); - ParseTag(doc, node, IgnoreWhitespace); - } - - TrimEmptyElement(doc, rowgroup); -} - -void ParseColGroup(TidyDocImpl* doc, Node *colgroup, uint mode) -{ - Node *node, *parent; - - if (colgroup->tag->model & CM_EMPTY) - return; - - while ((node = GetToken(doc, IgnoreWhitespace)) != null) - { - if (node->tag == colgroup->tag && node->type == EndTag) - { - FreeNode( doc, node); - colgroup->closed = yes; - return; - } - - /* - if this is the end tag for an ancestor element - then infer end tag for this element - */ - if (node->type == EndTag) - { - if ( nodeIsFORM(node) ) - { - BadForm( doc ); - ReportWarning( doc, colgroup, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } - - for ( parent = colgroup->parent; - parent != null; - parent = parent->parent ) - { - if (node->tag == parent->tag) - { - UngetToken( doc ); - return; - } - } - } - - if (node->type == TextNode) - { - UngetToken( doc ); - return; - } - - /* deal with comments etc. */ - if (InsertMisc(colgroup, node)) - continue; - - /* discard unknown tags */ - if (node->tag == null) - { - ReportWarning( doc, colgroup, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } - - if ( !nodeIsCOL(node) ) - { - UngetToken( doc ); - return; - } - - if (node->type == EndTag) - { - ReportWarning( doc, colgroup, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } - - /* node should be */ - InsertNodeAtEnd(colgroup, node); - ParseTag(doc, node, IgnoreWhitespace); - } -} - -void ParseTableTag(TidyDocImpl* doc, Node *table, uint mode) -{ - Lexer* lexer = doc->lexer; - Node *node, *parent; - uint istackbase; - - DeferDup( doc ); - istackbase = lexer->istackbase; - lexer->istackbase = lexer->istacksize; - - while ((node = GetToken(doc, IgnoreWhitespace)) != null) - { - if (node->tag == table->tag && node->type == EndTag) - { - FreeNode( doc, node); - lexer->istackbase = istackbase; - table->closed = yes; - TrimEmptyElement(doc, table); - return; - } - - /* deal with comments etc. */ - if (InsertMisc(table, node)) - continue; - - /* discard unknown tags */ - if (node->tag == null && node->type != TextNode) - { - ReportWarning( doc, table, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } - - /* if TD or TH or text or inline or block then infer */ - - if (node->type != EndTag) - { - if ( nodeIsTD(node) || nodeIsTH(node) || nodeIsTABLE(node) ) - { - UngetToken( doc ); - node = InferredTag(doc, "tr"); - ReportWarning( doc, table, node, MISSING_STARTTAG); - } - else if ( nodeIsText(node) ||nodeHasCM(node,CM_BLOCK|CM_INLINE) ) - { - InsertNodeBeforeElement(table, node); - ReportWarning( doc, table, node, TAG_NOT_ALLOWED_IN); - lexer->exiled = yes; - - if (node->type != TextNode) - ParseTag(doc, node, IgnoreWhitespace); - - lexer->exiled = no; - continue; - } - else if (node->tag->model & CM_HEAD) - { - MoveToHead(doc, table, node); - continue; - } - } - - /* - if this is the end tag for an ancestor element - then infer end tag for this element - */ - if (node->type == EndTag) - { - if ( nodeIsFORM(node) ) - { - BadForm( doc ); - ReportWarning( doc, table, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } - - /* best to discard unexpected block/inline end tags */ - if ( nodeHasCM(node, CM_TABLE|CM_ROW) || - nodeHasCM(node, CM_BLOCK|CM_INLINE) ) - { - ReportWarning( doc, table, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } - - for ( parent = table->parent; - parent != null; - parent = parent->parent ) - { - if (node->tag == parent->tag) - { - ReportWarning( doc, table, node, MISSING_ENDTAG_BEFORE ); - UngetToken( doc ); - lexer->istackbase = istackbase; - TrimEmptyElement(doc, table); - return; - } - } - } - - if (!(node->tag->model & CM_TABLE)) - { - UngetToken( doc ); - ReportWarning( doc, table, node, TAG_NOT_ALLOWED_IN); - lexer->istackbase = istackbase; - TrimEmptyElement(doc, table); - return; - } - - if (node->type == StartTag || node->type == StartEndTag) - { - InsertNodeAtEnd(table, node); - ParseTag(doc, node, IgnoreWhitespace); - continue; - } - - /* discard unexpected text nodes and end tags */ - ReportWarning( doc, table, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - } - - ReportWarning( doc, table, node, MISSING_ENDTAG_FOR); - TrimEmptyElement(doc, table); - lexer->istackbase = istackbase; -} - -/* acceptable content for pre elements */ -Bool PreContent( TidyDocImpl* doc, Node* node ) -{ - /* p is coerced to br's, Text OK too */ - if ( nodeIsP(node) || nodeIsText(node) ) - return yes; - - if ( node->tag == null || - nodeIsPARAM(node) || - !nodeHasCM(node, CM_INLINE|CM_NEW) ) - return no; - - return yes; -} - -void ParsePre( TidyDocImpl* doc, Node *pre, uint mode ) -{ - Lexer* lexer = doc->lexer; - Node *node; - - if (pre->tag->model & CM_EMPTY) - return; - - if (pre->tag->model & CM_OBSOLETE) - CoerceNode( doc, pre, TidyTag_PRE ); - - InlineDup( doc, null ); /* tell lexer to insert inlines if needed */ - - while ((node = GetToken(doc, Preformatted)) != null) - { - if ( node->type == EndTag && - (node->tag == pre->tag || DescendantOf(pre, TagId(node))) ) - { - if ( node->tag == pre->tag ) - FreeNode( doc, node); - else - { - ReportWarning( doc, pre, node, MISSING_ENDTAG_BEFORE ); - UngetToken( doc ); - } - TrimSpaces(doc, pre); - pre->closed = yes; - TrimEmptyElement(doc, pre); - return; - } - - if (node->type == TextNode) - { - /* if first check for inital newline */ - if (pre->content == null) - { - if ( lexer->lexbuf[node->start] == '\n' ) - ++(node->start); - - if (node->start >= node->end) - { - FreeNode( doc, node); - continue; - } - } - - InsertNodeAtEnd(pre, node); - continue; - } - - /* deal with comments etc. */ - if (InsertMisc(pre, node)) - continue; - - /* strip unexpected tags */ - if ( !PreContent(doc, node) ) - { - Node *newnode; - ReportWarning( doc, pre, node, UNESCAPED_ELEMENT ); - newnode = EscapeTag( lexer, node ); - FreeNode( doc, node ); - InsertNodeAtEnd(pre, newnode); - continue; - } - - if ( nodeIsP(node) ) - { - if (node->type == StartTag) - { - ReportWarning( doc, pre, node, USING_BR_INPLACE_OF); - - /* trim white space before

    in

    */
    -                TrimSpaces(doc, pre);
    -            
    -                /* coerce both 

    and

    to
    */ - CoerceNode( doc, node, TidyTag_BR ); - FreeAttrs( doc, node ); /* discard align attribute etc. */ - InsertNodeAtEnd( pre, node ); - } - else - { - ReportWarning( doc, pre, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - } - continue; - } - - if ( node->type == StartTag || node->type == StartEndTag ) - { - /* trim white space before
    */ - if ( nodeIsBR(node) ) - TrimSpaces(doc, pre); - - InsertNodeAtEnd(pre, node); - ParseTag(doc, node, Preformatted); - continue; - } - - /* discard unexpected tags */ - ReportWarning( doc, pre, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - } - - ReportWarning( doc, pre, node, MISSING_ENDTAG_FOR); - TrimEmptyElement(doc, pre); -} - -void ParseOptGroup(TidyDocImpl* doc, Node *field, uint mode) -{ - Lexer* lexer = doc->lexer; - Node *node; - - lexer->insert = null; /* defer implicit inline start tags */ - - while ((node = GetToken(doc, IgnoreWhitespace)) != null) - { - if (node->tag == field->tag && node->type == EndTag) - { - FreeNode( doc, node); - field->closed = yes; - TrimSpaces(doc, field); - return; - } - - /* deal with comments etc. */ - if (InsertMisc(field, node)) - continue; - - if ( node->type == StartTag && - (nodeIsOPTION(node) || nodeIsOPTGROUP(node)) ) - { - if ( nodeIsOPTGROUP(node) ) - ReportWarning( doc, field, node, CANT_BE_NESTED); - - InsertNodeAtEnd(field, node); - ParseTag(doc, node, MixedContent); - continue; - } - - /* discard unexpected tags */ - ReportWarning( doc, field, node, DISCARDING_UNEXPECTED ); - FreeNode( doc, node); - } -} - - -void ParseSelect(TidyDocImpl* doc, Node *field, uint mode) -{ - Lexer* lexer = doc->lexer; - Node *node; - - lexer->insert = null; /* defer implicit inline start tags */ - - while ((node = GetToken(doc, IgnoreWhitespace)) != null) - { - if (node->tag == field->tag && node->type == EndTag) - { - FreeNode( doc, node); - field->closed = yes; - TrimSpaces(doc, field); - return; - } - - /* deal with comments etc. */ - if (InsertMisc(field, node)) - continue; - - if ( node->type == StartTag && - ( nodeIsOPTION(node) || - nodeIsOPTGROUP(node) || - nodeIsSCRIPT(node)) - ) - { - InsertNodeAtEnd(field, node); - ParseTag(doc, node, IgnoreWhitespace); - continue; - } - - /* discard unexpected tags */ - ReportWarning( doc, field, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - } - - ReportWarning( doc, field, node, MISSING_ENDTAG_FOR); -} - -void ParseText(TidyDocImpl* doc, Node *field, uint mode) -{ - Lexer* lexer = doc->lexer; - Node *node; - - lexer->insert = null; /* defer implicit inline start tags */ - - if ( nodeIsTEXTAREA(field) ) - mode = Preformatted; - else - mode = MixedContent; /* kludge for font tags */ - - while ((node = GetToken(doc, mode)) != null) - { - if (node->tag == field->tag && node->type == EndTag) - { - FreeNode( doc, node); - field->closed = yes; - TrimSpaces(doc, field); - return; - } - - /* deal with comments etc. */ - if (InsertMisc(field, node)) - continue; - - if (node->type == TextNode) - { - /* only called for 1st child */ - if (field->content == null && !(mode & Preformatted)) - TrimSpaces(doc, field); - - if (node->start >= node->end) - { - FreeNode( doc, node); - continue; - } - - InsertNodeAtEnd(field, node); - continue; - } - - /* for textarea should all cases of < and & be escaped? */ - - /* discard inline tags e.g. font */ - if ( node->tag - && node->tag->model & CM_INLINE - && !(node->tag->model & CM_FIELD)) /* #487283 - fix by Lee Passey 25 Jan 02 */ - { - ReportWarning( doc, field, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } - - /* terminate element on other tags */ - if (!(field->tag->model & CM_OPT)) - ReportWarning( doc, field, node, MISSING_ENDTAG_BEFORE); - - UngetToken( doc ); - TrimSpaces(doc, field); - return; - } - - if (!(field->tag->model & CM_OPT)) - ReportWarning( doc, field, node, MISSING_ENDTAG_FOR); -} - - -void ParseTitle(TidyDocImpl* doc, Node *title, uint mode) -{ - Node *node; - while ((node = GetToken(doc, MixedContent)) != null) - { - if (node->tag == title->tag && node->type == StartTag) - { - ReportWarning( doc, title, node, COERCE_TO_ENDTAG); - node->type = EndTag; - UngetToken( doc ); - continue; - } - else if (node->tag == title->tag && node->type == EndTag) - { - FreeNode( doc, node); - title->closed = yes; - TrimSpaces(doc, title); - return; - } - - if (node->type == TextNode) - { - /* only called for 1st child */ - if (title->content == null) - TrimInitialSpace(doc, title, node); - - if (node->start >= node->end) - { - FreeNode( doc, node); - continue; - } - - InsertNodeAtEnd(title, node); - continue; - } - - /* deal with comments etc. */ - if (InsertMisc(title, node)) - continue; - - /* discard unknown tags */ - if (node->tag == null) - { - ReportWarning( doc, title, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } - - /* pushback unexpected tokens */ - ReportWarning( doc, title, node, MISSING_ENDTAG_BEFORE); - UngetToken( doc ); - TrimSpaces(doc, title); - return; - } - - ReportWarning( doc, title, node, MISSING_ENDTAG_FOR); -} - -/* - This isn't quite right for CDATA content as it recognises - tags within the content and parses them accordingly. - This will unfortunately screw up scripts which include - < + letter, < + !, < + ? or < + / + letter -*/ - -void ParseScript(TidyDocImpl* doc, Node *script, uint mode) -{ - Node *node = GetCDATA(doc, script); - if ( node ) - InsertNodeAtEnd(script, node); -} - -Bool IsJavaScript(Node *node) -{ - Bool result = no; - AttVal *attr; - - if (node->attributes == null) - return yes; - - for (attr = node->attributes; attr; attr = attr->next) - { - if ( (tmbstrcasecmp(attr->attribute, "language") == 0 - || tmbstrcasecmp(attr->attribute, "type") == 0) - && tmbsubstr(attr->value, "javascript")) - result = yes; - } - - return result; -} - -void ParseHead(TidyDocImpl* doc, Node *head, uint mode) -{ - Lexer* lexer = doc->lexer; - Node *node; - int HasTitle = 0; - int HasBase = 0; - - while ((node = GetToken(doc, IgnoreWhitespace)) != null) - { - if (node->tag == head->tag && node->type == EndTag) - { - FreeNode( doc, node); - head->closed = yes; - break; - } - - if (node->type == TextNode) - { - ReportWarning( doc, head, node, TAG_NOT_ALLOWED_IN); - UngetToken( doc ); - break; - } - - /* deal with comments etc. */ - if (InsertMisc(head, node)) - continue; - - if (node->type == DocTypeTag) - { - InsertDocType(doc, head, node); - continue; - } - - /* discard unknown tags */ - if (node->tag == null) - { - ReportWarning( doc, head, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } - - /* - if it doesn't belong in the head then - treat as implicit head of head and deal - with as part of the body - */ - if (!(node->tag->model & CM_HEAD)) - { - /* #545067 Implicit closing of head broken - warn only for XHTML input */ - if ( lexer->isvoyager ) - ReportWarning( doc, head, node, TAG_NOT_ALLOWED_IN ); - UngetToken( doc ); - break; - } - - if (node->type == StartTag || node->type == StartEndTag) - { - if ( nodeIsTITLE(node) ) - { - ++HasTitle; - - if (HasTitle > 1) - ReportWarning( doc, head, node, TOO_MANY_ELEMENTS); - } - else if ( nodeIsBASE(node) ) - { - ++HasBase; - - if (HasBase > 1) - ReportWarning( doc, head, node, TOO_MANY_ELEMENTS); - } - else if ( nodeIsNOSCRIPT(node) ) - ReportWarning( doc, head, node, TAG_NOT_ALLOWED_IN); - - InsertNodeAtEnd(head, node); - ParseTag(doc, node, IgnoreWhitespace); - continue; - } - - /* discard unexpected text nodes and end tags */ - ReportWarning( doc, head, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - } - - if ( HasTitle == 0 ) - { - if ( cfg(doc, TidyAccessibilityCheckLevel) == 0 ) - { - if ( !cfgBool(doc, TidyBodyOnly) ) - ReportWarning( doc, head, null, MISSING_TITLE_ELEMENT); - - InsertNodeAtEnd(head, InferredTag(doc, "title")); - } - } -} - -void ParseBody(TidyDocImpl* doc, Node *body, uint mode) -{ - Lexer* lexer = doc->lexer; - Node *node; - Bool checkstack, iswhitenode; - - mode = IgnoreWhitespace; - checkstack = yes; - - BumpObject( doc, body->parent ); - - while ((node = GetToken(doc, mode)) != null) - { - /* #538536 Extra endtags not detected */ - if ( nodeIsHTML(node) ) - { - if (node->type == StartTag || node->type == StartEndTag || lexer->seenEndHtml) - ReportWarning( doc, body, node, DISCARDING_UNEXPECTED); - else - lexer->seenEndHtml = 1; - - FreeNode( doc, node); - continue; - } - - if ( lexer->seenEndBody && - ( node->type == StartTag || - node->type == EndTag || - node->type == StartEndTag ) ) - { - ReportWarning( doc, body, node, CONTENT_AFTER_BODY ); - } - - if ( node->tag == body->tag && node->type == EndTag ) - { - body->closed = yes; - TrimSpaces(doc, body); - FreeNode( doc, node); - lexer->seenEndBody = 1; - mode = IgnoreWhitespace; - - if ( nodeIsNOFRAMES(body->parent) ) - break; - - continue; - } - - if ( nodeIsNOFRAMES(node) ) - { - if (node->type == StartTag) - { - InsertNodeAtEnd(body, node); - ParseBlock(doc, node, mode); - continue; - } - - if (node->type == EndTag && nodeIsNOFRAMES(body->parent) ) - { - TrimSpaces(doc, body); - UngetToken( doc ); - break; - } - } - - if ( (nodeIsFRAME(node) || nodeIsFRAMESET(node)) - && nodeIsNOFRAMES(body->parent) ) - { - TrimSpaces(doc, body); - UngetToken( doc ); - break; - } - - iswhitenode = no; - - if ( node->type == TextNode && - node->end <= node->start + 1 && - lexer->lexbuf[node->start] == ' ' ) - iswhitenode = yes; - - /* deal with comments etc. */ - if (InsertMisc(body, node)) - continue; - - /* #538536 Extra endtags not detected */ -#if 0 - if ( lexer->seenEndBody == 1 && !iswhitenode ) - { - ++lexer->seenEndBody; - ReportWarning( doc, body, node, CONTENT_AFTER_BODY); - } -#endif - - /* mixed content model permits text */ - if (node->type == TextNode) - { - if (iswhitenode && mode == IgnoreWhitespace) - { - FreeNode( doc, node); - continue; - } - - if ( cfgBool(doc, TidyEncloseBodyText) && !iswhitenode ) - { - Node *para; - - UngetToken( doc ); - para = InferredTag(doc, "p"); - InsertNodeAtEnd(body, para); - ParseTag(doc, para, mode); - mode = MixedContent; - continue; - } - else /* HTML 2 and HTML4 strict don't allow text here */ - ConstrainVersion(doc, ~(VERS_HTML40_STRICT | VERS_HTML20)); - - - if (checkstack) - { - checkstack = no; - - if ( InlineDup(doc, node) > 0 ) - continue; - } - - InsertNodeAtEnd(body, node); - mode = MixedContent; - continue; - } - - if (node->type == DocTypeTag) - { - InsertDocType(doc, body, node); - continue; - } - /* discard unknown and PARAM tags */ - if ( node->tag == null || nodeIsPARAM(node) ) - { - ReportWarning( doc, body, node, DISCARDING_UNEXPECTED); - FreeNode( doc, node); - continue; - } - - /* - Netscape allows LI and DD directly in BODY - We infer UL or DL respectively and use this - Bool to exclude block-level elements so as - to match Netscape's observed behaviour. - */ - lexer->excludeBlocks = no; - - if ( nodeIsINPUT(node) || - (!nodeHasCM(node, CM_BLOCK) && !nodeHasCM(node, CM_INLINE)) - ) - { - /* avoid this error message being issued twice */ - if (!(node->tag->model & CM_HEAD)) - ReportWarning( doc, body, node, TAG_NOT_ALLOWED_IN); - - if (node->tag->model & CM_HTML) - { - /* copy body attributes if current body was inferred */ - if ( nodeIsBODY(node) && body->implicit - && body->attributes == null ) - { - body->attributes = node->attributes; - node->attributes = null; - } - - FreeNode( doc, node); - continue; - } - - if (node->tag->model & CM_HEAD) - { - MoveToHead(doc, body, node); - continue; - } - - if (node->tag->model & CM_LIST) - { - UngetToken( doc ); - node = InferredTag(doc, "ul"); - AddClass( doc, node, "noindent" ); - lexer->excludeBlocks = yes; - } - else if (node->tag->model & CM_DEFLIST) - { - UngetToken( doc ); - node = InferredTag(doc, "dl"); - lexer->excludeBlocks = yes; - } - else if (node->tag->model & (CM_TABLE | CM_ROWGRP | CM_ROW)) - { - UngetToken( doc ); - node = InferredTag(doc, "table"); - lexer->excludeBlocks = yes; - } - else if ( nodeIsINPUT(node) ) - { - UngetToken( doc ); - node = InferredTag(doc, "form"); - lexer->excludeBlocks = yes; - } - else - { - if (!(node->tag->model & (CM_ROW | CM_FIELD))) - { - UngetToken( doc ); - return; - } - - /* ignore