## Gumbo - HTML parser library implemented in C99

This is Emma's branch of the Gumbo parser, by Johnathan Tang
and Google. See CHANGES for a list of all differences between
this project and the [repository I worked from](https://codeberg.org/gumbo-parser/gumbo-parser). The purpose
of this fork is to remove the bindings for languages other
than C (about which I Do Not Care) and to use the Make build
system instead of Meson.

I'll try to keep up with security-relevant issues from the
original project, but intend to ignore pretty much anything
else.

---

Gumbo is an implementation of the HTML5 parsing algorithm implemented
as a pure C99 library with no outside dependencies. It's designed to serve
as a building block for other tools and libraries such as linters,
validators, templating languages, and refactoring and analysis tools. The
original [GitHub repository](https://github.com/google/gumbo-parser), has
not seen any development since 2016.

Goals & features:
 - Fully conformant with the [HTML5 spec](https://html.spec.whatwg.org/multipage).
 - Robust and resilient to bad input.
 - A simple and easy-to-use API.
 - Support for source locations and pointers back to the original text.
 - Support for fragment parsing.
 - Relatively lightweight, with no outside dependencies.
 - Passes all [html5lib tests](https://github.com/html5lib/html5lib-tests).
 - Tested on over 2.5 billion pages from Google's index.

Non-goals:
 - Execution speed.  Gumbo gains some of this by virtue of being written in
   C, but it is not an important consideration for the intended use-case, and
   was not a major design factor.
 - Support for encodings other than UTF-8.  For the most part, client code
   can convert the input stream to UTF-8 text using another library before
   processing.
 - Mutability.  Gumbo is intentionally designed to turn an HTML document into a
   parse tree, and free that parse tree all at once.  It's not designed to
   persistently store nodes or subtrees outside of the parse tree, or to perform
   arbitrary DOM mutations within your program.  If you need this functionality,
   we recommend translating the Gumbo parse tree into a mutable DOM
   representation more suited for the particular needs of your program before
   operating on it.
