diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000000000000000000000000000000000000..c3774cdab1caca5ae83179dd165e1b87c054fa93 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,20 @@ +module.exports = { + env: { + es6: true, + node: true + }, + extends: ['eslint:recommended', 'prettier'], + plugins: ['prettier'], + rules: { + 'prettier/prettier': 'error', + 'no-console': 'error', + curly: ['error', 'all'], + 'prefer-arrow-callback': 'error', + 'one-var': ['error', 'never'], + 'no-var': 'error', + 'prefer-const': 'error' + }, + parserOptions: { + ecmaVersion: 6 + } +}; diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000000000000000000000000000000000000..f93620deda696c211126051b4f699d1f089962e1 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,2 @@ +packages/parse5/lib/tokenizer/named-entity-data.js +docs diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000000000000000000000000000000000000..ca3f154f9934c5d9486eb04b7099a0671dd90396 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,3 @@ +printWidth: 120 +tabWidth: 4 +singleQuote: true diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000000000000000000000000000000000000..68bfbf7769e2ccdc7b60821cb9fb2add216ee980 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +sudo: false +node_js: + - stable diff --git a/README.OpenSource b/README.OpenSource deleted file mode 100644 index 7c930ff301cd1d677de372ed31dc7a8c06040e89..0000000000000000000000000000000000000000 --- a/README.OpenSource +++ /dev/null @@ -1,11 +0,0 @@ -[ - { - "Name": "parse5", - "License": "MIT", - "License File": "NOTICE", - "Version Number": " 5.1.1", - "Owner": "sunbingxin@huawei.com", - "Upstream URL": "https://github.com/inikulin/parse5.git", - "Description": "HTML parser and serializer." - } -] diff --git a/README.en.md b/README.en.md deleted file mode 100644 index ff43d000b17f364f9ca24a1664b585b4ce1c2d10..0000000000000000000000000000000000000000 --- a/README.en.md +++ /dev/null @@ -1,25 +0,0 @@ -# third_party_parse5 - -#### Description -HTML parser and serializer. - -#### License -Copyright (c) 2013-2019 Ivan Nikulin (ifaaan@gmail.com, https://github.com/inikulin) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md index 77f07f34c7832d74d68ded9da447f706100afe54..c91e9abeda18388ae19baae8436eedd2f4cc6a73 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,37 @@ -# third_party_parse5 +

+ + parse5 + +

-#### 介绍 -HTML parser and serializer. +

+HTML parsing/serialization toolset for Node.js. WHATWG HTML Living Standard (aka HTML5)-compliant. +

-#### License -Copyright (c) 2013-2019 Ivan Nikulin (ifaaan@gmail.com, https://github.com/inikulin) +

+ Build Status + NPM Version + Downloads + Downloads total +

-Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +

+parse5 provides nearly everything you may need when dealing with HTML. It's the fastest spec-compliant HTML parser +for Node to date. It parses HTML the way the latest version of your browser does. It has proven itself reliable in such projects +as jsdom, Angular2, Polymer and many more. +

-The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +--- -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file +

+ List of parse5 toolset packages +

+ +

+ Online playground +

+ +

+ Version history +

+

diff --git a/bundle.json b/bundle.json deleted file mode 100644 index 4d74a141727c1b79a91e9e7498bb05cab0d12f43..0000000000000000000000000000000000000000 --- a/bundle.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "@ohos/parse5", - "description": "HTML parser and serializer.", - "version": "3.1", - "license": "Apache V2", - "publishAs": "code-segment", - "segment": { - "destPath": "third_party/parse5" - }, - "dirs": {}, - "scripts": {}, - "component": { - "name": "thirdparty_parse5", - "subsystem": "developtools", - "syscap": [], - "features": [], - "adapted_system_type": [], - "rom": "", - "ram": "", - "deps": { - "components": [], - "third_party": [] - }, - "build": { - "sub_component": [], - "inner_kits": [], - "test": [] - } - } -} \ No newline at end of file diff --git a/docs/version-history.md b/docs/version-history.md index 8d60a00aed8a6d9a8c72699386ec6ed19672a8ce..43ddae41907dd632fde06b9d88ec95758ffab867 100644 --- a/docs/version-history.md +++ b/docs/version-history.md @@ -1,5 +1,15 @@ # Version history +# 6.0.1 +* Fixed: Handling of self-closing `
` tags (by [@43081j](https://github.com/43081j)). +* Fixed: Broken link in TreeAdapter document (GH [#317](https://github.com/inikulin/parse5/issues/317)) (by [@ursm](https://github.com/ursm)). +* Fixed: SAXParser example (GH [#316](https://github.com/inikulin/parse5/issues/316)) (by [@mvasilkov](https://github.com/mvasilkov)). + +# 6.0.0 +* Added (**breaking**): Tree adapter interface now has `updateNodeSourceCodeLocation` method which +enables usage of custom location info formats (GH [#314](https://github.com/inikulin/parse5/issues/314)) (by [@DMartens](https://github.com/DMartens)). + + # 5.1.1 * Fixed: Serialization of attributes in non-standard namespaces (by [@Zirro](https://github.com/Zirro)). * Fixed: Quirks and limited-quirks mode detection by doctype (by [@squidfunk](https://github.com/squidfunk)). diff --git a/lerna.json b/lerna.json index fa42581014ca898c3518e629bea4d9d5fd76d15b..6cf0b0f3a06d3a5a3d933fb13cfe7ffdc761545e 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { "lerna": "2.10.2", "packages": ["packages/*"], - "version": "5.1.1" + "version": "6.0.1" } diff --git a/packages/parse5-html-rewriting-stream/package.json b/packages/parse5-html-rewriting-stream/package.json index b95de57bbdb7bb8b0bea6ed004f19fff660a7696..e4bf660d8ac3855841105174c4716ca73bf2c429 100644 --- a/packages/parse5-html-rewriting-stream/package.json +++ b/packages/parse5-html-rewriting-stream/package.json @@ -1,7 +1,7 @@ { "name": "parse5-html-rewriting-stream", "description": "Streaming HTML rewriter.", - "version": "5.1.1", + "version": "6.0.1", "author": "Ivan Nikulin (https://github.com/inikulin)", "contributors": "https://github.com/inikulin/parse5/graphs/contributors", "homepage": "https://github.com/inikulin/parse5", @@ -17,8 +17,8 @@ "license": "MIT", "main": "./lib/index.js", "dependencies": { - "parse5": "^5.1.1", - "parse5-sax-parser": "^5.1.1" + "parse5": "^6.0.1", + "parse5-sax-parser": "^6.0.1" }, "repository": { "type": "git", diff --git a/packages/parse5-htmlparser2-tree-adapter/lib/index.js b/packages/parse5-htmlparser2-tree-adapter/lib/index.js index 824047383a89ca8a5890185a2f87afe88a96cbbb..58464d78a41e54377eb0c6edd2510e373942a49e 100644 --- a/packages/parse5-htmlparser2-tree-adapter/lib/index.js +++ b/packages/parse5-htmlparser2-tree-adapter/lib/index.js @@ -342,3 +342,7 @@ exports.setNodeSourceCodeLocation = function(node, location) { exports.getNodeSourceCodeLocation = function(node) { return node.sourceCodeLocation; }; + +exports.updateNodeSourceCodeLocation = function(node, endLocation) { + node.sourceCodeLocation = Object.assign(node.sourceCodeLocation, endLocation); +}; diff --git a/packages/parse5-htmlparser2-tree-adapter/package.json b/packages/parse5-htmlparser2-tree-adapter/package.json index 4c71c1b5f188efd9b57a8dc1b2ca7e3ead9c28d0..cb8d818a261d1c745f11788e77e809c37671008f 100644 --- a/packages/parse5-htmlparser2-tree-adapter/package.json +++ b/packages/parse5-htmlparser2-tree-adapter/package.json @@ -1,7 +1,7 @@ { "name": "parse5-htmlparser2-tree-adapter", "description": "htmlparser2 tree adapter for parse5.", - "version": "5.1.1", + "version": "6.0.1", "author": "Ivan Nikulin (https://github.com/inikulin)", "contributors": "https://github.com/inikulin/parse5/graphs/contributors", "homepage": "https://github.com/inikulin/parse5", @@ -14,7 +14,7 @@ "license": "MIT", "main": "./lib/index.js", "dependencies": { - "parse5": "^5.1.1" + "parse5": "^6.0.1" }, "repository": { "type": "git", diff --git a/packages/parse5-parser-stream/package.json b/packages/parse5-parser-stream/package.json index 284dd04e9e8320b465642f9d9b04c4760334cdfb..068e07566b83baa4be08069082498770820902d8 100644 --- a/packages/parse5-parser-stream/package.json +++ b/packages/parse5-parser-stream/package.json @@ -1,7 +1,7 @@ { "name": "parse5-parser-stream", "description": "Streaming HTML parser with scripting support.", - "version": "5.1.1", + "version": "6.0.1", "author": "Ivan Nikulin (https://github.com/inikulin)", "contributors": "https://github.com/inikulin/parse5/graphs/contributors", "homepage": "https://github.com/inikulin/parse5", @@ -14,7 +14,7 @@ "license": "MIT", "main": "./lib/index.js", "dependencies": { - "parse5": "^5.1.1" + "parse5": "^6.0.1" }, "repository": { "type": "git", diff --git a/packages/parse5-plain-text-conversion-stream/package.json b/packages/parse5-plain-text-conversion-stream/package.json index 7db65e74fd55cae977fd2b1bb2cabcf348a70e40..974a0d13f031f4f85e128c4ef6fb2d1f6476b4bb 100644 --- a/packages/parse5-plain-text-conversion-stream/package.json +++ b/packages/parse5-plain-text-conversion-stream/package.json @@ -1,7 +1,7 @@ { "name": "parse5-plain-text-conversion-stream", "description": "Stream that converts plain text files into HTML document.", - "version": "5.1.1", + "version": "6.0.1", "author": "Ivan Nikulin (https://github.com/inikulin)", "contributors": "https://github.com/inikulin/parse5/graphs/contributors", "homepage": "https://github.com/inikulin/parse5", @@ -17,8 +17,8 @@ "license": "MIT", "main": "./lib/index.js", "dependencies": { - "parse5": "^5.1.1", - "parse5-parser-stream": "^5.1.1" + "parse5": "^6.0.1", + "parse5-parser-stream": "^6.0.1" }, "repository": { "type": "git", diff --git a/packages/parse5-sax-parser/docs/index.md b/packages/parse5-sax-parser/docs/index.md index a89b295fd6bc1937540d6d60532e65450332c8c0..a089a954ad96e0416fbb883d084cd9cefa7590e2 100644 --- a/packages/parse5-sax-parser/docs/index.md +++ b/packages/parse5-sax-parser/docs/index.md @@ -87,8 +87,8 @@ const fs = require('fs'); const file = fs.createWriteStream('google.com.html'); const parser = new SAXParser(); -parser.on('doctype', (name, publicId, systemId) => { - // Process doctype info ans stop parsing +parser.on('doctype', ({ name, publicId, systemId }) => { + // Process doctype info and stop parsing ... parser.stop(); }); diff --git a/packages/parse5-sax-parser/package.json b/packages/parse5-sax-parser/package.json index f8873fa155eda36d6488f7efdcf8288dd1fae09e..09241523687545fea354d0f304bcdba947780e45 100644 --- a/packages/parse5-sax-parser/package.json +++ b/packages/parse5-sax-parser/package.json @@ -1,7 +1,7 @@ { "name": "parse5-sax-parser", "description": "Streaming SAX-style HTML parser.", - "version": "5.1.1", + "version": "6.0.1", "author": "Ivan Nikulin (https://github.com/inikulin)", "contributors": "https://github.com/inikulin/parse5/graphs/contributors", "homepage": "https://github.com/inikulin/parse5", @@ -15,7 +15,7 @@ "license": "MIT", "main": "./lib/index.js", "dependencies": { - "parse5": "^5.1.1" + "parse5": "^6.0.1" }, "repository": { "type": "git", diff --git a/packages/parse5-serializer-stream/package.json b/packages/parse5-serializer-stream/package.json index 00a671514cdf9d167420db2b5514a7adb12aa5fe..2c2948adaef5b48cece599309b1849eea0192fa9 100644 --- a/packages/parse5-serializer-stream/package.json +++ b/packages/parse5-serializer-stream/package.json @@ -1,7 +1,7 @@ { "name": "parse5-serializer-stream", "description": "Streaming HTML serializer.", - "version": "5.1.1", + "version": "6.0.1", "author": "Ivan Nikulin (https://github.com/inikulin)", "contributors": "https://github.com/inikulin/parse5/graphs/contributors", "homepage": "https://github.com/inikulin/parse5", @@ -16,7 +16,7 @@ "license": "MIT", "main": "./lib/index.js", "dependencies": { - "parse5": "^5.1.1" + "parse5": "^6.0.1" }, "repository": { "type": "git", diff --git a/packages/parse5/docs/source-code-location/end-location.md b/packages/parse5/docs/source-code-location/end-location.md new file mode 100644 index 0000000000000000000000000000000000000000..8b3bd57db6240842619d927ccd96c92686b81b15 --- /dev/null +++ b/packages/parse5/docs/source-code-location/end-location.md @@ -0,0 +1,48 @@ +# Interface: EndLocation + +### Properties + +* [endCol](#endcol) +* [endOffset](#endoffset) +* [endLine](#endline) +* [endTag](#endtag) + +--- + +## Properties + + + +### endCol + +**● endCol**: *`number`* + +One-based column index of the last character + +___ + + +### endOffset + +**● endOffset**: *`number`* + +Zero-based last character index + +___ + + +### endLine + +**● endLine**: *`number`* + +One-based line index of the last character + +___ + + +### endTag + +**● endTag**: *[Location](location.md)|undefined* + +Element's end tag location info. +This property is undefined, if the element has no closing tag. \ No newline at end of file diff --git a/packages/parse5/docs/tree-adapter/interface.md b/packages/parse5/docs/tree-adapter/interface.md index ac1e565421c2354726566d73a7198018b779674c..238fb190ba02fe611d0c4c0c7d66af156ef9d81b 100644 --- a/packages/parse5/docs/tree-adapter/interface.md +++ b/packages/parse5/docs/tree-adapter/interface.md @@ -2,7 +2,7 @@ Tree adapter is a set of utility functions that provides minimal required abstraction layer beetween parser and a specific AST format. Note that `TreeAdapter` is not designed to be a general purpose AST manipulation library. You can build such library on top of existing `TreeAdapter` or use one of the existing libraries from npm. -*__See__*: [default implementation](https://github.com/inikulin/parse5/blob/master/lib/tree_adapters/default.js) +*__See__*: [default implementation](https://github.com/inikulin/parse5/blob/master/packages/parse5/lib/tree-adapters/default.js) ### Methods @@ -38,7 +38,7 @@ Tree adapter is a set of utility functions that provides minimal required abstra * [setDocumentType](#setdocumenttype) * [setNodeSourceCodeLocation](#setnodesourcecodelocation) * [setTemplateContent](#settemplatecontent) - +* [updateNodeSourceCodeLocation](#updatenodesourcecodelocation) --- ## Methods @@ -588,6 +588,21 @@ Sets the `