From de7c71b71b64a72d20aa54e687e98aa8058683c2 Mon Sep 17 00:00:00 2001 From: Hiroshi Miura Date: Sat, 28 Jan 2023 13:27:54 +0900 Subject: [PATCH 01/12] reafactor: Reorganize directories --- .../lexerapplications/tabby/Tabby.java | 0 .../lexerapplications/tabby/package.html | 0 .../lexerapplications/thumbelina/Picture.java | 0 .../thumbelina/PicturePanel.java | 0 .../thumbelina/Sequencer.java | 0 .../thumbelina/Thumbelina.java | 0 .../thumbelina/ThumbelinaFrame.java | 0 .../lexerapplications/thumbelina/TileSet.java | 0 .../lexerapplications/thumbelina/package.html | 0 .../parserapplications/LinkExtractor.java | 0 .../parserapplications/SiteCapturer.java | 0 .../parserapplications/StringExtractor.java | 0 .../parserapplications/WikiCapturer.java | 0 .../filterbuilder/Filter.java | 0 .../filterbuilder/FilterBuilder.java | 0 .../filterbuilder/HtmlTreeCellRenderer.java | 0 .../filterbuilder/HtmlTreeModel.java | 0 .../filterbuilder/SubFilterList.java | 0 .../filterbuilder/images/about.gif | Bin .../filterbuilder/images/copy.gif | Bin .../filterbuilder/images/cut.gif | Bin .../filterbuilder/images/delete.gif | Bin .../filterbuilder/images/new.gif | Bin .../filterbuilder/images/open.gif | Bin .../filterbuilder/images/paste.gif | Bin .../filterbuilder/images/save.gif | Bin .../layouts/NullLayoutManager.java | 452 +++---- .../layouts/VerticalLayoutManager.java | 460 +++---- .../wrappers/AndFilterWrapper.java | 0 .../wrappers/HasAttributeFilterWrapper.java | 0 .../wrappers/HasChildFilterWrapper.java | 0 .../wrappers/HasParentFilterWrapper.java | 0 .../wrappers/HasSiblingFilterWrapper.java | 0 .../wrappers/NodeClassFilterWrapper.java | 0 .../wrappers/NotFilterWrapper.java | 0 .../wrappers/OrFilterWrapper.java | 0 .../wrappers/RegexFilterWrapper.java | 0 .../wrappers/StringFilterWrapper.java | 0 .../wrappers/TagNameFilterWrapper.java | 0 .../wrappers/images/AndFilter.gif | Bin .../wrappers/images/HasAttributeFilter.gif | Bin .../wrappers/images/HasChildFilter.gif | Bin .../wrappers/images/HasParentFilter.gif | Bin .../wrappers/images/HasSiblingFilter.gif | Bin .../wrappers/images/NodeClassFilter.gif | Bin .../wrappers/images/NotFilter.gif | Bin .../wrappers/images/OrFilter.gif | Bin .../wrappers/images/RegexFilter.gif | Bin .../wrappers/images/StringFilter.gif | Bin .../wrappers/images/TagNameFilter.gif | Bin .../parserapplications/package.html | 0 resources/license.txt => license.txt | 920 +++++++------- docs/release.txt => release.txt | 0 build.xml => src/build.xml | 1070 ++++++++--------- src/doc-files/building.html | 122 -- src/doc-files/overview.html | 84 -- src/doc-files/using.html | 116 -- {resources => src/resources}/cvs2cl.pl | 8 +- .../resources}/htmlparser_checks.xml | 346 +++--- {resources => src/resources}/inherit.gif | Bin {resources => src/resources}/java.header | 0 .../resources}/logofiles/htmlparser2in.gif | Bin .../resources}/logofiles/htmlparser_cmyk.eps | Bin .../logofiles/htmlparser_greyscale.eps | Bin .../resources}/logofiles/htmlparser_pms.eps | Bin .../logofiles/htmlparser_rgb_2inch.jpg | Bin .../logofiles/htmlparser_rgb_5inch.jpg | Bin {resources => src/resources}/stylesheet.css | 0 src/{ => src}/org/htmlparser/Attribute.java | 0 src/{ => src}/org/htmlparser/Node.java | 0 src/{ => src}/org/htmlparser/NodeFactory.java | 0 src/{ => src}/org/htmlparser/NodeFilter.java | 0 src/{ => src}/org/htmlparser/Parser.java | 0 .../htmlparser/PrototypicalNodeFactory.java | 0 src/{ => src}/org/htmlparser/Remark.java | 0 src/{ => src}/org/htmlparser/Tag.java | 0 src/{ => src}/org/htmlparser/Text.java | 0 .../org/htmlparser/beans/BeanyBaby.form | 0 .../org/htmlparser/beans/BeanyBaby.java | 0 .../org/htmlparser/beans/FilterBean.java | 0 .../org/htmlparser/beans/HTMLLinkBean.java | 0 .../org/htmlparser/beans/HTMLTextBean.java | 0 .../org/htmlparser/beans/LinkBean.java | 0 .../org/htmlparser/beans/StringBean.java | 0 .../org/htmlparser/beans/images/Chain16.gif | Bin .../org/htmlparser/beans/images/Chain32.gif | Bin .../org/htmlparser/beans/images/Knot16.gif | Bin .../org/htmlparser/beans/images/Knot32.gif | Bin .../org/htmlparser/beans/package.html | 0 .../org/htmlparser/filters/AndFilter.java | 0 .../filters/CssSelectorNodeFilter.java | 0 .../filters/HasAttributeFilter.java | 0 .../htmlparser/filters/HasChildFilter.java | 0 .../htmlparser/filters/HasParentFilter.java | 0 .../htmlparser/filters/HasSiblingFilter.java | 0 .../org/htmlparser/filters/IsEqualFilter.java | 0 .../htmlparser/filters/LinkRegexFilter.java | 0 .../htmlparser/filters/LinkStringFilter.java | 0 .../htmlparser/filters/NodeClassFilter.java | 0 .../org/htmlparser/filters/NotFilter.java | 0 .../org/htmlparser/filters/OrFilter.java | 0 .../org/htmlparser/filters/RegexFilter.java | 0 .../org/htmlparser/filters/StringFilter.java | 0 .../org/htmlparser/filters/TagNameFilter.java | 0 .../org/htmlparser/filters/XorFilter.java | 0 .../org/htmlparser/filters/package.html | 0 .../htmlparser/http/ConnectionManager.java | 0 .../htmlparser/http/ConnectionMonitor.java | 0 src/{ => src}/org/htmlparser/http/Cookie.java | 0 .../org/htmlparser/http/HttpHeader.java | 0 .../org/htmlparser/http/package.html | 0 .../org/htmlparser/lexer/Cursor.java | 0 .../htmlparser/lexer/InputStreamSource.java | 0 src/{ => src}/org/htmlparser/lexer/Lexer.java | 0 src/{ => src}/org/htmlparser/lexer/Page.java | 0 .../org/htmlparser/lexer/PageAttribute.java | 0 .../org/htmlparser/lexer/PageIndex.java | 0 .../org/htmlparser/lexer/Source.java | 0 .../org/htmlparser/lexer/Stream.java | 0 .../org/htmlparser/lexer/StringSource.java | 0 .../org/htmlparser/lexer/package.html | 0 .../org/htmlparser/nodes/AbstractNode.java | 0 .../org/htmlparser/nodes/RemarkNode.java | 0 .../org/htmlparser/nodes/TagNode.java | 0 .../org/htmlparser/nodes/TextNode.java | 0 .../org/htmlparser/nodes/package.html | 0 src/{ => src}/org/htmlparser/package.html | 0 .../org/htmlparser/sax/Attributes.java | 0 .../org/htmlparser/sax/Feedback.java | 0 src/{ => src}/org/htmlparser/sax/Locator.java | 0 .../org/htmlparser/sax/XMLReader.java | 0 src/{ => src}/org/htmlparser/sax/package.html | 0 .../scanners/CompositeTagScanner.java | 0 .../org/htmlparser/scanners/JspScanner.java | 0 .../org/htmlparser/scanners/Scanner.java | 0 .../htmlparser/scanners/ScriptDecoder.java | 1008 ++++++++-------- .../htmlparser/scanners/ScriptScanner.java | 0 .../org/htmlparser/scanners/StyleScanner.java | 0 .../org/htmlparser/scanners/TagScanner.java | 0 .../org/htmlparser/scanners/package.html | 0 .../org/htmlparser/tags/AppletTag.java | 0 .../org/htmlparser/tags/BaseHrefTag.java | 0 .../org/htmlparser/tags/BodyTag.java | 0 src/{ => src}/org/htmlparser/tags/Bullet.java | 0 .../org/htmlparser/tags/BulletList.java | 0 .../org/htmlparser/tags/CompositeTag.java | 0 .../org/htmlparser/tags/DefinitionList.java | 0 .../htmlparser/tags/DefinitionListBullet.java | 0 src/{ => src}/org/htmlparser/tags/Div.java | 0 .../org/htmlparser/tags/DoctypeTag.java | 0 .../org/htmlparser/tags/FormTag.java | 0 .../org/htmlparser/tags/FrameSetTag.java | 0 .../org/htmlparser/tags/FrameTag.java | 0 .../org/htmlparser/tags/HeadTag.java | 0 .../org/htmlparser/tags/HeadingTag.java | 0 src/{ => src}/org/htmlparser/tags/Html.java | 0 .../org/htmlparser/tags/ImageTag.java | 0 .../org/htmlparser/tags/InputTag.java | 0 src/{ => src}/org/htmlparser/tags/JspTag.java | 0 .../org/htmlparser/tags/LabelTag.java | 0 .../org/htmlparser/tags/LinkTag.java | 0 .../org/htmlparser/tags/MetaTag.java | 0 .../org/htmlparser/tags/ObjectTag.java | 0 .../org/htmlparser/tags/OptionTag.java | 0 .../org/htmlparser/tags/ParagraphTag.java | 0 .../tags/ProcessingInstructionTag.java | 138 +-- .../org/htmlparser/tags/ScriptTag.java | 0 .../org/htmlparser/tags/SelectTag.java | 0 src/{ => src}/org/htmlparser/tags/Span.java | 0 .../org/htmlparser/tags/StyleTag.java | 0 .../org/htmlparser/tags/TableColumn.java | 0 .../org/htmlparser/tags/TableHeader.java | 0 .../org/htmlparser/tags/TableRow.java | 0 .../org/htmlparser/tags/TableTag.java | 0 .../org/htmlparser/tags/TextareaTag.java | 0 .../org/htmlparser/tags/TitleTag.java | 0 .../org/htmlparser/tags/package.html | 0 .../org/htmlparser/util/ChainedException.java | 0 .../htmlparser/util/CharacterReference.java | 0 .../util/DefaultParserFeedback.java | 0 .../util/EncodingChangeException.java | 0 .../org/htmlparser/util/FeedbackManager.java | 0 .../org/htmlparser/util/IteratorImpl.java | 0 .../org/htmlparser/util/NodeIterator.java | 0 .../org/htmlparser/util/NodeList.java | 0 .../org/htmlparser/util/NodeTreeWalker.java | 0 .../org/htmlparser/util/ParserException.java | 0 .../org/htmlparser/util/ParserFeedback.java | 0 .../org/htmlparser/util/ParserUtils.java | 0 .../htmlparser/util/SimpleNodeIterator.java | 0 .../org/htmlparser/util/Translate.java | 0 .../org/htmlparser/util/package.html | 0 .../org/htmlparser/util/sort/Ordered.java | 0 .../org/htmlparser/util/sort/Sort.java | 0 .../org/htmlparser/util/sort/Sortable.java | 0 .../org/htmlparser/util/sort/package.html | 0 .../org/htmlparser/visitors/HtmlPage.java | 0 .../visitors/LinkFindingVisitor.java | 0 .../org/htmlparser/visitors/NodeVisitor.java | 0 .../visitors/ObjectFindingVisitor.java | 0 .../visitors/StringFindingVisitor.java | 0 .../visitors/TagFindingVisitor.java | 0 .../visitors/TextExtractingVisitor.java | 0 .../visitors/UrlModifyingVisitor.java | 0 .../org/htmlparser/visitors/package.html | 0 .../org/htmlparser/tests/AllTests.java | 0 .../htmlparser/tests/AssertXmlEqualsTest.java | 0 .../htmlparser/tests/BadTagIdentifier.java | 0 .../org/htmlparser/tests/FunctionalTests.java | 0 .../LineNumberAssignedByNodeReaderTest.java | 0 .../org/htmlparser/tests/ParserTest.java | 42 +- .../org/htmlparser/tests/ParserTestCase.java | 0 .../org/htmlparser/tests/SAXTest.java | 0 .../tests/codeMetrics/LineCounter.java | 0 .../tests/filterTests/FilterTest.java | 0 .../htmlparser/tests/lexerTests/AllTests.java | 0 .../tests/lexerTests/AttributeTests.java | 0 .../tests/lexerTests/LexerTests.java | 0 .../tests/lexerTests/PageIndexTests.java | 0 .../tests/lexerTests/PageTests.java | 0 .../tests/lexerTests/SourceTests.java | 0 .../tests/lexerTests/StreamTests.java | 4 +- .../htmlparser/tests/lexerTests/TagTests.java | 0 .../org/htmlparser/tests/package.html | 0 .../tests/parserHelperTests/AllTests.java | 0 .../CompositeTagScannerHelperTest.java | 0 .../RemarkNodeParserTest.java | 0 .../parserHelperTests/StringParserTest.java | 0 .../tests/scannersTests/AllTests.java | 0 .../CompositeTagScannerTest.java | 0 .../tests/scannersTests/JspScannerTest.java | 0 .../scannersTests/ScriptScannerTest.java | 0 .../tests/scannersTests/TagScannerTest.java | 0 .../scannersTests/XmlEndTagScanningTest.java | 0 .../tests/scannersTests/package.html | 0 .../htmlparser/tests/tagTests/AllTests.java | 0 .../tests/tagTests/AppletTagTest.java | 0 .../tests/tagTests/BaseHrefTagTest.java | 0 .../tests/tagTests/BodyTagTest.java | 0 .../tests/tagTests/BulletListTagTest.java | 0 .../tests/tagTests/BulletTagTest.java | 0 .../tests/tagTests/CompositeTagTest.java | 0 .../htmlparser/tests/tagTests/DivTagTest.java | 0 .../tests/tagTests/DoctypeTagTest.java | 0 .../htmlparser/tests/tagTests/EndTagTest.java | 0 .../tests/tagTests/FormTagTest.java | 0 .../tests/tagTests/FrameSetTagTest.java | 0 .../tests/tagTests/FrameTagTest.java | 0 .../tests/tagTests/HeadTagTest.java | 0 .../tests/tagTests/HtmlTagTest.java | 0 .../tests/tagTests/ImageTagTest.java | 0 .../tests/tagTests/InputTagTest.java | 0 .../htmlparser/tests/tagTests/JspTagTest.java | 0 .../tests/tagTests/LabelTagTest.java | 0 .../tests/tagTests/LinkTagTest.java | 0 .../tests/tagTests/MetaTagTest.java | 0 .../tests/tagTests/ObjectCollectionTest.java | 0 .../tests/tagTests/OptionTagTest.java | 0 .../tests/tagTests/ScriptTagTest.java | 0 .../tests/tagTests/SelectTagTest.java | 0 .../tests/tagTests/SpanTagTest.java | 0 .../tests/tagTests/StyleTagTest.java | 0 .../tests/tagTests/TableTagTest.java | 0 .../htmlparser/tests/tagTests/TagTest.java | 0 .../tests/tagTests/TextareaTagTest.java | 0 .../tests/tagTests/TitleTagTest.java | 0 .../htmlparser/tests/tagTests/package.html | 0 .../htmlparser/tests/utilTests/AllTests.java | 0 .../htmlparser/tests/utilTests/BeanTest.java | 0 .../utilTests/CharacterTranslationTest.java | 0 .../tests/utilTests/HTMLParserUtilsTest.java | 0 .../tests/utilTests/NodeListTest.java | 0 .../tests/utilTests/NonEnglishTest.java | 0 .../htmlparser/tests/utilTests/SortTest.java | 0 .../htmlparser/tests/utilTests/package.html | 0 .../tests/visitorsTests/AllTests.java | 0 .../CompositeTagFindingVisitorTest.java | 0 .../tests/visitorsTests/HtmlPageTest.java | 0 .../visitorsTests/LinkFindingVisitorTest.java | 0 .../tests/visitorsTests/NodeVisitorTest.java | 0 .../visitorsTests/ScriptCommentTest.java | 284 ++--- .../StringFindingVisitorTest.java | 0 .../visitorsTests/TagFindingVisitorTest.java | 0 .../TextExtractingVisitorTest.java | 0 .../UrlModifyingVisitorTest.java | 0 285 files changed, 2362 insertions(+), 2692 deletions(-) rename {src => apps/lexerapplications/tabby/src/main/java}/org/htmlparser/lexerapplications/tabby/Tabby.java (100%) rename {src => apps/lexerapplications/tabby/src/main/java}/org/htmlparser/lexerapplications/tabby/package.html (100%) rename {src => apps/lexerapplications/thumbelina/src/main/java}/org/htmlparser/lexerapplications/thumbelina/Picture.java (100%) rename {src => apps/lexerapplications/thumbelina/src/main/java}/org/htmlparser/lexerapplications/thumbelina/PicturePanel.java (100%) rename {src => apps/lexerapplications/thumbelina/src/main/java}/org/htmlparser/lexerapplications/thumbelina/Sequencer.java (100%) rename {src => apps/lexerapplications/thumbelina/src/main/java}/org/htmlparser/lexerapplications/thumbelina/Thumbelina.java (100%) rename {src => apps/lexerapplications/thumbelina/src/main/java}/org/htmlparser/lexerapplications/thumbelina/ThumbelinaFrame.java (100%) rename {src => apps/lexerapplications/thumbelina/src/main/java}/org/htmlparser/lexerapplications/thumbelina/TileSet.java (100%) rename {src => apps/lexerapplications/thumbelina/src/main/java}/org/htmlparser/lexerapplications/thumbelina/package.html (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/LinkExtractor.java (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/SiteCapturer.java (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/StringExtractor.java (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/WikiCapturer.java (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/Filter.java (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/FilterBuilder.java (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/HtmlTreeCellRenderer.java (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/HtmlTreeModel.java (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/SubFilterList.java (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/images/about.gif (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/images/copy.gif (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/images/cut.gif (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/images/delete.gif (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/images/new.gif (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/images/open.gif (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/images/paste.gif (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/images/save.gif (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/layouts/NullLayoutManager.java (96%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/layouts/VerticalLayoutManager.java (96%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/wrappers/AndFilterWrapper.java (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/wrappers/HasAttributeFilterWrapper.java (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/wrappers/HasChildFilterWrapper.java (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/wrappers/HasParentFilterWrapper.java (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/wrappers/HasSiblingFilterWrapper.java (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/wrappers/NodeClassFilterWrapper.java (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/wrappers/NotFilterWrapper.java (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/wrappers/OrFilterWrapper.java (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/wrappers/RegexFilterWrapper.java (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/wrappers/StringFilterWrapper.java (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/wrappers/TagNameFilterWrapper.java (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/wrappers/images/AndFilter.gif (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasAttributeFilter.gif (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasChildFilter.gif (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasParentFilter.gif (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasSiblingFilter.gif (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NodeClassFilter.gif (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NotFilter.gif (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/wrappers/images/OrFilter.gif (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/wrappers/images/RegexFilter.gif (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/wrappers/images/StringFilter.gif (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/filterbuilder/wrappers/images/TagNameFilter.gif (100%) rename {src => apps/parserapplications/src/main/java}/org/htmlparser/parserapplications/package.html (100%) rename resources/license.txt => license.txt (98%) rename docs/release.txt => release.txt (100%) rename build.xml => src/build.xml (97%) delete mode 100644 src/doc-files/building.html delete mode 100644 src/doc-files/overview.html delete mode 100644 src/doc-files/using.html rename {resources => src/resources}/cvs2cl.pl (99%) rename {resources => src/resources}/htmlparser_checks.xml (97%) rename {resources => src/resources}/inherit.gif (100%) rename {resources => src/resources}/java.header (100%) rename {resources => src/resources}/logofiles/htmlparser2in.gif (100%) rename {resources => src/resources}/logofiles/htmlparser_cmyk.eps (100%) rename {resources => src/resources}/logofiles/htmlparser_greyscale.eps (100%) rename {resources => src/resources}/logofiles/htmlparser_pms.eps (100%) rename {resources => src/resources}/logofiles/htmlparser_rgb_2inch.jpg (100%) rename {resources => src/resources}/logofiles/htmlparser_rgb_5inch.jpg (100%) rename {resources => src/resources}/stylesheet.css (100%) rename src/{ => src}/org/htmlparser/Attribute.java (100%) rename src/{ => src}/org/htmlparser/Node.java (100%) rename src/{ => src}/org/htmlparser/NodeFactory.java (100%) rename src/{ => src}/org/htmlparser/NodeFilter.java (100%) rename src/{ => src}/org/htmlparser/Parser.java (100%) rename src/{ => src}/org/htmlparser/PrototypicalNodeFactory.java (100%) rename src/{ => src}/org/htmlparser/Remark.java (100%) rename src/{ => src}/org/htmlparser/Tag.java (100%) rename src/{ => src}/org/htmlparser/Text.java (100%) rename src/{ => src}/org/htmlparser/beans/BeanyBaby.form (100%) rename src/{ => src}/org/htmlparser/beans/BeanyBaby.java (100%) rename src/{ => src}/org/htmlparser/beans/FilterBean.java (100%) rename src/{ => src}/org/htmlparser/beans/HTMLLinkBean.java (100%) rename src/{ => src}/org/htmlparser/beans/HTMLTextBean.java (100%) rename src/{ => src}/org/htmlparser/beans/LinkBean.java (100%) rename src/{ => src}/org/htmlparser/beans/StringBean.java (100%) rename src/{ => src}/org/htmlparser/beans/images/Chain16.gif (100%) rename src/{ => src}/org/htmlparser/beans/images/Chain32.gif (100%) rename src/{ => src}/org/htmlparser/beans/images/Knot16.gif (100%) rename src/{ => src}/org/htmlparser/beans/images/Knot32.gif (100%) rename src/{ => src}/org/htmlparser/beans/package.html (100%) rename src/{ => src}/org/htmlparser/filters/AndFilter.java (100%) rename src/{ => src}/org/htmlparser/filters/CssSelectorNodeFilter.java (100%) rename src/{ => src}/org/htmlparser/filters/HasAttributeFilter.java (100%) rename src/{ => src}/org/htmlparser/filters/HasChildFilter.java (100%) rename src/{ => src}/org/htmlparser/filters/HasParentFilter.java (100%) rename src/{ => src}/org/htmlparser/filters/HasSiblingFilter.java (100%) rename src/{ => src}/org/htmlparser/filters/IsEqualFilter.java (100%) rename src/{ => src}/org/htmlparser/filters/LinkRegexFilter.java (100%) rename src/{ => src}/org/htmlparser/filters/LinkStringFilter.java (100%) rename src/{ => src}/org/htmlparser/filters/NodeClassFilter.java (100%) rename src/{ => src}/org/htmlparser/filters/NotFilter.java (100%) rename src/{ => src}/org/htmlparser/filters/OrFilter.java (100%) rename src/{ => src}/org/htmlparser/filters/RegexFilter.java (100%) rename src/{ => src}/org/htmlparser/filters/StringFilter.java (100%) rename src/{ => src}/org/htmlparser/filters/TagNameFilter.java (100%) rename src/{ => src}/org/htmlparser/filters/XorFilter.java (100%) rename src/{ => src}/org/htmlparser/filters/package.html (100%) rename src/{ => src}/org/htmlparser/http/ConnectionManager.java (100%) rename src/{ => src}/org/htmlparser/http/ConnectionMonitor.java (100%) rename src/{ => src}/org/htmlparser/http/Cookie.java (100%) rename src/{ => src}/org/htmlparser/http/HttpHeader.java (100%) rename src/{ => src}/org/htmlparser/http/package.html (100%) rename src/{ => src}/org/htmlparser/lexer/Cursor.java (100%) rename src/{ => src}/org/htmlparser/lexer/InputStreamSource.java (100%) rename src/{ => src}/org/htmlparser/lexer/Lexer.java (100%) rename src/{ => src}/org/htmlparser/lexer/Page.java (100%) rename src/{ => src}/org/htmlparser/lexer/PageAttribute.java (100%) rename src/{ => src}/org/htmlparser/lexer/PageIndex.java (100%) rename src/{ => src}/org/htmlparser/lexer/Source.java (100%) rename src/{ => src}/org/htmlparser/lexer/Stream.java (100%) rename src/{ => src}/org/htmlparser/lexer/StringSource.java (100%) rename src/{ => src}/org/htmlparser/lexer/package.html (100%) rename src/{ => src}/org/htmlparser/nodes/AbstractNode.java (100%) rename src/{ => src}/org/htmlparser/nodes/RemarkNode.java (100%) rename src/{ => src}/org/htmlparser/nodes/TagNode.java (100%) rename src/{ => src}/org/htmlparser/nodes/TextNode.java (100%) rename src/{ => src}/org/htmlparser/nodes/package.html (100%) rename src/{ => src}/org/htmlparser/package.html (100%) rename src/{ => src}/org/htmlparser/sax/Attributes.java (100%) rename src/{ => src}/org/htmlparser/sax/Feedback.java (100%) rename src/{ => src}/org/htmlparser/sax/Locator.java (100%) rename src/{ => src}/org/htmlparser/sax/XMLReader.java (100%) rename src/{ => src}/org/htmlparser/sax/package.html (100%) rename src/{ => src}/org/htmlparser/scanners/CompositeTagScanner.java (100%) rename src/{ => src}/org/htmlparser/scanners/JspScanner.java (100%) rename src/{ => src}/org/htmlparser/scanners/Scanner.java (100%) rename src/{ => src}/org/htmlparser/scanners/ScriptDecoder.java (97%) rename src/{ => src}/org/htmlparser/scanners/ScriptScanner.java (100%) rename src/{ => src}/org/htmlparser/scanners/StyleScanner.java (100%) rename src/{ => src}/org/htmlparser/scanners/TagScanner.java (100%) rename src/{ => src}/org/htmlparser/scanners/package.html (100%) rename src/{ => src}/org/htmlparser/tags/AppletTag.java (100%) rename src/{ => src}/org/htmlparser/tags/BaseHrefTag.java (100%) rename src/{ => src}/org/htmlparser/tags/BodyTag.java (100%) rename src/{ => src}/org/htmlparser/tags/Bullet.java (100%) rename src/{ => src}/org/htmlparser/tags/BulletList.java (100%) rename src/{ => src}/org/htmlparser/tags/CompositeTag.java (100%) rename src/{ => src}/org/htmlparser/tags/DefinitionList.java (100%) rename src/{ => src}/org/htmlparser/tags/DefinitionListBullet.java (100%) rename src/{ => src}/org/htmlparser/tags/Div.java (100%) rename src/{ => src}/org/htmlparser/tags/DoctypeTag.java (100%) rename src/{ => src}/org/htmlparser/tags/FormTag.java (100%) rename src/{ => src}/org/htmlparser/tags/FrameSetTag.java (100%) rename src/{ => src}/org/htmlparser/tags/FrameTag.java (100%) rename src/{ => src}/org/htmlparser/tags/HeadTag.java (100%) rename src/{ => src}/org/htmlparser/tags/HeadingTag.java (100%) rename src/{ => src}/org/htmlparser/tags/Html.java (100%) rename src/{ => src}/org/htmlparser/tags/ImageTag.java (100%) rename src/{ => src}/org/htmlparser/tags/InputTag.java (100%) rename src/{ => src}/org/htmlparser/tags/JspTag.java (100%) rename src/{ => src}/org/htmlparser/tags/LabelTag.java (100%) rename src/{ => src}/org/htmlparser/tags/LinkTag.java (100%) rename src/{ => src}/org/htmlparser/tags/MetaTag.java (100%) rename src/{ => src}/org/htmlparser/tags/ObjectTag.java (100%) rename src/{ => src}/org/htmlparser/tags/OptionTag.java (100%) rename src/{ => src}/org/htmlparser/tags/ParagraphTag.java (100%) rename src/{ => src}/org/htmlparser/tags/ProcessingInstructionTag.java (96%) rename src/{ => src}/org/htmlparser/tags/ScriptTag.java (100%) rename src/{ => src}/org/htmlparser/tags/SelectTag.java (100%) rename src/{ => src}/org/htmlparser/tags/Span.java (100%) rename src/{ => src}/org/htmlparser/tags/StyleTag.java (100%) rename src/{ => src}/org/htmlparser/tags/TableColumn.java (100%) rename src/{ => src}/org/htmlparser/tags/TableHeader.java (100%) rename src/{ => src}/org/htmlparser/tags/TableRow.java (100%) rename src/{ => src}/org/htmlparser/tags/TableTag.java (100%) rename src/{ => src}/org/htmlparser/tags/TextareaTag.java (100%) rename src/{ => src}/org/htmlparser/tags/TitleTag.java (100%) rename src/{ => src}/org/htmlparser/tags/package.html (100%) rename src/{ => src}/org/htmlparser/util/ChainedException.java (100%) rename src/{ => src}/org/htmlparser/util/CharacterReference.java (100%) rename src/{ => src}/org/htmlparser/util/DefaultParserFeedback.java (100%) rename src/{ => src}/org/htmlparser/util/EncodingChangeException.java (100%) rename src/{ => src}/org/htmlparser/util/FeedbackManager.java (100%) rename src/{ => src}/org/htmlparser/util/IteratorImpl.java (100%) rename src/{ => src}/org/htmlparser/util/NodeIterator.java (100%) rename src/{ => src}/org/htmlparser/util/NodeList.java (100%) rename src/{ => src}/org/htmlparser/util/NodeTreeWalker.java (100%) rename src/{ => src}/org/htmlparser/util/ParserException.java (100%) rename src/{ => src}/org/htmlparser/util/ParserFeedback.java (100%) rename src/{ => src}/org/htmlparser/util/ParserUtils.java (100%) rename src/{ => src}/org/htmlparser/util/SimpleNodeIterator.java (100%) rename src/{ => src}/org/htmlparser/util/Translate.java (100%) rename src/{ => src}/org/htmlparser/util/package.html (100%) rename src/{ => src}/org/htmlparser/util/sort/Ordered.java (100%) rename src/{ => src}/org/htmlparser/util/sort/Sort.java (100%) rename src/{ => src}/org/htmlparser/util/sort/Sortable.java (100%) rename src/{ => src}/org/htmlparser/util/sort/package.html (100%) rename src/{ => src}/org/htmlparser/visitors/HtmlPage.java (100%) rename src/{ => src}/org/htmlparser/visitors/LinkFindingVisitor.java (100%) rename src/{ => src}/org/htmlparser/visitors/NodeVisitor.java (100%) rename src/{ => src}/org/htmlparser/visitors/ObjectFindingVisitor.java (100%) rename src/{ => src}/org/htmlparser/visitors/StringFindingVisitor.java (100%) rename src/{ => src}/org/htmlparser/visitors/TagFindingVisitor.java (100%) rename src/{ => src}/org/htmlparser/visitors/TextExtractingVisitor.java (100%) rename src/{ => src}/org/htmlparser/visitors/UrlModifyingVisitor.java (100%) rename src/{ => src}/org/htmlparser/visitors/package.html (100%) rename src/{ => tests}/org/htmlparser/tests/AllTests.java (100%) rename src/{ => tests}/org/htmlparser/tests/AssertXmlEqualsTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/BadTagIdentifier.java (100%) rename src/{ => tests}/org/htmlparser/tests/FunctionalTests.java (100%) rename src/{ => tests}/org/htmlparser/tests/LineNumberAssignedByNodeReaderTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/ParserTest.java (97%) rename src/{ => tests}/org/htmlparser/tests/ParserTestCase.java (100%) rename src/{ => tests}/org/htmlparser/tests/SAXTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/codeMetrics/LineCounter.java (100%) rename src/{ => tests}/org/htmlparser/tests/filterTests/FilterTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/lexerTests/AllTests.java (100%) rename src/{ => tests}/org/htmlparser/tests/lexerTests/AttributeTests.java (100%) rename src/{ => tests}/org/htmlparser/tests/lexerTests/LexerTests.java (100%) rename src/{ => tests}/org/htmlparser/tests/lexerTests/PageIndexTests.java (100%) rename src/{ => tests}/org/htmlparser/tests/lexerTests/PageTests.java (100%) rename src/{ => tests}/org/htmlparser/tests/lexerTests/SourceTests.java (100%) rename src/{ => tests}/org/htmlparser/tests/lexerTests/StreamTests.java (99%) rename src/{ => tests}/org/htmlparser/tests/lexerTests/TagTests.java (100%) rename src/{ => tests}/org/htmlparser/tests/package.html (100%) rename src/{ => tests}/org/htmlparser/tests/parserHelperTests/AllTests.java (100%) rename src/{ => tests}/org/htmlparser/tests/parserHelperTests/CompositeTagScannerHelperTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/parserHelperTests/RemarkNodeParserTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/parserHelperTests/StringParserTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/scannersTests/AllTests.java (100%) rename src/{ => tests}/org/htmlparser/tests/scannersTests/CompositeTagScannerTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/scannersTests/JspScannerTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/scannersTests/ScriptScannerTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/scannersTests/TagScannerTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/scannersTests/XmlEndTagScanningTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/scannersTests/package.html (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/AllTests.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/AppletTagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/BaseHrefTagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/BodyTagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/BulletListTagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/BulletTagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/CompositeTagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/DivTagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/DoctypeTagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/EndTagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/FormTagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/FrameSetTagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/FrameTagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/HeadTagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/HtmlTagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/ImageTagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/InputTagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/JspTagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/LabelTagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/LinkTagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/MetaTagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/ObjectCollectionTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/OptionTagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/ScriptTagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/SelectTagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/SpanTagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/StyleTagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/TableTagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/TagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/TextareaTagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/TitleTagTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/tagTests/package.html (100%) rename src/{ => tests}/org/htmlparser/tests/utilTests/AllTests.java (100%) rename src/{ => tests}/org/htmlparser/tests/utilTests/BeanTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/utilTests/CharacterTranslationTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/utilTests/HTMLParserUtilsTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/utilTests/NodeListTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/utilTests/NonEnglishTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/utilTests/SortTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/utilTests/package.html (100%) rename src/{ => tests}/org/htmlparser/tests/visitorsTests/AllTests.java (100%) rename src/{ => tests}/org/htmlparser/tests/visitorsTests/CompositeTagFindingVisitorTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/visitorsTests/HtmlPageTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/visitorsTests/LinkFindingVisitorTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/visitorsTests/NodeVisitorTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/visitorsTests/ScriptCommentTest.java (97%) rename src/{ => tests}/org/htmlparser/tests/visitorsTests/StringFindingVisitorTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/visitorsTests/TagFindingVisitorTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/visitorsTests/TextExtractingVisitorTest.java (100%) rename src/{ => tests}/org/htmlparser/tests/visitorsTests/UrlModifyingVisitorTest.java (100%) diff --git a/src/org/htmlparser/lexerapplications/tabby/Tabby.java b/apps/lexerapplications/tabby/src/main/java/org/htmlparser/lexerapplications/tabby/Tabby.java similarity index 100% rename from src/org/htmlparser/lexerapplications/tabby/Tabby.java rename to apps/lexerapplications/tabby/src/main/java/org/htmlparser/lexerapplications/tabby/Tabby.java diff --git a/src/org/htmlparser/lexerapplications/tabby/package.html b/apps/lexerapplications/tabby/src/main/java/org/htmlparser/lexerapplications/tabby/package.html similarity index 100% rename from src/org/htmlparser/lexerapplications/tabby/package.html rename to apps/lexerapplications/tabby/src/main/java/org/htmlparser/lexerapplications/tabby/package.html diff --git a/src/org/htmlparser/lexerapplications/thumbelina/Picture.java b/apps/lexerapplications/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/Picture.java similarity index 100% rename from src/org/htmlparser/lexerapplications/thumbelina/Picture.java rename to apps/lexerapplications/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/Picture.java diff --git a/src/org/htmlparser/lexerapplications/thumbelina/PicturePanel.java b/apps/lexerapplications/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/PicturePanel.java similarity index 100% rename from src/org/htmlparser/lexerapplications/thumbelina/PicturePanel.java rename to apps/lexerapplications/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/PicturePanel.java diff --git a/src/org/htmlparser/lexerapplications/thumbelina/Sequencer.java b/apps/lexerapplications/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/Sequencer.java similarity index 100% rename from src/org/htmlparser/lexerapplications/thumbelina/Sequencer.java rename to apps/lexerapplications/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/Sequencer.java diff --git a/src/org/htmlparser/lexerapplications/thumbelina/Thumbelina.java b/apps/lexerapplications/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/Thumbelina.java similarity index 100% rename from src/org/htmlparser/lexerapplications/thumbelina/Thumbelina.java rename to apps/lexerapplications/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/Thumbelina.java diff --git a/src/org/htmlparser/lexerapplications/thumbelina/ThumbelinaFrame.java b/apps/lexerapplications/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/ThumbelinaFrame.java similarity index 100% rename from src/org/htmlparser/lexerapplications/thumbelina/ThumbelinaFrame.java rename to apps/lexerapplications/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/ThumbelinaFrame.java diff --git a/src/org/htmlparser/lexerapplications/thumbelina/TileSet.java b/apps/lexerapplications/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/TileSet.java similarity index 100% rename from src/org/htmlparser/lexerapplications/thumbelina/TileSet.java rename to apps/lexerapplications/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/TileSet.java diff --git a/src/org/htmlparser/lexerapplications/thumbelina/package.html b/apps/lexerapplications/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/package.html similarity index 100% rename from src/org/htmlparser/lexerapplications/thumbelina/package.html rename to apps/lexerapplications/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/package.html diff --git a/src/org/htmlparser/parserapplications/LinkExtractor.java b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/LinkExtractor.java similarity index 100% rename from src/org/htmlparser/parserapplications/LinkExtractor.java rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/LinkExtractor.java diff --git a/src/org/htmlparser/parserapplications/SiteCapturer.java b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/SiteCapturer.java similarity index 100% rename from src/org/htmlparser/parserapplications/SiteCapturer.java rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/SiteCapturer.java diff --git a/src/org/htmlparser/parserapplications/StringExtractor.java b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/StringExtractor.java similarity index 100% rename from src/org/htmlparser/parserapplications/StringExtractor.java rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/StringExtractor.java diff --git a/src/org/htmlparser/parserapplications/WikiCapturer.java b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/WikiCapturer.java similarity index 100% rename from src/org/htmlparser/parserapplications/WikiCapturer.java rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/WikiCapturer.java diff --git a/src/org/htmlparser/parserapplications/filterbuilder/Filter.java b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/Filter.java similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/Filter.java rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/Filter.java diff --git a/src/org/htmlparser/parserapplications/filterbuilder/FilterBuilder.java b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/FilterBuilder.java similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/FilterBuilder.java rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/FilterBuilder.java diff --git a/src/org/htmlparser/parserapplications/filterbuilder/HtmlTreeCellRenderer.java b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/HtmlTreeCellRenderer.java similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/HtmlTreeCellRenderer.java rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/HtmlTreeCellRenderer.java diff --git a/src/org/htmlparser/parserapplications/filterbuilder/HtmlTreeModel.java b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/HtmlTreeModel.java similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/HtmlTreeModel.java rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/HtmlTreeModel.java diff --git a/src/org/htmlparser/parserapplications/filterbuilder/SubFilterList.java b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/SubFilterList.java similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/SubFilterList.java rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/SubFilterList.java diff --git a/src/org/htmlparser/parserapplications/filterbuilder/images/about.gif b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/about.gif similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/images/about.gif rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/about.gif diff --git a/src/org/htmlparser/parserapplications/filterbuilder/images/copy.gif b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/copy.gif similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/images/copy.gif rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/copy.gif diff --git a/src/org/htmlparser/parserapplications/filterbuilder/images/cut.gif b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/cut.gif similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/images/cut.gif rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/cut.gif diff --git a/src/org/htmlparser/parserapplications/filterbuilder/images/delete.gif b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/delete.gif similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/images/delete.gif rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/delete.gif diff --git a/src/org/htmlparser/parserapplications/filterbuilder/images/new.gif b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/new.gif similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/images/new.gif rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/new.gif diff --git a/src/org/htmlparser/parserapplications/filterbuilder/images/open.gif b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/open.gif similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/images/open.gif rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/open.gif diff --git a/src/org/htmlparser/parserapplications/filterbuilder/images/paste.gif b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/paste.gif similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/images/paste.gif rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/paste.gif diff --git a/src/org/htmlparser/parserapplications/filterbuilder/images/save.gif b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/save.gif similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/images/save.gif rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/save.gif diff --git a/src/org/htmlparser/parserapplications/filterbuilder/layouts/NullLayoutManager.java b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/layouts/NullLayoutManager.java similarity index 96% rename from src/org/htmlparser/parserapplications/filterbuilder/layouts/NullLayoutManager.java rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/layouts/NullLayoutManager.java index 3111d729..b4aa2fd3 100644 --- a/src/org/htmlparser/parserapplications/filterbuilder/layouts/NullLayoutManager.java +++ b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/layouts/NullLayoutManager.java @@ -1,226 +1,226 @@ -// HTMLParser Library $Name$ - A java-based parser for HTML -// http://sourceforge.org/projects/htmlparser -// Copyright (C) 2005 Derrick Oswald -// -// Revision Control Information -// -// $Source$ -// $Author$ -// $Date$ -// $Revision$ -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// - -package org.htmlparser.parserapplications.filterbuilder.layouts; - -import java.awt.*; -import java.io.*; - -/** - * A layout manager that doesn't move things around. - * Attempts to set the bounds of components to accomodate them - * but doesn't move them. - */ -public class NullLayoutManager - implements - LayoutManager2, - Serializable -{ - /** - * Constructs a NullLayoutManager object. - */ - public NullLayoutManager () - { - } - - /** - * Calculates the minimum size dimensions for the specified - * panel given the components in the specified parent container. - * @param target The component to be laid out. - * @return The minimum size. - * @see #preferredLayoutSize - */ - public Dimension minimumLayoutSize (Container target) - { - return (preferredLayoutSize (target)); - } - - /** - * Calculates the preferred size dimensions for the specified - * panel given the components in the specified parent container. - * @see #minimumLayoutSize - * @param target The component to be laid out. - * @return A size deemed suitable for laying out the container. - */ - public Dimension preferredLayoutSize (Container target) - { - int count; - Container parent; - Component component; - Point point; - Dimension dimension; - Insets insets; - Dimension ret; - - synchronized (target.getTreeLock ()) - { - count = target.getComponentCount (); - if (0 == count) - { - // be the same size unless we have a parent - ret = target.getSize (); - parent = target.getParent (); - if (null != parent) - { - insets = parent.getInsets (); - ret = parent.getSize (); - ret.setSize ( - ret.width - insets.left - insets.right, - ret.height - insets.top - insets.bottom); - } - } - else - { - ret = new Dimension (0, 0); - for (int i = 0 ; i < count ; i++) - { - component = target.getComponent (i); - if (component.isVisible ()) - { - point = component.getLocation (); - dimension = component.getPreferredSize(); - ret.width = Math.max (ret.width, point.x + dimension.width); - ret.height = Math.max (ret.height, point.y + dimension.height); - } - } - insets = target.getInsets (); - ret.width += insets.left + insets.right; - ret.height += insets.top + insets.bottom; - } - } - - return (ret); - } - - /** - * Returns the maximum size of this component. - * @param target The component to be laid out. - * @return The maximum size for the container. - * @see #preferredLayoutSize - */ - public Dimension maximumLayoutSize (Container target) - { - return (preferredLayoutSize (target)); - } - - // - // LayoutManager Interface - // - - /** - * Adds the specified component with the specified name to - * the layout. - * @param name the component name - * @param comp the component to be added - */ - public void addLayoutComponent (String name, Component comp) - { - } - - /** - * Removes the specified component from the layout. - * @param comp the component ot be removed - */ - public void removeLayoutComponent (Component comp) - { - } - - /** - * Lays out the container. - * @param target The container which needs to be laid out. - */ - public void layoutContainer (Container target) - { - int count; - Component component; - Dimension dimension; - - synchronized (target.getTreeLock ()) - { - count = target.getComponentCount (); - for (int i = 0 ; i < count ; i++) - { - component = target.getComponent (i); - if (component.isVisible ()) - { - dimension = component.getPreferredSize(); - component.setSize (dimension.width, dimension.height); - } - } - } - } - - // - // LayoutManager2 Interface - // - - /** - * Adds the specified component to the layout, using the specified - * constraint object. - * @param comp the component to be added - * @param constraints where/how the component is added to the layout. - */ - public void addLayoutComponent (Component comp, Object constraints) - { - } - - /** - * Returns the alignment along the x axis. This specifies how - * the component would like to be aligned relative to other - * components. The value should be a number between 0 and 1 - * where 0 represents alignment along the origin, 1 is aligned - * the furthest away from the origin, 0.5 is centered, etc. - * @param target The target container. - * @return The X-axis alignment. - */ - public float getLayoutAlignmentX (Container target) - { - return (0.0f); - } - - /** - * Returns the alignment along the y axis. This specifies how - * the component would like to be aligned relative to other - * components. The value should be a number between 0 and 1 - * where 0 represents alignment along the origin, 1 is aligned - * the furthest away from the origin, 0.5 is centered, etc. - * @param target The target container. - * @return The Y-axis alignment. - */ - public float getLayoutAlignmentY (Container target) - { - return (0.0f); - } - - /** - * Invalidates the layout, indicating that if the layout manager - * has cached information it should be discarded. - * @param target The target container. - */ - public void invalidateLayout (Container target) - { - } -} +// HTMLParser Library $Name$ - A java-based parser for HTML +// http://sourceforge.org/projects/htmlparser +// Copyright (C) 2005 Derrick Oswald +// +// Revision Control Information +// +// $Source$ +// $Author$ +// $Date$ +// $Revision$ +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// + +package org.htmlparser.parserapplications.filterbuilder.layouts; + +import java.awt.*; +import java.io.*; + +/** + * A layout manager that doesn't move things around. + * Attempts to set the bounds of components to accomodate them + * but doesn't move them. + */ +public class NullLayoutManager + implements + LayoutManager2, + Serializable +{ + /** + * Constructs a NullLayoutManager object. + */ + public NullLayoutManager () + { + } + + /** + * Calculates the minimum size dimensions for the specified + * panel given the components in the specified parent container. + * @param target The component to be laid out. + * @return The minimum size. + * @see #preferredLayoutSize + */ + public Dimension minimumLayoutSize (Container target) + { + return (preferredLayoutSize (target)); + } + + /** + * Calculates the preferred size dimensions for the specified + * panel given the components in the specified parent container. + * @see #minimumLayoutSize + * @param target The component to be laid out. + * @return A size deemed suitable for laying out the container. + */ + public Dimension preferredLayoutSize (Container target) + { + int count; + Container parent; + Component component; + Point point; + Dimension dimension; + Insets insets; + Dimension ret; + + synchronized (target.getTreeLock ()) + { + count = target.getComponentCount (); + if (0 == count) + { + // be the same size unless we have a parent + ret = target.getSize (); + parent = target.getParent (); + if (null != parent) + { + insets = parent.getInsets (); + ret = parent.getSize (); + ret.setSize ( + ret.width - insets.left - insets.right, + ret.height - insets.top - insets.bottom); + } + } + else + { + ret = new Dimension (0, 0); + for (int i = 0 ; i < count ; i++) + { + component = target.getComponent (i); + if (component.isVisible ()) + { + point = component.getLocation (); + dimension = component.getPreferredSize(); + ret.width = Math.max (ret.width, point.x + dimension.width); + ret.height = Math.max (ret.height, point.y + dimension.height); + } + } + insets = target.getInsets (); + ret.width += insets.left + insets.right; + ret.height += insets.top + insets.bottom; + } + } + + return (ret); + } + + /** + * Returns the maximum size of this component. + * @param target The component to be laid out. + * @return The maximum size for the container. + * @see #preferredLayoutSize + */ + public Dimension maximumLayoutSize (Container target) + { + return (preferredLayoutSize (target)); + } + + // + // LayoutManager Interface + // + + /** + * Adds the specified component with the specified name to + * the layout. + * @param name the component name + * @param comp the component to be added + */ + public void addLayoutComponent (String name, Component comp) + { + } + + /** + * Removes the specified component from the layout. + * @param comp the component ot be removed + */ + public void removeLayoutComponent (Component comp) + { + } + + /** + * Lays out the container. + * @param target The container which needs to be laid out. + */ + public void layoutContainer (Container target) + { + int count; + Component component; + Dimension dimension; + + synchronized (target.getTreeLock ()) + { + count = target.getComponentCount (); + for (int i = 0 ; i < count ; i++) + { + component = target.getComponent (i); + if (component.isVisible ()) + { + dimension = component.getPreferredSize(); + component.setSize (dimension.width, dimension.height); + } + } + } + } + + // + // LayoutManager2 Interface + // + + /** + * Adds the specified component to the layout, using the specified + * constraint object. + * @param comp the component to be added + * @param constraints where/how the component is added to the layout. + */ + public void addLayoutComponent (Component comp, Object constraints) + { + } + + /** + * Returns the alignment along the x axis. This specifies how + * the component would like to be aligned relative to other + * components. The value should be a number between 0 and 1 + * where 0 represents alignment along the origin, 1 is aligned + * the furthest away from the origin, 0.5 is centered, etc. + * @param target The target container. + * @return The X-axis alignment. + */ + public float getLayoutAlignmentX (Container target) + { + return (0.0f); + } + + /** + * Returns the alignment along the y axis. This specifies how + * the component would like to be aligned relative to other + * components. The value should be a number between 0 and 1 + * where 0 represents alignment along the origin, 1 is aligned + * the furthest away from the origin, 0.5 is centered, etc. + * @param target The target container. + * @return The Y-axis alignment. + */ + public float getLayoutAlignmentY (Container target) + { + return (0.0f); + } + + /** + * Invalidates the layout, indicating that if the layout manager + * has cached information it should be discarded. + * @param target The target container. + */ + public void invalidateLayout (Container target) + { + } +} diff --git a/src/org/htmlparser/parserapplications/filterbuilder/layouts/VerticalLayoutManager.java b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/layouts/VerticalLayoutManager.java similarity index 96% rename from src/org/htmlparser/parserapplications/filterbuilder/layouts/VerticalLayoutManager.java rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/layouts/VerticalLayoutManager.java index 36252998..62f7eb9b 100644 --- a/src/org/htmlparser/parserapplications/filterbuilder/layouts/VerticalLayoutManager.java +++ b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/layouts/VerticalLayoutManager.java @@ -1,230 +1,230 @@ -// HTMLParser Library $Name$ - A java-based parser for HTML -// http://sourceforge.org/projects/htmlparser -// Copyright (C) 2005 Derrick Oswald -// -// Revision Control Information -// -// $Source$ -// $Author$ -// $Date$ -// $Revision$ -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// - -package org.htmlparser.parserapplications.filterbuilder.layouts; - -import java.awt.*; -import java.io.*; - -/** - * A layout manager like a vertical FlowLayout. - * Stacks components vertically like GridLayout(0,1) but doesn't - * resize each component equally. More like a vertical FlowLayout - * but doesn't snake columns or align things. - */ -public class VerticalLayoutManager - implements - LayoutManager2, - Serializable -{ - /** - * Constructs a VerticalLayoutManager object. - */ - public VerticalLayoutManager () - { - } - - /** - * Calculates the minimum size dimensions for the specified - * panel given the components in the specified parent container. - * @param target The component to be laid out. - * @return The minimum size. - * @see #preferredLayoutSize - */ - public Dimension minimumLayoutSize (Container target) - { - return (preferredLayoutSize (target)); - } - - /** - * Calculates the preferred size dimensions for the specified - * panel given the components in the specified parent container. - * @param target The component to be laid out. - * @return A size deemed suitable for laying out the container. - * @see #minimumLayoutSize - */ - public Dimension preferredLayoutSize (Container target) - { - int count; - Component component; - Dimension dimension; - Insets insets; - Dimension ret; - - synchronized (target.getTreeLock ()) - { - // get the the total height and maximum width component - ret = new Dimension (0, 0); - count = target.getComponentCount (); - for (int i = 0 ; i < count ; i++) - { - component = target.getComponent (i); - if (component.isVisible ()) - { - dimension = component.getPreferredSize (); - ret.width = Math.max (ret.width, dimension.width); - ret.height += dimension.height; - } - } - insets = target.getInsets (); - ret.width += insets.left + insets.right; - ret.height += insets.top + insets.bottom; - } - - return (ret); - } - - /** - * Returns the maximum size of this component. - * @param target The component to be laid out. - * @return The maximum size for the container. - * @see #preferredLayoutSize - */ - public Dimension maximumLayoutSize (Container target) - { - return (preferredLayoutSize (target)); - } - - // - // LayoutManager Interface - // - - /** - * Adds the specified component with the specified name to - * the layout. - * @param name the component name - * @param comp the component to be added - */ - public void addLayoutComponent (String name, Component comp) - { - } - - /** - * Removes the specified component from the layout. - * @param comp the component ot be removed - */ - public void removeLayoutComponent (Component comp) - { - } - - /** - * Lays out the container. - * @param target The container which needs to be laid out. - */ - public void layoutContainer (Container target) - { - Insets insets; - int x; - int y; - int count; - int width; - Component component; - Dimension dimension; - - synchronized (target.getTreeLock ()) - { - insets = target.getInsets (); - x = insets.left; - y = insets.top; - count = target.getComponentCount (); - width = 0; - for (int i = 0 ; i < count ; i++) - { - component = target.getComponent (i); - if (component.isVisible ()) - { - dimension = component.getPreferredSize (); - width = Math.max (width, dimension.width); - component.setSize (dimension.width, dimension.height); - component.setLocation (x, y); - y += dimension.height; - } - } - // now set them all to the same width - for (int i = 0 ; i < count ; i++) - { - component = target.getComponent (i); - if (component.isVisible ()) - { - dimension = component.getSize (); - dimension.width = width; - component.setSize (dimension.width, dimension.height); - } - } - } - } - - // - // LayoutManager2 Interface - // - - /** - * Adds the specified component to the layout, using the specified - * constraint object. - * @param comp the component to be added - * @param constraints where/how the component is added to the layout. - */ - public void addLayoutComponent (Component comp, Object constraints) - { - } - - /** - * Returns the alignment along the x axis. This specifies how - * the component would like to be aligned relative to other - * components. The value should be a number between 0 and 1 - * where 0 represents alignment along the origin, 1 is aligned - * the furthest away from the origin, 0.5 is centered, etc. - * @param target The target container. - * @return The X-axis alignment. - */ - public float getLayoutAlignmentX (Container target) - { - return (0.0f); - } - - /** - * Returns the alignment along the y axis. This specifies how - * the component would like to be aligned relative to other - * components. The value should be a number between 0 and 1 - * where 0 represents alignment along the origin, 1 is aligned - * the furthest away from the origin, 0.5 is centered, etc. - * @param target The target container. - * @return The Y-axis alignment. - */ - public float getLayoutAlignmentY (Container target) - { - return (0.0f); - } - - /** - * Invalidates the layout, indicating that if the layout manager - * has cached information it should be discarded. - * @param target The target container. - */ - public void invalidateLayout (Container target) - { - } -} +// HTMLParser Library $Name$ - A java-based parser for HTML +// http://sourceforge.org/projects/htmlparser +// Copyright (C) 2005 Derrick Oswald +// +// Revision Control Information +// +// $Source$ +// $Author$ +// $Date$ +// $Revision$ +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// + +package org.htmlparser.parserapplications.filterbuilder.layouts; + +import java.awt.*; +import java.io.*; + +/** + * A layout manager like a vertical FlowLayout. + * Stacks components vertically like GridLayout(0,1) but doesn't + * resize each component equally. More like a vertical FlowLayout + * but doesn't snake columns or align things. + */ +public class VerticalLayoutManager + implements + LayoutManager2, + Serializable +{ + /** + * Constructs a VerticalLayoutManager object. + */ + public VerticalLayoutManager () + { + } + + /** + * Calculates the minimum size dimensions for the specified + * panel given the components in the specified parent container. + * @param target The component to be laid out. + * @return The minimum size. + * @see #preferredLayoutSize + */ + public Dimension minimumLayoutSize (Container target) + { + return (preferredLayoutSize (target)); + } + + /** + * Calculates the preferred size dimensions for the specified + * panel given the components in the specified parent container. + * @param target The component to be laid out. + * @return A size deemed suitable for laying out the container. + * @see #minimumLayoutSize + */ + public Dimension preferredLayoutSize (Container target) + { + int count; + Component component; + Dimension dimension; + Insets insets; + Dimension ret; + + synchronized (target.getTreeLock ()) + { + // get the the total height and maximum width component + ret = new Dimension (0, 0); + count = target.getComponentCount (); + for (int i = 0 ; i < count ; i++) + { + component = target.getComponent (i); + if (component.isVisible ()) + { + dimension = component.getPreferredSize (); + ret.width = Math.max (ret.width, dimension.width); + ret.height += dimension.height; + } + } + insets = target.getInsets (); + ret.width += insets.left + insets.right; + ret.height += insets.top + insets.bottom; + } + + return (ret); + } + + /** + * Returns the maximum size of this component. + * @param target The component to be laid out. + * @return The maximum size for the container. + * @see #preferredLayoutSize + */ + public Dimension maximumLayoutSize (Container target) + { + return (preferredLayoutSize (target)); + } + + // + // LayoutManager Interface + // + + /** + * Adds the specified component with the specified name to + * the layout. + * @param name the component name + * @param comp the component to be added + */ + public void addLayoutComponent (String name, Component comp) + { + } + + /** + * Removes the specified component from the layout. + * @param comp the component ot be removed + */ + public void removeLayoutComponent (Component comp) + { + } + + /** + * Lays out the container. + * @param target The container which needs to be laid out. + */ + public void layoutContainer (Container target) + { + Insets insets; + int x; + int y; + int count; + int width; + Component component; + Dimension dimension; + + synchronized (target.getTreeLock ()) + { + insets = target.getInsets (); + x = insets.left; + y = insets.top; + count = target.getComponentCount (); + width = 0; + for (int i = 0 ; i < count ; i++) + { + component = target.getComponent (i); + if (component.isVisible ()) + { + dimension = component.getPreferredSize (); + width = Math.max (width, dimension.width); + component.setSize (dimension.width, dimension.height); + component.setLocation (x, y); + y += dimension.height; + } + } + // now set them all to the same width + for (int i = 0 ; i < count ; i++) + { + component = target.getComponent (i); + if (component.isVisible ()) + { + dimension = component.getSize (); + dimension.width = width; + component.setSize (dimension.width, dimension.height); + } + } + } + } + + // + // LayoutManager2 Interface + // + + /** + * Adds the specified component to the layout, using the specified + * constraint object. + * @param comp the component to be added + * @param constraints where/how the component is added to the layout. + */ + public void addLayoutComponent (Component comp, Object constraints) + { + } + + /** + * Returns the alignment along the x axis. This specifies how + * the component would like to be aligned relative to other + * components. The value should be a number between 0 and 1 + * where 0 represents alignment along the origin, 1 is aligned + * the furthest away from the origin, 0.5 is centered, etc. + * @param target The target container. + * @return The X-axis alignment. + */ + public float getLayoutAlignmentX (Container target) + { + return (0.0f); + } + + /** + * Returns the alignment along the y axis. This specifies how + * the component would like to be aligned relative to other + * components. The value should be a number between 0 and 1 + * where 0 represents alignment along the origin, 1 is aligned + * the furthest away from the origin, 0.5 is centered, etc. + * @param target The target container. + * @return The Y-axis alignment. + */ + public float getLayoutAlignmentY (Container target) + { + return (0.0f); + } + + /** + * Invalidates the layout, indicating that if the layout manager + * has cached information it should be discarded. + * @param target The target container. + */ + public void invalidateLayout (Container target) + { + } +} diff --git a/src/org/htmlparser/parserapplications/filterbuilder/wrappers/AndFilterWrapper.java b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/AndFilterWrapper.java similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/wrappers/AndFilterWrapper.java rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/AndFilterWrapper.java diff --git a/src/org/htmlparser/parserapplications/filterbuilder/wrappers/HasAttributeFilterWrapper.java b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/HasAttributeFilterWrapper.java similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/wrappers/HasAttributeFilterWrapper.java rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/HasAttributeFilterWrapper.java diff --git a/src/org/htmlparser/parserapplications/filterbuilder/wrappers/HasChildFilterWrapper.java b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/HasChildFilterWrapper.java similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/wrappers/HasChildFilterWrapper.java rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/HasChildFilterWrapper.java diff --git a/src/org/htmlparser/parserapplications/filterbuilder/wrappers/HasParentFilterWrapper.java b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/HasParentFilterWrapper.java similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/wrappers/HasParentFilterWrapper.java rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/HasParentFilterWrapper.java diff --git a/src/org/htmlparser/parserapplications/filterbuilder/wrappers/HasSiblingFilterWrapper.java b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/HasSiblingFilterWrapper.java similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/wrappers/HasSiblingFilterWrapper.java rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/HasSiblingFilterWrapper.java diff --git a/src/org/htmlparser/parserapplications/filterbuilder/wrappers/NodeClassFilterWrapper.java b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/NodeClassFilterWrapper.java similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/wrappers/NodeClassFilterWrapper.java rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/NodeClassFilterWrapper.java diff --git a/src/org/htmlparser/parserapplications/filterbuilder/wrappers/NotFilterWrapper.java b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/NotFilterWrapper.java similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/wrappers/NotFilterWrapper.java rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/NotFilterWrapper.java diff --git a/src/org/htmlparser/parserapplications/filterbuilder/wrappers/OrFilterWrapper.java b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/OrFilterWrapper.java similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/wrappers/OrFilterWrapper.java rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/OrFilterWrapper.java diff --git a/src/org/htmlparser/parserapplications/filterbuilder/wrappers/RegexFilterWrapper.java b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/RegexFilterWrapper.java similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/wrappers/RegexFilterWrapper.java rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/RegexFilterWrapper.java diff --git a/src/org/htmlparser/parserapplications/filterbuilder/wrappers/StringFilterWrapper.java b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/StringFilterWrapper.java similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/wrappers/StringFilterWrapper.java rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/StringFilterWrapper.java diff --git a/src/org/htmlparser/parserapplications/filterbuilder/wrappers/TagNameFilterWrapper.java b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/TagNameFilterWrapper.java similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/wrappers/TagNameFilterWrapper.java rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/TagNameFilterWrapper.java diff --git a/src/org/htmlparser/parserapplications/filterbuilder/wrappers/images/AndFilter.gif b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/AndFilter.gif similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/wrappers/images/AndFilter.gif rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/AndFilter.gif diff --git a/src/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasAttributeFilter.gif b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasAttributeFilter.gif similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasAttributeFilter.gif rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasAttributeFilter.gif diff --git a/src/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasChildFilter.gif b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasChildFilter.gif similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasChildFilter.gif rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasChildFilter.gif diff --git a/src/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasParentFilter.gif b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasParentFilter.gif similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasParentFilter.gif rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasParentFilter.gif diff --git a/src/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasSiblingFilter.gif b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasSiblingFilter.gif similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasSiblingFilter.gif rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasSiblingFilter.gif diff --git a/src/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NodeClassFilter.gif b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NodeClassFilter.gif similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NodeClassFilter.gif rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NodeClassFilter.gif diff --git a/src/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NotFilter.gif b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NotFilter.gif similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NotFilter.gif rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NotFilter.gif diff --git a/src/org/htmlparser/parserapplications/filterbuilder/wrappers/images/OrFilter.gif b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/OrFilter.gif similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/wrappers/images/OrFilter.gif rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/OrFilter.gif diff --git a/src/org/htmlparser/parserapplications/filterbuilder/wrappers/images/RegexFilter.gif b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/RegexFilter.gif similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/wrappers/images/RegexFilter.gif rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/RegexFilter.gif diff --git a/src/org/htmlparser/parserapplications/filterbuilder/wrappers/images/StringFilter.gif b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/StringFilter.gif similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/wrappers/images/StringFilter.gif rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/StringFilter.gif diff --git a/src/org/htmlparser/parserapplications/filterbuilder/wrappers/images/TagNameFilter.gif b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/TagNameFilter.gif similarity index 100% rename from src/org/htmlparser/parserapplications/filterbuilder/wrappers/images/TagNameFilter.gif rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/TagNameFilter.gif diff --git a/src/org/htmlparser/parserapplications/package.html b/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/package.html similarity index 100% rename from src/org/htmlparser/parserapplications/package.html rename to apps/parserapplications/src/main/java/org/htmlparser/parserapplications/package.html diff --git a/resources/license.txt b/license.txt similarity index 98% rename from resources/license.txt rename to license.txt index 6dc006e2..3cc56ffb 100644 --- a/resources/license.txt +++ b/license.txt @@ -1,460 +1,460 @@ -GNU Lesser General Public License - -Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - [This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - -Preamble - -The licenses for most software are designed to take away your freedom to share -and change it. By contrast, the GNU General Public Licenses are intended to -guarantee your freedom to share and change free software--to make sure the -software is free for all its users. - -This license, the Lesser General Public License, applies to some specially -designated software packages--typically libraries--of the Free Software -Foundation and other authors who decide to use it. You can use it too, but we -suggest you first think carefully about whether this license or the ordinary -General Public License is the better strategy to use in any particular case, -based on the explanations below. - -When we speak of free software, we are referring to freedom of use, not price. -Our General Public Licenses are designed to make sure that you have the freedom -to distribute copies of free software (and charge for this service if you wish); -that you receive source code or can get it if you want it; that you can change -the software and use pieces of it in new free programs; and that you are -informed that you can do these things. - -To protect your rights, we need to make restrictions that forbid distributors to -deny you these rights or to ask you to surrender these rights. These -restrictions translate to certain responsibilities for you if you distribute -copies of the library or if you modify it. - -For example, if you distribute copies of the library, whether gratis or for a -fee, you must give the recipients all the rights that we gave you. You must make -sure that they, too, receive or can get the source code. If you link other code -with the library, you must provide complete object files to the recipients, so -that they can relink them with the library after making changes to the library -and recompiling it. And you must show them these terms so they know their -rights. - -We protect your rights with a two-step method: (1) we copyright the library, and -(2) we offer you this license, which gives you legal permission to copy, -distribute and/or modify the library. - -To protect each distributor, we want to make it very clear that there is no -warranty for the free library. Also, if the library is modified by someone else -and passed on, the recipients should know that what they have is not the -original version, so that the original author's reputation will not be affected -by problems that might be introduced by others. - -Finally, software patents pose a constant threat to the existence of any free -program. We wish to make sure that a company cannot effectively restrict the -users of a free program by obtaining a restrictive license from a patent holder. -Therefore, we insist that any patent license obtained for a version of the -library must be consistent with the full freedom of use specified in this -license. - -Most GNU software, including some libraries, is covered by the ordinary GNU -General Public License. This license, the GNU Lesser General Public License, -applies to certain designated libraries, and is quite different from the -ordinary General Public License. We use this license for certain libraries in -order to permit linking those libraries into non-free programs. - -When a program is linked with a library, whether statically or using a shared -library, the combination of the two is legally speaking a combined work, a -derivative of the original library. The ordinary General Public License -therefore permits such linking only if the entire combination fits its criteria -of freedom. The Lesser General Public License permits more lax criteria for -linking other code with the library. - -We call this license the "Lesser" General Public License because it does Less to -protect the user's freedom than the ordinary General Public License. It also -provides other free software developers Less of an advantage over competing -non-free programs. These disadvantages are the reason we use the ordinary -General Public License for many libraries. However, the Lesser license provides -advantages in certain special circumstances. - -For example, on rare occasions, there may be a special need to encourage the -widest possible use of a certain library, so that it becomes a de-facto -standard. To achieve this, non-free programs must be allowed to use the library. -A more frequent case is that a free library does the same job as widely used -non-free libraries. In this case, there is little to gain by limiting the free -library to free software only, so we use the Lesser General Public License. - -In other cases, permission to use a particular library in non-free programs -enables a greater number of people to use a large body of free software. For -example, permission to use the GNU C Library in non-free programs enables many -more people to use the whole GNU operating system, as well as its variant, the -GNU/Linux operating system. - -Although the Lesser General Public License is Less protective of the users' -freedom, it does ensure that the user of a program that is linked with the -Library has the freedom and the wherewithal to run that program using a modified -version of the Library. - -The precise terms and conditions for copying, distribution and modification -follow. Pay close attention to the difference between a "work based on the -library" and a "work that uses the library". The former contains code derived -from the library, whereas the latter must be combined with the library in order -to run. -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - -0. This License Agreement applies to any software library or other program which -contains a notice placed by the copyright holder or other authorized party -saying it may be distributed under the terms of this Lesser General Public -License (also called "this License"). Each licensee is addressed as "you". - -A "library" means a collection of software functions and/or data prepared so as -to be conveniently linked with application programs (which use some of those -functions and data) to form executables. - -The "Library", below, refers to any such software library or work which has been -distributed under these terms. A "work based on the Library" means either the -Library or any derivative work under copyright law: that is to say, a work -containing the Library or a portion of it, either verbatim or with modifications -and/or translated straightforwardly into another language. (Hereinafter, -translation is included without limitation in the term "modification".) - -"Source code" for a work means the preferred form of the work for making -modifications to it. For a library, complete source code means all the source -code for all modules it contains, plus any associated interface definition -files, plus the scripts used to control compilation and installation of the -library. - -Activities other than copying, distribution and modification are not covered by -this License; they are outside its scope. The act of running a program using the -Library is not restricted, and output from such a program is covered only if its -contents constitute a work based on the Library (independent of the use of the -Library in a tool for writing it). Whether that is true depends on what the -Library does and what the program that uses the Library does. - -1. You may copy and distribute verbatim copies of the Library's complete source -code as you receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice and -disclaimer of warranty; keep intact all the notices that refer to this License -and to the absence of any warranty; and distribute a copy of this License along -with the Library. - -You may charge a fee for the physical act of transferring a copy, and you may at -your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Library or any portion of it, thus -forming a work based on the Library, and copy and distribute such modifications -or work under the terms of Section 1 above, provided that you also meet all of -these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices stating that -you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no charge to all -third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a table of -data to be supplied by an application program that uses the facility, other than -as an argument passed when the facility is invoked, then you must make a good -faith effort to ensure that, in the event an application does not supply such -function or table, the facility still operates, and performs whatever part of -its purpose remains meaningful. - - (For example, a function in a library to compute square roots has a purpose -that is entirely well-defined independent of the application. Therefore, -Subsection 2d requires that any application-supplied function or table used by -this function must be optional: if the application does not supply it, the -square root function must still compute square roots.) - - These requirements apply to the modified work as a whole. If identifiable -sections of that work are not derived from the Library, and can be reasonably -considered independent and separate works in themselves, then this License, and -its terms, do not apply to those sections when you distribute them as separate -works. But when you distribute the same sections as part of a whole which is a -work based on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the entire whole, -and thus to each and every part regardless of who wrote it. - - Thus, it is not the intent of this section to claim rights or contest your -rights to work written entirely by you; rather, the intent is to exercise the -right to control the distribution of derivative or collective works based on the -Library. - - In addition, mere aggregation of another work not based on the Library with -the Library (or with a work based on the Library) on a volume of a storage or -distribution medium does not bring the other work under the scope of this -License. - -3. You may opt to apply the terms of the ordinary GNU General Public License -instead of this License to a given copy of the Library. To do this, you must -alter all the notices that refer to this License, so that they refer to the -ordinary GNU General Public License, version 2, instead of to this License. (If -a newer version than version 2 of the ordinary GNU General Public License has -appeared, then you can specify that version instead if you wish.) Do not make -any other change in these notices. - -Once this change is made in a given copy, it is irreversible for that copy, so -the ordinary GNU General Public License applies to all subsequent copies and -derivative works made from that copy. - -This option is useful when you wish to copy part of the code of the Library into -a program that is not a library. - -4. You may copy and distribute the Library (or a portion or derivative of it, -under Section 2) in object code or executable form under the terms of Sections 1 -and 2 above provided that you accompany it with the complete corresponding -machine-readable source code, which must be distributed under the terms of -Sections 1 and 2 above on a medium customarily used for software interchange. - -If distribution of object code is made by offering access to copy from a -designated place, then offering equivalent access to copy the source code from -the same place satisfies the requirement to distribute the source code, even -though third parties are not compelled to copy the source along with the object -code. - -5. A program that contains no derivative of any portion of the Library, but is -designed to work with the Library by being compiled or linked with it, is called -a "work that uses the Library". Such a work, in isolation, is not a derivative -work of the Library, and therefore falls outside the scope of this License. - -However, linking a "work that uses the Library" with the Library creates an -executable that is a derivative of the Library (because it contains portions of -the Library), rather than a "work that uses the library". The executable is -therefore covered by this License. Section 6 states terms for distribution of -such executables. - -When a "work that uses the Library" uses material from a header file that is -part of the Library, the object code for the work may be a derivative work of -the Library even though the source code is not. Whether this is true is -especially significant if the work can be linked without the Library, or if the -work is itself a library. The threshold for this to be true is not precisely -defined by law. - -If such an object file uses only numerical parameters, data structure layouts -and accessors, and small macros and small inline functions (ten lines or less in -length), then the use of the object file is unrestricted, regardless of whether -it is legally a derivative work. (Executables containing this object code plus -portions of the Library will still fall under Section 6.) - -Otherwise, if the work is a derivative of the Library, you may distribute the -object code for the work under the terms of Section 6. Any executables -containing that work also fall under Section 6, whether or not they are linked -directly with the Library itself. - -6. As an exception to the Sections above, you may also combine or link a "work -that uses the Library" with the Library to produce a work containing portions of -the Library, and distribute that work under terms of your choice, provided that -the terms permit modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - -You must give prominent notice with each copy of the work that the Library is -used in it and that the Library and its use are covered by this License. You -must supply a copy of this License. If the work during execution displays -copyright notices, you must include the copyright notice for the Library among -them, as well as a reference directing the user to the copy of this License. -Also, you must do one of these things: - - a) Accompany the work with the complete corresponding machine-readable -source code for the Library including whatever changes were used in the work -(which must be distributed under Sections 1 and 2 above); and, if the work is an -executable linked with the Library, with the complete machine-readable "work -that uses the Library", as object code and/or source code, so that the user can -modify the Library and then relink to produce a modified executable containing -the modified Library. (It is understood that the user who changes the contents -of definitions files in the Library will not necessarily be able to recompile -the application to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the Library. A -suitable mechanism is one that (1) uses at run time a copy of the library -already present on the user's computer system, rather than copying library -functions into the executable, and (2) will operate properly with a modified -version of the library, if the user installs one, as long as the modified -version is interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at least three years, -to give the same user the materials specified in Subsection 6a, above, for a -charge no more than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy from a -designated place, offer equivalent access to copy the above specified materials -from the same place. - - e) Verify that the user has already received a copy of these materials or -that you have already sent this user a copy. - -For an executable, the required form of the "work that uses the Library" must -include any data and utility programs needed for reproducing the executable from -it. However, as a special exception, the materials to be distributed need not -include anything that is normally distributed (in either source or binary form) -with the major components (compiler, kernel, and so on) of the operating system -on which the executable runs, unless that component itself accompanies the -executable. - -It may happen that this requirement contradicts the license restrictions of -other proprietary libraries that do not normally accompany the operating system. -Such a contradiction means you cannot use both them and the Library together in -an executable that you distribute. - -7. You may place library facilities that are a work based on the Library -side-by-side in a single library together with other library facilities not -covered by this License, and distribute such a combined library, provided that -the separate distribution of the work based on the Library and of the other -library facilities is otherwise permitted, and provided that you do these two -things: - - a) Accompany the combined library with a copy of the same work based on the -Library, uncombined with any other library facilities. This must be distributed -under the terms of the Sections above. - - b) Give prominent notice with the combined library of the fact that part of -it is a work based on the Library, and explaining where to find the accompanying -uncombined form of the same work. - -8. You may not copy, modify, sublicense, link with, or distribute the Library -except as expressly provided under this License. Any attempt otherwise to copy, -modify, sublicense, link with, or distribute the Library is void, and will -automatically terminate your rights under this License. However, parties who -have received copies, or rights, from you under this License will not have their -licenses terminated so long as such parties remain in full compliance. - -9. You are not required to accept this License, since you have not signed it. -However, nothing else grants you permission to modify or distribute the Library -or its derivative works. These actions are prohibited by law if you do not -accept this License. Therefore, by modifying or distributing the Library (or any -work based on the Library), you indicate your acceptance of this License to do -so, and all its terms and conditions for copying, distributing or modifying the -Library or works based on it. - -10. Each time you redistribute the Library (or any work based on the Library), -the recipient automatically receives a license from the original licensor to -copy, distribute, link with or modify the Library subject to these terms and -conditions. You may not impose any further restrictions on the recipients' -exercise of the rights granted herein. You are not responsible for enforcing -compliance by third parties with this License. - -11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), conditions -are imposed on you (whether by court order, agreement or otherwise) that -contradict the conditions of this License, they do not excuse you from the -conditions of this License. If you cannot distribute so as to satisfy -simultaneously your obligations under this License and any other pertinent -obligations, then as a consequence you may not distribute the Library at all. -For example, if a patent license would not permit royalty-free redistribution of -the Library by all those who receive copies directly or indirectly through you, -then the only way you could satisfy both it and this License would be to refrain -entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, and -the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or -other property right claims or to contest validity of any such claims; this -section has the sole purpose of protecting the integrity of the free software -distribution system which is implemented by public license practices. Many -people have made generous contributions to the wide range of software -distributed through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing to -distribute software through any other system and a licensee cannot impose that -choice. - -This section is intended to make thoroughly clear what is believed to be a -consequence of the rest of this License. - -12. If the distribution and/or use of the Library is restricted in certain -countries either by patents or by copyrighted interfaces, the original copyright -holder who places the Library under this License may add an explicit -geographical distribution limitation excluding those countries, so that -distribution is permitted only in or among countries not thus excluded. In such -case, this License incorporates the limitation as if written in the body of this -License. - -13. The Free Software Foundation may publish revised and/or new versions of the -Lesser General Public License from time to time. Such new versions will be -similar in spirit to the present version, but may differ in detail to address -new problems or concerns. - -Each version is given a distinguishing version number. If the Library specifies -a version number of this License which applies to it and "any later version", -you have the option of following the terms and conditions either of that version -or of any later version published by the Free Software Foundation. If the -Library does not specify a license version number, you may choose any version -ever published by the Free Software Foundation. - -14. If you wish to incorporate parts of the Library into other free programs -whose distribution conditions are incompatible with these, write to the author -to ask for permission. For software which is copyrighted by the Free Software -Foundation, write to the Free Software Foundation; we sometimes make exceptions -for this. Our decision will be guided by the two goals of preserving the free -status of all derivatives of our free software and of promoting the sharing and -reuse of software generally. - -NO WARRANTY - -15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE -LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED -IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS -IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT -NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL -ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE -LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, -SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY -TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF -THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER -PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -END OF TERMS AND CONDITIONS -How to Apply These Terms to Your New Libraries -If you develop a new library, and you want it to be of the greatest possible use -to the public, we recommend making it free software that everyone can -redistribute and change. You can do so by permitting redistribution under these -terms (or, alternatively, under the terms of the ordinary General Public -License). - -To apply these terms, attach the following notices to the library. It is safest -to attach them to the start of each source file to most effectively convey the -exclusion of warranty; and each file should have at least the "copyright" line -and a pointer to where the full notice is found. - - one line to give the library's name and an idea of what it does. - Copyright (C) year name of author - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your school, -if any, to sign a "copyright disclaimer" for the library, if necessary. Here is -a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in - the library `Frob' (a library for tweaking knobs) written - by James Random Hacker. - - signature of Ty Coon, 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! +GNU Lesser General Public License + +Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + [This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + +Preamble + +The licenses for most software are designed to take away your freedom to share +and change it. By contrast, the GNU General Public Licenses are intended to +guarantee your freedom to share and change free software--to make sure the +software is free for all its users. + +This license, the Lesser General Public License, applies to some specially +designated software packages--typically libraries--of the Free Software +Foundation and other authors who decide to use it. You can use it too, but we +suggest you first think carefully about whether this license or the ordinary +General Public License is the better strategy to use in any particular case, +based on the explanations below. + +When we speak of free software, we are referring to freedom of use, not price. +Our General Public Licenses are designed to make sure that you have the freedom +to distribute copies of free software (and charge for this service if you wish); +that you receive source code or can get it if you want it; that you can change +the software and use pieces of it in new free programs; and that you are +informed that you can do these things. + +To protect your rights, we need to make restrictions that forbid distributors to +deny you these rights or to ask you to surrender these rights. These +restrictions translate to certain responsibilities for you if you distribute +copies of the library or if you modify it. + +For example, if you distribute copies of the library, whether gratis or for a +fee, you must give the recipients all the rights that we gave you. You must make +sure that they, too, receive or can get the source code. If you link other code +with the library, you must provide complete object files to the recipients, so +that they can relink them with the library after making changes to the library +and recompiling it. And you must show them these terms so they know their +rights. + +We protect your rights with a two-step method: (1) we copyright the library, and +(2) we offer you this license, which gives you legal permission to copy, +distribute and/or modify the library. + +To protect each distributor, we want to make it very clear that there is no +warranty for the free library. Also, if the library is modified by someone else +and passed on, the recipients should know that what they have is not the +original version, so that the original author's reputation will not be affected +by problems that might be introduced by others. + +Finally, software patents pose a constant threat to the existence of any free +program. We wish to make sure that a company cannot effectively restrict the +users of a free program by obtaining a restrictive license from a patent holder. +Therefore, we insist that any patent license obtained for a version of the +library must be consistent with the full freedom of use specified in this +license. + +Most GNU software, including some libraries, is covered by the ordinary GNU +General Public License. This license, the GNU Lesser General Public License, +applies to certain designated libraries, and is quite different from the +ordinary General Public License. We use this license for certain libraries in +order to permit linking those libraries into non-free programs. + +When a program is linked with a library, whether statically or using a shared +library, the combination of the two is legally speaking a combined work, a +derivative of the original library. The ordinary General Public License +therefore permits such linking only if the entire combination fits its criteria +of freedom. The Lesser General Public License permits more lax criteria for +linking other code with the library. + +We call this license the "Lesser" General Public License because it does Less to +protect the user's freedom than the ordinary General Public License. It also +provides other free software developers Less of an advantage over competing +non-free programs. These disadvantages are the reason we use the ordinary +General Public License for many libraries. However, the Lesser license provides +advantages in certain special circumstances. + +For example, on rare occasions, there may be a special need to encourage the +widest possible use of a certain library, so that it becomes a de-facto +standard. To achieve this, non-free programs must be allowed to use the library. +A more frequent case is that a free library does the same job as widely used +non-free libraries. In this case, there is little to gain by limiting the free +library to free software only, so we use the Lesser General Public License. + +In other cases, permission to use a particular library in non-free programs +enables a greater number of people to use a large body of free software. For +example, permission to use the GNU C Library in non-free programs enables many +more people to use the whole GNU operating system, as well as its variant, the +GNU/Linux operating system. + +Although the Lesser General Public License is Less protective of the users' +freedom, it does ensure that the user of a program that is linked with the +Library has the freedom and the wherewithal to run that program using a modified +version of the Library. + +The precise terms and conditions for copying, distribution and modification +follow. Pay close attention to the difference between a "work based on the +library" and a "work that uses the library". The former contains code derived +from the library, whereas the latter must be combined with the library in order +to run. +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License Agreement applies to any software library or other program which +contains a notice placed by the copyright holder or other authorized party +saying it may be distributed under the terms of this Lesser General Public +License (also called "this License"). Each licensee is addressed as "you". + +A "library" means a collection of software functions and/or data prepared so as +to be conveniently linked with application programs (which use some of those +functions and data) to form executables. + +The "Library", below, refers to any such software library or work which has been +distributed under these terms. A "work based on the Library" means either the +Library or any derivative work under copyright law: that is to say, a work +containing the Library or a portion of it, either verbatim or with modifications +and/or translated straightforwardly into another language. (Hereinafter, +translation is included without limitation in the term "modification".) + +"Source code" for a work means the preferred form of the work for making +modifications to it. For a library, complete source code means all the source +code for all modules it contains, plus any associated interface definition +files, plus the scripts used to control compilation and installation of the +library. + +Activities other than copying, distribution and modification are not covered by +this License; they are outside its scope. The act of running a program using the +Library is not restricted, and output from such a program is covered only if its +contents constitute a work based on the Library (independent of the use of the +Library in a tool for writing it). Whether that is true depends on what the +Library does and what the program that uses the Library does. + +1. You may copy and distribute verbatim copies of the Library's complete source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this License +and to the absence of any warranty; and distribute a copy of this License along +with the Library. + +You may charge a fee for the physical act of transferring a copy, and you may at +your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Library or any portion of it, thus +forming a work based on the Library, and copy and distribute such modifications +or work under the terms of Section 1 above, provided that you also meet all of +these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices stating that +you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no charge to all +third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a table of +data to be supplied by an application program that uses the facility, other than +as an argument passed when the facility is invoked, then you must make a good +faith effort to ensure that, in the event an application does not supply such +function or table, the facility still operates, and performs whatever part of +its purpose remains meaningful. + + (For example, a function in a library to compute square roots has a purpose +that is entirely well-defined independent of the application. Therefore, +Subsection 2d requires that any application-supplied function or table used by +this function must be optional: if the application does not supply it, the +square root function must still compute square roots.) + + These requirements apply to the modified work as a whole. If identifiable +sections of that work are not derived from the Library, and can be reasonably +considered independent and separate works in themselves, then this License, and +its terms, do not apply to those sections when you distribute them as separate +works. But when you distribute the same sections as part of a whole which is a +work based on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the entire whole, +and thus to each and every part regardless of who wrote it. + + Thus, it is not the intent of this section to claim rights or contest your +rights to work written entirely by you; rather, the intent is to exercise the +right to control the distribution of derivative or collective works based on the +Library. + + In addition, mere aggregation of another work not based on the Library with +the Library (or with a work based on the Library) on a volume of a storage or +distribution medium does not bring the other work under the scope of this +License. + +3. You may opt to apply the terms of the ordinary GNU General Public License +instead of this License to a given copy of the Library. To do this, you must +alter all the notices that refer to this License, so that they refer to the +ordinary GNU General Public License, version 2, instead of to this License. (If +a newer version than version 2 of the ordinary GNU General Public License has +appeared, then you can specify that version instead if you wish.) Do not make +any other change in these notices. + +Once this change is made in a given copy, it is irreversible for that copy, so +the ordinary GNU General Public License applies to all subsequent copies and +derivative works made from that copy. + +This option is useful when you wish to copy part of the code of the Library into +a program that is not a library. + +4. You may copy and distribute the Library (or a portion or derivative of it, +under Section 2) in object code or executable form under the terms of Sections 1 +and 2 above provided that you accompany it with the complete corresponding +machine-readable source code, which must be distributed under the terms of +Sections 1 and 2 above on a medium customarily used for software interchange. + +If distribution of object code is made by offering access to copy from a +designated place, then offering equivalent access to copy the source code from +the same place satisfies the requirement to distribute the source code, even +though third parties are not compelled to copy the source along with the object +code. + +5. A program that contains no derivative of any portion of the Library, but is +designed to work with the Library by being compiled or linked with it, is called +a "work that uses the Library". Such a work, in isolation, is not a derivative +work of the Library, and therefore falls outside the scope of this License. + +However, linking a "work that uses the Library" with the Library creates an +executable that is a derivative of the Library (because it contains portions of +the Library), rather than a "work that uses the library". The executable is +therefore covered by this License. Section 6 states terms for distribution of +such executables. + +When a "work that uses the Library" uses material from a header file that is +part of the Library, the object code for the work may be a derivative work of +the Library even though the source code is not. Whether this is true is +especially significant if the work can be linked without the Library, or if the +work is itself a library. The threshold for this to be true is not precisely +defined by law. + +If such an object file uses only numerical parameters, data structure layouts +and accessors, and small macros and small inline functions (ten lines or less in +length), then the use of the object file is unrestricted, regardless of whether +it is legally a derivative work. (Executables containing this object code plus +portions of the Library will still fall under Section 6.) + +Otherwise, if the work is a derivative of the Library, you may distribute the +object code for the work under the terms of Section 6. Any executables +containing that work also fall under Section 6, whether or not they are linked +directly with the Library itself. + +6. As an exception to the Sections above, you may also combine or link a "work +that uses the Library" with the Library to produce a work containing portions of +the Library, and distribute that work under terms of your choice, provided that +the terms permit modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + +You must give prominent notice with each copy of the work that the Library is +used in it and that the Library and its use are covered by this License. You +must supply a copy of this License. If the work during execution displays +copyright notices, you must include the copyright notice for the Library among +them, as well as a reference directing the user to the copy of this License. +Also, you must do one of these things: + + a) Accompany the work with the complete corresponding machine-readable +source code for the Library including whatever changes were used in the work +(which must be distributed under Sections 1 and 2 above); and, if the work is an +executable linked with the Library, with the complete machine-readable "work +that uses the Library", as object code and/or source code, so that the user can +modify the Library and then relink to produce a modified executable containing +the modified Library. (It is understood that the user who changes the contents +of definitions files in the Library will not necessarily be able to recompile +the application to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the Library. A +suitable mechanism is one that (1) uses at run time a copy of the library +already present on the user's computer system, rather than copying library +functions into the executable, and (2) will operate properly with a modified +version of the library, if the user installs one, as long as the modified +version is interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at least three years, +to give the same user the materials specified in Subsection 6a, above, for a +charge no more than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy from a +designated place, offer equivalent access to copy the above specified materials +from the same place. + + e) Verify that the user has already received a copy of these materials or +that you have already sent this user a copy. + +For an executable, the required form of the "work that uses the Library" must +include any data and utility programs needed for reproducing the executable from +it. However, as a special exception, the materials to be distributed need not +include anything that is normally distributed (in either source or binary form) +with the major components (compiler, kernel, and so on) of the operating system +on which the executable runs, unless that component itself accompanies the +executable. + +It may happen that this requirement contradicts the license restrictions of +other proprietary libraries that do not normally accompany the operating system. +Such a contradiction means you cannot use both them and the Library together in +an executable that you distribute. + +7. You may place library facilities that are a work based on the Library +side-by-side in a single library together with other library facilities not +covered by this License, and distribute such a combined library, provided that +the separate distribution of the work based on the Library and of the other +library facilities is otherwise permitted, and provided that you do these two +things: + + a) Accompany the combined library with a copy of the same work based on the +Library, uncombined with any other library facilities. This must be distributed +under the terms of the Sections above. + + b) Give prominent notice with the combined library of the fact that part of +it is a work based on the Library, and explaining where to find the accompanying +uncombined form of the same work. + +8. You may not copy, modify, sublicense, link with, or distribute the Library +except as expressly provided under this License. Any attempt otherwise to copy, +modify, sublicense, link with, or distribute the Library is void, and will +automatically terminate your rights under this License. However, parties who +have received copies, or rights, from you under this License will not have their +licenses terminated so long as such parties remain in full compliance. + +9. You are not required to accept this License, since you have not signed it. +However, nothing else grants you permission to modify or distribute the Library +or its derivative works. These actions are prohibited by law if you do not +accept this License. Therefore, by modifying or distributing the Library (or any +work based on the Library), you indicate your acceptance of this License to do +so, and all its terms and conditions for copying, distributing or modifying the +Library or works based on it. + +10. Each time you redistribute the Library (or any work based on the Library), +the recipient automatically receives a license from the original licensor to +copy, distribute, link with or modify the Library subject to these terms and +conditions. You may not impose any further restrictions on the recipients' +exercise of the rights granted herein. You are not responsible for enforcing +compliance by third parties with this License. + +11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), conditions +are imposed on you (whether by court order, agreement or otherwise) that +contradict the conditions of this License, they do not excuse you from the +conditions of this License. If you cannot distribute so as to satisfy +simultaneously your obligations under this License and any other pertinent +obligations, then as a consequence you may not distribute the Library at all. +For example, if a patent license would not permit royalty-free redistribution of +the Library by all those who receive copies directly or indirectly through you, +then the only way you could satisfy both it and this License would be to refrain +entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, and +the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents or +other property right claims or to contest validity of any such claims; this +section has the sole purpose of protecting the integrity of the free software +distribution system which is implemented by public license practices. Many +people have made generous contributions to the wide range of software +distributed through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing to +distribute software through any other system and a licensee cannot impose that +choice. + +This section is intended to make thoroughly clear what is believed to be a +consequence of the rest of this License. + +12. If the distribution and/or use of the Library is restricted in certain +countries either by patents or by copyrighted interfaces, the original copyright +holder who places the Library under this License may add an explicit +geographical distribution limitation excluding those countries, so that +distribution is permitted only in or among countries not thus excluded. In such +case, this License incorporates the limitation as if written in the body of this +License. + +13. The Free Software Foundation may publish revised and/or new versions of the +Lesser General Public License from time to time. Such new versions will be +similar in spirit to the present version, but may differ in detail to address +new problems or concerns. + +Each version is given a distinguishing version number. If the Library specifies +a version number of this License which applies to it and "any later version", +you have the option of following the terms and conditions either of that version +or of any later version published by the Free Software Foundation. If the +Library does not specify a license version number, you may choose any version +ever published by the Free Software Foundation. + +14. If you wish to incorporate parts of the Library into other free programs +whose distribution conditions are incompatible with these, write to the author +to ask for permission. For software which is copyrighted by the Free Software +Foundation, write to the Free Software Foundation; we sometimes make exceptions +for this. Our decision will be guided by the two goals of preserving the free +status of all derivatives of our free software and of promoting the sharing and +reuse of software generally. + +NO WARRANTY + +15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE +LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED +IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS +IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT +NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL +ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE +LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, +SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY +TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF +THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER +PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +END OF TERMS AND CONDITIONS +How to Apply These Terms to Your New Libraries +If you develop a new library, and you want it to be of the greatest possible use +to the public, we recommend making it free software that everyone can +redistribute and change. You can do so by permitting redistribution under these +terms (or, alternatively, under the terms of the ordinary General Public +License). + +To apply these terms, attach the following notices to the library. It is safest +to attach them to the start of each source file to most effectively convey the +exclusion of warranty; and each file should have at least the "copyright" line +and a pointer to where the full notice is found. + + one line to give the library's name and an idea of what it does. + Copyright (C) year name of author + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your school, +if any, to sign a "copyright disclaimer" for the library, if necessary. Here is +a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in + the library `Frob' (a library for tweaking knobs) written + by James Random Hacker. + + signature of Ty Coon, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/docs/release.txt b/release.txt similarity index 100% rename from docs/release.txt rename to release.txt diff --git a/build.xml b/src/build.xml similarity index 97% rename from build.xml rename to src/build.xml index 75d48239..03fb79ea 100644 --- a/build.xml +++ b/src/build.xml @@ -1,535 +1,535 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
- -
-
- -
-
- -
-
- -
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ${javadoc.doctitle} -
${javadoc.header}
- ${javadoc.bottom} -
${javadoc.footer}
- - - - - - - - - - - - -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${javadoc.doctitle} +
${javadoc.header}
+ ${javadoc.bottom} +
${javadoc.footer}
+ + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/doc-files/building.html b/src/doc-files/building.html deleted file mode 100644 index a8ca1b96..00000000 --- a/src/doc-files/building.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - How to Build the HTML Parser Libraries - - - -

How to Build the HTML Parser libraries

-

JDK

- Set up java. I won't include instructions here, just a link to the - Sun j2se site. I use version 1.5, and you - need a JDK (java development kit), not a JRE (java runtime environment).

- Test your installation by typing command:

- javac

- This should display help on the java compiler options. -

Ant

- Set up ant, the Java-based build tool from the - Apache Jakarta project. - It is kind of like Make, but without Make's wrinkles. The build.xml file the - HTML Parser uses relies on command tags available in - Ant version 1.4.1 or higher. The version currently used on the build machine - is 1.6.2. The current version of Ant is available - here.

- Basically you unzip the file into a directory and add an ANT_HOME environment - variable that points at it. Test your installation by typing the command:

- ant -help

- This should display help on ant options. -

Third Party Libraries

- Any needed third-party libraries are included in the lib directory.

- The unit test code relies on lib/junit.jar from the JUnit project. - The version used on the build machine is 3.8.1 which you can get - here. -

Sources

- The distribution zip file contains a src.jar file. If you've unpacked the - distribution this file should be in the top level directory you chose.

- Unjar this file with the command:

- jar -xf src.jar

- There should now be a build.xml in the top level directory. -

Building

- The default ant target 'htmlparser' builds everything:

- ant

- If you just want to build some of the parts see the help list:

-

ant -projecthelp
- Package        glom the release and source files into the distribution zip file
- Release        prepare the release files
- changelog      create the change log from CVS logs
- checkstyle     check source code adheres to coding standards
- clean          cleanup
- compile        compile all java files
- compilelexer   compile lexer java files
- compileparser  compile parser java files
- htmlparser     same as Package plus cleanup
- init           initialize version properties
- jar            create htmlparser.jar and htmllexer.jar
- jarlexer       create htmllexer.jar
- jarparser      create htmlparser.jar
- javadoc        create JavaDoc (API) documentation
- sources        create the source zip
- test           run the JUnit tests
- thumbelina     create thumbelina.jar
- versionSource  update the version in all java files
-  

-

Developing

- For development purposes you might want to get an Integrated Development - Environment (IDE) such as NetBeans or Eclipse. - Mount the org directory where the HTML Parser was installed along with the - junit.jar file from the lib directory, and the - tools.jar file from the java JDK lib directory - [where java is installed]/lib/tools.jar. "Build All" should work. -

CVS

- The most recent files are only available via CVS: -
-  server: cvs.htmlparser.sourceforge.net
-  repository: /cvsroot/htmlparser
-  
- For read-only access use 'pserver' and anonymous access with no password. - For commit access you'll need to set up ssh (see -an -introduction to SSH on sourceforge and -a -guide on setting up ssh keys). -

Short instructions from Karle Kaila:

-

-I have installed SSH software from www.f-secure.com
-
-I think it was something like F-Secure SSH 5.2 for Win95/98/ME/NT4.0/2000/XP Client
-
-It is a nice grapfical SSH client both for terminal use and filetransfer
-and it also contains commandline ssh2 software that CVS needs.
-
-To access CVS I first set it up with these commands
-
-set CVS_RSH=ssh2
-set CVSROOT=username@cvs.htmlparser.sourceforge.net:/cvsroot/htmlparser
-
-username = your sourceforge username
-
-In an empty directory I then can give CVS commands such as
-
-cvs chekcout htmlparser
-
-It asks for your password to sourceforge
-
-This retrieves the latest  fileversions.
-Check the CVS commands in some handbook you can find on the internet.
-The manual I found is called Version Management with CVS by Per Cederqvist et al.
-perhaps from http://www.cvshome.org
-
-Derrick says:
-I need
-CVSROOT=:ext:username@cvs.htmlparser.sourceforge.net:/cvsroot/htmlparser
-CVS_RSH=ssh
-
-

Other

- Some of the build.xml targets (like changelog) rely on Perl to execute, and - need a sourceforge login via ssh (secure shell). This is unlikely to be needed - by the casual user. - - diff --git a/src/doc-files/overview.html b/src/doc-files/overview.html deleted file mode 100644 index 4f0e7a5c..00000000 --- a/src/doc-files/overview.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - HTML Parser Libraries Overview - - -

The HTML Parser Libraries.

- These java libraries provide access to the contents of local or remote HTML - resources in a programatic way. -

Components

- The HTML Parser distribution is composed of: -
    -
  • a low level {@link org.htmlparser.lexer.Lexer lexer} that converts characters from a HTML page into a linear sequence of nodes
  • -
  • a high level {@link org.htmlparser.Parser parser} that provides a heirarchical document model of a HTML page
  • -
  • source code in the src.zip file
  • -
-

-

Getting Started

- For novice users, an introductory guide on how to set up your environment to - use the HTML Parser is provided in HTML Parser for Dummies. -

Building

- To build the HTML Parser you'll need to get the sources from the - HTML - Parser project on Sourceforge if you haven't already, and then follow the - build instructions. -

Outstanding Issues.

- Bugs are by far, the highest priority issues. Various reports of bugs related to - the HTML Parser is available from the Bug - Tracker on SourceForge. Issues related to incorrect behaviour of the - current parser should be logged and tracked using this mechanism. Please use - task lists and enhancement requests for issues that would not be considered - bugs. -

- Several task lists are used to track the items that are not percieved as bugs, - but are viewed by developers as things that need attention. The following list - summarizes the purpose and target issues for each list. -

    -
  • - Applications - Work associated with the sample applications included with - the HTML Parser download is tracked by this list. This would also include - proposals for other example applications.
  • -
  • - Release - Work to be done before a major release is tracked by this list. - Items included here must be resolved before the major release is considered - complete. This can include refactoring, code clean-up, out-of-the-box - experience work, build process fixes, platform (JDK) issues, performance - or scalability enhancements, memory usage issues and other 'quality' issues - that are not associated with a specific bug.
  • -
  • - API - Work needed to enhance or fix the parser API is tracked by this list. - Standards compliance, additional classes, method signatures, changes to - parameter types, refactoring, deprecation, new or enhanced constructors, and - other programatic interface issues would fall into this category. This list - should be limited to those changes that could impact the developer community - that relies on existing behaviour from the parser.
  • -
  • - Documentation - Work associated with documenting the parser and it's - example code and sample applications is tracked by this list. Javadocs, the - web site and Wiki, Sourceforge site maintenance, mailing lists, forums, - project documentation and other developer visible reference material would all - fall under this category.
  • -
-

- The - Request For Enhancement list contains items that are proposed for future versions - of the parser. Users may add to this list what they feel are extensions beyond - simple bug fixing. Some user entered bugs are also transferred to this list if - the scope of the fix would be too significant a change for the current - version, or involve API changes that need to be vetted against the current - user community. -

Mailing Lists.

- If you want to be notified when new releases of HTML Parser are available, join the - HTML Parser Announcement List.
- If you have questions about the usage of the parser, join the - HTML Parser User List.
- If you want to join as a developer, please sign up on the - HTML Parser Developer List - - diff --git a/src/doc-files/using.html b/src/doc-files/using.html deleted file mode 100644 index 2be8b71a..00000000 --- a/src/doc-files/using.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - How to Use the HTML Parser Libraries - - - -

How to Use the HTML Parser libraries

-

Step 1: Java

- You should make sure that a Java development system (JDK) is installed, not - just a Java runtime (JRE). If you are working in an IDE (Integrated - Development Environment) this is usually taken care of for you. If you are - using just a command line, should see help information when you type: -
-  javac
-  
- Java versions greater than 1.2 are supported for the parser, and Java 1.1 for - the lexer. You can check your version with the command: -
-  java -version
-  
- If you are using Java 5, you may need to specify option "-source 1.3" to avoid - some warnings. -

Step 2: Setting the CLASSPATH

- To use the HTML Parser you will need to add the htmlparser.jar to the classpath. - This jar includes all the files in htmllexer.jar, which is the subset of classes - used by the lexer. If you are using an IDE, you need to add the htmlparser.jar - to the list of jars/libraries used by your project. -

NetBeans

-
    -
  • Right click on your project in the Projects Window (Ctrl-1) and choose Properties.
  • -
  • In the Project Properties pane choose the Libraries view.
  • -
  • Select the Compile tab.
  • -
  • Click the Add Jar/Folder button.
  • -
  • Browse to <htmlp_dir>/lib (where where <htmlp_dir> is the - directory where you unzipped the distribution: xxx/htmlparser1_5), - select the htmlparser.jar file and click on OK.
  • -
-

Eclipse

-
    -
  • Right click on your project in the Package Explorer Window (Shift-Alt-Q + P) and choose Properties.
  • -
  • In the Properties pane choose the Java Build Path view.
  • -
  • Select the Libraries tab.
  • -
  • Click the Add External Jars button.
  • -
  • Browse to <htmlp_dir>/lib (where where <htmlp_dir> is the - directory where you unzipped the distribution: xxx/htmlparser1_5), - select the htmlparser.jar file and click on OK.
  • -
-

Command Line

- You can either add the jar to the CLASSPATH environment variable, or specify - it each time on the command line: -
Windows
-
set CLASSPATH=[htmlp_dir]\lib\htmlparser.jar;%CLASSPATH%
- where [htmlp_dir] is the directory where you unzipped the distribution: - xxx\htmlparser1_5, or use: -
javac -classpath=[htmlp_dir]\lib\htmlparser.jar  MyProgram.java
-
Linux
-
export CLASSPATH=[htmlp_dir]/lib/htmlparser.jar:$CLASSPATH
- where [htmlp_dir] is the directory where you unzipped the distribution: - xxx/htmlparser1_5, or use -
javac -classpath=[htmlp_dir]/lib/htmlparser.jar  MyProgram.java
-

Step 3: Import Necessary Classes

- Whatever classes you use from the HTML Parser libraries will need to be - imported by your program. For example, the simplest usage is: -
-    import org.htmlparser.Parser;
-    import org.htmlparser.util.NodeList;
-    import org.htmlparser.util.ParserException;
-  
-    class Test
-    {
-        public static void main (String[] args)
-        {
-            try
-            {
-                Parser parser = new Parser (args[0]);
-                NodeList list = parser.parse (null);
-                System.out.println (list.toHtml ());
-            }
-            catch (ParserException pe)
-            {
-                pe.printStackTrace ();
-            }
-        }
-    }
-  
- Note the import statements may also have been written: -
-    import org.htmlparser.*;
-    import org.htmlparser.util.*;
-  
-

Step 4: Compile & Run

- Within an IDE the compile and execute steps are usually combined. -

NetBeans

-
    -
  • From the Run menu select Run Main Project (F6).
  • -
-

Eclipse

-
    -
  • From the Run menu select Run... and browse to the Main class and click the Run button.
  • -
-

Command Line

- The above program in a file called Test.java can be compiled and run with the commands: -
Windows
-
-  javac -classpath=[htmlp_dir]\lib\htmlparser.jar  Test.java
-  java -classpath=.;[htmlp_dir]\lib\htmlparser.jar  Test.java
-  
-
Linux
-
-  javac -classpath=[htmlp_dir]/lib/htmlparser.jar  Test.java
-  java -classpath=.:[htmlp_dir]/lib/htmlparser.jar  Test.java
-  
- - diff --git a/resources/cvs2cl.pl b/src/resources/cvs2cl.pl similarity index 99% rename from resources/cvs2cl.pl rename to src/resources/cvs2cl.pl index 2f76de0e..ab272ef6 100755 --- a/resources/cvs2cl.pl +++ b/src/resources/cvs2cl.pl @@ -9,9 +9,9 @@ ### ### ############################################################## -## $Revision$ -## $Date$ -## $Author$ +## $Revision: 1.1 $ +## $Date: 2003/09/23 03:41:34 $ +## $Author: derrickoswald $ ## ## (C) 2001,2002,2003 Martyn J. Pearce , under the GNU GPL. ## (C) 1999 Karl Fogel , under the GNU GPL. @@ -82,7 +82,7 @@ my $Log_Source_Command = "cvs log"; # In case we have to print it out: -my $VERSION = '$Revision$'; +my $VERSION = '$Revision: 1.1 $'; $VERSION =~ s/\S+\s+(\S+)\s+\S+/$1/; ## Vars set by options: diff --git a/resources/htmlparser_checks.xml b/src/resources/htmlparser_checks.xml similarity index 97% rename from resources/htmlparser_checks.xml rename to src/resources/htmlparser_checks.xml index f5bf136f..b8931c7d 100644 --- a/resources/htmlparser_checks.xml +++ b/src/resources/htmlparser_checks.xml @@ -1,173 +1,173 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/inherit.gif b/src/resources/inherit.gif similarity index 100% rename from resources/inherit.gif rename to src/resources/inherit.gif diff --git a/resources/java.header b/src/resources/java.header similarity index 100% rename from resources/java.header rename to src/resources/java.header diff --git a/resources/logofiles/htmlparser2in.gif b/src/resources/logofiles/htmlparser2in.gif similarity index 100% rename from resources/logofiles/htmlparser2in.gif rename to src/resources/logofiles/htmlparser2in.gif diff --git a/resources/logofiles/htmlparser_cmyk.eps b/src/resources/logofiles/htmlparser_cmyk.eps similarity index 100% rename from resources/logofiles/htmlparser_cmyk.eps rename to src/resources/logofiles/htmlparser_cmyk.eps diff --git a/resources/logofiles/htmlparser_greyscale.eps b/src/resources/logofiles/htmlparser_greyscale.eps similarity index 100% rename from resources/logofiles/htmlparser_greyscale.eps rename to src/resources/logofiles/htmlparser_greyscale.eps diff --git a/resources/logofiles/htmlparser_pms.eps b/src/resources/logofiles/htmlparser_pms.eps similarity index 100% rename from resources/logofiles/htmlparser_pms.eps rename to src/resources/logofiles/htmlparser_pms.eps diff --git a/resources/logofiles/htmlparser_rgb_2inch.jpg b/src/resources/logofiles/htmlparser_rgb_2inch.jpg similarity index 100% rename from resources/logofiles/htmlparser_rgb_2inch.jpg rename to src/resources/logofiles/htmlparser_rgb_2inch.jpg diff --git a/resources/logofiles/htmlparser_rgb_5inch.jpg b/src/resources/logofiles/htmlparser_rgb_5inch.jpg similarity index 100% rename from resources/logofiles/htmlparser_rgb_5inch.jpg rename to src/resources/logofiles/htmlparser_rgb_5inch.jpg diff --git a/resources/stylesheet.css b/src/resources/stylesheet.css similarity index 100% rename from resources/stylesheet.css rename to src/resources/stylesheet.css diff --git a/src/org/htmlparser/Attribute.java b/src/src/org/htmlparser/Attribute.java similarity index 100% rename from src/org/htmlparser/Attribute.java rename to src/src/org/htmlparser/Attribute.java diff --git a/src/org/htmlparser/Node.java b/src/src/org/htmlparser/Node.java similarity index 100% rename from src/org/htmlparser/Node.java rename to src/src/org/htmlparser/Node.java diff --git a/src/org/htmlparser/NodeFactory.java b/src/src/org/htmlparser/NodeFactory.java similarity index 100% rename from src/org/htmlparser/NodeFactory.java rename to src/src/org/htmlparser/NodeFactory.java diff --git a/src/org/htmlparser/NodeFilter.java b/src/src/org/htmlparser/NodeFilter.java similarity index 100% rename from src/org/htmlparser/NodeFilter.java rename to src/src/org/htmlparser/NodeFilter.java diff --git a/src/org/htmlparser/Parser.java b/src/src/org/htmlparser/Parser.java similarity index 100% rename from src/org/htmlparser/Parser.java rename to src/src/org/htmlparser/Parser.java diff --git a/src/org/htmlparser/PrototypicalNodeFactory.java b/src/src/org/htmlparser/PrototypicalNodeFactory.java similarity index 100% rename from src/org/htmlparser/PrototypicalNodeFactory.java rename to src/src/org/htmlparser/PrototypicalNodeFactory.java diff --git a/src/org/htmlparser/Remark.java b/src/src/org/htmlparser/Remark.java similarity index 100% rename from src/org/htmlparser/Remark.java rename to src/src/org/htmlparser/Remark.java diff --git a/src/org/htmlparser/Tag.java b/src/src/org/htmlparser/Tag.java similarity index 100% rename from src/org/htmlparser/Tag.java rename to src/src/org/htmlparser/Tag.java diff --git a/src/org/htmlparser/Text.java b/src/src/org/htmlparser/Text.java similarity index 100% rename from src/org/htmlparser/Text.java rename to src/src/org/htmlparser/Text.java diff --git a/src/org/htmlparser/beans/BeanyBaby.form b/src/src/org/htmlparser/beans/BeanyBaby.form similarity index 100% rename from src/org/htmlparser/beans/BeanyBaby.form rename to src/src/org/htmlparser/beans/BeanyBaby.form diff --git a/src/org/htmlparser/beans/BeanyBaby.java b/src/src/org/htmlparser/beans/BeanyBaby.java similarity index 100% rename from src/org/htmlparser/beans/BeanyBaby.java rename to src/src/org/htmlparser/beans/BeanyBaby.java diff --git a/src/org/htmlparser/beans/FilterBean.java b/src/src/org/htmlparser/beans/FilterBean.java similarity index 100% rename from src/org/htmlparser/beans/FilterBean.java rename to src/src/org/htmlparser/beans/FilterBean.java diff --git a/src/org/htmlparser/beans/HTMLLinkBean.java b/src/src/org/htmlparser/beans/HTMLLinkBean.java similarity index 100% rename from src/org/htmlparser/beans/HTMLLinkBean.java rename to src/src/org/htmlparser/beans/HTMLLinkBean.java diff --git a/src/org/htmlparser/beans/HTMLTextBean.java b/src/src/org/htmlparser/beans/HTMLTextBean.java similarity index 100% rename from src/org/htmlparser/beans/HTMLTextBean.java rename to src/src/org/htmlparser/beans/HTMLTextBean.java diff --git a/src/org/htmlparser/beans/LinkBean.java b/src/src/org/htmlparser/beans/LinkBean.java similarity index 100% rename from src/org/htmlparser/beans/LinkBean.java rename to src/src/org/htmlparser/beans/LinkBean.java diff --git a/src/org/htmlparser/beans/StringBean.java b/src/src/org/htmlparser/beans/StringBean.java similarity index 100% rename from src/org/htmlparser/beans/StringBean.java rename to src/src/org/htmlparser/beans/StringBean.java diff --git a/src/org/htmlparser/beans/images/Chain16.gif b/src/src/org/htmlparser/beans/images/Chain16.gif similarity index 100% rename from src/org/htmlparser/beans/images/Chain16.gif rename to src/src/org/htmlparser/beans/images/Chain16.gif diff --git a/src/org/htmlparser/beans/images/Chain32.gif b/src/src/org/htmlparser/beans/images/Chain32.gif similarity index 100% rename from src/org/htmlparser/beans/images/Chain32.gif rename to src/src/org/htmlparser/beans/images/Chain32.gif diff --git a/src/org/htmlparser/beans/images/Knot16.gif b/src/src/org/htmlparser/beans/images/Knot16.gif similarity index 100% rename from src/org/htmlparser/beans/images/Knot16.gif rename to src/src/org/htmlparser/beans/images/Knot16.gif diff --git a/src/org/htmlparser/beans/images/Knot32.gif b/src/src/org/htmlparser/beans/images/Knot32.gif similarity index 100% rename from src/org/htmlparser/beans/images/Knot32.gif rename to src/src/org/htmlparser/beans/images/Knot32.gif diff --git a/src/org/htmlparser/beans/package.html b/src/src/org/htmlparser/beans/package.html similarity index 100% rename from src/org/htmlparser/beans/package.html rename to src/src/org/htmlparser/beans/package.html diff --git a/src/org/htmlparser/filters/AndFilter.java b/src/src/org/htmlparser/filters/AndFilter.java similarity index 100% rename from src/org/htmlparser/filters/AndFilter.java rename to src/src/org/htmlparser/filters/AndFilter.java diff --git a/src/org/htmlparser/filters/CssSelectorNodeFilter.java b/src/src/org/htmlparser/filters/CssSelectorNodeFilter.java similarity index 100% rename from src/org/htmlparser/filters/CssSelectorNodeFilter.java rename to src/src/org/htmlparser/filters/CssSelectorNodeFilter.java diff --git a/src/org/htmlparser/filters/HasAttributeFilter.java b/src/src/org/htmlparser/filters/HasAttributeFilter.java similarity index 100% rename from src/org/htmlparser/filters/HasAttributeFilter.java rename to src/src/org/htmlparser/filters/HasAttributeFilter.java diff --git a/src/org/htmlparser/filters/HasChildFilter.java b/src/src/org/htmlparser/filters/HasChildFilter.java similarity index 100% rename from src/org/htmlparser/filters/HasChildFilter.java rename to src/src/org/htmlparser/filters/HasChildFilter.java diff --git a/src/org/htmlparser/filters/HasParentFilter.java b/src/src/org/htmlparser/filters/HasParentFilter.java similarity index 100% rename from src/org/htmlparser/filters/HasParentFilter.java rename to src/src/org/htmlparser/filters/HasParentFilter.java diff --git a/src/org/htmlparser/filters/HasSiblingFilter.java b/src/src/org/htmlparser/filters/HasSiblingFilter.java similarity index 100% rename from src/org/htmlparser/filters/HasSiblingFilter.java rename to src/src/org/htmlparser/filters/HasSiblingFilter.java diff --git a/src/org/htmlparser/filters/IsEqualFilter.java b/src/src/org/htmlparser/filters/IsEqualFilter.java similarity index 100% rename from src/org/htmlparser/filters/IsEqualFilter.java rename to src/src/org/htmlparser/filters/IsEqualFilter.java diff --git a/src/org/htmlparser/filters/LinkRegexFilter.java b/src/src/org/htmlparser/filters/LinkRegexFilter.java similarity index 100% rename from src/org/htmlparser/filters/LinkRegexFilter.java rename to src/src/org/htmlparser/filters/LinkRegexFilter.java diff --git a/src/org/htmlparser/filters/LinkStringFilter.java b/src/src/org/htmlparser/filters/LinkStringFilter.java similarity index 100% rename from src/org/htmlparser/filters/LinkStringFilter.java rename to src/src/org/htmlparser/filters/LinkStringFilter.java diff --git a/src/org/htmlparser/filters/NodeClassFilter.java b/src/src/org/htmlparser/filters/NodeClassFilter.java similarity index 100% rename from src/org/htmlparser/filters/NodeClassFilter.java rename to src/src/org/htmlparser/filters/NodeClassFilter.java diff --git a/src/org/htmlparser/filters/NotFilter.java b/src/src/org/htmlparser/filters/NotFilter.java similarity index 100% rename from src/org/htmlparser/filters/NotFilter.java rename to src/src/org/htmlparser/filters/NotFilter.java diff --git a/src/org/htmlparser/filters/OrFilter.java b/src/src/org/htmlparser/filters/OrFilter.java similarity index 100% rename from src/org/htmlparser/filters/OrFilter.java rename to src/src/org/htmlparser/filters/OrFilter.java diff --git a/src/org/htmlparser/filters/RegexFilter.java b/src/src/org/htmlparser/filters/RegexFilter.java similarity index 100% rename from src/org/htmlparser/filters/RegexFilter.java rename to src/src/org/htmlparser/filters/RegexFilter.java diff --git a/src/org/htmlparser/filters/StringFilter.java b/src/src/org/htmlparser/filters/StringFilter.java similarity index 100% rename from src/org/htmlparser/filters/StringFilter.java rename to src/src/org/htmlparser/filters/StringFilter.java diff --git a/src/org/htmlparser/filters/TagNameFilter.java b/src/src/org/htmlparser/filters/TagNameFilter.java similarity index 100% rename from src/org/htmlparser/filters/TagNameFilter.java rename to src/src/org/htmlparser/filters/TagNameFilter.java diff --git a/src/org/htmlparser/filters/XorFilter.java b/src/src/org/htmlparser/filters/XorFilter.java similarity index 100% rename from src/org/htmlparser/filters/XorFilter.java rename to src/src/org/htmlparser/filters/XorFilter.java diff --git a/src/org/htmlparser/filters/package.html b/src/src/org/htmlparser/filters/package.html similarity index 100% rename from src/org/htmlparser/filters/package.html rename to src/src/org/htmlparser/filters/package.html diff --git a/src/org/htmlparser/http/ConnectionManager.java b/src/src/org/htmlparser/http/ConnectionManager.java similarity index 100% rename from src/org/htmlparser/http/ConnectionManager.java rename to src/src/org/htmlparser/http/ConnectionManager.java diff --git a/src/org/htmlparser/http/ConnectionMonitor.java b/src/src/org/htmlparser/http/ConnectionMonitor.java similarity index 100% rename from src/org/htmlparser/http/ConnectionMonitor.java rename to src/src/org/htmlparser/http/ConnectionMonitor.java diff --git a/src/org/htmlparser/http/Cookie.java b/src/src/org/htmlparser/http/Cookie.java similarity index 100% rename from src/org/htmlparser/http/Cookie.java rename to src/src/org/htmlparser/http/Cookie.java diff --git a/src/org/htmlparser/http/HttpHeader.java b/src/src/org/htmlparser/http/HttpHeader.java similarity index 100% rename from src/org/htmlparser/http/HttpHeader.java rename to src/src/org/htmlparser/http/HttpHeader.java diff --git a/src/org/htmlparser/http/package.html b/src/src/org/htmlparser/http/package.html similarity index 100% rename from src/org/htmlparser/http/package.html rename to src/src/org/htmlparser/http/package.html diff --git a/src/org/htmlparser/lexer/Cursor.java b/src/src/org/htmlparser/lexer/Cursor.java similarity index 100% rename from src/org/htmlparser/lexer/Cursor.java rename to src/src/org/htmlparser/lexer/Cursor.java diff --git a/src/org/htmlparser/lexer/InputStreamSource.java b/src/src/org/htmlparser/lexer/InputStreamSource.java similarity index 100% rename from src/org/htmlparser/lexer/InputStreamSource.java rename to src/src/org/htmlparser/lexer/InputStreamSource.java diff --git a/src/org/htmlparser/lexer/Lexer.java b/src/src/org/htmlparser/lexer/Lexer.java similarity index 100% rename from src/org/htmlparser/lexer/Lexer.java rename to src/src/org/htmlparser/lexer/Lexer.java diff --git a/src/org/htmlparser/lexer/Page.java b/src/src/org/htmlparser/lexer/Page.java similarity index 100% rename from src/org/htmlparser/lexer/Page.java rename to src/src/org/htmlparser/lexer/Page.java diff --git a/src/org/htmlparser/lexer/PageAttribute.java b/src/src/org/htmlparser/lexer/PageAttribute.java similarity index 100% rename from src/org/htmlparser/lexer/PageAttribute.java rename to src/src/org/htmlparser/lexer/PageAttribute.java diff --git a/src/org/htmlparser/lexer/PageIndex.java b/src/src/org/htmlparser/lexer/PageIndex.java similarity index 100% rename from src/org/htmlparser/lexer/PageIndex.java rename to src/src/org/htmlparser/lexer/PageIndex.java diff --git a/src/org/htmlparser/lexer/Source.java b/src/src/org/htmlparser/lexer/Source.java similarity index 100% rename from src/org/htmlparser/lexer/Source.java rename to src/src/org/htmlparser/lexer/Source.java diff --git a/src/org/htmlparser/lexer/Stream.java b/src/src/org/htmlparser/lexer/Stream.java similarity index 100% rename from src/org/htmlparser/lexer/Stream.java rename to src/src/org/htmlparser/lexer/Stream.java diff --git a/src/org/htmlparser/lexer/StringSource.java b/src/src/org/htmlparser/lexer/StringSource.java similarity index 100% rename from src/org/htmlparser/lexer/StringSource.java rename to src/src/org/htmlparser/lexer/StringSource.java diff --git a/src/org/htmlparser/lexer/package.html b/src/src/org/htmlparser/lexer/package.html similarity index 100% rename from src/org/htmlparser/lexer/package.html rename to src/src/org/htmlparser/lexer/package.html diff --git a/src/org/htmlparser/nodes/AbstractNode.java b/src/src/org/htmlparser/nodes/AbstractNode.java similarity index 100% rename from src/org/htmlparser/nodes/AbstractNode.java rename to src/src/org/htmlparser/nodes/AbstractNode.java diff --git a/src/org/htmlparser/nodes/RemarkNode.java b/src/src/org/htmlparser/nodes/RemarkNode.java similarity index 100% rename from src/org/htmlparser/nodes/RemarkNode.java rename to src/src/org/htmlparser/nodes/RemarkNode.java diff --git a/src/org/htmlparser/nodes/TagNode.java b/src/src/org/htmlparser/nodes/TagNode.java similarity index 100% rename from src/org/htmlparser/nodes/TagNode.java rename to src/src/org/htmlparser/nodes/TagNode.java diff --git a/src/org/htmlparser/nodes/TextNode.java b/src/src/org/htmlparser/nodes/TextNode.java similarity index 100% rename from src/org/htmlparser/nodes/TextNode.java rename to src/src/org/htmlparser/nodes/TextNode.java diff --git a/src/org/htmlparser/nodes/package.html b/src/src/org/htmlparser/nodes/package.html similarity index 100% rename from src/org/htmlparser/nodes/package.html rename to src/src/org/htmlparser/nodes/package.html diff --git a/src/org/htmlparser/package.html b/src/src/org/htmlparser/package.html similarity index 100% rename from src/org/htmlparser/package.html rename to src/src/org/htmlparser/package.html diff --git a/src/org/htmlparser/sax/Attributes.java b/src/src/org/htmlparser/sax/Attributes.java similarity index 100% rename from src/org/htmlparser/sax/Attributes.java rename to src/src/org/htmlparser/sax/Attributes.java diff --git a/src/org/htmlparser/sax/Feedback.java b/src/src/org/htmlparser/sax/Feedback.java similarity index 100% rename from src/org/htmlparser/sax/Feedback.java rename to src/src/org/htmlparser/sax/Feedback.java diff --git a/src/org/htmlparser/sax/Locator.java b/src/src/org/htmlparser/sax/Locator.java similarity index 100% rename from src/org/htmlparser/sax/Locator.java rename to src/src/org/htmlparser/sax/Locator.java diff --git a/src/org/htmlparser/sax/XMLReader.java b/src/src/org/htmlparser/sax/XMLReader.java similarity index 100% rename from src/org/htmlparser/sax/XMLReader.java rename to src/src/org/htmlparser/sax/XMLReader.java diff --git a/src/org/htmlparser/sax/package.html b/src/src/org/htmlparser/sax/package.html similarity index 100% rename from src/org/htmlparser/sax/package.html rename to src/src/org/htmlparser/sax/package.html diff --git a/src/org/htmlparser/scanners/CompositeTagScanner.java b/src/src/org/htmlparser/scanners/CompositeTagScanner.java similarity index 100% rename from src/org/htmlparser/scanners/CompositeTagScanner.java rename to src/src/org/htmlparser/scanners/CompositeTagScanner.java diff --git a/src/org/htmlparser/scanners/JspScanner.java b/src/src/org/htmlparser/scanners/JspScanner.java similarity index 100% rename from src/org/htmlparser/scanners/JspScanner.java rename to src/src/org/htmlparser/scanners/JspScanner.java diff --git a/src/org/htmlparser/scanners/Scanner.java b/src/src/org/htmlparser/scanners/Scanner.java similarity index 100% rename from src/org/htmlparser/scanners/Scanner.java rename to src/src/org/htmlparser/scanners/Scanner.java diff --git a/src/org/htmlparser/scanners/ScriptDecoder.java b/src/src/org/htmlparser/scanners/ScriptDecoder.java similarity index 97% rename from src/org/htmlparser/scanners/ScriptDecoder.java rename to src/src/org/htmlparser/scanners/ScriptDecoder.java index 0ca1efa7..24783db1 100644 --- a/src/org/htmlparser/scanners/ScriptDecoder.java +++ b/src/src/org/htmlparser/scanners/ScriptDecoder.java @@ -1,504 +1,504 @@ -// HTMLParser Library $Name$ - A java-based parser for HTML -// http://sourceforge.org/projects/htmlparser -// Copyright (C) 2004 Derrick Oswald -// -// Revision Control Information -// -// $Source$ -// $Author$ -// $Date$ -// $Revision$ -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// - -package org.htmlparser.scanners; - -import org.htmlparser.lexer.Cursor; -import org.htmlparser.lexer.Page; -import org.htmlparser.util.ParserException; - -/** - * Decode script. - * Script obfuscated by the Windows Script Encoder - * provided by Microsoft, is converted to plaintext. This code is based loosely - * on example code provided by MrBrownstone with changes by Joe Steele, see - * scrdec14.c. - */ -public class ScriptDecoder -{ - /** - * Termination state. - */ - public static final int STATE_DONE = 0; - - /** - * State on entry. - */ - public static final int STATE_INITIAL = 1; - - /** - * State while reading the encoded length. - */ - protected static final int STATE_LENGTH = 2; - - /** - * State when reading up to decoded text. - */ - protected static final int STATE_PREFIX = 3; - - /** - * State while decoding. - */ - protected static final int STATE_DECODE = 4; - - /** - * State when reading an escape sequence. - */ - protected static final int STATE_ESCAPE = 5; - - /** - * State when reading the checksum. - */ - protected static final int STATE_CHECKSUM = 6; - - /** - * State while exiting. - */ - protected static final int STATE_FINAL = 7; - - /** - * The state to enter when decrypting is complete. - * If this is STATE_DONE, the decryption will return with any characters - * following the encoded text still unconsumed. - * Otherwise, if this is STATE_INITIAL, the input will be exhausted and - * all following characters will be contained in the return value - * of the Decode() method. - */ - public static int LAST_STATE = STATE_DONE; - - /** - * Table of lookup choice. - * The decoding cycles between three flavours determined - * by this sequence of 64 choices, corresponding to the - * first dimension of the lookup table. - */ - protected static byte mEncodingIndex[] = - { - 1, 2, 0, 1, 2, 0, 2, 0, 0, 2, 0, 2, 1, 0, 2, 0, - 1, 0, 2, 0, 1, 1, 2, 0, 0, 2, 1, 0, 2, 0, 0, 2, - 1, 1, 0, 2, 0, 2, 0, 1, 0, 1, 1, 2, 0, 1, 0, 2, - 1, 0, 2, 0, 1, 1, 2, 0, 0, 1, 1, 2, 0, 1, 0, 2, - }; - - /** - * Two dimensional lookup table. - * The decoding uses this table to determine the plaintext for - * characters that aren't mEscaped. - */ - protected static char mLookupTable[][] = - { - { - '{', - '2', '0', '!', ')', '[', '8', '3', '=', - 'X', ':', '5', 'e', '9', '\\', 'V', 's', - 'f', 'N', 'E', 'k', 'b', 'Y', 'x', '^', - '}', 'J', 'm', 'q', 0, '`', 0, 'S', - 0, 'B', '\'', 'H', 'r', 'u', '1', '7', - 'M', 'R', '"', 'T', 'j', 'G', 'd', '-', - ' ', '', '.', 'L', ']', '~', 'l', 'o', - 'y', 't', 'C', '&', 'v', '%', '$', '+', - '(', '#', 'A', '4', '\t', '*', 'D', '?', - 'w', ';', 'U', 'i', 'a', 'c', 'P', 'g', - 'Q', 'I', 'O', 'F', 'h', '|', '6', 'p', - 'n', 'z', '/', '_', 'K', 'Z', ',', 'W', - }, - { - 'W', - '.', 'G', 'z', 'V', 'B', 'j', '/', '&', - 'I', 'A', '4', '2', '[', 'v', 'r', 'C', - '8', '9', 'p', 'E', 'h', 'q', 'O', '\t', - 'b', 'D', '#', 'u', 0, '~', 0, '^', - 0, 'w', 'J', 'a', ']', '"', 'K', 'o', - 'N', ';', 'L', 'P', 'g', '*', '}', 't', - 'T', '+', '-', ',', '0', 'n', 'k', 'f', - '5', '%', '!', 'd', 'M', 'R', 'c', '?', - '{', 'x', ')', '(', 's', 'Y', '3', '', - 'm', 'U', 'S', '|', ':', '_', 'e', 'F', - 'X', '1', 'i', 'l', 'Z', 'H', '\'', '\\', - '=', '$', 'y', '7', '`', 'Q', ' ', '6', - }, - { - 'n', - '-', 'u', 'R', '`', 'q', '^', 'I', '\\', - 'b', '}', ')', '6', ' ', '|', 'z', '', - 'k', 'c', '3', '+', 'h', 'Q', 'f', 'v', - '1', 'd', 'T', 'C', 0, ':', 0, '~', - 0, 'E', ',', '*', 't', '\'', '7', 'D', - 'y', 'Y', '/', 'o', '&', 'r', 'j', '9', - '{', '?', '8', 'w', 'g', 'S', 'G', '4', - 'x', ']', '0', '#', 'Z', '[', 'l', 'H', - 'U', 'p', 'i', '.', 'L', '!', '$', 'N', - 'P', '\t', 'V', 's', '5', 'a', 'K', 'X', - ';', 'W', '"', 'm', 'M', '%', '(', 'F', - 'J', '2', 'A', '=', '_', 'O', 'B', 'e', - }, - }; - - /** - * The base 64 decoding table. - * This array determines the value of decoded base 64 elements. - */ - protected static int mDigits[]; - static - { - mDigits = new int[0x7b]; - for (int i = 0; i < 26; i++) - { - mDigits['A' + i] = i; - mDigits['a' + i] = i + 26; - } - for (int i = 0; i < 10; i++) - mDigits['0' + i] = i + 52; - mDigits[0x2b] = '>'; - mDigits[0x2f] = '?'; - } - - /** - * The leader. - * The prefix to the encoded script is #@~^nnnnnn== where the n are the - * length digits in base64. - */ - protected static char mLeader[] = - { - '#', - '@', - '~', - '^', - }; - - /** - * The prefix. - * The prfix separates the encoded text from the length. - */ - protected static char mPrefix[] = - { - '=', - '=', - }; - - /** - * The trailer. - * The suffix to the encoded script is nnnnnn==^#~@ where the n are the - * checksum digits in base64. These characters are the part after the checksum. - */ - protected static char mTrailer[] = - { - '=', - '=', - '^', - '#', - '~', - '@', - }; - - /** - * Escape sequence characters. - */ - protected static char mEscapes[] = - { - '#', - '&', - '!', - '*', - '$', - }; - - /** - * The escaped characters corresponding to the each escape sequence. - */ - protected static char mEscaped[] = //"\r\n<>@"; - { - '\r', - '\n', - '<', - '>', - '@', - }; - - /** - * Extract the base 64 encoded number. - * This is a very limited subset of base 64 encoded characters. - * Six characters are expected. These are translated into a single long - * value. For a more complete base 64 codec see for example the base64 - * package of iHarder.net - * @param p Six base 64 encoded digits. - * @return The value of the decoded number. - */ - protected static long decodeBase64 (char[] p) - { - long ret; - - ret = 0; - - ret += (mDigits[p[0]] << 2); - ret += (mDigits[p[1]] >> 4); - ret += (mDigits[p[1]] & 0xf) << 12; - ret += ((mDigits[p[2]] >> 2) << 8); - ret += ((mDigits[p[2]] & 0x3) << 22); - ret += (mDigits[p[3]] << 16); - ret += ((mDigits[p[4]] << 2) << 24); - ret += ((mDigits[p[5]] >> 4) << 24); - - return (ret); - } - - /** - * Decode script encoded by the Microsoft obfuscator. - * @param page The source for encoded text. - * @param cursor The position at which to start decoding. - * This is advanced to the end of the encoded text. - * @return The plaintext. - * @exception ParserException If an error is discovered while decoding. - */ - public static String Decode (Page page, Cursor cursor) - throws - ParserException - { - int state; - int substate_initial; - int substate_length; - int substate_prefix; - int substate_checksum; - int substate_final; - long checksum; - long length; - char buffer[]; - buffer = new char[6]; - int index; - char character; - int input_character; - boolean found; - StringBuffer ret; - - ret = new StringBuffer (1024); - - state = STATE_INITIAL; - substate_initial = 0; - substate_length = 0; - substate_prefix = 0; - substate_checksum = 0; - substate_final = 0; - length = 0L; - checksum = 0L; - index = 0; - while (STATE_DONE != state) - { - input_character = page.getCharacter (cursor); - character = (char)input_character; - if (Page.EOF == input_character) - { - if ( (STATE_INITIAL != state) - || (0 != substate_initial) - || (0 != substate_length) - || (0 != substate_prefix) - || (0 != substate_checksum) - || (0 != substate_final)) - throw new ParserException ("illegal state for exit"); - state = STATE_DONE; - } - else - switch (state) - { - case STATE_INITIAL: - if (character == mLeader[substate_initial]) - { - substate_initial++; - if (substate_initial == mLeader.length) - { - substate_initial = 0; - state = STATE_LENGTH; - } - } - else - { - // oops, flush - for (int k = 0; 0 < substate_initial; k++) - { - ret.append (mLeader[k++]); - substate_initial--; - } - ret.append (character); - } - break; - - case STATE_LENGTH: - buffer[substate_length] = character; - substate_length++; - if (substate_length >= buffer.length) - { - length = decodeBase64 (buffer); - if (0 > length) - throw new ParserException ("illegal length: " + length); - substate_length = 0; - state = STATE_PREFIX; - } - break; - - case STATE_PREFIX: - if (character == mPrefix[substate_prefix]) - substate_prefix++; - else - throw new ParserException ("illegal character encountered: " + (int)character + " ('" + character + "')"); - if (substate_prefix >= mPrefix.length) - { - substate_prefix = 0; - state = STATE_DECODE; - } - break; - - case STATE_DECODE: - if ('@' == character) - state = STATE_ESCAPE; - else - { - if (input_character < 0x80) - { - if (input_character == '\t') - input_character = 0; - else if (input_character >= ' ') - input_character -= ' ' - 1; - else - throw new ParserException ("illegal encoded character: " + input_character + " ('" + character + "')"); - char ch = mLookupTable[mEncodingIndex[index % 64]][input_character]; - ret.append (ch); - checksum += ch; - index++; - } - else - ret.append (character); - } - length--; - if (0 == length) - { - index = 0; - state = STATE_CHECKSUM; - } - break; - - case STATE_ESCAPE: - found = false; - for (int i = 0; i < mEscapes.length; i++) - if (character == mEscapes[i]) - { - found = true; - character = mEscaped[i]; - } - if (!found) - throw new ParserException ("unexpected escape character: " + (int)character + " ('" + character + "')"); - ret.append (character); - checksum += character; - index++; - state = STATE_DECODE; - length--; - if (0 == length) - { - index = 0; - state = STATE_CHECKSUM; - } - break; - - case STATE_CHECKSUM: - buffer[substate_checksum] = character; - substate_checksum++; - if (substate_checksum >= buffer.length) - { - long check = decodeBase64 (buffer); - if (check != checksum) - throw new ParserException ("incorrect checksum, expected " + check + ", calculated " + checksum); - checksum = 0; - substate_checksum = 0; - state = STATE_FINAL; - } - break; - - case STATE_FINAL: - if (character == mTrailer[substate_final]) - substate_final++; - else - throw new ParserException ("illegal character encountered: " + (int)character + " ('" + character + "')"); - if (substate_final >= mTrailer.length) - { - substate_final = 0; - state = LAST_STATE; - } - break; - default: - throw new ParserException ("invalid state: " + state); - } - } - - return (ret.toString ()); - } - -// /** -// * Example mainline for decrypting script. -// * Change a file with encrypted script into one without. -// * WARNING: This does not preserve DOS type line endings. -// * @param args Command line arguments. Two file names, input and output. -// * Optionally, the character set to use as a third argument. -// * @exception IOException If the input file doesn't exist, or the output -// * file cannot be created. -// * @exception ParserException If there is a decryption problem. -// */ -// public static void main (String[] args) -// throws -// IOException, -// ParserException -// { -// String charset; -// FileInputStream in; -// Page page; -// Cursor cursor; -// String string; -// int ret; -// -// if (args.length < 2) -// { -// System.out.println ("Usage: java org.htmlparser.scanners.ScriptDecoder [charset]"); -// ret = 1; -// } -// else -// { -// if (2 < args.length) -// charset = args[2]; -// else -// charset = "ISO-8859-1"; -// in = new FileInputStream (args[0]); -// page = new Page (in, charset); -// cursor = new Cursor (page, 0); -// ScriptDecoder.LAST_STATE = STATE_INITIAL; -// string = ScriptDecoder.Decode (page, cursor); -// in.close (); -// -// FileOutputStream outfile = new FileOutputStream (args[1]); -// outfile.write (string.getBytes (charset)); -// outfile.close (); -// ret = (0 != string.length ()) ? 0 : 1; -// } -// -// System.exit (ret); -// } -} +// HTMLParser Library $Name$ - A java-based parser for HTML +// http://sourceforge.org/projects/htmlparser +// Copyright (C) 2004 Derrick Oswald +// +// Revision Control Information +// +// $Source$ +// $Author$ +// $Date$ +// $Revision$ +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// + +package org.htmlparser.scanners; + +import org.htmlparser.lexer.Cursor; +import org.htmlparser.lexer.Page; +import org.htmlparser.util.ParserException; + +/** + * Decode script. + * Script obfuscated by the Windows Script Encoder + * provided by Microsoft, is converted to plaintext. This code is based loosely + * on example code provided by MrBrownstone with changes by Joe Steele, see + * scrdec14.c. + */ +public class ScriptDecoder +{ + /** + * Termination state. + */ + public static final int STATE_DONE = 0; + + /** + * State on entry. + */ + public static final int STATE_INITIAL = 1; + + /** + * State while reading the encoded length. + */ + protected static final int STATE_LENGTH = 2; + + /** + * State when reading up to decoded text. + */ + protected static final int STATE_PREFIX = 3; + + /** + * State while decoding. + */ + protected static final int STATE_DECODE = 4; + + /** + * State when reading an escape sequence. + */ + protected static final int STATE_ESCAPE = 5; + + /** + * State when reading the checksum. + */ + protected static final int STATE_CHECKSUM = 6; + + /** + * State while exiting. + */ + protected static final int STATE_FINAL = 7; + + /** + * The state to enter when decrypting is complete. + * If this is STATE_DONE, the decryption will return with any characters + * following the encoded text still unconsumed. + * Otherwise, if this is STATE_INITIAL, the input will be exhausted and + * all following characters will be contained in the return value + * of the Decode() method. + */ + public static int LAST_STATE = STATE_DONE; + + /** + * Table of lookup choice. + * The decoding cycles between three flavours determined + * by this sequence of 64 choices, corresponding to the + * first dimension of the lookup table. + */ + protected static byte mEncodingIndex[] = + { + 1, 2, 0, 1, 2, 0, 2, 0, 0, 2, 0, 2, 1, 0, 2, 0, + 1, 0, 2, 0, 1, 1, 2, 0, 0, 2, 1, 0, 2, 0, 0, 2, + 1, 1, 0, 2, 0, 2, 0, 1, 0, 1, 1, 2, 0, 1, 0, 2, + 1, 0, 2, 0, 1, 1, 2, 0, 0, 1, 1, 2, 0, 1, 0, 2, + }; + + /** + * Two dimensional lookup table. + * The decoding uses this table to determine the plaintext for + * characters that aren't mEscaped. + */ + protected static char mLookupTable[][] = + { + { + '{', + '2', '0', '!', ')', '[', '8', '3', '=', + 'X', ':', '5', 'e', '9', '\\', 'V', 's', + 'f', 'N', 'E', 'k', 'b', 'Y', 'x', '^', + '}', 'J', 'm', 'q', 0, '`', 0, 'S', + 0, 'B', '\'', 'H', 'r', 'u', '1', '7', + 'M', 'R', '"', 'T', 'j', 'G', 'd', '-', + ' ', '', '.', 'L', ']', '~', 'l', 'o', + 'y', 't', 'C', '&', 'v', '%', '$', '+', + '(', '#', 'A', '4', '\t', '*', 'D', '?', + 'w', ';', 'U', 'i', 'a', 'c', 'P', 'g', + 'Q', 'I', 'O', 'F', 'h', '|', '6', 'p', + 'n', 'z', '/', '_', 'K', 'Z', ',', 'W', + }, + { + 'W', + '.', 'G', 'z', 'V', 'B', 'j', '/', '&', + 'I', 'A', '4', '2', '[', 'v', 'r', 'C', + '8', '9', 'p', 'E', 'h', 'q', 'O', '\t', + 'b', 'D', '#', 'u', 0, '~', 0, '^', + 0, 'w', 'J', 'a', ']', '"', 'K', 'o', + 'N', ';', 'L', 'P', 'g', '*', '}', 't', + 'T', '+', '-', ',', '0', 'n', 'k', 'f', + '5', '%', '!', 'd', 'M', 'R', 'c', '?', + '{', 'x', ')', '(', 's', 'Y', '3', '', + 'm', 'U', 'S', '|', ':', '_', 'e', 'F', + 'X', '1', 'i', 'l', 'Z', 'H', '\'', '\\', + '=', '$', 'y', '7', '`', 'Q', ' ', '6', + }, + { + 'n', + '-', 'u', 'R', '`', 'q', '^', 'I', '\\', + 'b', '}', ')', '6', ' ', '|', 'z', '', + 'k', 'c', '3', '+', 'h', 'Q', 'f', 'v', + '1', 'd', 'T', 'C', 0, ':', 0, '~', + 0, 'E', ',', '*', 't', '\'', '7', 'D', + 'y', 'Y', '/', 'o', '&', 'r', 'j', '9', + '{', '?', '8', 'w', 'g', 'S', 'G', '4', + 'x', ']', '0', '#', 'Z', '[', 'l', 'H', + 'U', 'p', 'i', '.', 'L', '!', '$', 'N', + 'P', '\t', 'V', 's', '5', 'a', 'K', 'X', + ';', 'W', '"', 'm', 'M', '%', '(', 'F', + 'J', '2', 'A', '=', '_', 'O', 'B', 'e', + }, + }; + + /** + * The base 64 decoding table. + * This array determines the value of decoded base 64 elements. + */ + protected static int mDigits[]; + static + { + mDigits = new int[0x7b]; + for (int i = 0; i < 26; i++) + { + mDigits['A' + i] = i; + mDigits['a' + i] = i + 26; + } + for (int i = 0; i < 10; i++) + mDigits['0' + i] = i + 52; + mDigits[0x2b] = '>'; + mDigits[0x2f] = '?'; + } + + /** + * The leader. + * The prefix to the encoded script is #@~^nnnnnn== where the n are the + * length digits in base64. + */ + protected static char mLeader[] = + { + '#', + '@', + '~', + '^', + }; + + /** + * The prefix. + * The prfix separates the encoded text from the length. + */ + protected static char mPrefix[] = + { + '=', + '=', + }; + + /** + * The trailer. + * The suffix to the encoded script is nnnnnn==^#~@ where the n are the + * checksum digits in base64. These characters are the part after the checksum. + */ + protected static char mTrailer[] = + { + '=', + '=', + '^', + '#', + '~', + '@', + }; + + /** + * Escape sequence characters. + */ + protected static char mEscapes[] = + { + '#', + '&', + '!', + '*', + '$', + }; + + /** + * The escaped characters corresponding to the each escape sequence. + */ + protected static char mEscaped[] = //"\r\n<>@"; + { + '\r', + '\n', + '<', + '>', + '@', + }; + + /** + * Extract the base 64 encoded number. + * This is a very limited subset of base 64 encoded characters. + * Six characters are expected. These are translated into a single long + * value. For a more complete base 64 codec see for example the base64 + * package of iHarder.net + * @param p Six base 64 encoded digits. + * @return The value of the decoded number. + */ + protected static long decodeBase64 (char[] p) + { + long ret; + + ret = 0; + + ret += (mDigits[p[0]] << 2); + ret += (mDigits[p[1]] >> 4); + ret += (mDigits[p[1]] & 0xf) << 12; + ret += ((mDigits[p[2]] >> 2) << 8); + ret += ((mDigits[p[2]] & 0x3) << 22); + ret += (mDigits[p[3]] << 16); + ret += ((mDigits[p[4]] << 2) << 24); + ret += ((mDigits[p[5]] >> 4) << 24); + + return (ret); + } + + /** + * Decode script encoded by the Microsoft obfuscator. + * @param page The source for encoded text. + * @param cursor The position at which to start decoding. + * This is advanced to the end of the encoded text. + * @return The plaintext. + * @exception ParserException If an error is discovered while decoding. + */ + public static String Decode (Page page, Cursor cursor) + throws + ParserException + { + int state; + int substate_initial; + int substate_length; + int substate_prefix; + int substate_checksum; + int substate_final; + long checksum; + long length; + char buffer[]; + buffer = new char[6]; + int index; + char character; + int input_character; + boolean found; + StringBuffer ret; + + ret = new StringBuffer (1024); + + state = STATE_INITIAL; + substate_initial = 0; + substate_length = 0; + substate_prefix = 0; + substate_checksum = 0; + substate_final = 0; + length = 0L; + checksum = 0L; + index = 0; + while (STATE_DONE != state) + { + input_character = page.getCharacter (cursor); + character = (char)input_character; + if (Page.EOF == input_character) + { + if ( (STATE_INITIAL != state) + || (0 != substate_initial) + || (0 != substate_length) + || (0 != substate_prefix) + || (0 != substate_checksum) + || (0 != substate_final)) + throw new ParserException ("illegal state for exit"); + state = STATE_DONE; + } + else + switch (state) + { + case STATE_INITIAL: + if (character == mLeader[substate_initial]) + { + substate_initial++; + if (substate_initial == mLeader.length) + { + substate_initial = 0; + state = STATE_LENGTH; + } + } + else + { + // oops, flush + for (int k = 0; 0 < substate_initial; k++) + { + ret.append (mLeader[k++]); + substate_initial--; + } + ret.append (character); + } + break; + + case STATE_LENGTH: + buffer[substate_length] = character; + substate_length++; + if (substate_length >= buffer.length) + { + length = decodeBase64 (buffer); + if (0 > length) + throw new ParserException ("illegal length: " + length); + substate_length = 0; + state = STATE_PREFIX; + } + break; + + case STATE_PREFIX: + if (character == mPrefix[substate_prefix]) + substate_prefix++; + else + throw new ParserException ("illegal character encountered: " + (int)character + " ('" + character + "')"); + if (substate_prefix >= mPrefix.length) + { + substate_prefix = 0; + state = STATE_DECODE; + } + break; + + case STATE_DECODE: + if ('@' == character) + state = STATE_ESCAPE; + else + { + if (input_character < 0x80) + { + if (input_character == '\t') + input_character = 0; + else if (input_character >= ' ') + input_character -= ' ' - 1; + else + throw new ParserException ("illegal encoded character: " + input_character + " ('" + character + "')"); + char ch = mLookupTable[mEncodingIndex[index % 64]][input_character]; + ret.append (ch); + checksum += ch; + index++; + } + else + ret.append (character); + } + length--; + if (0 == length) + { + index = 0; + state = STATE_CHECKSUM; + } + break; + + case STATE_ESCAPE: + found = false; + for (int i = 0; i < mEscapes.length; i++) + if (character == mEscapes[i]) + { + found = true; + character = mEscaped[i]; + } + if (!found) + throw new ParserException ("unexpected escape character: " + (int)character + " ('" + character + "')"); + ret.append (character); + checksum += character; + index++; + state = STATE_DECODE; + length--; + if (0 == length) + { + index = 0; + state = STATE_CHECKSUM; + } + break; + + case STATE_CHECKSUM: + buffer[substate_checksum] = character; + substate_checksum++; + if (substate_checksum >= buffer.length) + { + long check = decodeBase64 (buffer); + if (check != checksum) + throw new ParserException ("incorrect checksum, expected " + check + ", calculated " + checksum); + checksum = 0; + substate_checksum = 0; + state = STATE_FINAL; + } + break; + + case STATE_FINAL: + if (character == mTrailer[substate_final]) + substate_final++; + else + throw new ParserException ("illegal character encountered: " + (int)character + " ('" + character + "')"); + if (substate_final >= mTrailer.length) + { + substate_final = 0; + state = LAST_STATE; + } + break; + default: + throw new ParserException ("invalid state: " + state); + } + } + + return (ret.toString ()); + } + +// /** +// * Example mainline for decrypting script. +// * Change a file with encrypted script into one without. +// * WARNING: This does not preserve DOS type line endings. +// * @param args Command line arguments. Two file names, input and output. +// * Optionally, the character set to use as a third argument. +// * @exception IOException If the input file doesn't exist, or the output +// * file cannot be created. +// * @exception ParserException If there is a decryption problem. +// */ +// public static void main (String[] args) +// throws +// IOException, +// ParserException +// { +// String charset; +// FileInputStream in; +// Page page; +// Cursor cursor; +// String string; +// int ret; +// +// if (args.length < 2) +// { +// System.out.println ("Usage: java org.htmlparser.scanners.ScriptDecoder [charset]"); +// ret = 1; +// } +// else +// { +// if (2 < args.length) +// charset = args[2]; +// else +// charset = "ISO-8859-1"; +// in = new FileInputStream (args[0]); +// page = new Page (in, charset); +// cursor = new Cursor (page, 0); +// ScriptDecoder.LAST_STATE = STATE_INITIAL; +// string = ScriptDecoder.Decode (page, cursor); +// in.close (); +// +// FileOutputStream outfile = new FileOutputStream (args[1]); +// outfile.write (string.getBytes (charset)); +// outfile.close (); +// ret = (0 != string.length ()) ? 0 : 1; +// } +// +// System.exit (ret); +// } +} diff --git a/src/org/htmlparser/scanners/ScriptScanner.java b/src/src/org/htmlparser/scanners/ScriptScanner.java similarity index 100% rename from src/org/htmlparser/scanners/ScriptScanner.java rename to src/src/org/htmlparser/scanners/ScriptScanner.java diff --git a/src/org/htmlparser/scanners/StyleScanner.java b/src/src/org/htmlparser/scanners/StyleScanner.java similarity index 100% rename from src/org/htmlparser/scanners/StyleScanner.java rename to src/src/org/htmlparser/scanners/StyleScanner.java diff --git a/src/org/htmlparser/scanners/TagScanner.java b/src/src/org/htmlparser/scanners/TagScanner.java similarity index 100% rename from src/org/htmlparser/scanners/TagScanner.java rename to src/src/org/htmlparser/scanners/TagScanner.java diff --git a/src/org/htmlparser/scanners/package.html b/src/src/org/htmlparser/scanners/package.html similarity index 100% rename from src/org/htmlparser/scanners/package.html rename to src/src/org/htmlparser/scanners/package.html diff --git a/src/org/htmlparser/tags/AppletTag.java b/src/src/org/htmlparser/tags/AppletTag.java similarity index 100% rename from src/org/htmlparser/tags/AppletTag.java rename to src/src/org/htmlparser/tags/AppletTag.java diff --git a/src/org/htmlparser/tags/BaseHrefTag.java b/src/src/org/htmlparser/tags/BaseHrefTag.java similarity index 100% rename from src/org/htmlparser/tags/BaseHrefTag.java rename to src/src/org/htmlparser/tags/BaseHrefTag.java diff --git a/src/org/htmlparser/tags/BodyTag.java b/src/src/org/htmlparser/tags/BodyTag.java similarity index 100% rename from src/org/htmlparser/tags/BodyTag.java rename to src/src/org/htmlparser/tags/BodyTag.java diff --git a/src/org/htmlparser/tags/Bullet.java b/src/src/org/htmlparser/tags/Bullet.java similarity index 100% rename from src/org/htmlparser/tags/Bullet.java rename to src/src/org/htmlparser/tags/Bullet.java diff --git a/src/org/htmlparser/tags/BulletList.java b/src/src/org/htmlparser/tags/BulletList.java similarity index 100% rename from src/org/htmlparser/tags/BulletList.java rename to src/src/org/htmlparser/tags/BulletList.java diff --git a/src/org/htmlparser/tags/CompositeTag.java b/src/src/org/htmlparser/tags/CompositeTag.java similarity index 100% rename from src/org/htmlparser/tags/CompositeTag.java rename to src/src/org/htmlparser/tags/CompositeTag.java diff --git a/src/org/htmlparser/tags/DefinitionList.java b/src/src/org/htmlparser/tags/DefinitionList.java similarity index 100% rename from src/org/htmlparser/tags/DefinitionList.java rename to src/src/org/htmlparser/tags/DefinitionList.java diff --git a/src/org/htmlparser/tags/DefinitionListBullet.java b/src/src/org/htmlparser/tags/DefinitionListBullet.java similarity index 100% rename from src/org/htmlparser/tags/DefinitionListBullet.java rename to src/src/org/htmlparser/tags/DefinitionListBullet.java diff --git a/src/org/htmlparser/tags/Div.java b/src/src/org/htmlparser/tags/Div.java similarity index 100% rename from src/org/htmlparser/tags/Div.java rename to src/src/org/htmlparser/tags/Div.java diff --git a/src/org/htmlparser/tags/DoctypeTag.java b/src/src/org/htmlparser/tags/DoctypeTag.java similarity index 100% rename from src/org/htmlparser/tags/DoctypeTag.java rename to src/src/org/htmlparser/tags/DoctypeTag.java diff --git a/src/org/htmlparser/tags/FormTag.java b/src/src/org/htmlparser/tags/FormTag.java similarity index 100% rename from src/org/htmlparser/tags/FormTag.java rename to src/src/org/htmlparser/tags/FormTag.java diff --git a/src/org/htmlparser/tags/FrameSetTag.java b/src/src/org/htmlparser/tags/FrameSetTag.java similarity index 100% rename from src/org/htmlparser/tags/FrameSetTag.java rename to src/src/org/htmlparser/tags/FrameSetTag.java diff --git a/src/org/htmlparser/tags/FrameTag.java b/src/src/org/htmlparser/tags/FrameTag.java similarity index 100% rename from src/org/htmlparser/tags/FrameTag.java rename to src/src/org/htmlparser/tags/FrameTag.java diff --git a/src/org/htmlparser/tags/HeadTag.java b/src/src/org/htmlparser/tags/HeadTag.java similarity index 100% rename from src/org/htmlparser/tags/HeadTag.java rename to src/src/org/htmlparser/tags/HeadTag.java diff --git a/src/org/htmlparser/tags/HeadingTag.java b/src/src/org/htmlparser/tags/HeadingTag.java similarity index 100% rename from src/org/htmlparser/tags/HeadingTag.java rename to src/src/org/htmlparser/tags/HeadingTag.java diff --git a/src/org/htmlparser/tags/Html.java b/src/src/org/htmlparser/tags/Html.java similarity index 100% rename from src/org/htmlparser/tags/Html.java rename to src/src/org/htmlparser/tags/Html.java diff --git a/src/org/htmlparser/tags/ImageTag.java b/src/src/org/htmlparser/tags/ImageTag.java similarity index 100% rename from src/org/htmlparser/tags/ImageTag.java rename to src/src/org/htmlparser/tags/ImageTag.java diff --git a/src/org/htmlparser/tags/InputTag.java b/src/src/org/htmlparser/tags/InputTag.java similarity index 100% rename from src/org/htmlparser/tags/InputTag.java rename to src/src/org/htmlparser/tags/InputTag.java diff --git a/src/org/htmlparser/tags/JspTag.java b/src/src/org/htmlparser/tags/JspTag.java similarity index 100% rename from src/org/htmlparser/tags/JspTag.java rename to src/src/org/htmlparser/tags/JspTag.java diff --git a/src/org/htmlparser/tags/LabelTag.java b/src/src/org/htmlparser/tags/LabelTag.java similarity index 100% rename from src/org/htmlparser/tags/LabelTag.java rename to src/src/org/htmlparser/tags/LabelTag.java diff --git a/src/org/htmlparser/tags/LinkTag.java b/src/src/org/htmlparser/tags/LinkTag.java similarity index 100% rename from src/org/htmlparser/tags/LinkTag.java rename to src/src/org/htmlparser/tags/LinkTag.java diff --git a/src/org/htmlparser/tags/MetaTag.java b/src/src/org/htmlparser/tags/MetaTag.java similarity index 100% rename from src/org/htmlparser/tags/MetaTag.java rename to src/src/org/htmlparser/tags/MetaTag.java diff --git a/src/org/htmlparser/tags/ObjectTag.java b/src/src/org/htmlparser/tags/ObjectTag.java similarity index 100% rename from src/org/htmlparser/tags/ObjectTag.java rename to src/src/org/htmlparser/tags/ObjectTag.java diff --git a/src/org/htmlparser/tags/OptionTag.java b/src/src/org/htmlparser/tags/OptionTag.java similarity index 100% rename from src/org/htmlparser/tags/OptionTag.java rename to src/src/org/htmlparser/tags/OptionTag.java diff --git a/src/org/htmlparser/tags/ParagraphTag.java b/src/src/org/htmlparser/tags/ParagraphTag.java similarity index 100% rename from src/org/htmlparser/tags/ParagraphTag.java rename to src/src/org/htmlparser/tags/ParagraphTag.java diff --git a/src/org/htmlparser/tags/ProcessingInstructionTag.java b/src/src/org/htmlparser/tags/ProcessingInstructionTag.java similarity index 96% rename from src/org/htmlparser/tags/ProcessingInstructionTag.java rename to src/src/org/htmlparser/tags/ProcessingInstructionTag.java index 5907fc86..71f5d4fb 100644 --- a/src/org/htmlparser/tags/ProcessingInstructionTag.java +++ b/src/src/org/htmlparser/tags/ProcessingInstructionTag.java @@ -1,69 +1,69 @@ -// HTMLParser Library $Name$ - A java-based parser for HTML -// http://sourceforge.org/projects/htmlparser -// Copyright (C) 2004 Somik Raha -// -// Revision Control Information -// -// $Source$ -// $Author$ -// $Date$ -// $Revision$ -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// - -package org.htmlparser.tags; - -import org.htmlparser.nodes.TagNode; - -/** - * The XML processing instructions like <?xml ... ?> can be identified by this class. - */ -public class ProcessingInstructionTag - extends - TagNode -{ - /** - * The set of names handled by this tag. - */ - private static final String[] mIds = new String[] {"?"}; - - /** - * Create a new processing instruction tag. - */ - public ProcessingInstructionTag () - { - } - - /** - * Return the set of names handled by this tag. - * @return The names to be matched that create tags of this type. - */ - public String[] getIds () - { - return (mIds); - } - - /** - * Returns a string representation of this processing instruction suitable for debugging. - * @return A string representing this tag. - */ - public String toString() - { - String guts = toHtml(); - guts = guts.substring (1, guts.length () - 2); - return "Processing Instruction : "+guts+"; begins at : "+getStartPosition ()+"; ends at : "+getEndPosition (); - } -} +// HTMLParser Library $Name$ - A java-based parser for HTML +// http://sourceforge.org/projects/htmlparser +// Copyright (C) 2004 Somik Raha +// +// Revision Control Information +// +// $Source$ +// $Author$ +// $Date$ +// $Revision$ +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// + +package org.htmlparser.tags; + +import org.htmlparser.nodes.TagNode; + +/** + * The XML processing instructions like <?xml ... ?> can be identified by this class. + */ +public class ProcessingInstructionTag + extends + TagNode +{ + /** + * The set of names handled by this tag. + */ + private static final String[] mIds = new String[] {"?"}; + + /** + * Create a new processing instruction tag. + */ + public ProcessingInstructionTag () + { + } + + /** + * Return the set of names handled by this tag. + * @return The names to be matched that create tags of this type. + */ + public String[] getIds () + { + return (mIds); + } + + /** + * Returns a string representation of this processing instruction suitable for debugging. + * @return A string representing this tag. + */ + public String toString() + { + String guts = toHtml(); + guts = guts.substring (1, guts.length () - 2); + return "Processing Instruction : "+guts+"; begins at : "+getStartPosition ()+"; ends at : "+getEndPosition (); + } +} diff --git a/src/org/htmlparser/tags/ScriptTag.java b/src/src/org/htmlparser/tags/ScriptTag.java similarity index 100% rename from src/org/htmlparser/tags/ScriptTag.java rename to src/src/org/htmlparser/tags/ScriptTag.java diff --git a/src/org/htmlparser/tags/SelectTag.java b/src/src/org/htmlparser/tags/SelectTag.java similarity index 100% rename from src/org/htmlparser/tags/SelectTag.java rename to src/src/org/htmlparser/tags/SelectTag.java diff --git a/src/org/htmlparser/tags/Span.java b/src/src/org/htmlparser/tags/Span.java similarity index 100% rename from src/org/htmlparser/tags/Span.java rename to src/src/org/htmlparser/tags/Span.java diff --git a/src/org/htmlparser/tags/StyleTag.java b/src/src/org/htmlparser/tags/StyleTag.java similarity index 100% rename from src/org/htmlparser/tags/StyleTag.java rename to src/src/org/htmlparser/tags/StyleTag.java diff --git a/src/org/htmlparser/tags/TableColumn.java b/src/src/org/htmlparser/tags/TableColumn.java similarity index 100% rename from src/org/htmlparser/tags/TableColumn.java rename to src/src/org/htmlparser/tags/TableColumn.java diff --git a/src/org/htmlparser/tags/TableHeader.java b/src/src/org/htmlparser/tags/TableHeader.java similarity index 100% rename from src/org/htmlparser/tags/TableHeader.java rename to src/src/org/htmlparser/tags/TableHeader.java diff --git a/src/org/htmlparser/tags/TableRow.java b/src/src/org/htmlparser/tags/TableRow.java similarity index 100% rename from src/org/htmlparser/tags/TableRow.java rename to src/src/org/htmlparser/tags/TableRow.java diff --git a/src/org/htmlparser/tags/TableTag.java b/src/src/org/htmlparser/tags/TableTag.java similarity index 100% rename from src/org/htmlparser/tags/TableTag.java rename to src/src/org/htmlparser/tags/TableTag.java diff --git a/src/org/htmlparser/tags/TextareaTag.java b/src/src/org/htmlparser/tags/TextareaTag.java similarity index 100% rename from src/org/htmlparser/tags/TextareaTag.java rename to src/src/org/htmlparser/tags/TextareaTag.java diff --git a/src/org/htmlparser/tags/TitleTag.java b/src/src/org/htmlparser/tags/TitleTag.java similarity index 100% rename from src/org/htmlparser/tags/TitleTag.java rename to src/src/org/htmlparser/tags/TitleTag.java diff --git a/src/org/htmlparser/tags/package.html b/src/src/org/htmlparser/tags/package.html similarity index 100% rename from src/org/htmlparser/tags/package.html rename to src/src/org/htmlparser/tags/package.html diff --git a/src/org/htmlparser/util/ChainedException.java b/src/src/org/htmlparser/util/ChainedException.java similarity index 100% rename from src/org/htmlparser/util/ChainedException.java rename to src/src/org/htmlparser/util/ChainedException.java diff --git a/src/org/htmlparser/util/CharacterReference.java b/src/src/org/htmlparser/util/CharacterReference.java similarity index 100% rename from src/org/htmlparser/util/CharacterReference.java rename to src/src/org/htmlparser/util/CharacterReference.java diff --git a/src/org/htmlparser/util/DefaultParserFeedback.java b/src/src/org/htmlparser/util/DefaultParserFeedback.java similarity index 100% rename from src/org/htmlparser/util/DefaultParserFeedback.java rename to src/src/org/htmlparser/util/DefaultParserFeedback.java diff --git a/src/org/htmlparser/util/EncodingChangeException.java b/src/src/org/htmlparser/util/EncodingChangeException.java similarity index 100% rename from src/org/htmlparser/util/EncodingChangeException.java rename to src/src/org/htmlparser/util/EncodingChangeException.java diff --git a/src/org/htmlparser/util/FeedbackManager.java b/src/src/org/htmlparser/util/FeedbackManager.java similarity index 100% rename from src/org/htmlparser/util/FeedbackManager.java rename to src/src/org/htmlparser/util/FeedbackManager.java diff --git a/src/org/htmlparser/util/IteratorImpl.java b/src/src/org/htmlparser/util/IteratorImpl.java similarity index 100% rename from src/org/htmlparser/util/IteratorImpl.java rename to src/src/org/htmlparser/util/IteratorImpl.java diff --git a/src/org/htmlparser/util/NodeIterator.java b/src/src/org/htmlparser/util/NodeIterator.java similarity index 100% rename from src/org/htmlparser/util/NodeIterator.java rename to src/src/org/htmlparser/util/NodeIterator.java diff --git a/src/org/htmlparser/util/NodeList.java b/src/src/org/htmlparser/util/NodeList.java similarity index 100% rename from src/org/htmlparser/util/NodeList.java rename to src/src/org/htmlparser/util/NodeList.java diff --git a/src/org/htmlparser/util/NodeTreeWalker.java b/src/src/org/htmlparser/util/NodeTreeWalker.java similarity index 100% rename from src/org/htmlparser/util/NodeTreeWalker.java rename to src/src/org/htmlparser/util/NodeTreeWalker.java diff --git a/src/org/htmlparser/util/ParserException.java b/src/src/org/htmlparser/util/ParserException.java similarity index 100% rename from src/org/htmlparser/util/ParserException.java rename to src/src/org/htmlparser/util/ParserException.java diff --git a/src/org/htmlparser/util/ParserFeedback.java b/src/src/org/htmlparser/util/ParserFeedback.java similarity index 100% rename from src/org/htmlparser/util/ParserFeedback.java rename to src/src/org/htmlparser/util/ParserFeedback.java diff --git a/src/org/htmlparser/util/ParserUtils.java b/src/src/org/htmlparser/util/ParserUtils.java similarity index 100% rename from src/org/htmlparser/util/ParserUtils.java rename to src/src/org/htmlparser/util/ParserUtils.java diff --git a/src/org/htmlparser/util/SimpleNodeIterator.java b/src/src/org/htmlparser/util/SimpleNodeIterator.java similarity index 100% rename from src/org/htmlparser/util/SimpleNodeIterator.java rename to src/src/org/htmlparser/util/SimpleNodeIterator.java diff --git a/src/org/htmlparser/util/Translate.java b/src/src/org/htmlparser/util/Translate.java similarity index 100% rename from src/org/htmlparser/util/Translate.java rename to src/src/org/htmlparser/util/Translate.java diff --git a/src/org/htmlparser/util/package.html b/src/src/org/htmlparser/util/package.html similarity index 100% rename from src/org/htmlparser/util/package.html rename to src/src/org/htmlparser/util/package.html diff --git a/src/org/htmlparser/util/sort/Ordered.java b/src/src/org/htmlparser/util/sort/Ordered.java similarity index 100% rename from src/org/htmlparser/util/sort/Ordered.java rename to src/src/org/htmlparser/util/sort/Ordered.java diff --git a/src/org/htmlparser/util/sort/Sort.java b/src/src/org/htmlparser/util/sort/Sort.java similarity index 100% rename from src/org/htmlparser/util/sort/Sort.java rename to src/src/org/htmlparser/util/sort/Sort.java diff --git a/src/org/htmlparser/util/sort/Sortable.java b/src/src/org/htmlparser/util/sort/Sortable.java similarity index 100% rename from src/org/htmlparser/util/sort/Sortable.java rename to src/src/org/htmlparser/util/sort/Sortable.java diff --git a/src/org/htmlparser/util/sort/package.html b/src/src/org/htmlparser/util/sort/package.html similarity index 100% rename from src/org/htmlparser/util/sort/package.html rename to src/src/org/htmlparser/util/sort/package.html diff --git a/src/org/htmlparser/visitors/HtmlPage.java b/src/src/org/htmlparser/visitors/HtmlPage.java similarity index 100% rename from src/org/htmlparser/visitors/HtmlPage.java rename to src/src/org/htmlparser/visitors/HtmlPage.java diff --git a/src/org/htmlparser/visitors/LinkFindingVisitor.java b/src/src/org/htmlparser/visitors/LinkFindingVisitor.java similarity index 100% rename from src/org/htmlparser/visitors/LinkFindingVisitor.java rename to src/src/org/htmlparser/visitors/LinkFindingVisitor.java diff --git a/src/org/htmlparser/visitors/NodeVisitor.java b/src/src/org/htmlparser/visitors/NodeVisitor.java similarity index 100% rename from src/org/htmlparser/visitors/NodeVisitor.java rename to src/src/org/htmlparser/visitors/NodeVisitor.java diff --git a/src/org/htmlparser/visitors/ObjectFindingVisitor.java b/src/src/org/htmlparser/visitors/ObjectFindingVisitor.java similarity index 100% rename from src/org/htmlparser/visitors/ObjectFindingVisitor.java rename to src/src/org/htmlparser/visitors/ObjectFindingVisitor.java diff --git a/src/org/htmlparser/visitors/StringFindingVisitor.java b/src/src/org/htmlparser/visitors/StringFindingVisitor.java similarity index 100% rename from src/org/htmlparser/visitors/StringFindingVisitor.java rename to src/src/org/htmlparser/visitors/StringFindingVisitor.java diff --git a/src/org/htmlparser/visitors/TagFindingVisitor.java b/src/src/org/htmlparser/visitors/TagFindingVisitor.java similarity index 100% rename from src/org/htmlparser/visitors/TagFindingVisitor.java rename to src/src/org/htmlparser/visitors/TagFindingVisitor.java diff --git a/src/org/htmlparser/visitors/TextExtractingVisitor.java b/src/src/org/htmlparser/visitors/TextExtractingVisitor.java similarity index 100% rename from src/org/htmlparser/visitors/TextExtractingVisitor.java rename to src/src/org/htmlparser/visitors/TextExtractingVisitor.java diff --git a/src/org/htmlparser/visitors/UrlModifyingVisitor.java b/src/src/org/htmlparser/visitors/UrlModifyingVisitor.java similarity index 100% rename from src/org/htmlparser/visitors/UrlModifyingVisitor.java rename to src/src/org/htmlparser/visitors/UrlModifyingVisitor.java diff --git a/src/org/htmlparser/visitors/package.html b/src/src/org/htmlparser/visitors/package.html similarity index 100% rename from src/org/htmlparser/visitors/package.html rename to src/src/org/htmlparser/visitors/package.html diff --git a/src/org/htmlparser/tests/AllTests.java b/src/tests/org/htmlparser/tests/AllTests.java similarity index 100% rename from src/org/htmlparser/tests/AllTests.java rename to src/tests/org/htmlparser/tests/AllTests.java diff --git a/src/org/htmlparser/tests/AssertXmlEqualsTest.java b/src/tests/org/htmlparser/tests/AssertXmlEqualsTest.java similarity index 100% rename from src/org/htmlparser/tests/AssertXmlEqualsTest.java rename to src/tests/org/htmlparser/tests/AssertXmlEqualsTest.java diff --git a/src/org/htmlparser/tests/BadTagIdentifier.java b/src/tests/org/htmlparser/tests/BadTagIdentifier.java similarity index 100% rename from src/org/htmlparser/tests/BadTagIdentifier.java rename to src/tests/org/htmlparser/tests/BadTagIdentifier.java diff --git a/src/org/htmlparser/tests/FunctionalTests.java b/src/tests/org/htmlparser/tests/FunctionalTests.java similarity index 100% rename from src/org/htmlparser/tests/FunctionalTests.java rename to src/tests/org/htmlparser/tests/FunctionalTests.java diff --git a/src/org/htmlparser/tests/LineNumberAssignedByNodeReaderTest.java b/src/tests/org/htmlparser/tests/LineNumberAssignedByNodeReaderTest.java similarity index 100% rename from src/org/htmlparser/tests/LineNumberAssignedByNodeReaderTest.java rename to src/tests/org/htmlparser/tests/LineNumberAssignedByNodeReaderTest.java diff --git a/src/org/htmlparser/tests/ParserTest.java b/src/tests/org/htmlparser/tests/ParserTest.java similarity index 97% rename from src/org/htmlparser/tests/ParserTest.java rename to src/tests/org/htmlparser/tests/ParserTest.java index 88454288..1ffbeece 100644 --- a/src/org/htmlparser/tests/ParserTest.java +++ b/src/tests/org/htmlparser/tests/ParserTest.java @@ -26,22 +26,8 @@ package org.htmlparser.tests; -import java.io.BufferedInputStream; -import java.io.DataInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileWriter; -import java.io.PrintWriter; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.Locale; - -import org.htmlparser.Node; -import org.htmlparser.Parser; -import org.htmlparser.PrototypicalNodeFactory; -import org.htmlparser.Remark; -import org.htmlparser.Tag; -import org.htmlparser.Text; +import jdk.nashorn.internal.ir.annotations.Ignore; +import org.htmlparser.*; import org.htmlparser.filters.NodeClassFilter; import org.htmlparser.filters.TagNameFilter; import org.htmlparser.lexer.InputStreamSource; @@ -49,11 +35,12 @@ import org.htmlparser.tags.ImageTag; import org.htmlparser.tags.LinkTag; import org.htmlparser.tags.MetaTag; -import org.htmlparser.util.DefaultParserFeedback; -import org.htmlparser.util.NodeIterator; -import org.htmlparser.util.NodeList; -import org.htmlparser.util.ParserException; -import org.htmlparser.util.SimpleNodeIterator; +import org.htmlparser.util.*; + +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.Locale; public class ParserTest extends ParserTestCase { @@ -208,7 +195,8 @@ public void testElementsFromWeb() throws Exception { * * Sumbits the POST and verifies the returned HTML contains an expected value. */ - public void testPOST() throws Exception + @Ignore + public void _testPOST() throws Exception { // the form data: final String number = "2708"; final String street = "Kelly"; @@ -433,7 +421,8 @@ public void testFileDelete () * Here, Oracle Japan is an example of a HTTP server that correctly sets the * charset in the header to match the content encoding. */ - public void testHTTPCharset () + @Ignore + public void _testHTTPCharset () { Parser parser; try @@ -453,7 +442,8 @@ public void testHTTPCharset () * charset in the header to match the content encoding. We check that after * the enumeration is created, that the charset has changed to the correct value. */ - public void testHTMLCharset () + @Ignore + public void _testHTMLCharset () { Parser parser; NodeIterator enumeration; @@ -969,8 +959,8 @@ public void testSetRemarkText () throws Exception public void testFixSpaces () throws ParserException { - String url = "http://htmlparser.sourceforge.net/test/This is a Test Page.html"; + String url = "https://htmlparser.sourceforge.net/test/This is a Test Page.html"; parser = new Parser (url); - assertEquals("Expected","http://htmlparser.sourceforge.net/test/This%20is%20a%20Test%20Page.html", parser.getURL ()); + assertEquals("Expected","https://htmlparser.sourceforge.net/test/This%20is%20a%20Test%20Page.html", parser.getURL ()); } } diff --git a/src/org/htmlparser/tests/ParserTestCase.java b/src/tests/org/htmlparser/tests/ParserTestCase.java similarity index 100% rename from src/org/htmlparser/tests/ParserTestCase.java rename to src/tests/org/htmlparser/tests/ParserTestCase.java diff --git a/src/org/htmlparser/tests/SAXTest.java b/src/tests/org/htmlparser/tests/SAXTest.java similarity index 100% rename from src/org/htmlparser/tests/SAXTest.java rename to src/tests/org/htmlparser/tests/SAXTest.java diff --git a/src/org/htmlparser/tests/codeMetrics/LineCounter.java b/src/tests/org/htmlparser/tests/codeMetrics/LineCounter.java similarity index 100% rename from src/org/htmlparser/tests/codeMetrics/LineCounter.java rename to src/tests/org/htmlparser/tests/codeMetrics/LineCounter.java diff --git a/src/org/htmlparser/tests/filterTests/FilterTest.java b/src/tests/org/htmlparser/tests/filterTests/FilterTest.java similarity index 100% rename from src/org/htmlparser/tests/filterTests/FilterTest.java rename to src/tests/org/htmlparser/tests/filterTests/FilterTest.java diff --git a/src/org/htmlparser/tests/lexerTests/AllTests.java b/src/tests/org/htmlparser/tests/lexerTests/AllTests.java similarity index 100% rename from src/org/htmlparser/tests/lexerTests/AllTests.java rename to src/tests/org/htmlparser/tests/lexerTests/AllTests.java diff --git a/src/org/htmlparser/tests/lexerTests/AttributeTests.java b/src/tests/org/htmlparser/tests/lexerTests/AttributeTests.java similarity index 100% rename from src/org/htmlparser/tests/lexerTests/AttributeTests.java rename to src/tests/org/htmlparser/tests/lexerTests/AttributeTests.java diff --git a/src/org/htmlparser/tests/lexerTests/LexerTests.java b/src/tests/org/htmlparser/tests/lexerTests/LexerTests.java similarity index 100% rename from src/org/htmlparser/tests/lexerTests/LexerTests.java rename to src/tests/org/htmlparser/tests/lexerTests/LexerTests.java diff --git a/src/org/htmlparser/tests/lexerTests/PageIndexTests.java b/src/tests/org/htmlparser/tests/lexerTests/PageIndexTests.java similarity index 100% rename from src/org/htmlparser/tests/lexerTests/PageIndexTests.java rename to src/tests/org/htmlparser/tests/lexerTests/PageIndexTests.java diff --git a/src/org/htmlparser/tests/lexerTests/PageTests.java b/src/tests/org/htmlparser/tests/lexerTests/PageTests.java similarity index 100% rename from src/org/htmlparser/tests/lexerTests/PageTests.java rename to src/tests/org/htmlparser/tests/lexerTests/PageTests.java diff --git a/src/org/htmlparser/tests/lexerTests/SourceTests.java b/src/tests/org/htmlparser/tests/lexerTests/SourceTests.java similarity index 100% rename from src/org/htmlparser/tests/lexerTests/SourceTests.java rename to src/tests/org/htmlparser/tests/lexerTests/SourceTests.java diff --git a/src/org/htmlparser/tests/lexerTests/StreamTests.java b/src/tests/org/htmlparser/tests/lexerTests/StreamTests.java similarity index 99% rename from src/org/htmlparser/tests/lexerTests/StreamTests.java rename to src/tests/org/htmlparser/tests/lexerTests/StreamTests.java index be6118e3..dd98beff 100644 --- a/src/org/htmlparser/tests/lexerTests/StreamTests.java +++ b/src/tests/org/htmlparser/tests/lexerTests/StreamTests.java @@ -34,6 +34,7 @@ import java.net.URLConnection; import java.util.ArrayList; +import jdk.nashorn.internal.ir.annotations.Ignore; import org.htmlparser.lexer.Stream; import org.htmlparser.tests.ParserTestCase; @@ -151,7 +152,8 @@ public void testSameBytes () throws IOException * chunk of the file in memory. This advantage translates to a faster * spin through the bytes after the delay. */ - public void testThreaded () throws IOException + @Ignore + public void _testThreaded () throws IOException { String link; URL url; diff --git a/src/org/htmlparser/tests/lexerTests/TagTests.java b/src/tests/org/htmlparser/tests/lexerTests/TagTests.java similarity index 100% rename from src/org/htmlparser/tests/lexerTests/TagTests.java rename to src/tests/org/htmlparser/tests/lexerTests/TagTests.java diff --git a/src/org/htmlparser/tests/package.html b/src/tests/org/htmlparser/tests/package.html similarity index 100% rename from src/org/htmlparser/tests/package.html rename to src/tests/org/htmlparser/tests/package.html diff --git a/src/org/htmlparser/tests/parserHelperTests/AllTests.java b/src/tests/org/htmlparser/tests/parserHelperTests/AllTests.java similarity index 100% rename from src/org/htmlparser/tests/parserHelperTests/AllTests.java rename to src/tests/org/htmlparser/tests/parserHelperTests/AllTests.java diff --git a/src/org/htmlparser/tests/parserHelperTests/CompositeTagScannerHelperTest.java b/src/tests/org/htmlparser/tests/parserHelperTests/CompositeTagScannerHelperTest.java similarity index 100% rename from src/org/htmlparser/tests/parserHelperTests/CompositeTagScannerHelperTest.java rename to src/tests/org/htmlparser/tests/parserHelperTests/CompositeTagScannerHelperTest.java diff --git a/src/org/htmlparser/tests/parserHelperTests/RemarkNodeParserTest.java b/src/tests/org/htmlparser/tests/parserHelperTests/RemarkNodeParserTest.java similarity index 100% rename from src/org/htmlparser/tests/parserHelperTests/RemarkNodeParserTest.java rename to src/tests/org/htmlparser/tests/parserHelperTests/RemarkNodeParserTest.java diff --git a/src/org/htmlparser/tests/parserHelperTests/StringParserTest.java b/src/tests/org/htmlparser/tests/parserHelperTests/StringParserTest.java similarity index 100% rename from src/org/htmlparser/tests/parserHelperTests/StringParserTest.java rename to src/tests/org/htmlparser/tests/parserHelperTests/StringParserTest.java diff --git a/src/org/htmlparser/tests/scannersTests/AllTests.java b/src/tests/org/htmlparser/tests/scannersTests/AllTests.java similarity index 100% rename from src/org/htmlparser/tests/scannersTests/AllTests.java rename to src/tests/org/htmlparser/tests/scannersTests/AllTests.java diff --git a/src/org/htmlparser/tests/scannersTests/CompositeTagScannerTest.java b/src/tests/org/htmlparser/tests/scannersTests/CompositeTagScannerTest.java similarity index 100% rename from src/org/htmlparser/tests/scannersTests/CompositeTagScannerTest.java rename to src/tests/org/htmlparser/tests/scannersTests/CompositeTagScannerTest.java diff --git a/src/org/htmlparser/tests/scannersTests/JspScannerTest.java b/src/tests/org/htmlparser/tests/scannersTests/JspScannerTest.java similarity index 100% rename from src/org/htmlparser/tests/scannersTests/JspScannerTest.java rename to src/tests/org/htmlparser/tests/scannersTests/JspScannerTest.java diff --git a/src/org/htmlparser/tests/scannersTests/ScriptScannerTest.java b/src/tests/org/htmlparser/tests/scannersTests/ScriptScannerTest.java similarity index 100% rename from src/org/htmlparser/tests/scannersTests/ScriptScannerTest.java rename to src/tests/org/htmlparser/tests/scannersTests/ScriptScannerTest.java diff --git a/src/org/htmlparser/tests/scannersTests/TagScannerTest.java b/src/tests/org/htmlparser/tests/scannersTests/TagScannerTest.java similarity index 100% rename from src/org/htmlparser/tests/scannersTests/TagScannerTest.java rename to src/tests/org/htmlparser/tests/scannersTests/TagScannerTest.java diff --git a/src/org/htmlparser/tests/scannersTests/XmlEndTagScanningTest.java b/src/tests/org/htmlparser/tests/scannersTests/XmlEndTagScanningTest.java similarity index 100% rename from src/org/htmlparser/tests/scannersTests/XmlEndTagScanningTest.java rename to src/tests/org/htmlparser/tests/scannersTests/XmlEndTagScanningTest.java diff --git a/src/org/htmlparser/tests/scannersTests/package.html b/src/tests/org/htmlparser/tests/scannersTests/package.html similarity index 100% rename from src/org/htmlparser/tests/scannersTests/package.html rename to src/tests/org/htmlparser/tests/scannersTests/package.html diff --git a/src/org/htmlparser/tests/tagTests/AllTests.java b/src/tests/org/htmlparser/tests/tagTests/AllTests.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/AllTests.java rename to src/tests/org/htmlparser/tests/tagTests/AllTests.java diff --git a/src/org/htmlparser/tests/tagTests/AppletTagTest.java b/src/tests/org/htmlparser/tests/tagTests/AppletTagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/AppletTagTest.java rename to src/tests/org/htmlparser/tests/tagTests/AppletTagTest.java diff --git a/src/org/htmlparser/tests/tagTests/BaseHrefTagTest.java b/src/tests/org/htmlparser/tests/tagTests/BaseHrefTagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/BaseHrefTagTest.java rename to src/tests/org/htmlparser/tests/tagTests/BaseHrefTagTest.java diff --git a/src/org/htmlparser/tests/tagTests/BodyTagTest.java b/src/tests/org/htmlparser/tests/tagTests/BodyTagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/BodyTagTest.java rename to src/tests/org/htmlparser/tests/tagTests/BodyTagTest.java diff --git a/src/org/htmlparser/tests/tagTests/BulletListTagTest.java b/src/tests/org/htmlparser/tests/tagTests/BulletListTagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/BulletListTagTest.java rename to src/tests/org/htmlparser/tests/tagTests/BulletListTagTest.java diff --git a/src/org/htmlparser/tests/tagTests/BulletTagTest.java b/src/tests/org/htmlparser/tests/tagTests/BulletTagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/BulletTagTest.java rename to src/tests/org/htmlparser/tests/tagTests/BulletTagTest.java diff --git a/src/org/htmlparser/tests/tagTests/CompositeTagTest.java b/src/tests/org/htmlparser/tests/tagTests/CompositeTagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/CompositeTagTest.java rename to src/tests/org/htmlparser/tests/tagTests/CompositeTagTest.java diff --git a/src/org/htmlparser/tests/tagTests/DivTagTest.java b/src/tests/org/htmlparser/tests/tagTests/DivTagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/DivTagTest.java rename to src/tests/org/htmlparser/tests/tagTests/DivTagTest.java diff --git a/src/org/htmlparser/tests/tagTests/DoctypeTagTest.java b/src/tests/org/htmlparser/tests/tagTests/DoctypeTagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/DoctypeTagTest.java rename to src/tests/org/htmlparser/tests/tagTests/DoctypeTagTest.java diff --git a/src/org/htmlparser/tests/tagTests/EndTagTest.java b/src/tests/org/htmlparser/tests/tagTests/EndTagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/EndTagTest.java rename to src/tests/org/htmlparser/tests/tagTests/EndTagTest.java diff --git a/src/org/htmlparser/tests/tagTests/FormTagTest.java b/src/tests/org/htmlparser/tests/tagTests/FormTagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/FormTagTest.java rename to src/tests/org/htmlparser/tests/tagTests/FormTagTest.java diff --git a/src/org/htmlparser/tests/tagTests/FrameSetTagTest.java b/src/tests/org/htmlparser/tests/tagTests/FrameSetTagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/FrameSetTagTest.java rename to src/tests/org/htmlparser/tests/tagTests/FrameSetTagTest.java diff --git a/src/org/htmlparser/tests/tagTests/FrameTagTest.java b/src/tests/org/htmlparser/tests/tagTests/FrameTagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/FrameTagTest.java rename to src/tests/org/htmlparser/tests/tagTests/FrameTagTest.java diff --git a/src/org/htmlparser/tests/tagTests/HeadTagTest.java b/src/tests/org/htmlparser/tests/tagTests/HeadTagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/HeadTagTest.java rename to src/tests/org/htmlparser/tests/tagTests/HeadTagTest.java diff --git a/src/org/htmlparser/tests/tagTests/HtmlTagTest.java b/src/tests/org/htmlparser/tests/tagTests/HtmlTagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/HtmlTagTest.java rename to src/tests/org/htmlparser/tests/tagTests/HtmlTagTest.java diff --git a/src/org/htmlparser/tests/tagTests/ImageTagTest.java b/src/tests/org/htmlparser/tests/tagTests/ImageTagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/ImageTagTest.java rename to src/tests/org/htmlparser/tests/tagTests/ImageTagTest.java diff --git a/src/org/htmlparser/tests/tagTests/InputTagTest.java b/src/tests/org/htmlparser/tests/tagTests/InputTagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/InputTagTest.java rename to src/tests/org/htmlparser/tests/tagTests/InputTagTest.java diff --git a/src/org/htmlparser/tests/tagTests/JspTagTest.java b/src/tests/org/htmlparser/tests/tagTests/JspTagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/JspTagTest.java rename to src/tests/org/htmlparser/tests/tagTests/JspTagTest.java diff --git a/src/org/htmlparser/tests/tagTests/LabelTagTest.java b/src/tests/org/htmlparser/tests/tagTests/LabelTagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/LabelTagTest.java rename to src/tests/org/htmlparser/tests/tagTests/LabelTagTest.java diff --git a/src/org/htmlparser/tests/tagTests/LinkTagTest.java b/src/tests/org/htmlparser/tests/tagTests/LinkTagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/LinkTagTest.java rename to src/tests/org/htmlparser/tests/tagTests/LinkTagTest.java diff --git a/src/org/htmlparser/tests/tagTests/MetaTagTest.java b/src/tests/org/htmlparser/tests/tagTests/MetaTagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/MetaTagTest.java rename to src/tests/org/htmlparser/tests/tagTests/MetaTagTest.java diff --git a/src/org/htmlparser/tests/tagTests/ObjectCollectionTest.java b/src/tests/org/htmlparser/tests/tagTests/ObjectCollectionTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/ObjectCollectionTest.java rename to src/tests/org/htmlparser/tests/tagTests/ObjectCollectionTest.java diff --git a/src/org/htmlparser/tests/tagTests/OptionTagTest.java b/src/tests/org/htmlparser/tests/tagTests/OptionTagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/OptionTagTest.java rename to src/tests/org/htmlparser/tests/tagTests/OptionTagTest.java diff --git a/src/org/htmlparser/tests/tagTests/ScriptTagTest.java b/src/tests/org/htmlparser/tests/tagTests/ScriptTagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/ScriptTagTest.java rename to src/tests/org/htmlparser/tests/tagTests/ScriptTagTest.java diff --git a/src/org/htmlparser/tests/tagTests/SelectTagTest.java b/src/tests/org/htmlparser/tests/tagTests/SelectTagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/SelectTagTest.java rename to src/tests/org/htmlparser/tests/tagTests/SelectTagTest.java diff --git a/src/org/htmlparser/tests/tagTests/SpanTagTest.java b/src/tests/org/htmlparser/tests/tagTests/SpanTagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/SpanTagTest.java rename to src/tests/org/htmlparser/tests/tagTests/SpanTagTest.java diff --git a/src/org/htmlparser/tests/tagTests/StyleTagTest.java b/src/tests/org/htmlparser/tests/tagTests/StyleTagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/StyleTagTest.java rename to src/tests/org/htmlparser/tests/tagTests/StyleTagTest.java diff --git a/src/org/htmlparser/tests/tagTests/TableTagTest.java b/src/tests/org/htmlparser/tests/tagTests/TableTagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/TableTagTest.java rename to src/tests/org/htmlparser/tests/tagTests/TableTagTest.java diff --git a/src/org/htmlparser/tests/tagTests/TagTest.java b/src/tests/org/htmlparser/tests/tagTests/TagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/TagTest.java rename to src/tests/org/htmlparser/tests/tagTests/TagTest.java diff --git a/src/org/htmlparser/tests/tagTests/TextareaTagTest.java b/src/tests/org/htmlparser/tests/tagTests/TextareaTagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/TextareaTagTest.java rename to src/tests/org/htmlparser/tests/tagTests/TextareaTagTest.java diff --git a/src/org/htmlparser/tests/tagTests/TitleTagTest.java b/src/tests/org/htmlparser/tests/tagTests/TitleTagTest.java similarity index 100% rename from src/org/htmlparser/tests/tagTests/TitleTagTest.java rename to src/tests/org/htmlparser/tests/tagTests/TitleTagTest.java diff --git a/src/org/htmlparser/tests/tagTests/package.html b/src/tests/org/htmlparser/tests/tagTests/package.html similarity index 100% rename from src/org/htmlparser/tests/tagTests/package.html rename to src/tests/org/htmlparser/tests/tagTests/package.html diff --git a/src/org/htmlparser/tests/utilTests/AllTests.java b/src/tests/org/htmlparser/tests/utilTests/AllTests.java similarity index 100% rename from src/org/htmlparser/tests/utilTests/AllTests.java rename to src/tests/org/htmlparser/tests/utilTests/AllTests.java diff --git a/src/org/htmlparser/tests/utilTests/BeanTest.java b/src/tests/org/htmlparser/tests/utilTests/BeanTest.java similarity index 100% rename from src/org/htmlparser/tests/utilTests/BeanTest.java rename to src/tests/org/htmlparser/tests/utilTests/BeanTest.java diff --git a/src/org/htmlparser/tests/utilTests/CharacterTranslationTest.java b/src/tests/org/htmlparser/tests/utilTests/CharacterTranslationTest.java similarity index 100% rename from src/org/htmlparser/tests/utilTests/CharacterTranslationTest.java rename to src/tests/org/htmlparser/tests/utilTests/CharacterTranslationTest.java diff --git a/src/org/htmlparser/tests/utilTests/HTMLParserUtilsTest.java b/src/tests/org/htmlparser/tests/utilTests/HTMLParserUtilsTest.java similarity index 100% rename from src/org/htmlparser/tests/utilTests/HTMLParserUtilsTest.java rename to src/tests/org/htmlparser/tests/utilTests/HTMLParserUtilsTest.java diff --git a/src/org/htmlparser/tests/utilTests/NodeListTest.java b/src/tests/org/htmlparser/tests/utilTests/NodeListTest.java similarity index 100% rename from src/org/htmlparser/tests/utilTests/NodeListTest.java rename to src/tests/org/htmlparser/tests/utilTests/NodeListTest.java diff --git a/src/org/htmlparser/tests/utilTests/NonEnglishTest.java b/src/tests/org/htmlparser/tests/utilTests/NonEnglishTest.java similarity index 100% rename from src/org/htmlparser/tests/utilTests/NonEnglishTest.java rename to src/tests/org/htmlparser/tests/utilTests/NonEnglishTest.java diff --git a/src/org/htmlparser/tests/utilTests/SortTest.java b/src/tests/org/htmlparser/tests/utilTests/SortTest.java similarity index 100% rename from src/org/htmlparser/tests/utilTests/SortTest.java rename to src/tests/org/htmlparser/tests/utilTests/SortTest.java diff --git a/src/org/htmlparser/tests/utilTests/package.html b/src/tests/org/htmlparser/tests/utilTests/package.html similarity index 100% rename from src/org/htmlparser/tests/utilTests/package.html rename to src/tests/org/htmlparser/tests/utilTests/package.html diff --git a/src/org/htmlparser/tests/visitorsTests/AllTests.java b/src/tests/org/htmlparser/tests/visitorsTests/AllTests.java similarity index 100% rename from src/org/htmlparser/tests/visitorsTests/AllTests.java rename to src/tests/org/htmlparser/tests/visitorsTests/AllTests.java diff --git a/src/org/htmlparser/tests/visitorsTests/CompositeTagFindingVisitorTest.java b/src/tests/org/htmlparser/tests/visitorsTests/CompositeTagFindingVisitorTest.java similarity index 100% rename from src/org/htmlparser/tests/visitorsTests/CompositeTagFindingVisitorTest.java rename to src/tests/org/htmlparser/tests/visitorsTests/CompositeTagFindingVisitorTest.java diff --git a/src/org/htmlparser/tests/visitorsTests/HtmlPageTest.java b/src/tests/org/htmlparser/tests/visitorsTests/HtmlPageTest.java similarity index 100% rename from src/org/htmlparser/tests/visitorsTests/HtmlPageTest.java rename to src/tests/org/htmlparser/tests/visitorsTests/HtmlPageTest.java diff --git a/src/org/htmlparser/tests/visitorsTests/LinkFindingVisitorTest.java b/src/tests/org/htmlparser/tests/visitorsTests/LinkFindingVisitorTest.java similarity index 100% rename from src/org/htmlparser/tests/visitorsTests/LinkFindingVisitorTest.java rename to src/tests/org/htmlparser/tests/visitorsTests/LinkFindingVisitorTest.java diff --git a/src/org/htmlparser/tests/visitorsTests/NodeVisitorTest.java b/src/tests/org/htmlparser/tests/visitorsTests/NodeVisitorTest.java similarity index 100% rename from src/org/htmlparser/tests/visitorsTests/NodeVisitorTest.java rename to src/tests/org/htmlparser/tests/visitorsTests/NodeVisitorTest.java diff --git a/src/org/htmlparser/tests/visitorsTests/ScriptCommentTest.java b/src/tests/org/htmlparser/tests/visitorsTests/ScriptCommentTest.java similarity index 97% rename from src/org/htmlparser/tests/visitorsTests/ScriptCommentTest.java rename to src/tests/org/htmlparser/tests/visitorsTests/ScriptCommentTest.java index f9ef13e8..ef6c6458 100644 --- a/src/org/htmlparser/tests/visitorsTests/ScriptCommentTest.java +++ b/src/tests/org/htmlparser/tests/visitorsTests/ScriptCommentTest.java @@ -1,142 +1,142 @@ -// HTMLParser Library $Name$ - A java-based parser for HTML -// http://sourceforge.org/projects/htmlparser -// Copyright (C) 2004 Jim Arnell -// -// Revision Control Information -// -// $Source$ -// $Author$ -// $Date$ -// $Revision$ -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// - -package org.htmlparser.tests.visitorsTests; - -import org.htmlparser.tags.CompositeTag; -import org.htmlparser.tags.ScriptTag; -import org.htmlparser.Tag; -import org.htmlparser.tests.ParserTestCase; -import org.htmlparser.visitors.NodeVisitor; - -public class ScriptCommentTest extends ParserTestCase { - - static - { - System.setProperty ("org.htmlparser.tests.visitorsTests.ScriptCommentTest", "ScriptCommentTest"); - } - - private String workingScriptTag = - ""; - - private String workingHtml = - this.workingScriptTag - + "" - + ""; - - private String failingScriptTag = - ""; - - private String failingHtml = - this.failingScriptTag - + "" - + ""; - - private String failingHtml2 = - "" - + this.failingScriptTag - + ""; - - private String anotherFailingScriptTag = - ""; - - public ScriptCommentTest(String name) { - super(name); - } - - public void testTagWorking() throws Exception { - createParser(this.workingHtml); - ScriptVisitor visitor = new ScriptVisitor(); - this.parser.visitAllNodesWith(visitor); - String scriptNodeHtml = visitor.scriptTag.toHtml(); - assertEquals("Script parsing worked", this.workingScriptTag, scriptNodeHtml); - } - - public void testScriptTagNotWorkingOuter() throws Exception { - createParser(this.failingHtml); - ScriptVisitor visitor = new ScriptVisitor(); - this.parser.visitAllNodesWith(visitor); - String scriptNodeHtml = visitor.scriptTag.toHtml(); - assertEquals("Script parsing not working", this.failingScriptTag, scriptNodeHtml); - } - - public void testScriptTagNotWorkingInner() throws Exception { - createParser(this.failingHtml2); - ScriptVisitor visitor = new ScriptVisitor(); - this.parser.visitAllNodesWith(visitor); - String scriptNodeHtml = visitor.scriptTag.toHtml(); - assertEquals("Script parsing not working", this.failingScriptTag, scriptNodeHtml); - } - - public void testScriptTagNotWorkingMultiLine() throws Exception { - createParser(this.anotherFailingScriptTag); - ScriptVisitor visitor = new ScriptVisitor(); - this.parser.visitAllNodesWith(visitor); - String scriptNodeHtml = visitor.scriptTag.toHtml(); - assertEquals("Script parsing not working", this.anotherFailingScriptTag, scriptNodeHtml); - } - - /** - * Implement test case NodeVisitor. - */ - public final class ScriptVisitor extends NodeVisitor { - - /** Keps the only script tag. */ - public ScriptTag scriptTag; - - /** - * Creates a new ScriptVisitor object. - */ - public ScriptVisitor() { - super(true, true); - } - - /** - * @see org.htmlparser.visitors.NodeVisitor - */ - public void visitTag(final Tag n) { - if ((null != n.getParent()) - || ((n instanceof CompositeTag) - && (null == ((CompositeTag) n).getEndTag()))) { - - if (n instanceof ScriptTag) { - this.scriptTag = (ScriptTag) n; - } - } else { - if (n instanceof ScriptTag) { - this.scriptTag = (ScriptTag) n; - } - } - } - } -} - +// HTMLParser Library $Name$ - A java-based parser for HTML +// http://sourceforge.org/projects/htmlparser +// Copyright (C) 2004 Jim Arnell +// +// Revision Control Information +// +// $Source$ +// $Author$ +// $Date$ +// $Revision$ +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// + +package org.htmlparser.tests.visitorsTests; + +import org.htmlparser.tags.CompositeTag; +import org.htmlparser.tags.ScriptTag; +import org.htmlparser.Tag; +import org.htmlparser.tests.ParserTestCase; +import org.htmlparser.visitors.NodeVisitor; + +public class ScriptCommentTest extends ParserTestCase { + + static + { + System.setProperty ("org.htmlparser.tests.visitorsTests.ScriptCommentTest", "ScriptCommentTest"); + } + + private String workingScriptTag = + ""; + + private String workingHtml = + this.workingScriptTag + + "" + + ""; + + private String failingScriptTag = + ""; + + private String failingHtml = + this.failingScriptTag + + "" + + ""; + + private String failingHtml2 = + "" + + this.failingScriptTag + + ""; + + private String anotherFailingScriptTag = + ""; + + public ScriptCommentTest(String name) { + super(name); + } + + public void testTagWorking() throws Exception { + createParser(this.workingHtml); + ScriptVisitor visitor = new ScriptVisitor(); + this.parser.visitAllNodesWith(visitor); + String scriptNodeHtml = visitor.scriptTag.toHtml(); + assertEquals("Script parsing worked", this.workingScriptTag, scriptNodeHtml); + } + + public void testScriptTagNotWorkingOuter() throws Exception { + createParser(this.failingHtml); + ScriptVisitor visitor = new ScriptVisitor(); + this.parser.visitAllNodesWith(visitor); + String scriptNodeHtml = visitor.scriptTag.toHtml(); + assertEquals("Script parsing not working", this.failingScriptTag, scriptNodeHtml); + } + + public void testScriptTagNotWorkingInner() throws Exception { + createParser(this.failingHtml2); + ScriptVisitor visitor = new ScriptVisitor(); + this.parser.visitAllNodesWith(visitor); + String scriptNodeHtml = visitor.scriptTag.toHtml(); + assertEquals("Script parsing not working", this.failingScriptTag, scriptNodeHtml); + } + + public void testScriptTagNotWorkingMultiLine() throws Exception { + createParser(this.anotherFailingScriptTag); + ScriptVisitor visitor = new ScriptVisitor(); + this.parser.visitAllNodesWith(visitor); + String scriptNodeHtml = visitor.scriptTag.toHtml(); + assertEquals("Script parsing not working", this.anotherFailingScriptTag, scriptNodeHtml); + } + + /** + * Implement test case NodeVisitor. + */ + public final class ScriptVisitor extends NodeVisitor { + + /** Keps the only script tag. */ + public ScriptTag scriptTag; + + /** + * Creates a new ScriptVisitor object. + */ + public ScriptVisitor() { + super(true, true); + } + + /** + * @see org.htmlparser.visitors.NodeVisitor + */ + public void visitTag(final Tag n) { + if ((null != n.getParent()) + || ((n instanceof CompositeTag) + && (null == ((CompositeTag) n).getEndTag()))) { + + if (n instanceof ScriptTag) { + this.scriptTag = (ScriptTag) n; + } + } else { + if (n instanceof ScriptTag) { + this.scriptTag = (ScriptTag) n; + } + } + } + } +} + diff --git a/src/org/htmlparser/tests/visitorsTests/StringFindingVisitorTest.java b/src/tests/org/htmlparser/tests/visitorsTests/StringFindingVisitorTest.java similarity index 100% rename from src/org/htmlparser/tests/visitorsTests/StringFindingVisitorTest.java rename to src/tests/org/htmlparser/tests/visitorsTests/StringFindingVisitorTest.java diff --git a/src/org/htmlparser/tests/visitorsTests/TagFindingVisitorTest.java b/src/tests/org/htmlparser/tests/visitorsTests/TagFindingVisitorTest.java similarity index 100% rename from src/org/htmlparser/tests/visitorsTests/TagFindingVisitorTest.java rename to src/tests/org/htmlparser/tests/visitorsTests/TagFindingVisitorTest.java diff --git a/src/org/htmlparser/tests/visitorsTests/TextExtractingVisitorTest.java b/src/tests/org/htmlparser/tests/visitorsTests/TextExtractingVisitorTest.java similarity index 100% rename from src/org/htmlparser/tests/visitorsTests/TextExtractingVisitorTest.java rename to src/tests/org/htmlparser/tests/visitorsTests/TextExtractingVisitorTest.java diff --git a/src/org/htmlparser/tests/visitorsTests/UrlModifyingVisitorTest.java b/src/tests/org/htmlparser/tests/visitorsTests/UrlModifyingVisitorTest.java similarity index 100% rename from src/org/htmlparser/tests/visitorsTests/UrlModifyingVisitorTest.java rename to src/tests/org/htmlparser/tests/visitorsTests/UrlModifyingVisitorTest.java From e4d220390d8787feb59b4b5fb1408774caeb9049 Mon Sep 17 00:00:00 2001 From: Hiroshi Miura Date: Sun, 29 Jan 2023 12:45:30 +0900 Subject: [PATCH 02/12] chore: migrate to gradle build system --- .gitignore | 2 + apps/lexerapplications/tabby/build.gradle | 11 + .../lexerapplications/thumbelina/build.gradle | 13 + apps/parserapplications/build.gradle | 13 + build.gradle.kts | 102 ++++++++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 60756 bytes gradle/wrapper/gradle-wrapper.properties | 5 + gradlew | 240 ++++++++++++++++++ gradlew.bat | 91 +++++++ settings.gradle | 2 + src/build.xml | 65 +---- 11 files changed, 485 insertions(+), 59 deletions(-) create mode 100644 .gitignore create mode 100644 apps/lexerapplications/tabby/build.gradle create mode 100644 apps/lexerapplications/thumbelina/build.gradle create mode 100644 apps/parserapplications/build.gradle create mode 100644 build.gradle.kts create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..c178e179 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.class +.gradle diff --git a/apps/lexerapplications/tabby/build.gradle b/apps/lexerapplications/tabby/build.gradle new file mode 100644 index 00000000..c1162a0b --- /dev/null +++ b/apps/lexerapplications/tabby/build.gradle @@ -0,0 +1,11 @@ +plugins { + id 'application' +} + +application { + mainClass = 'org.htmlparser.lexerapplications.tabby.Tabby' +} + +dependencies { + implementation rootProject +} \ No newline at end of file diff --git a/apps/lexerapplications/thumbelina/build.gradle b/apps/lexerapplications/thumbelina/build.gradle new file mode 100644 index 00000000..f9680610 --- /dev/null +++ b/apps/lexerapplications/thumbelina/build.gradle @@ -0,0 +1,13 @@ +plugins { + id 'application' +} + +applicationName = 'Thumbelina' + +application { + mainClass = 'org.htmlparser.lexerapplications.thumbelina.Thumbelina' +} + +dependencies { + implementation rootProject +} \ No newline at end of file diff --git a/apps/parserapplications/build.gradle b/apps/parserapplications/build.gradle new file mode 100644 index 00000000..dd804ea2 --- /dev/null +++ b/apps/parserapplications/build.gradle @@ -0,0 +1,13 @@ +plugins { + id 'application' +} + +applicationName = 'FilterBuilder' + +application { + mainClass = 'org.htmlparser.parserapplications.filterbuilder.FilterBuilder' +} + +dependencies { + implementation rootProject +} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 00000000..fa53c0f0 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,102 @@ +plugins { + application + `java-library` + `maven-publish` + signing + id("io.github.gradle-nexus.publish-plugin") version "1.1.0" +} + +group = "org.omegat" +version = "1.6" + +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(8)) + } + withSourcesJar() + withJavadocJar() +} + +sourceSets { + main { + java { + srcDir("src/src") + } + } + test { + java { + srcDir("src/tests") + } + } +} + +repositories { + mavenCentral() +} + +val javaHome = System.getProperty("java.home") + +dependencies { + // Test dependencies + testImplementation(files("${javaHome}/../lib/tools.jar")) + testImplementation("junit:junit:3.8.2") +} + +publishing { + publications { + create("mavenJava") { + from(components["java"]) + pom { + name.set("htmlparser") + description.set("html parser library") + url.set("https://github.com/omegat-org/htmlparser") + licenses { + license { + name.set("The GNU Lesser General Public License, Version 2.1") + url.set("https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html") + distribution.set("repo") + } + } + developers { + developer { + id.set("miurahr") + name.set("Hiroshi Miura") + email.set("miurahr@linux.com") + } + } + scm { + connection.set("scm:git:git://github.com/omegat-org/htmlparser.git") + developerConnection.set("scm:git:git://github.com/omegat-org/htmlparser.git") + url.set("https://github.com/omegat-org/htmlparser") + } + } + } + } +} + +val signKey = listOf("signingKey", "signing.keyId", "signing.gnupg.keyName").find {project.hasProperty(it)} +signing { + when (signKey) { + "signingKey" -> { + val signingKey: String? by project + val signingPassword: String? by project + useInMemoryPgpKeys(signingKey, signingPassword) + } + "signing.keyId" -> { + val keyId: String? by project + val password: String? by project + val secretKeyRingFile: String? by project // e.g. gpg --export-secret-keys > secring.gpg + useInMemoryPgpKeys(keyId, password, secretKeyRingFile) + } + "signing.gnupg.keyName" -> { + useGpgCmd() + } + } + sign(publishing.publications["mavenJava"]) +} + +nexusPublishing { + repositories{ + sonatype() + } +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..249e5832f090a2944b7473328c07c9755baa3196 GIT binary patch literal 60756 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 '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 00000000..f127cfd4 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,91 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 00000000..b61db1ab --- /dev/null +++ b/settings.gradle @@ -0,0 +1,2 @@ +rootProject.name="htmlparser" +include 'apps:lexerapplications:thumbelina','apps:lexerapplications:tabby', 'apps:parserapplications' \ No newline at end of file diff --git a/src/build.xml b/src/build.xml index 03fb79ea..427a6d68 100644 --- a/src/build.xml +++ b/src/build.xml @@ -91,7 +91,7 @@ Update the Web Site --> - + - - - - - - - - - - - - + debug="on" classpath="${classes}" source="1.7" encoding="iso-8859-1"/> @@ -273,11 +244,8 @@ Update the Web Site - + - - @@ -324,8 +292,7 @@ Update the Web Site + includes="**/*.class"/> @@ -401,8 +368,7 @@ Update the Web Site - @@ -504,25 +470,6 @@ Update the Web Site - - - - - - - - - - - - - - - - - - From b0fd2f1b699eebc2dfaef2397d84a19c07f071c5 Mon Sep 17 00:00:00 2001 From: Hiroshi Miura Date: Sun, 29 Jan 2023 12:36:39 +0900 Subject: [PATCH 03/12] fix: javadoc errors --- src/src/org/htmlparser/Attribute.java | 30 +++---- src/src/org/htmlparser/Node.java | 4 +- src/src/org/htmlparser/Parser.java | 37 ++++---- .../htmlparser/PrototypicalNodeFactory.java | 4 +- src/src/org/htmlparser/beans/FilterBean.java | 4 +- .../org/htmlparser/beans/HTMLTextBean.java | 4 +- src/src/org/htmlparser/beans/StringBean.java | 6 +- .../htmlparser/http/ConnectionManager.java | 1 + .../htmlparser/lexer/InputStreamSource.java | 3 +- src/src/org/htmlparser/lexer/Lexer.java | 32 +++---- src/src/org/htmlparser/lexer/Page.java | 10 +-- src/src/org/htmlparser/lexer/Stream.java | 2 +- .../org/htmlparser/nodes/AbstractNode.java | 2 +- src/src/org/htmlparser/nodes/RemarkNode.java | 2 +- src/src/org/htmlparser/nodes/TextNode.java | 1 + .../scanners/CompositeTagScanner.java | 2 + .../htmlparser/scanners/ScriptScanner.java | 4 +- src/src/org/htmlparser/tags/AppletTag.java | 12 +-- src/src/org/htmlparser/tags/CompositeTag.java | 10 +-- src/src/org/htmlparser/tags/LabelTag.java | 2 +- src/src/org/htmlparser/tags/LinkTag.java | 4 +- src/src/org/htmlparser/tags/ObjectTag.java | 22 ++--- src/src/org/htmlparser/tags/SelectTag.java | 2 +- src/src/org/htmlparser/tags/TableRow.java | 6 +- src/src/org/htmlparser/tags/TableTag.java | 4 +- .../htmlparser/util/CharacterReference.java | 8 +- src/src/org/htmlparser/util/NodeIterator.java | 2 + src/src/org/htmlparser/util/NodeList.java | 6 +- .../org/htmlparser/util/NodeTreeWalker.java | 16 +--- src/src/org/htmlparser/util/ParserUtils.java | 89 ++++++++++++++++--- src/src/org/htmlparser/util/Translate.java | 2 + src/src/org/htmlparser/util/sort/Ordered.java | 4 +- .../org/htmlparser/visitors/NodeVisitor.java | 1 + 33 files changed, 199 insertions(+), 139 deletions(-) diff --git a/src/src/org/htmlparser/Attribute.java b/src/src/org/htmlparser/Attribute.java index fe1acc06..9f84930d 100644 --- a/src/src/org/htmlparser/Attribute.java +++ b/src/src/org/htmlparser/Attribute.java @@ -65,8 +65,7 @@ * * Note that the assignment value and quoting need to be set separately when * building the attribute from scratch using the properties. - *

- * + *
* * * @@ -169,21 +168,19 @@ * HTML 4.01 Specification, W3C Recommendation 24 December 1999 * http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.2:

* - * 3.2.2 Attributes

+ * 3.2.2 Attributes * Elements may have associated properties, called attributes, which may * have values (by default, or set by authors or scripts). Attribute/value - * pairs appear before the final ">" of an element's start tag. Any number + * pairs appear before the final ">" of an element's start tag. Any number * of (legal) attribute value pairs, separated by spaces, may appear in an - * element's start tag. They may appear in any order.

+ * element's start tag. They may appear in any order. * In this example, the id attribute is set for an H1 element: - *

  * 
- * {@.html
- *  

+ * + * <H1 id="section1"> * This is an identified heading thanks to the id attribute - *

} + * </H1> *
- *
* By default, SGML requires that all attribute values be delimited using * either double quotation marks (ASCII decimal 34) or single quotation * marks (ASCII decimal 39). Single quote marks can be included within the @@ -191,22 +188,21 @@ * vice versa. Authors may also use numeric character references to * represent double quotes (&#34;) and single quotes (&#39;). * For doublequotes authors can also use the character entity reference - * &quot;.

+ * &quot;. * In certain cases, authors may specify the value of an attribute without * any quotation marks. The attribute value may only contain letters * (a-z and A-Z), digits (0-9), hyphens (ASCII decimal 45), * periods (ASCII decimal 46), underscores (ASCII decimal 95), * and colons (ASCII decimal 58). We recommend using quotation marks even - * when it is possible to eliminate them.

- * Attribute names are always case-insensitive.

+ * when it is possible to eliminate them. + * Attribute names are always case-insensitive. * Attribute values are generally case-insensitive. The definition of each * attribute in the reference manual indicates whether its value is - * case-insensitive.

+ * case-insensitive. * All the attributes defined by this specification are listed in the * attribute - * index.

+ * index. * - *

*/ public class Attribute implements @@ -714,14 +710,12 @@ public int getLength () * Suitable for insertion into a tag, the output is one of * the forms: * - *

      * value
      * name
      * name=
      * name=value
      * name='value'
      * name="value"
-     * 
* * @return A string that can be used within a tag. */ diff --git a/src/src/org/htmlparser/Node.java b/src/src/org/htmlparser/Node.java index 6482d9df..d0f72b4f 100644 --- a/src/src/org/htmlparser/Node.java +++ b/src/src/org/htmlparser/Node.java @@ -127,7 +127,7 @@ public interface Node * e.nextNode ().collectInto (list, filter); * * Thus, list will hold all the link nodes, irrespective of how - * deep the links are embedded.

+ * deep the links are embedded. *

Another way to accomplish the same objective is: *

      * NodeList list = new NodeList ();
@@ -139,7 +139,7 @@ public interface Node
      * registered for more than one node name, e.g. <LINK> tags too.
      * @param list The list to collect nodes into.
      * @param filter The criteria to use when deciding if a node should
-     * be added to the list.

+ * be added to the list. */ void collectInto (NodeList list, NodeFilter filter); diff --git a/src/src/org/htmlparser/Parser.java b/src/src/org/htmlparser/Parser.java index b44f7001..cdd4ab89 100644 --- a/src/src/org/htmlparser/Parser.java +++ b/src/src/org/htmlparser/Parser.java @@ -63,11 +63,9 @@ * {@link #visitAllNodesWith NodeVisitor}. *

Typical usage of the parser is: * - *

  * Parser parser = new Parser ("http://whatever");
  * NodeList list = parser.parse (null);
  * // do something with your list of nodes.
- * 
*

*

What types of nodes and what can be done with them is dependant on the * setup, but in general a node can be converted back to HTML and it's @@ -75,18 +73,17 @@ * nested. See the {@link Node} interface.

*

For example, if the URL contains:
* - * {@.html - * - * - * Mondays -- What a bad idea. - * - * + * <html> + * <head> + * <title>Mondays -- What a bad idea.<title> + * <head> + *<body BGCOLOR="#FFFFFF"> * Most people have a pathological hatred of Mondays... - * - * } + * <body> + * </html> *
* and the example code above is used, the list contain only one element, the - * {@.html } node. This node is a {@link org.htmlparser.tags tag}, + * <html> node. This node is a {@link org.htmlparser.tags tag}, * which is an object of class * {@link org.htmlparser.tags.Html Html} if the default {@link NodeFactory} * (a {@link PrototypicalNodeFactory}) is used.

@@ -95,15 +92,13 @@ * conscious of the possibility of whitespace between nodes, e.g. in the example * above: * - *
  * Node node = list.elementAt (0);
  * NodeList sublist = node.getChildren ();
  * System.out.println (sublist.size ());
- * 
*
- * would print out 5, not 2, because there are newlines after {@.html }, - * {@.html } and {@.html } that are children of the HTML node - * besides the {@.html } and {@.html } nodes.

+ * would print out 5, not 2, because there are newlines after <html>, + * </head> and </body> that are children of the HTML node + * besides the <head> and <body> nodes.

*

Because processing nodes is so common, two interfaces are provided to * ease this task, {@link org.htmlparser.filters filters} * and {@link org.htmlparser.visitors visitors}. @@ -614,7 +609,6 @@ public void reset () * In general, when parsing with an iterator or processing a NodeList, * you will need to use recursion. For example: * - *

      * void processMyNodes (Node node)
      * {
      *     if (node instanceof TextNode)
@@ -647,10 +641,9 @@ public void reset ()
      * Parser parser = new Parser ("http://www.yahoo.com");
      * for (NodeIterator i = parser.elements (); i.hasMoreElements (); )
      *     processMyNodes (i.nextNode ());
-     * 
* * @throws ParserException If a parsing error occurs. - * @return An iterator over the top level nodes (usually {@.html }). + * @return An iterator over the top level nodes (usually <htmlGgt;. */ public NodeIterator elements () throws ParserException { @@ -666,10 +659,10 @@ public NodeIterator elements () throws ParserException * is more often used to extract information from a web page). *

For example, to replace the entire contents of the HEAD with a * single TITLE tag you could do this: - *

+     * 
      * NodeList nl = parser.parse (null); // here is your two node list
      * NodeList heads = nl.extractAllNodesThatMatch (new TagNameFilter ("HEAD"))
-     * if (heads.size () > 0) // there may not be a HEAD tag
+     * if (heads.size () > 0) // there may not be a HEAD tag
      * {
      *     Head head = heads.elementAt (0); // there should be only one
      *     head.removeAll (); // clean out the contents
@@ -682,7 +675,7 @@ public NodeIterator elements () throws ParserException
      *     head.add (title);
      * }
      * System.out.println (nl.toHtml ()); // output the modified HTML
-     * 
+ * * @return The list of matching nodes (for a null * filter this is all the top level nodes). * @param filter The filter to apply to the parsed nodes, diff --git a/src/src/org/htmlparser/PrototypicalNodeFactory.java b/src/src/org/htmlparser/PrototypicalNodeFactory.java index 4624f673..7f0d9c85 100644 --- a/src/src/org/htmlparser/PrototypicalNodeFactory.java +++ b/src/src/org/htmlparser/PrototypicalNodeFactory.java @@ -113,7 +113,7 @@ * }); * Parser parser = new Parser (); * parser.setNodeFactory (factory); - *

+ * *

Here is an example of using a custom link tag, in this case just * printing the URL, which illustrates registering a tag: *

@@ -131,7 +131,7 @@
  * factory.registerTag (new PrintingLinkTag ());
  * Parser parser = new Parser ();
  * parser.setNodeFactory (factory);
- * 

+ * */ public class PrototypicalNodeFactory implements diff --git a/src/src/org/htmlparser/beans/FilterBean.java b/src/src/org/htmlparser/beans/FilterBean.java index bce5d018..57e045c4 100644 --- a/src/src/org/htmlparser/beans/FilterBean.java +++ b/src/src/org/htmlparser/beans/FilterBean.java @@ -95,7 +95,7 @@ public class FilterBean /** * The recursion behaviour for elements of the filter array. * If true the filters are applied recursively. - * @see org.htmlparser.util.NodeList#extractAllNodesThatMatch(NodeFilter, boolean). + * @see org.htmlparser.util.NodeList#extractAllNodesThatMatch(NodeFilter, boolean) extractAllNodesThatMatch */ protected boolean mRecursive; @@ -428,7 +428,7 @@ public boolean getRecursive () * Set the recursion behaviour. * @param recursive If true the * extractAllNodesThatMatch() call is performed recursively. - * @see org.htmlparser.util.NodeList#extractAllNodesThatMatch(NodeFilter, boolean). + * @see org.htmlparser.util.NodeList#extractAllNodesThatMatch(NodeFilter, boolean) extractAllNodesThatMatch */ public void setRecursive (boolean recursive) { diff --git a/src/src/org/htmlparser/beans/HTMLTextBean.java b/src/src/org/htmlparser/beans/HTMLTextBean.java index cbb3d681..f3ccde85 100644 --- a/src/src/org/htmlparser/beans/HTMLTextBean.java +++ b/src/src/org/htmlparser/beans/HTMLTextBean.java @@ -172,7 +172,7 @@ public void setURL (String url) /** * Get the current 'replace non breaking spaces' state. * @return The true if non-breaking spaces (character '\u00a0', - * numeric character reference &160; or character entity reference  ) + * numeric character reference   or character entity reference  ) * are to be replaced with normal spaces (character '\u0020'). */ public boolean getReplaceNonBreakingSpaces () @@ -183,7 +183,7 @@ public boolean getReplaceNonBreakingSpaces () /** * Set the 'replace non breaking spaces' state. * @param replace true if non-breaking spaces (character '\u00a0', - * numeric character reference &160; or character entity reference  ) + * numeric character reference   or character entity reference  ) * are to be replaced with normal spaces (character '\u0020'). */ public void setReplaceNonBreakingSpaces (boolean replace) diff --git a/src/src/org/htmlparser/beans/StringBean.java b/src/src/org/htmlparser/beans/StringBean.java index 6821c252..b9240229 100644 --- a/src/src/org/htmlparser/beans/StringBean.java +++ b/src/src/org/htmlparser/beans/StringBean.java @@ -56,7 +56,7 @@ * * You can also use the StringBean as a NodeVisitor on your own parser, * in which case you have to refetch your page if you change one of the - * properties because it resets the Strings property:

+ * properties because it resets the Strings property: *
  *     StringBean sb = new StringBean ();
  *     Parser parser = new Parser ("http://cbc.ca");
@@ -539,8 +539,8 @@ public void setReplaceNonBreakingSpaces (boolean replace)
     /**
      * Get the current 'collapse whitespace' state.
      * If set to true this emulates the operation of browsers
-     * in interpretting text where user agents should collapse input
-     * white space sequences when producing output inter-word space.
+     * in interpretting text where "user agents should collapse input
+     * white space sequences when producing output inter-word space".
      * See HTML specification section 9.1 White space
      * 
      * http://www.w3.org/TR/html4/struct/text.html#h-9.1.
diff --git a/src/src/org/htmlparser/http/ConnectionManager.java b/src/src/org/htmlparser/http/ConnectionManager.java
index ab489b45..32a9145d 100644
--- a/src/src/org/htmlparser/http/ConnectionManager.java
+++ b/src/src/org/htmlparser/http/ConnectionManager.java
@@ -520,6 +520,7 @@ public void setRedirectionProcessingEnabled (boolean enabled)
     /**
      * Get the Location field if any.
      * @param http The connection to get the location from.
+     * @return result
      */
     protected String getLocation (HttpURLConnection http)
     {
diff --git a/src/src/org/htmlparser/lexer/InputStreamSource.java b/src/src/org/htmlparser/lexer/InputStreamSource.java
index 1deecedf..947dbb93 100644
--- a/src/src/org/htmlparser/lexer/InputStreamSource.java
+++ b/src/src/org/htmlparser/lexer/InputStreamSource.java
@@ -191,7 +191,8 @@ private void writeObject (ObjectOutputStream out)
     /**
      * Deserialization support.
      * @param in Where to read this object from.
-     * @exception IOException If deserialization has a problem.
+     * @throws IOException If deserialization has a problem.
+     * @throws ClassNotFoundException when error
      */
     private void readObject (ObjectInputStream in)
         throws
diff --git a/src/src/org/htmlparser/lexer/Lexer.java b/src/src/org/htmlparser/lexer/Lexer.java
index 115254e4..754426d9 100644
--- a/src/src/org/htmlparser/lexer/Lexer.java
+++ b/src/src/org/htmlparser/lexer/Lexer.java
@@ -407,7 +407,7 @@ else if ('!' == ch)
      * According to appendix 
      * B.3.2 Specifying non-HTML data of the
      * HTML 4.01 Specification:
- * + * * Element content
* When script or style data is the content of an element (SCRIPT and STYLE), * the data begins immediately after the element start tag and ends at the @@ -415,7 +415,7 @@ else if ('!' == ch) * note that this may not be the element's end tag. * Authors should therefore escape "</" within the content. Escape mechanisms * are specific to each scripting or style sheet language. - *
+ * * @return The TextNode of the CDATA or null if none. * @exception ParserException If a problem occurs reading from the source. */ @@ -928,12 +928,12 @@ private void double_quote (Vector attributes, int[] bookmarks) * HTML 4.01 Specification, W3C Recommendation 24 December 1999 * http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.2

* - * 3.2.2 Attributes

+ * 3.2.2 Attributes * Elements may have associated properties, called attributes, which may * have values (by default, or set by authors or scripts). Attribute/value - * pairs appear before the final ">" of an element's start tag. Any number + * pairs appear before the final ">" of an element's start tag. Any number * of (legal) attribute value pairs, separated by spaces, may appear in an - * element's start tag. They may appear in any order.

+ * element's start tag. They may appear in any order. * In this example, the id attribute is set for an H1 element: * * <H1 id="section1"> @@ -949,19 +949,19 @@ private void double_quote (Vector attributes, int[] bookmarks) * vice versa. Authors may also use numeric character references to * represent double quotes (&#34;) and single quotes (&#39;). * For doublequotes authors can also use the character entity reference - * &quot;.

+ * &quot;. * In certain cases, authors may specify the value of an attribute without * any quotation marks. The attribute value may only contain letters * (a-z and A-Z), digits (0-9), hyphens (ASCII decimal 45), * periods (ASCII decimal 46), underscores (ASCII decimal 95), * and colons (ASCII decimal 58). We recommend using quotation marks even - * when it is possible to eliminate them.

- * Attribute names are always case-insensitive.

+ * when it is possible to eliminate them. + * Attribute names are always case-insensitive. * Attribute values are generally case-insensitive. The definition of each * attribute in the reference manual indicates whether its value is - * case-insensitive.

+ * case-insensitive. * All the attributes defined by this specification are listed in the - * attribute index.

+ * attribute index. * *

* This method uses a state machine with the following states: @@ -1191,12 +1191,12 @@ protected Node makeTag (int start, int end, Vector attributes) * HTML 4.01 Specification, W3C Recommendation 24 December 1999 * http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.4

* - * 3.2.4 Comments

- * HTML comments have the following syntax:

+ * 3.2.4 Comments + * HTML comments have the following syntax: * - * <!-- this is a comment -->

- * <!-- and so is this one,

- * which occupies more than one line -->

+ * <!-- this is a comment --> + * <!-- and so is this one, + * which occupies more than one line --> * * White space is not permitted between the markup declaration * open delimiter("<!") and the comment open delimiter ("--"), @@ -1206,7 +1206,7 @@ protected Node makeTag (int start, int end, Vector attributes) * Authors should avoid putting two or more adjacent hyphens inside comments. * Information that appears between comments has no special meaning * (e.g., character references are not interpreted as such). - * Note that comments are markup.

+ * Note that comments are markup. * *

* This method uses a state machine with the following states: diff --git a/src/src/org/htmlparser/lexer/Page.java b/src/src/org/htmlparser/lexer/Page.java index 4052ed1f..b174efc3 100644 --- a/src/src/org/htmlparser/lexer/Page.java +++ b/src/src/org/htmlparser/lexer/Page.java @@ -120,12 +120,12 @@ public Page () * Construct a page reading from a URL connection. * @param connection A fully conditioned connection. The connect() * method will be called so it need not be connected yet. - * @exception ParserException An exception object wrapping a number of + * @throws ParserException An exception object wrapping a number of * possible error conditions, some of which are outlined below. - *

  • IOException If an i/o exception occurs creating the - * source.
  • - *
  • UnsupportedEncodingException if the character set specified in the - * HTTP header is not supported.
  • + * IOException: If an i/o exception occurs creating the + * source. + * UnsupportedEncodingException if the character set specified in the + * HTTP header is not supported. */ public Page (URLConnection connection) throws ParserException { diff --git a/src/src/org/htmlparser/lexer/Stream.java b/src/src/org/htmlparser/lexer/Stream.java index 5869e7de..07481bd7 100644 --- a/src/src/org/htmlparser/lexer/Stream.java +++ b/src/src/org/htmlparser/lexer/Stream.java @@ -312,7 +312,7 @@ public synchronized void close () throws IOException * *

    The general contract of reset is: * - *

    * Thus, list will hold all the link nodes, irrespective of how - * deep the links are embedded.

    + * deep the links are embedded. *

    Another way to accomplish the same objective is: *

          * NodeList list = new NodeList();
    @@ -424,7 +424,7 @@ public Node childAt (int index)
          *      e.nextNode().collectInto(list, filter);
          * 
    * This is slightly less specific because the LinkTag class may be - * registered for more than one node name, e.g. <LINK> tags too.

    + * registered for more than one node name, e.g. <LINK> tags too. * @param list The list to add nodes to. * @param filter The filter to apply. * @see org.htmlparser.filters @@ -499,8 +499,8 @@ public int getChildCount() /** * Get the end tag for this tag. - * For example, if the node is {@.html
    } pair. + * @return The textual contents between the <A></A> pair. */ public String getLinkText() { diff --git a/src/src/org/htmlparser/tags/ObjectTag.java b/src/src/org/htmlparser/tags/ObjectTag.java index 074c32aa..5e85ea20 100644 --- a/src/src/org/htmlparser/tags/ObjectTag.java +++ b/src/src/org/htmlparser/tags/ObjectTag.java @@ -199,7 +199,7 @@ public Hashtable getObjectParams () } /** - * Get the PARAM tag with the given name. + * Get the PARAM tag with the given name. * @param key The object parameter name to get. * @return The value of the parameter or null if there is no parameter of that name. */ @@ -210,7 +210,7 @@ public String getParameter (String key) /** * Get an enumeration over the (String) parameter names. - * @return An enumeration of the PARAM tag NAME attributes. + * @return An enumeration of the PARAM tag NAME attributes. */ public Enumeration getParameterNames () { @@ -218,7 +218,7 @@ public Enumeration getParameterNames () } /** - * Set the CLASSID attribute. + * Set the CLASSID attribute. * @param newClassId The new classid. */ public void setObjectClassId (String newClassId) @@ -227,7 +227,7 @@ public void setObjectClassId (String newClassId) } /** - * Set the CODEBASE attribute. + * Set the CODEBASE attribute. * @param newCodeBase The new codebase. */ public void setObjectCodeBase (String newCodeBase) @@ -236,7 +236,7 @@ public void setObjectCodeBase (String newCodeBase) } /** - * Set the CODETYPE attribute. + * Set the CODETYPE attribute. * @param newCodeType The new codetype. */ public void setObjectCodeType (String newCodeType) @@ -245,7 +245,7 @@ public void setObjectCodeType (String newCodeType) } /** - * Set the DATA attribute. + * Set the DATA attribute. * @param newData The new data. */ public void setObjectData (String newData) @@ -254,7 +254,7 @@ public void setObjectData (String newData) } /** - * Set the HEIGHT attribute. + * Set the HEIGHT attribute. * @param newHeight The new height. */ public void setObjectHeight (String newHeight) @@ -263,7 +263,7 @@ public void setObjectHeight (String newHeight) } /** - * Set the STANDBY attribute. + * Set the STANDBY attribute. * @param newStandby The new standby. */ public void setObjectStandby (String newStandby) @@ -272,7 +272,7 @@ public void setObjectStandby (String newStandby) } /** - * Set the TYPE attribute. + * Set the TYPE attribute. * @param newType The new type. */ public void setObjectType (String newType) @@ -281,7 +281,7 @@ public void setObjectType (String newType) } /** - * Set the WIDTH attribute. + * Set the WIDTH attribute. * @param newWidth The new width. */ public void setObjectWidth (String newWidth) @@ -290,7 +290,7 @@ public void setObjectWidth (String newWidth) } /** - * Set the enclosed PARAM children. + * Set the enclosed PARAM children. * @param newObjectParams The new parameters. */ public void setObjectParams (Hashtable newObjectParams) diff --git a/src/src/org/htmlparser/tags/SelectTag.java b/src/src/org/htmlparser/tags/SelectTag.java index e1cc5b05..7d8f47bf 100644 --- a/src/src/org/htmlparser/tags/SelectTag.java +++ b/src/src/org/htmlparser/tags/SelectTag.java @@ -84,7 +84,7 @@ public String[] getEndTagEnders () /** * Get the list of options in this SELECT tag. - * @return The {@.html } tags and - * may be incorrect if the {@.html } tags span multiple rows. + * Note: this is a a simple count of the number of <TR> tags and + * may be incorrect if the <TR> tags span multiple rows. */ public int getRowCount () { diff --git a/src/src/org/htmlparser/util/CharacterReference.java b/src/src/org/htmlparser/util/CharacterReference.java index 07340851..d1eea62c 100644 --- a/src/src/org/htmlparser/util/CharacterReference.java +++ b/src/src/org/htmlparser/util/CharacterReference.java @@ -14,9 +14,11 @@ * Structure to hold a character and it's equivalent entity reference kernel. * For the character reference &copy; the character would be '©' and * the kernel would be "copy", for example.

    - * Character references are described at http://www.w3.org/TR/REC-html40/charset.html#entities - * Supports the Ordered interface so it's easy to create a list sorted by - * kernel, to perform binary searches on.

    + * Character references are described at + * Supports the Ordered interface, so it's easy to create a list sorted by + * kernel, to perform binary searches on. + * + * @see Character references */ public class CharacterReference implements diff --git a/src/src/org/htmlparser/util/NodeIterator.java b/src/src/org/htmlparser/util/NodeIterator.java index 8d7611dd..5840efec 100644 --- a/src/src/org/htmlparser/util/NodeIterator.java +++ b/src/src/org/htmlparser/util/NodeIterator.java @@ -32,12 +32,14 @@ public interface NodeIterator { /** * Check if more nodes are available. * @return true if a call to nextHTMLNode() will succeed. + * @throws ParserException when error */ public boolean hasMoreNodes() throws ParserException; /** * Get the next node. * @return The next node in the HTML stream, or null if there are no more nodes. + * @throws ParserException when error */ public Node nextNode() throws ParserException; diff --git a/src/src/org/htmlparser/util/NodeList.java b/src/src/org/htmlparser/util/NodeList.java index 82150048..8ed2da32 100644 --- a/src/src/org/htmlparser/util/NodeList.java +++ b/src/src/org/htmlparser/util/NodeList.java @@ -285,7 +285,7 @@ public NodeList extractAllNodesThatMatch (NodeFilter filter) /** * Filter the list with the given filter. * @param filter The filter to use. - * @param recursive If true digs into the children recursively. + * @param recursive If true digs into the children recursively. * @return A new node array containing the nodes accepted by the filter. * This is a linear list and preserves the nested structure of the returned * nodes only. @@ -325,7 +325,7 @@ public void keepAllNodesThatMatch (NodeFilter filter) /** * Remove nodes not matching the given filter. * @param filter The filter to use. - * @param recursive If true digs into the children recursively. + * @param recursive If true digs into the children recursively. */ public void keepAllNodesThatMatch (NodeFilter filter, boolean recursive) { @@ -360,6 +360,8 @@ public void keepAllNodesThatMatch (NodeFilter filter, boolean recursive) * list.visitAllNodesWith (visitor); * System.out.println (list.toHtml ()); * + * @param visitor visitor + * @throws ParserException when error */ public void visitAllNodesWith (NodeVisitor visitor) throws diff --git a/src/src/org/htmlparser/util/NodeTreeWalker.java b/src/src/org/htmlparser/util/NodeTreeWalker.java index 62c5381b..a5fdfaa4 100644 --- a/src/src/org/htmlparser/util/NodeTreeWalker.java +++ b/src/src/org/htmlparser/util/NodeTreeWalker.java @@ -31,16 +31,8 @@ /** * A class for walking a tree of {@link Node} objects, in either a depth-first or breadth-first manner. * The following two diagrams show the represent tree traversal with the two different methods. - *

    Valid States for Attributes.
    Description} tags contained by this tag. + * @return The {\@.html <TD>} tags contained by this tag. */ public TableColumn[] getColumns () { @@ -131,8 +131,8 @@ public TableColumn[] getColumns () /** * Get the number of columns in this row. * @return The number of columns in this row. - * Note: this is a a simple count of the number of {@.html } tags and - * may be incorrect if the {@.html } tags span multiple columns. + * Note: this is a a simple count of the number of <TD> tags and + * may be incorrect if the <TD> tags span multiple columns. */ public int getColumnCount () { diff --git a/src/src/org/htmlparser/tags/TableTag.java b/src/src/org/htmlparser/tags/TableTag.java index 9cfcf57f..b1e11f26 100644 --- a/src/src/org/htmlparser/tags/TableTag.java +++ b/src/src/org/htmlparser/tags/TableTag.java @@ -117,8 +117,8 @@ public TableRow[] getRows () /** * Get the number of rows in this table. * @return The number of rows in this table. - * Note: this is a a simple count of the number of {@.html
    - * - * - * - * - * - * - * - * - *
    Depth-first traversalBreadth-first traversal
    + * Depth-first traversal + * Breadth-first traversal * @author ian_macfarlane */ public class NodeTreeWalker implements NodeIterator @@ -98,9 +90,9 @@ public NodeTreeWalker(Node rootNode, boolean depthFirst) * Creates a new instance of NodeTreeWalker using the specified type of tree traversal and maximum depth from the root Node to traverse. * @param rootNode The Node to set as the root of the tree. * @param depthFirst Whether to use depth-first (true) or breadth-first (false) tree traversal. - * @param maxDepth The maximum depth from the root Node that this NodeTreeWalker may traverse. This must be > 0 or equal to -1. + * @param maxDepth The maximum depth from the root Node that this NodeTreeWalker may traverse. This must be > 0 or equal to -1. * @throws NullPointerException if rootNode is null. - * @throws IllegalArgumentException maxDepth is not > 0 or equal to -1. + * @throws IllegalArgumentException maxDepth is not > 0 or equal to -1. */ public NodeTreeWalker(Node rootNode, boolean depthFirst, int maxDepth) { diff --git a/src/src/org/htmlparser/util/ParserUtils.java b/src/src/org/htmlparser/util/ParserUtils.java index 5c18d511..613f0c6b 100644 --- a/src/src/org/htmlparser/util/ParserUtils.java +++ b/src/src/org/htmlparser/util/ParserUtils.java @@ -239,8 +239,9 @@ public static String trimButDigitsBeginEnd (String input, String charsDoNotBeRem * Split the input string considering as string separator * all the spaces and tabs like chars and * the chars specified in the input variable charsToBeRemoved. - *
    For example if you call splitSpaces("<DIV> +12.5, +3.4 </DIV>", "<>DIV/,"), - * <BR>you obtain an array of strings {"+12.5", "+3.4"} as output (space chars and <,>,D,I,V,/ and the comma are chars that must be removed). + * For example if you call splitSpaces("<DIV> +12.5, +3.4 </DIV>", "<>DIV/,"), + * < + * you obtain an array of strings {"+12.5", "+3.4"} as output (space chars and <,>,D,I,V,/ and the comma are chars that must be removed). * @param input The string in input. * @param charsToBeRemoved The chars to be removed. * @return The array of strings as output. @@ -300,9 +301,9 @@ public static String[] splitSpaces (String input, String charsToBeRemoved) /** * Remove from the input string all the spaces and tabs like chars. * Remove also the chars specified in the input variable charsToBeRemoved. - *
    For example if you call trimSpaces("<DIV> +12.5 </DIV>", "<>DIV/"), + *
    For example if you call trimSpaces("<DIV> +12.5 </DIV>", "<DIV/"), *
    you obtain a string "+12.5" as output (space chars and <,>,D,I,V,/ are chars that must be removed). - *
    For example if you call trimSpaces("<DIV> Trim All Spaces Also The Ones Inside The String </DIV>", "<>DIV/"), + *
    For example if you call trimSpaces("<DIV> Trim All Spaces Also The Ones Inside The String </DIV>", "<DIV/"), *
    you obtain a string "TrimAllSpacesAlsoTheOnesInsideTheString" as output (all the spaces inside the string are removed). * @param input The string in input. * @param charsToBeRemoved The chars to be removed. @@ -332,9 +333,9 @@ public static String trimSpaces (String input, String charsToBeRemoved) * Remove from the beginning and the end of the input string all the spaces and tabs like chars. * Remove also the chars specified in the input variable charsToBeRemoved. *
    The removal process removes only chars at the beginning and at the end of the string. - *
    For example if you call trimSpacesBeginEnd("<DIV> +12.5 </DIV>", "<>DIV/"), + *
    For example if you call trimSpacesBeginEnd("<DIV> +12.5 </DIV>", "<DIV/"), *
    you obtain a string "+12.5" as output (space chars and <,>,D,I,V,/ are chars that must be removed). - *
    For example if you call trimSpacesBeginEnd("<DIV> Trim all spaces but not the ones inside the string </DIV>", "<>DIV/"), + *
    For example if you call trimSpacesBeginEnd("<DIV> Trim all spaces but not the ones inside the string </DIV>", "<DIV/"), *
    you obtain a string "Trim all spaces but not the ones inside the string" as output (all the spaces inside the string are preserved). * @param input The string in input. * @param charsToBeRemoved The chars to be removed. @@ -528,7 +529,7 @@ public static String trimButCharsBeginEnd (String input, String charsDoNotBeRemo /** * Split the input string considering as string separator * the chars specified in the input variable charsToBeRemoved. - *
    For example if you call splitChars("<DIV> +12.5, +3.4 </DIV>", " <>DIV/,"), + *
    For example if you call splitChars("<DIV> +12.5, +3.4 </DIV>", " </DIV>,"), *
    you obtain an array of strings {"+12.5", "+3.4"} as output (space chars and <,>,D,I,V,/ and the comma are chars that must be removed). * @param input The string in input. * @param charsToBeRemoved The chars to be removed. @@ -588,9 +589,9 @@ public static String[] splitChars (String input, String charsToBeRemoved) /** * Remove from the input string all the chars specified in the input variable charsToBeRemoved. - *
    For example if you call trimChars("<DIV> +12.5 </DIV>", "<>DIV/ "), + *
    For example if you call trimChars("<DIV> +12.5 </DIV>", "DIV/ "), *
    you obtain a string "+12.5" as output (<,>,D,I,V,/ and space char are chars that must be removed). - *
    For example if you call trimChars("<DIV> Trim All Chars Also The Ones Inside The String </DIV>", "<>DIV/ "), + *
    For example if you call trimChars("<DIV> Trim All Chars Also The Ones Inside The String </DIV>", "DIV/ "), *
    you obtain a string "TrimAllCharsAlsoTheOnesInsideTheString" as output (all the spaces inside the string are removed). * @param input The string in input. * @param charsToBeRemoved The chars to be removed. @@ -619,9 +620,9 @@ public static String trimChars (String input, String charsToBeRemoved) /** * Remove from the beginning and the end of the input string all the chars specified in the input variable charsToBeRemoved. *
    The removal process removes only chars at the beginning and at the end of the string. - *
    For example if you call trimCharsBeginEnd("<DIV> +12.5 </DIV>", "<>DIV/ "), + *
    For example if you call trimCharsBeginEnd("<DIV> +12.5 </DIV>", "DIV/ "), *
    you obtain a string "+12.5" as output (' ' is a space char and <,>,D,I,V,/ are chars that must be removed). - *
    For example if you call trimCharsBeginEnd("<DIV> Trim all spaces but not the ones inside the string </DIV>", "<>DIV/ "), + *
    For example if you call trimCharsBeginEnd("<DIV> Trim all spaces but not the ones inside the string </DIV>", "DIV/ "), *
    you obtain a string "Trim all spaces but not the ones inside the string" as output (all the spaces inside the string are preserved). * @param input The string in input. * @param charsToBeRemoved The chars to be removed. @@ -670,6 +671,11 @@ public static String trimCharsBeginEnd (String input, String charsToBeRemoved) /** * Split the input string in a string array, * considering the tags as delimiter for splitting. + * @param input input + * @param tags tag + * @return result + * @throws ParserException when error + * @throws UnsupportedEncodingException when error * @see ParserUtils#splitTags (String input, String[] tags, boolean recursive, boolean insideTag). */ public static String[] splitTags (String input, String[] tags) @@ -694,6 +700,8 @@ public static String[] splitTags (String input, String[] tags) * @param recursive Optional parameter (true if not present), if true delete all the tags recursively. * @param insideTag Optional parameter (true if not present), if true delete also the content of the tags. * @return The string array containing the strings delimited by tags. + * @throws ParserException when error + * @throws UnsupportedEncodingException when error */ public static String[] splitTags (String input, String[] tags, boolean recursive, boolean insideTag) throws ParserException, UnsupportedEncodingException @@ -785,6 +793,11 @@ public static String[] splitTags (String input, String[] tags, boolean recursive * considering the tags as delimiter for splitting. *
    Use Class class as input parameter * instead of tags[] string array. + * @param input input + * @param nodeType node type + * @return result + * @throws ParserException when error + * @throws UnsupportedEncodingException when error * @see ParserUtils#splitTags (String input, String[] tags, boolean recursive, boolean insideTag). */ public static String[] splitTags (String input, Class nodeType) @@ -798,6 +811,13 @@ public static String[] splitTags (String input, Class nodeType) * considering the tags as delimiter for splitting. *
    Use Class class as input parameter * instead of tags[] string array. + * @param input input + * @param nodeType node type + * @param recursive bool + * @param insideTag bool + * @return result + * @throws ParserException when error + * @throws UnsupportedEncodingException when error * @see ParserUtils#splitTags (String input, String[] tags, boolean recursive, boolean insideTag). */ public static String[] splitTags (String input, Class nodeType, boolean recursive, boolean insideTag) @@ -811,6 +831,11 @@ public static String[] splitTags (String input, Class nodeType, boolean recursiv * considering the tags as delimiter for splitting. *
    Use NodeFilter class as input parameter * instead of tags[] string array. + * @param filter filter + * @param input input + * @return result + * @throws ParserException when error + * @throws UnsupportedEncodingException when error * @see ParserUtils#splitTags (String input, String[] tags, boolean recursive, boolean insideTag). */ public static String[] splitTags (String input, NodeFilter filter) @@ -824,6 +849,13 @@ public static String[] splitTags (String input, NodeFilter filter) * considering the tags as delimiter for splitting. *
    Use NodeFilter class as input parameter * instead of tags[] string array. + * @param filter filtr + * @param input input + * @param insideTag bool + * @param recursive bool + * @return result + * @throws ParserException when error + * @throws UnsupportedEncodingException when error * @see ParserUtils#splitTags (String input, String[] tags, boolean recursive, boolean insideTag). */ public static String[] splitTags (String input, NodeFilter filter, boolean recursive, boolean insideTag) @@ -941,6 +973,11 @@ public static String trimAllTags (String input, boolean inside) * Trim all tags in the input string and * return a string like the input one * without the tags and their content. + * @param input input + * @param tags tags + * @return result + * @throws ParserException when error + * @throws UnsupportedEncodingException when error * @see ParserUtils#trimTags (String input, String[] tags, boolean recursive, boolean insideTag). */ public static String trimTags (String input, String[] tags) @@ -966,6 +1003,8 @@ public static String trimTags (String input, String[] tags) * @param recursive Optional parameter (true if not present), if true delete all the tags recursively. * @param insideTag Optional parameter (true if not present), if true delete also the content of the tags. * @return The string without tags. + * @throws ParserException when error + * @throws UnsupportedEncodingException when error */ public static String trimTags (String input, String[] tags, boolean recursive, boolean insideTag) throws ParserException, UnsupportedEncodingException @@ -1033,6 +1072,12 @@ public static String trimTags (String input, String[] tags, boolean recursive, b *
    Use Class class as input parameter * instead of tags[] string array. * @see ParserUtils#trimTags (String input, String[] tags, boolean recursive, boolean insideTag). + * @param input input + * @param nodeType node type + * @return result + * @throws ParserException when error + * @throws UnsupportedEncodingException when error + * */ public static String trimTags (String input, Class nodeType) throws ParserException, UnsupportedEncodingException @@ -1047,6 +1092,13 @@ public static String trimTags (String input, Class nodeType) *
    Use Class class as input parameter * instead of tags[] string array. * @see ParserUtils#trimTags (String input, String[] tags, boolean recursive, boolean insideTag). + * @param input input + * @param nodeType node type + * @param recursive bool + * @param insideTag bool + * @return result + * @throws ParserException when error + * @throws UnsupportedEncodingException when error */ public static String trimTags (String input, Class nodeType, boolean recursive, boolean insideTag) throws ParserException, UnsupportedEncodingException @@ -1061,6 +1113,11 @@ public static String trimTags (String input, Class nodeType, boolean recursive, *
    Use NodeFilter class as input parameter * instead of tags[] string array. * @see ParserUtils#trimTags (String input, String[] tags, boolean recursive, boolean insideTag). + * @param input input + * @param filter filter + * @return result + * @throws ParserException when error + * @throws UnsupportedEncodingException when error */ public static String trimTags (String input, NodeFilter filter) throws ParserException, UnsupportedEncodingException @@ -1075,6 +1132,14 @@ public static String trimTags (String input, NodeFilter filter) *
    Use NodeFilter class as input parameter * instead of tags[] string array. * @see ParserUtils#trimTags (String input, String[] tags, boolean recursive, boolean insideTag). + * @param filter filter + * @param input input + * @param recursive bool + * @param insideTag bool + * @return result + * @throws ParserException when eeror + * @throws UnsupportedEncodingException when error + * */ public static String trimTags (String input, NodeFilter filter, boolean recursive, boolean insideTag) throws ParserException, UnsupportedEncodingException @@ -1132,6 +1197,8 @@ public static String trimTags (String input, NodeFilter filter, boolean recursiv *
    The string will be parsed as it would be a file. * @param input The string in input. * @return The Parser Object with the string as input stream. + * @throws ParserException when error + * @throws UnsupportedEncodingException when error */ public static Parser createParserParsingAnInputString (String input) throws ParserException, UnsupportedEncodingException diff --git a/src/src/org/htmlparser/util/Translate.java b/src/src/org/htmlparser/util/Translate.java index 15db572a..55bb2401 100644 --- a/src/src/org/htmlparser/util/Translate.java +++ b/src/src/org/htmlparser/util/Translate.java @@ -640,6 +640,7 @@ public static CharacterReference lookup (char character) * a failure. * @param key A character reference with the kernel set to the string * to be found. It need not be truncated at the exact end of the reference. + * @return CharacterReference of result. */ protected static CharacterReference lookup (CharacterReference key) { @@ -730,6 +731,7 @@ public static CharacterReference lookup (String kernel, int start, int end) * Change all numeric character reference and character entity references * to unicode characters. * @param string The string to translate. + * @return String result */ public static String decode (String string) { diff --git a/src/src/org/htmlparser/util/sort/Ordered.java b/src/src/org/htmlparser/util/sort/Ordered.java index 429ce967..972619e2 100644 --- a/src/src/org/htmlparser/util/sort/Ordered.java +++ b/src/src/org/htmlparser/util/sort/Ordered.java @@ -64,8 +64,8 @@ public interface Ordered * throws an exception.) *

    * The implementor must also ensure that the relation is transitive: - * ((x.compare(y)>0) && (y.compare(z)>0)) - * implies x.compare(z)>0. + * ((x.compare(y)>0) && (y.compare(z)>0)) + * implies x.compare(z)>0. *

    * Finally, the implementer must ensure that * x.compare(y)==0 implies that diff --git a/src/src/org/htmlparser/visitors/NodeVisitor.java b/src/src/org/htmlparser/visitors/NodeVisitor.java index 53e4bcb9..9d20dc3c 100644 --- a/src/src/org/htmlparser/visitors/NodeVisitor.java +++ b/src/src/org/htmlparser/visitors/NodeVisitor.java @@ -103,6 +103,7 @@ * { * } * } + * */ public abstract class NodeVisitor { From d37966c99cf46a1c03ea56c55c0a3b246ea1ea38 Mon Sep 17 00:00:00 2001 From: Hiroshi Miura Date: Sun, 29 Jan 2023 12:51:24 +0900 Subject: [PATCH 04/12] chore: update gitignore --- .gitignore | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/.gitignore b/.gitignore index c178e179..69dbd791 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,40 @@ +# java objects *.class +*.jar + +# dependency +!junit.jar +!sax2.jar + +# Gradle .gradle +!gradle-wrapper.jar + +# Build +out +build +bin + +# Eclipse +.project +.classpath +.settings + +# Idea +.idea +*.iml +*.iws +*.ipr + +# OS +Thumbs.db +.DS_Store + +# Maven +target + +# Others +*.log +*.swp +*.bak + From 392ae29c21ffb1e46a6b376451285ab71d6cf8b1 Mon Sep 17 00:00:00 2001 From: Hiroshi Miura Date: Sun, 29 Jan 2023 12:55:06 +0900 Subject: [PATCH 05/12] chore: rename bin to scritps --- {bin => scripts}/beanybaby | 0 {bin => scripts}/beanybaby.cmd | 0 {bin => scripts}/filterbuilder | 0 {bin => scripts}/filterbuilder.cmd | 0 {bin => scripts}/lexer | 0 {bin => scripts}/lexer.cmd | 0 {bin => scripts}/linkextractor | 0 {bin => scripts}/linkextractor.cmd | 0 {bin => scripts}/parser | 0 {bin => scripts}/parser.cmd | 0 {bin => scripts}/sitecapturer | 0 {bin => scripts}/sitecapturer.cmd | 0 {bin => scripts}/stringextractor | 0 {bin => scripts}/stringextractor.cmd | 0 {bin => scripts}/thumbelina | 0 {bin => scripts}/thumbelina.cmd | 0 {bin => scripts}/translate | 0 {bin => scripts}/translate.cmd | 0 18 files changed, 0 insertions(+), 0 deletions(-) rename {bin => scripts}/beanybaby (100%) rename {bin => scripts}/beanybaby.cmd (100%) rename {bin => scripts}/filterbuilder (100%) rename {bin => scripts}/filterbuilder.cmd (100%) rename {bin => scripts}/lexer (100%) rename {bin => scripts}/lexer.cmd (100%) rename {bin => scripts}/linkextractor (100%) rename {bin => scripts}/linkextractor.cmd (100%) rename {bin => scripts}/parser (100%) rename {bin => scripts}/parser.cmd (100%) rename {bin => scripts}/sitecapturer (100%) rename {bin => scripts}/sitecapturer.cmd (100%) rename {bin => scripts}/stringextractor (100%) rename {bin => scripts}/stringextractor.cmd (100%) rename {bin => scripts}/thumbelina (100%) rename {bin => scripts}/thumbelina.cmd (100%) rename {bin => scripts}/translate (100%) rename {bin => scripts}/translate.cmd (100%) diff --git a/bin/beanybaby b/scripts/beanybaby similarity index 100% rename from bin/beanybaby rename to scripts/beanybaby diff --git a/bin/beanybaby.cmd b/scripts/beanybaby.cmd similarity index 100% rename from bin/beanybaby.cmd rename to scripts/beanybaby.cmd diff --git a/bin/filterbuilder b/scripts/filterbuilder similarity index 100% rename from bin/filterbuilder rename to scripts/filterbuilder diff --git a/bin/filterbuilder.cmd b/scripts/filterbuilder.cmd similarity index 100% rename from bin/filterbuilder.cmd rename to scripts/filterbuilder.cmd diff --git a/bin/lexer b/scripts/lexer similarity index 100% rename from bin/lexer rename to scripts/lexer diff --git a/bin/lexer.cmd b/scripts/lexer.cmd similarity index 100% rename from bin/lexer.cmd rename to scripts/lexer.cmd diff --git a/bin/linkextractor b/scripts/linkextractor similarity index 100% rename from bin/linkextractor rename to scripts/linkextractor diff --git a/bin/linkextractor.cmd b/scripts/linkextractor.cmd similarity index 100% rename from bin/linkextractor.cmd rename to scripts/linkextractor.cmd diff --git a/bin/parser b/scripts/parser similarity index 100% rename from bin/parser rename to scripts/parser diff --git a/bin/parser.cmd b/scripts/parser.cmd similarity index 100% rename from bin/parser.cmd rename to scripts/parser.cmd diff --git a/bin/sitecapturer b/scripts/sitecapturer similarity index 100% rename from bin/sitecapturer rename to scripts/sitecapturer diff --git a/bin/sitecapturer.cmd b/scripts/sitecapturer.cmd similarity index 100% rename from bin/sitecapturer.cmd rename to scripts/sitecapturer.cmd diff --git a/bin/stringextractor b/scripts/stringextractor similarity index 100% rename from bin/stringextractor rename to scripts/stringextractor diff --git a/bin/stringextractor.cmd b/scripts/stringextractor.cmd similarity index 100% rename from bin/stringextractor.cmd rename to scripts/stringextractor.cmd diff --git a/bin/thumbelina b/scripts/thumbelina similarity index 100% rename from bin/thumbelina rename to scripts/thumbelina diff --git a/bin/thumbelina.cmd b/scripts/thumbelina.cmd similarity index 100% rename from bin/thumbelina.cmd rename to scripts/thumbelina.cmd diff --git a/bin/translate b/scripts/translate similarity index 100% rename from bin/translate rename to scripts/translate diff --git a/bin/translate.cmd b/scripts/translate.cmd similarity index 100% rename from bin/translate.cmd rename to scripts/translate.cmd From 09a9bfa91f4c7b6ab26813b53a36767b60c3c938 Mon Sep 17 00:00:00 2001 From: Hiroshi Miura Date: Sun, 29 Jan 2023 15:25:00 +0900 Subject: [PATCH 06/12] chore: update build.gradle.kts - Add subproject htmllexer - Add attributes of MANIFEST --- build.gradle.kts | 49 ++++++++++++++++++++++++++++++++++++++++++++++++ settings.gradle | 2 +- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index fa53c0f0..4f878599 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -23,6 +23,7 @@ sourceSets { srcDir("src/src") } } + test { java { srcDir("src/tests") @@ -42,6 +43,54 @@ dependencies { testImplementation("junit:junit:3.8.2") } +tasks.jar { + manifest { + attributes("Main-Class" to "org.htmlparser.Parser") + attributes("org/htmlparser/Parser.class", "Java-Bean" to "True") + attributes("org/htmlparser/beans/StringBean.class", "Java-Bean" to "True") + attributes("org/htmlparser/beans/HTMLTextBean.class", "Java-Bean" to "True") + attributes("org/htmlparser/beans/LinkBean.class", "Java-Bean" to "True") + attributes("org/htmlparser/beans/HTMLLinkBean.class", "Java-Bean" to "True") + } +} + +project(":htmllexer") { + apply(plugin="application") + application.applicationName = "htmllexer" + application.mainClass.set("org.htmlparser.lexer.Lexer") + sourceSets { + main { + java { + srcDir("src/src") + include(listOf( + "org/htmlparser/lexer/*", + "org/htmlparser/nodes/*.class", + "org/htmlparser/Attribute.class", + "org/htmlparser/Node.class", + "org/htmlparser/NodeFactory.class", + "org/htmlparser/NodeFilter.class", + "org/htmlparser/Remark.class", + "org/htmlparser/Tag.class", + "org/htmlparser/Text.class", + "org/htmlparser/scanners/Scanner.class", + "org/htmlparser/scanners/TagScanner.class", + "org/htmlparser/http/ConnectionManager.class", + "org/htmlparser/http/ConnectionMonitor.class", + "org/htmlparser/http/Cookie.class", + "org/htmlparser/util/ParserException.class", + "org/htmlparser/util/ChainedException.class", + "org/htmlparser/util/NodeList*.class", + "org/htmlparser/util/NodeIterator.class", + "org/htmlparser/util/SimpleNodeIterator.class", + "org/htmlparser/util/EncodingChangeException.class", + "org/htmlparser/util/sort/**/*.class", + "org/htmlparser/visitors/NodeVisitor.class" + )) + } + } + } +} + publishing { publications { create("mavenJava") { diff --git a/settings.gradle b/settings.gradle index b61db1ab..26abc602 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,2 @@ rootProject.name="htmlparser" -include 'apps:lexerapplications:thumbelina','apps:lexerapplications:tabby', 'apps:parserapplications' \ No newline at end of file +include 'apps:lexerapplications:thumbelina','apps:lexerapplications:tabby', 'apps:parserapplications', 'htmllexer' \ No newline at end of file From 01ab644be6584c24cfa8b093f50292215272a76c Mon Sep 17 00:00:00 2001 From: Hiroshi Miura Date: Sun, 29 Jan 2023 15:27:03 +0900 Subject: [PATCH 07/12] fix: skip some test case Some tests refer URL which return 4xx, 5xx now, so skip these cases. --- src/tests/org/htmlparser/tests/lexerTests/TagTests.java | 2 +- src/tests/org/htmlparser/tests/tagTests/TableTagTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tests/org/htmlparser/tests/lexerTests/TagTests.java b/src/tests/org/htmlparser/tests/lexerTests/TagTests.java index 983c67c3..36b36f80 100644 --- a/src/tests/org/htmlparser/tests/lexerTests/TagTests.java +++ b/src/tests/org/htmlparser/tests/lexerTests/TagTests.java @@ -275,7 +275,7 @@ public void testMultiLine7 () throws ParserException * Test multiple threads running against the parser. * See feature request #736144 Handle multi-threaded operation. */ - public void testThreadSafety() throws Exception + public void _testThreadSafety() throws Exception { createParser(""); parser.setNodeFactory (new PrototypicalNodeFactory (true)); diff --git a/src/tests/org/htmlparser/tests/tagTests/TableTagTest.java b/src/tests/org/htmlparser/tests/tagTests/TableTagTest.java index 78ad954a..e9f01ae6 100644 --- a/src/tests/org/htmlparser/tests/tagTests/TableTagTest.java +++ b/src/tests/org/htmlparser/tests/tagTests/TableTagTest.java @@ -151,7 +151,7 @@ public void testUnClosed2 () throws ParserException * See bug #750117 StackOverFlow while Node-Iteration * Not reproducible. */ - public void testOverFlow () throws ParserException + public void _testOverFlow () throws ParserException { parser = new Parser( From a527a9304a389a6990b5676e68e4686497c51a2c Mon Sep 17 00:00:00 2001 From: Hiroshi Miura Date: Sun, 29 Jan 2023 15:36:18 +0900 Subject: [PATCH 08/12] refactor(apps): move images in resources folder --- .../filterbuilder/images/about.gif | Bin .../filterbuilder/images/copy.gif | Bin .../parserapplications/filterbuilder/images/cut.gif | Bin .../filterbuilder/images/delete.gif | Bin .../parserapplications/filterbuilder/images/new.gif | Bin .../filterbuilder/images/open.gif | Bin .../filterbuilder/images/paste.gif | Bin .../filterbuilder/images/save.gif | Bin .../filterbuilder/wrappers/images/AndFilter.gif | Bin .../wrappers/images/HasAttributeFilter.gif | Bin .../wrappers/images/HasChildFilter.gif | Bin .../wrappers/images/HasParentFilter.gif | Bin .../wrappers/images/HasSiblingFilter.gif | Bin .../wrappers/images/NodeClassFilter.gif | Bin .../filterbuilder/wrappers/images/NotFilter.gif | Bin .../filterbuilder/wrappers/images/OrFilter.gif | Bin .../filterbuilder/wrappers/images/RegexFilter.gif | Bin .../filterbuilder/wrappers/images/StringFilter.gif | Bin .../filterbuilder/wrappers/images/TagNameFilter.gif | Bin 19 files changed, 0 insertions(+), 0 deletions(-) rename apps/parserapplications/src/main/{java => resources}/org/htmlparser/parserapplications/filterbuilder/images/about.gif (100%) rename apps/parserapplications/src/main/{java => resources}/org/htmlparser/parserapplications/filterbuilder/images/copy.gif (100%) rename apps/parserapplications/src/main/{java => resources}/org/htmlparser/parserapplications/filterbuilder/images/cut.gif (100%) rename apps/parserapplications/src/main/{java => resources}/org/htmlparser/parserapplications/filterbuilder/images/delete.gif (100%) rename apps/parserapplications/src/main/{java => resources}/org/htmlparser/parserapplications/filterbuilder/images/new.gif (100%) rename apps/parserapplications/src/main/{java => resources}/org/htmlparser/parserapplications/filterbuilder/images/open.gif (100%) rename apps/parserapplications/src/main/{java => resources}/org/htmlparser/parserapplications/filterbuilder/images/paste.gif (100%) rename apps/parserapplications/src/main/{java => resources}/org/htmlparser/parserapplications/filterbuilder/images/save.gif (100%) rename apps/parserapplications/src/main/{java => resources}/org/htmlparser/parserapplications/filterbuilder/wrappers/images/AndFilter.gif (100%) rename apps/parserapplications/src/main/{java => resources}/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasAttributeFilter.gif (100%) rename apps/parserapplications/src/main/{java => resources}/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasChildFilter.gif (100%) rename apps/parserapplications/src/main/{java => resources}/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasParentFilter.gif (100%) rename apps/parserapplications/src/main/{java => resources}/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasSiblingFilter.gif (100%) rename apps/parserapplications/src/main/{java => resources}/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NodeClassFilter.gif (100%) rename apps/parserapplications/src/main/{java => resources}/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NotFilter.gif (100%) rename apps/parserapplications/src/main/{java => resources}/org/htmlparser/parserapplications/filterbuilder/wrappers/images/OrFilter.gif (100%) rename apps/parserapplications/src/main/{java => resources}/org/htmlparser/parserapplications/filterbuilder/wrappers/images/RegexFilter.gif (100%) rename apps/parserapplications/src/main/{java => resources}/org/htmlparser/parserapplications/filterbuilder/wrappers/images/StringFilter.gif (100%) rename apps/parserapplications/src/main/{java => resources}/org/htmlparser/parserapplications/filterbuilder/wrappers/images/TagNameFilter.gif (100%) diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/about.gif b/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/about.gif similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/about.gif rename to apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/about.gif diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/copy.gif b/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/copy.gif similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/copy.gif rename to apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/copy.gif diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/cut.gif b/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/cut.gif similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/cut.gif rename to apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/cut.gif diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/delete.gif b/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/delete.gif similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/delete.gif rename to apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/delete.gif diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/new.gif b/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/new.gif similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/new.gif rename to apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/new.gif diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/open.gif b/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/open.gif similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/open.gif rename to apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/open.gif diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/paste.gif b/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/paste.gif similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/paste.gif rename to apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/paste.gif diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/save.gif b/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/save.gif similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/images/save.gif rename to apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/save.gif diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/AndFilter.gif b/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/AndFilter.gif similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/AndFilter.gif rename to apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/AndFilter.gif diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasAttributeFilter.gif b/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasAttributeFilter.gif similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasAttributeFilter.gif rename to apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasAttributeFilter.gif diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasChildFilter.gif b/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasChildFilter.gif similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasChildFilter.gif rename to apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasChildFilter.gif diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasParentFilter.gif b/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasParentFilter.gif similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasParentFilter.gif rename to apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasParentFilter.gif diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasSiblingFilter.gif b/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasSiblingFilter.gif similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasSiblingFilter.gif rename to apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasSiblingFilter.gif diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NodeClassFilter.gif b/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NodeClassFilter.gif similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NodeClassFilter.gif rename to apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NodeClassFilter.gif diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NotFilter.gif b/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NotFilter.gif similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NotFilter.gif rename to apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NotFilter.gif diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/OrFilter.gif b/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/OrFilter.gif similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/OrFilter.gif rename to apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/OrFilter.gif diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/RegexFilter.gif b/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/RegexFilter.gif similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/RegexFilter.gif rename to apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/RegexFilter.gif diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/StringFilter.gif b/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/StringFilter.gif similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/StringFilter.gif rename to apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/StringFilter.gif diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/TagNameFilter.gif b/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/TagNameFilter.gif similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/images/TagNameFilter.gif rename to apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/TagNameFilter.gif From 4aa630665707bad3a44803dbf0d74f402e73d092 Mon Sep 17 00:00:00 2001 From: Hiroshi Miura Date: Sun, 29 Jan 2023 17:33:21 +0900 Subject: [PATCH 09/12] chore: update build configuration - Add distAllZip task - Fix to bundle scripts - Refactoring apps folder --- apps/filterbuilder/build.gradle | 23 ++++++++++ .../filterbuilder/scripts}/filterbuilder | 0 .../filterbuilder/scripts}/filterbuilder.cmd | 0 .../parserapplications/LinkExtractor.java | 0 .../parserapplications/SiteCapturer.java | 0 .../parserapplications/StringExtractor.java | 0 .../parserapplications/WikiCapturer.java | 0 .../filterbuilder/Filter.java | 0 .../filterbuilder/FilterBuilder.java | 0 .../filterbuilder/HtmlTreeCellRenderer.java | 0 .../filterbuilder/HtmlTreeModel.java | 0 .../filterbuilder/SubFilterList.java | 0 .../layouts/NullLayoutManager.java | 0 .../layouts/VerticalLayoutManager.java | 0 .../wrappers/AndFilterWrapper.java | 0 .../wrappers/HasAttributeFilterWrapper.java | 0 .../wrappers/HasChildFilterWrapper.java | 0 .../wrappers/HasParentFilterWrapper.java | 0 .../wrappers/HasSiblingFilterWrapper.java | 0 .../wrappers/NodeClassFilterWrapper.java | 0 .../wrappers/NotFilterWrapper.java | 0 .../wrappers/OrFilterWrapper.java | 0 .../wrappers/RegexFilterWrapper.java | 0 .../wrappers/StringFilterWrapper.java | 0 .../wrappers/TagNameFilterWrapper.java | 0 .../parserapplications/package.html | 0 .../filterbuilder/images/about.gif | Bin .../filterbuilder/images/copy.gif | Bin .../filterbuilder/images/cut.gif | Bin .../filterbuilder/images/delete.gif | Bin .../filterbuilder/images/new.gif | Bin .../filterbuilder/images/open.gif | Bin .../filterbuilder/images/paste.gif | Bin .../filterbuilder/images/save.gif | Bin .../wrappers/images/AndFilter.gif | Bin .../wrappers/images/HasAttributeFilter.gif | Bin .../wrappers/images/HasChildFilter.gif | Bin .../wrappers/images/HasParentFilter.gif | Bin .../wrappers/images/HasSiblingFilter.gif | Bin .../wrappers/images/NodeClassFilter.gif | Bin .../wrappers/images/NotFilter.gif | Bin .../wrappers/images/OrFilter.gif | Bin .../wrappers/images/RegexFilter.gif | Bin .../wrappers/images/StringFilter.gif | Bin .../wrappers/images/TagNameFilter.gif | Bin .../lexerapplications/thumbelina/build.gradle | 13 ------ apps/parserapplications/build.gradle | 13 ------ .../tabby/build.gradle | 2 + .../lexerapplications/tabby/Tabby.java | 0 .../lexerapplications/tabby/package.html | 0 apps/thumbelina/build.gradle | 23 ++++++++++ .../thumbelina/scripts}/thumbelina | 0 .../thumbelina/scripts}/thumbelina.cmd | 0 .../lexerapplications/thumbelina/Picture.java | 0 .../thumbelina/PicturePanel.java | 0 .../thumbelina/Sequencer.java | 0 .../thumbelina/Thumbelina.java | 0 .../thumbelina/ThumbelinaFrame.java | 0 .../lexerapplications/thumbelina/TileSet.java | 0 .../lexerapplications/thumbelina/package.html | 0 build.gradle.kts | 42 +++++++++++++++++- settings.gradle | 2 +- 62 files changed, 89 insertions(+), 29 deletions(-) create mode 100644 apps/filterbuilder/build.gradle rename {scripts => apps/filterbuilder/scripts}/filterbuilder (100%) rename {scripts => apps/filterbuilder/scripts}/filterbuilder.cmd (100%) rename apps/{parserapplications => filterbuilder}/src/main/java/org/htmlparser/parserapplications/LinkExtractor.java (100%) rename apps/{parserapplications => filterbuilder}/src/main/java/org/htmlparser/parserapplications/SiteCapturer.java (100%) rename apps/{parserapplications => filterbuilder}/src/main/java/org/htmlparser/parserapplications/StringExtractor.java (100%) rename apps/{parserapplications => filterbuilder}/src/main/java/org/htmlparser/parserapplications/WikiCapturer.java (100%) rename apps/{parserapplications => filterbuilder}/src/main/java/org/htmlparser/parserapplications/filterbuilder/Filter.java (100%) rename apps/{parserapplications => filterbuilder}/src/main/java/org/htmlparser/parserapplications/filterbuilder/FilterBuilder.java (100%) rename apps/{parserapplications => filterbuilder}/src/main/java/org/htmlparser/parserapplications/filterbuilder/HtmlTreeCellRenderer.java (100%) rename apps/{parserapplications => filterbuilder}/src/main/java/org/htmlparser/parserapplications/filterbuilder/HtmlTreeModel.java (100%) rename apps/{parserapplications => filterbuilder}/src/main/java/org/htmlparser/parserapplications/filterbuilder/SubFilterList.java (100%) rename apps/{parserapplications => filterbuilder}/src/main/java/org/htmlparser/parserapplications/filterbuilder/layouts/NullLayoutManager.java (100%) rename apps/{parserapplications => filterbuilder}/src/main/java/org/htmlparser/parserapplications/filterbuilder/layouts/VerticalLayoutManager.java (100%) rename apps/{parserapplications => filterbuilder}/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/AndFilterWrapper.java (100%) rename apps/{parserapplications => filterbuilder}/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/HasAttributeFilterWrapper.java (100%) rename apps/{parserapplications => filterbuilder}/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/HasChildFilterWrapper.java (100%) rename apps/{parserapplications => filterbuilder}/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/HasParentFilterWrapper.java (100%) rename apps/{parserapplications => filterbuilder}/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/HasSiblingFilterWrapper.java (100%) rename apps/{parserapplications => filterbuilder}/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/NodeClassFilterWrapper.java (100%) rename apps/{parserapplications => filterbuilder}/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/NotFilterWrapper.java (100%) rename apps/{parserapplications => filterbuilder}/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/OrFilterWrapper.java (100%) rename apps/{parserapplications => filterbuilder}/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/RegexFilterWrapper.java (100%) rename apps/{parserapplications => filterbuilder}/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/StringFilterWrapper.java (100%) rename apps/{parserapplications => filterbuilder}/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/TagNameFilterWrapper.java (100%) rename apps/{parserapplications => filterbuilder}/src/main/java/org/htmlparser/parserapplications/package.html (100%) rename apps/{parserapplications => filterbuilder}/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/about.gif (100%) rename apps/{parserapplications => filterbuilder}/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/copy.gif (100%) rename apps/{parserapplications => filterbuilder}/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/cut.gif (100%) rename apps/{parserapplications => filterbuilder}/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/delete.gif (100%) rename apps/{parserapplications => filterbuilder}/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/new.gif (100%) rename apps/{parserapplications => filterbuilder}/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/open.gif (100%) rename apps/{parserapplications => filterbuilder}/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/paste.gif (100%) rename apps/{parserapplications => filterbuilder}/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/save.gif (100%) rename apps/{parserapplications => filterbuilder}/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/AndFilter.gif (100%) rename apps/{parserapplications => filterbuilder}/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasAttributeFilter.gif (100%) rename apps/{parserapplications => filterbuilder}/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasChildFilter.gif (100%) rename apps/{parserapplications => filterbuilder}/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasParentFilter.gif (100%) rename apps/{parserapplications => filterbuilder}/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasSiblingFilter.gif (100%) rename apps/{parserapplications => filterbuilder}/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NodeClassFilter.gif (100%) rename apps/{parserapplications => filterbuilder}/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NotFilter.gif (100%) rename apps/{parserapplications => filterbuilder}/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/OrFilter.gif (100%) rename apps/{parserapplications => filterbuilder}/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/RegexFilter.gif (100%) rename apps/{parserapplications => filterbuilder}/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/StringFilter.gif (100%) rename apps/{parserapplications => filterbuilder}/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/TagNameFilter.gif (100%) delete mode 100644 apps/lexerapplications/thumbelina/build.gradle delete mode 100644 apps/parserapplications/build.gradle rename apps/{lexerapplications => }/tabby/build.gradle (85%) rename apps/{lexerapplications => }/tabby/src/main/java/org/htmlparser/lexerapplications/tabby/Tabby.java (100%) rename apps/{lexerapplications => }/tabby/src/main/java/org/htmlparser/lexerapplications/tabby/package.html (100%) create mode 100644 apps/thumbelina/build.gradle rename {scripts => apps/thumbelina/scripts}/thumbelina (100%) rename {scripts => apps/thumbelina/scripts}/thumbelina.cmd (100%) rename apps/{lexerapplications => }/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/Picture.java (100%) rename apps/{lexerapplications => }/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/PicturePanel.java (100%) rename apps/{lexerapplications => }/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/Sequencer.java (100%) rename apps/{lexerapplications => }/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/Thumbelina.java (100%) rename apps/{lexerapplications => }/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/ThumbelinaFrame.java (100%) rename apps/{lexerapplications => }/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/TileSet.java (100%) rename apps/{lexerapplications => }/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/package.html (100%) diff --git a/apps/filterbuilder/build.gradle b/apps/filterbuilder/build.gradle new file mode 100644 index 00000000..be7a0549 --- /dev/null +++ b/apps/filterbuilder/build.gradle @@ -0,0 +1,23 @@ +plugins { + id 'application' +} + +applicationName = 'filterbuilder' + +application { + mainClass = 'org.htmlparser.parserapplications.filterbuilder.FilterBuilder' +} + +// We bundle our startup scripts separately, so disable startScripts. +startScripts.enabled = false + +tasks.register("installFilterBuilderScripts", Copy) { + from layout.projectDirectory.dir("scripts").asFileTree + into layout.buildDirectory.dir("scripts") + dependsOn(jar) +} +tasks.distZip.dependsOn(installFilterBuilderScripts) + +dependencies { + implementation rootProject +} \ No newline at end of file diff --git a/scripts/filterbuilder b/apps/filterbuilder/scripts/filterbuilder similarity index 100% rename from scripts/filterbuilder rename to apps/filterbuilder/scripts/filterbuilder diff --git a/scripts/filterbuilder.cmd b/apps/filterbuilder/scripts/filterbuilder.cmd similarity index 100% rename from scripts/filterbuilder.cmd rename to apps/filterbuilder/scripts/filterbuilder.cmd diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/LinkExtractor.java b/apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/LinkExtractor.java similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/LinkExtractor.java rename to apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/LinkExtractor.java diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/SiteCapturer.java b/apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/SiteCapturer.java similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/SiteCapturer.java rename to apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/SiteCapturer.java diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/StringExtractor.java b/apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/StringExtractor.java similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/StringExtractor.java rename to apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/StringExtractor.java diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/WikiCapturer.java b/apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/WikiCapturer.java similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/WikiCapturer.java rename to apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/WikiCapturer.java diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/Filter.java b/apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/Filter.java similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/Filter.java rename to apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/Filter.java diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/FilterBuilder.java b/apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/FilterBuilder.java similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/FilterBuilder.java rename to apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/FilterBuilder.java diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/HtmlTreeCellRenderer.java b/apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/HtmlTreeCellRenderer.java similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/HtmlTreeCellRenderer.java rename to apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/HtmlTreeCellRenderer.java diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/HtmlTreeModel.java b/apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/HtmlTreeModel.java similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/HtmlTreeModel.java rename to apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/HtmlTreeModel.java diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/SubFilterList.java b/apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/SubFilterList.java similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/SubFilterList.java rename to apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/SubFilterList.java diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/layouts/NullLayoutManager.java b/apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/layouts/NullLayoutManager.java similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/layouts/NullLayoutManager.java rename to apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/layouts/NullLayoutManager.java diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/layouts/VerticalLayoutManager.java b/apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/layouts/VerticalLayoutManager.java similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/layouts/VerticalLayoutManager.java rename to apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/layouts/VerticalLayoutManager.java diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/AndFilterWrapper.java b/apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/AndFilterWrapper.java similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/AndFilterWrapper.java rename to apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/AndFilterWrapper.java diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/HasAttributeFilterWrapper.java b/apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/HasAttributeFilterWrapper.java similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/HasAttributeFilterWrapper.java rename to apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/HasAttributeFilterWrapper.java diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/HasChildFilterWrapper.java b/apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/HasChildFilterWrapper.java similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/HasChildFilterWrapper.java rename to apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/HasChildFilterWrapper.java diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/HasParentFilterWrapper.java b/apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/HasParentFilterWrapper.java similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/HasParentFilterWrapper.java rename to apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/HasParentFilterWrapper.java diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/HasSiblingFilterWrapper.java b/apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/HasSiblingFilterWrapper.java similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/HasSiblingFilterWrapper.java rename to apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/HasSiblingFilterWrapper.java diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/NodeClassFilterWrapper.java b/apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/NodeClassFilterWrapper.java similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/NodeClassFilterWrapper.java rename to apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/NodeClassFilterWrapper.java diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/NotFilterWrapper.java b/apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/NotFilterWrapper.java similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/NotFilterWrapper.java rename to apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/NotFilterWrapper.java diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/OrFilterWrapper.java b/apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/OrFilterWrapper.java similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/OrFilterWrapper.java rename to apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/OrFilterWrapper.java diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/RegexFilterWrapper.java b/apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/RegexFilterWrapper.java similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/RegexFilterWrapper.java rename to apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/RegexFilterWrapper.java diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/StringFilterWrapper.java b/apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/StringFilterWrapper.java similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/StringFilterWrapper.java rename to apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/StringFilterWrapper.java diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/TagNameFilterWrapper.java b/apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/TagNameFilterWrapper.java similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/TagNameFilterWrapper.java rename to apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/filterbuilder/wrappers/TagNameFilterWrapper.java diff --git a/apps/parserapplications/src/main/java/org/htmlparser/parserapplications/package.html b/apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/package.html similarity index 100% rename from apps/parserapplications/src/main/java/org/htmlparser/parserapplications/package.html rename to apps/filterbuilder/src/main/java/org/htmlparser/parserapplications/package.html diff --git a/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/about.gif b/apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/about.gif similarity index 100% rename from apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/about.gif rename to apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/about.gif diff --git a/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/copy.gif b/apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/copy.gif similarity index 100% rename from apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/copy.gif rename to apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/copy.gif diff --git a/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/cut.gif b/apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/cut.gif similarity index 100% rename from apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/cut.gif rename to apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/cut.gif diff --git a/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/delete.gif b/apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/delete.gif similarity index 100% rename from apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/delete.gif rename to apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/delete.gif diff --git a/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/new.gif b/apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/new.gif similarity index 100% rename from apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/new.gif rename to apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/new.gif diff --git a/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/open.gif b/apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/open.gif similarity index 100% rename from apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/open.gif rename to apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/open.gif diff --git a/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/paste.gif b/apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/paste.gif similarity index 100% rename from apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/paste.gif rename to apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/paste.gif diff --git a/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/save.gif b/apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/save.gif similarity index 100% rename from apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/save.gif rename to apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/images/save.gif diff --git a/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/AndFilter.gif b/apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/AndFilter.gif similarity index 100% rename from apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/AndFilter.gif rename to apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/AndFilter.gif diff --git a/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasAttributeFilter.gif b/apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasAttributeFilter.gif similarity index 100% rename from apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasAttributeFilter.gif rename to apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasAttributeFilter.gif diff --git a/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasChildFilter.gif b/apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasChildFilter.gif similarity index 100% rename from apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasChildFilter.gif rename to apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasChildFilter.gif diff --git a/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasParentFilter.gif b/apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasParentFilter.gif similarity index 100% rename from apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasParentFilter.gif rename to apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasParentFilter.gif diff --git a/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasSiblingFilter.gif b/apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasSiblingFilter.gif similarity index 100% rename from apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasSiblingFilter.gif rename to apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/HasSiblingFilter.gif diff --git a/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NodeClassFilter.gif b/apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NodeClassFilter.gif similarity index 100% rename from apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NodeClassFilter.gif rename to apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NodeClassFilter.gif diff --git a/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NotFilter.gif b/apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NotFilter.gif similarity index 100% rename from apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NotFilter.gif rename to apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/NotFilter.gif diff --git a/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/OrFilter.gif b/apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/OrFilter.gif similarity index 100% rename from apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/OrFilter.gif rename to apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/OrFilter.gif diff --git a/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/RegexFilter.gif b/apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/RegexFilter.gif similarity index 100% rename from apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/RegexFilter.gif rename to apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/RegexFilter.gif diff --git a/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/StringFilter.gif b/apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/StringFilter.gif similarity index 100% rename from apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/StringFilter.gif rename to apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/StringFilter.gif diff --git a/apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/TagNameFilter.gif b/apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/TagNameFilter.gif similarity index 100% rename from apps/parserapplications/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/TagNameFilter.gif rename to apps/filterbuilder/src/main/resources/org/htmlparser/parserapplications/filterbuilder/wrappers/images/TagNameFilter.gif diff --git a/apps/lexerapplications/thumbelina/build.gradle b/apps/lexerapplications/thumbelina/build.gradle deleted file mode 100644 index f9680610..00000000 --- a/apps/lexerapplications/thumbelina/build.gradle +++ /dev/null @@ -1,13 +0,0 @@ -plugins { - id 'application' -} - -applicationName = 'Thumbelina' - -application { - mainClass = 'org.htmlparser.lexerapplications.thumbelina.Thumbelina' -} - -dependencies { - implementation rootProject -} \ No newline at end of file diff --git a/apps/parserapplications/build.gradle b/apps/parserapplications/build.gradle deleted file mode 100644 index dd804ea2..00000000 --- a/apps/parserapplications/build.gradle +++ /dev/null @@ -1,13 +0,0 @@ -plugins { - id 'application' -} - -applicationName = 'FilterBuilder' - -application { - mainClass = 'org.htmlparser.parserapplications.filterbuilder.FilterBuilder' -} - -dependencies { - implementation rootProject -} \ No newline at end of file diff --git a/apps/lexerapplications/tabby/build.gradle b/apps/tabby/build.gradle similarity index 85% rename from apps/lexerapplications/tabby/build.gradle rename to apps/tabby/build.gradle index c1162a0b..3ca8912f 100644 --- a/apps/lexerapplications/tabby/build.gradle +++ b/apps/tabby/build.gradle @@ -2,6 +2,8 @@ plugins { id 'application' } +applicationName = 'tabby' + application { mainClass = 'org.htmlparser.lexerapplications.tabby.Tabby' } diff --git a/apps/lexerapplications/tabby/src/main/java/org/htmlparser/lexerapplications/tabby/Tabby.java b/apps/tabby/src/main/java/org/htmlparser/lexerapplications/tabby/Tabby.java similarity index 100% rename from apps/lexerapplications/tabby/src/main/java/org/htmlparser/lexerapplications/tabby/Tabby.java rename to apps/tabby/src/main/java/org/htmlparser/lexerapplications/tabby/Tabby.java diff --git a/apps/lexerapplications/tabby/src/main/java/org/htmlparser/lexerapplications/tabby/package.html b/apps/tabby/src/main/java/org/htmlparser/lexerapplications/tabby/package.html similarity index 100% rename from apps/lexerapplications/tabby/src/main/java/org/htmlparser/lexerapplications/tabby/package.html rename to apps/tabby/src/main/java/org/htmlparser/lexerapplications/tabby/package.html diff --git a/apps/thumbelina/build.gradle b/apps/thumbelina/build.gradle new file mode 100644 index 00000000..8e6a3199 --- /dev/null +++ b/apps/thumbelina/build.gradle @@ -0,0 +1,23 @@ +plugins { + id 'application' +} + +applicationName = 'thumbelina' + +application { + mainClass = 'org.htmlparser.lexerapplications.thumbelina.Thumbelina' +} + +// We bundle our startup scripts separately, so disable startScripts. +startScripts.enabled = false + +tasks.register("installThumbelinaScripts", Copy) { + from layout.projectDirectory.dir("scripts").asFileTree + into layout.buildDirectory.dir("scripts") + dependsOn(jar) +} +tasks.distZip.dependsOn(installThumbelinaScripts) + +dependencies { + implementation rootProject +} \ No newline at end of file diff --git a/scripts/thumbelina b/apps/thumbelina/scripts/thumbelina similarity index 100% rename from scripts/thumbelina rename to apps/thumbelina/scripts/thumbelina diff --git a/scripts/thumbelina.cmd b/apps/thumbelina/scripts/thumbelina.cmd similarity index 100% rename from scripts/thumbelina.cmd rename to apps/thumbelina/scripts/thumbelina.cmd diff --git a/apps/lexerapplications/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/Picture.java b/apps/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/Picture.java similarity index 100% rename from apps/lexerapplications/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/Picture.java rename to apps/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/Picture.java diff --git a/apps/lexerapplications/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/PicturePanel.java b/apps/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/PicturePanel.java similarity index 100% rename from apps/lexerapplications/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/PicturePanel.java rename to apps/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/PicturePanel.java diff --git a/apps/lexerapplications/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/Sequencer.java b/apps/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/Sequencer.java similarity index 100% rename from apps/lexerapplications/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/Sequencer.java rename to apps/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/Sequencer.java diff --git a/apps/lexerapplications/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/Thumbelina.java b/apps/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/Thumbelina.java similarity index 100% rename from apps/lexerapplications/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/Thumbelina.java rename to apps/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/Thumbelina.java diff --git a/apps/lexerapplications/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/ThumbelinaFrame.java b/apps/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/ThumbelinaFrame.java similarity index 100% rename from apps/lexerapplications/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/ThumbelinaFrame.java rename to apps/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/ThumbelinaFrame.java diff --git a/apps/lexerapplications/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/TileSet.java b/apps/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/TileSet.java similarity index 100% rename from apps/lexerapplications/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/TileSet.java rename to apps/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/TileSet.java diff --git a/apps/lexerapplications/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/package.html b/apps/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/package.html similarity index 100% rename from apps/lexerapplications/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/package.html rename to apps/thumbelina/src/main/java/org/htmlparser/lexerapplications/thumbelina/package.html diff --git a/build.gradle.kts b/build.gradle.kts index 4f878599..dae950a5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -45,7 +45,6 @@ dependencies { tasks.jar { manifest { - attributes("Main-Class" to "org.htmlparser.Parser") attributes("org/htmlparser/Parser.class", "Java-Bean" to "True") attributes("org/htmlparser/beans/StringBean.class", "Java-Bean" to "True") attributes("org/htmlparser/beans/HTMLTextBean.class", "Java-Bean" to "True") @@ -54,10 +53,37 @@ tasks.jar { } } -project(":htmllexer") { +application { + mainClass.set("org.htmlparser.Parser") +} + +// We bundle our startup scripts separately, so disable startScripts. +tasks.startScripts { + enabled = false +} + +tasks.register("installParserScripts") { + from(layout.projectDirectory.dir("scripts").asFileTree) + exclude("lexer*") + into(layout.buildDirectory.dir("scripts")) + dependsOn(tasks.jar.get()) +} +tasks.distZip.get().dependsOn(tasks.get("installParserScripts")) + +project(":apps:htmllexer") { apply(plugin="application") application.applicationName = "htmllexer" application.mainClass.set("org.htmlparser.lexer.Lexer") + tasks.startScripts { + enabled = false + } + tasks.register("installLexerScripts") { + from(layout.projectDirectory.dir("scripts").asFileTree) + include("lexer*") + into(layout.buildDirectory.dir("scripts")) + dependsOn(tasks.jar.get()) + } + tasks.distZip.get().dependsOn(tasks.get("installLexerScripts")) sourceSets { main { java { @@ -123,6 +149,18 @@ publishing { } } +tasks.register("distAllZip") { + archiveFileName.set("HtmlParser-Dist-1.6.zip") + from(tasks.distZip.get().archiveFile) + from(file(project(":apps:htmllexer").layout.buildDirectory.dir("distributions"))) + from(file(project(":apps:tabby").layout.buildDirectory.dir("distributions"))) + from(file(project(":apps:thumbelina").layout.buildDirectory.dir("distributions"))) + from(file(project(":apps:filterbuilder").layout.buildDirectory.dir("distributions"))) + destinationDirectory.set(layout.buildDirectory.dir("distributions")) + dependsOn(tasks.get("distZip")) +} +tasks.assemble.get().dependsOn(tasks.get("distAllZip")) + val signKey = listOf("signingKey", "signing.keyId", "signing.gnupg.keyName").find {project.hasProperty(it)} signing { when (signKey) { diff --git a/settings.gradle b/settings.gradle index 26abc602..a075db0d 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,2 @@ rootProject.name="htmlparser" -include 'apps:lexerapplications:thumbelina','apps:lexerapplications:tabby', 'apps:parserapplications', 'htmllexer' \ No newline at end of file +include 'apps:htmllexer', 'apps:thumbelina','apps:tabby', 'apps:filterbuilder' \ No newline at end of file From 8d998bbee0387ca70cd09d070a91612faa432baf Mon Sep 17 00:00:00 2001 From: Hiroshi Miura Date: Sun, 29 Jan 2023 17:50:43 +0900 Subject: [PATCH 10/12] style: change defs order in build.gradle.kts --- build.gradle.kts | 121 ++++++++++++++++++++++++----------------------- 1 file changed, 61 insertions(+), 60 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index dae950a5..b2c6033c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -36,7 +36,6 @@ repositories { } val javaHome = System.getProperty("java.home") - dependencies { // Test dependencies testImplementation(files("${javaHome}/../lib/tools.jar")) @@ -53,6 +52,67 @@ tasks.jar { } } +publishing { + publications { + create("mavenJava") { + from(components["java"]) + pom { + name.set("htmlparser") + description.set("html parser library") + url.set("https://github.com/omegat-org/htmlparser") + licenses { + license { + name.set("The GNU Lesser General Public License, Version 2.1") + url.set("https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html") + distribution.set("repo") + } + } + developers { + developer { + id.set("miurahr") + name.set("Hiroshi Miura") + email.set("miurahr@linux.com") + } + } + scm { + connection.set("scm:git:git://github.com/omegat-org/htmlparser.git") + developerConnection.set("scm:git:git://github.com/omegat-org/htmlparser.git") + url.set("https://github.com/omegat-org/htmlparser") + } + } + } + } +} + +val signKey = listOf("signingKey", "signing.keyId", "signing.gnupg.keyName").find {project.hasProperty(it)} +signing { + when (signKey) { + "signingKey" -> { + val signingKey: String? by project + val signingPassword: String? by project + useInMemoryPgpKeys(signingKey, signingPassword) + } + "signing.keyId" -> { + val keyId: String? by project + val password: String? by project + val secretKeyRingFile: String? by project // e.g. gpg --export-secret-keys > secring.gpg + useInMemoryPgpKeys(keyId, password, secretKeyRingFile) + } + "signing.gnupg.keyName" -> { + useGpgCmd() + } + } + sign(publishing.publications["mavenJava"]) +} + +nexusPublishing { + repositories{ + sonatype() + } +} + +// -------------------------------------------------------- +// Apps build application { mainClass.set("org.htmlparser.Parser") } @@ -117,38 +177,6 @@ project(":apps:htmllexer") { } } -publishing { - publications { - create("mavenJava") { - from(components["java"]) - pom { - name.set("htmlparser") - description.set("html parser library") - url.set("https://github.com/omegat-org/htmlparser") - licenses { - license { - name.set("The GNU Lesser General Public License, Version 2.1") - url.set("https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html") - distribution.set("repo") - } - } - developers { - developer { - id.set("miurahr") - name.set("Hiroshi Miura") - email.set("miurahr@linux.com") - } - } - scm { - connection.set("scm:git:git://github.com/omegat-org/htmlparser.git") - developerConnection.set("scm:git:git://github.com/omegat-org/htmlparser.git") - url.set("https://github.com/omegat-org/htmlparser") - } - } - } - } -} - tasks.register("distAllZip") { archiveFileName.set("HtmlParser-Dist-1.6.zip") from(tasks.distZip.get().archiveFile) @@ -160,30 +188,3 @@ tasks.register("distAllZip") { dependsOn(tasks.get("distZip")) } tasks.assemble.get().dependsOn(tasks.get("distAllZip")) - -val signKey = listOf("signingKey", "signing.keyId", "signing.gnupg.keyName").find {project.hasProperty(it)} -signing { - when (signKey) { - "signingKey" -> { - val signingKey: String? by project - val signingPassword: String? by project - useInMemoryPgpKeys(signingKey, signingPassword) - } - "signing.keyId" -> { - val keyId: String? by project - val password: String? by project - val secretKeyRingFile: String? by project // e.g. gpg --export-secret-keys > secring.gpg - useInMemoryPgpKeys(keyId, password, secretKeyRingFile) - } - "signing.gnupg.keyName" -> { - useGpgCmd() - } - } - sign(publishing.publications["mavenJava"]) -} - -nexusPublishing { - repositories{ - sonatype() - } -} From 793d21a9c0a080d81b54cdd0aa1cb2ffe4088e7b Mon Sep 17 00:00:00 2001 From: Hiroshi Miura Date: Sun, 29 Jan 2023 18:02:27 +0900 Subject: [PATCH 11/12] chore: set OSSRH url to publish --- build.gradle.kts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index b2c6033c..a4e24f0c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -107,7 +107,12 @@ signing { nexusPublishing { repositories{ - sonatype() + sonatype { + nexusUrl.set(uri("https://s01.oss.sonatype.org/service/local/")) + snapshotRepositoryUrl.set(uri("https://s01.oss.sonatype.org/content/repositories/snapshots/")) + username.set(project.property("sonatypeUsername")?.toString()?: System.getenv("SONATYPE_USER")) + password.set(project.property("sonatypePassword")?.toString()?: System.getenv("SONATYPE_PASS")) + } } } From eb0023b881e326d5040aa2ae41b3357c0381f12d Mon Sep 17 00:00:00 2001 From: Hiroshi Miura Date: Sun, 29 Jan 2023 21:59:38 +0900 Subject: [PATCH 12/12] set version 1.6-20230129-SNAPSHOT --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index a4e24f0c..c52c787d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,7 +7,7 @@ plugins { } group = "org.omegat" -version = "1.6" +version = "1.6-20230129-SNAPSHOT" java { toolchain {