diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..a266478 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,25 @@ +The MIT License (MIT) +===================== + +Copyright © 2022 Maxim Lebedev + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the “Software”), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..d75d967 --- /dev/null +++ b/README.md @@ -0,0 +1,63 @@ +# tree + +[![Go Reference](https://pkg.go.dev/badge/source.toby3d.me/toby3d/tree.svg)](https://pkg.go.dev/source.toby3d.me/toby3d/tree) + +The fast and simple [Tree Notation](https://faq.treenotation.org/spec/) parser. +Clean and unfiltered Go with single memory allocation and without any 3rd party +dependencies. + +## Usage + +```go +package main + +import ( + "fmt" + "log" + "os" + "path/filepath" + + "source.toby3d.me/toby3d/tree" +) + +func main() { + // For example, load tree content from file. + file, err := os.Open(filepath.Join(".", "html.example")) + if err != nil { + log.Fatalf("cannot open file: %v", err) + } + defer file.Close() + + // Parse file contents from plain Tree Notation into *tree.Node with + // *tree.Node childrens. + node := tree.Parse(file) + + fmt.Printf("%#v", node) + // Output: + // html + // body + // div おはようございます +} +``` + +See package documentation and another examples +[on pkg.go.dev](https://pkg.go.dev/source.toby3d.me/toby3d/tree). + +## Benchmark + +```bash +$ GOMAXPROCS=1 go test -bench=Parse -benchmem -benchtime=10s +goos: linux +goarch: amd64 +pkg: source.toby3d.me/toby3d/tree +cpu: 11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40GHz +BenchmarkParse 37139248 316.9 ns/op 4096 B/op 1 allocs/op +``` + +## License + +See [LICENSE.md](LICENSE.md) + +## Contact + +Check [my website](https://toby3d.me/) or [just drop email](mailto:hey@toby3d.me).