/GoBro

A Go browser. Render pages using new format ".ego" and standard ".css".

Primary LanguageGoMIT LicenseMIT

GoBro

GoBro

A Go browser. Render pages using new format ".ego" and standard ".css".

Go is a beautiful programming language, so it deserves a browser written on it. But not any browser. Especially not the type that runs on JavaScript.

This project aims to create an entirely independent system of parsing and displaying documents.

For now, it lacks visuals, but already can create a tree of objects parsed from the file with custom extension ".ego".
It may not be the perfect solution for displaying pages at the moment, but it aims to replace it in the future.


The stage of the project

  • Parser _________________ 🗸
  • IPC ____________________ 🗸
  • Hashmaps ____________ 🗸
  • sPOT optimization ____ 🗸
  • Client API _____________ in progress
  • Standalone ___________ in progress
  • GIO UI ________________ not started
  • HTTP _________________ not started
  • Public test ____________ not started

Now to the rules:

Modern standard requires high levels of readability, adaptability, functionality, and must provide total freedom for designers and maintainers.

This is why we try to get rid of the complexity of parsing the DOM, so no divs, ps, hs, and other madness (just joking about madness).

We will provide only 4 possible tags:

  • <s> - links a custom style to the objects,
  • <x> - links a custom executable to the page,
  • ### - just a comment line,
  • <e> - prototype of the element.

Yes, you saw it right! One <e> to rule them all!

It gets even better:

  • ### comments are one-liners, so everything on the line is omitted during parsing,
  • <s> and <x> have only one field - ref, so it's declared as follows: <s ref="style.css"> or <x ref="executable.go">. Every style and executable is linked and executed one by one in descending order, with the top links or executes first,
  • <e> can have <e id="id" class="class" ref="reference_to_something"> properties and must be closed with </>

There is the best part: <e> can have only one or none properties. The id and class are used to link an object to the corresponding style provided with style.css. If no id and class is provided, linker will give it std property, that is the plain text.

In later versions, context will be added, which will be key in providing context for the linker. For example, context="text" will treat object like a plain text, context="button" as button, context="field" as input field, etc. It will also support "user" definition that will tell linker to treat objects with id or class differently. Be aware, that with "user" and no id or class provided, it will still be treated as plain text!