## Modest — development of an open source HTML renderer in pure C programming language

View on GitHub Download .zip Download .tar.gz

Hi, there!

My name is Alexander Borisov, and I am the developer of Modest, an open source HTML renderer in pure C programming language, without dependencies.

### About the Project

Project Paradigms:

- Embeddable
- Speed
- Resource light

One of the resulting products of this project will be a fast, light, yet fully functional browser. OK, let us take things step by step.

### Embeddable

Modest is being developed using the pure C99, without dependencies, and will benefit from the following unique features:

Easy to port to any platform

Thanks to the C99 programming language, there are no outside dependencies, and therefore the project can be easily ported to any platform where C is available, and as we all know, C is actually available everywhere.
Moreover, Modest is being developed in such a way that in case of compilation on a specific platform it can be easily adapted to that platform.

Binding for third party programming languages

The engine uses a simple API to provide binding for third party programming languages. This helps create fully functional HTML Render with your favorite programming languages, such as Python, Perl, Rust, JS and so on.

Besides this, the API provides the control and interference features at every step of HTML rendering. All this provides a unique capacity to control the HTML Tree, Render Tree, and Layers, without unwanted intercalations.

For instance, you can create interfaces, games, applications using your favorite programming languages, and use all the power of HTML/CSS/DOM Events. Of course, when talking about embedded code, we first think about TV sets and other IoT devices.

### Speed

As Modest is an embedding-oriented solution for third party applications, one of the key criteria is its operational speed. And the project has something special to be proud of:

- Today, Modest has the fastest fully functional HTML parser with multi-thread parsing capability
- Very fast CSS parser with output to C structures (this means not only the AST Tree)
- Very fast search using CSS Selectors
- And so on

Despite the high operational speed, Modest is being developed with code openness and clearness in mind. And it provides opportunities to maintain and develop further the entire project with ease. And I am not making any pre-optimizations, thus keeping more ways open for the project to grow.

### Resource light

When embedding a third party code to our own, we used to hope it would be “normal”, it would not eat up all available resources, and it would really be “modest”. It is a real challenge to create a fully functioning HTML Render with low resource consumption. This requires a serious approach. That is why you need to learn carefully any specifications, and understand not only how to use them at the moment, but also what features developers might include in the future.

As the developer of this product, I can guarantee as minimal use of resources as possible. The whole development is being made while always keeping in mind two parameters: memory and CPU (speed)

### Current Status of the Project

Right at the moment, the project has the following components implemented:

- MyHTML — HTML parser, manipulations with HTML Tree, encoding conversion, and so on. This is the basic project that Modest is based on.
- MyCSS — CSS parser (Selectors, Values, Namespace, Property), getting resulting structures, С structures for further manipulation.
- MyFONT — parser of .otf and .fft fonts. Getting metrics for glyphs: width, height, baseline, x-height, etc.
- Finder — search and comparison of CSS and HTML
- + much supplementary code

At the moment, Modest can be used for:

- Parsing and manipulations with HTML, CSS, Font
- Search for HTML modes by CSS Selectors
- Getting CSS properties defined in HTML node
- and more

At the moment, almost everything is ready for tree rendering (Render Tree, Layers). However, before I start to compute HTML, I have to stabilize the current code, find architectural bugs, and make general improvements. I think I will start making the rendering tree and layers in the very beginning of 2017.

### Help for the Project

The entire project is being developed by myself, with a little help from the community (issues, bugs, and so on), but the project needs developers and testers. Now I am looking for options to attract investors or companies interested in this project, and ready to support it.

Thanks for attention! Hope you'll enjoy it!

P.S.: There are many ideas around, and I have more than enough fuel!

Yours sincerely,
Alexander Borisov

#### See prev article: Benchmark. Analyzing and Testing Current HTML Parsers