#web #editor #monospace

ultron

A web base text-editor with strong focus on displaying multi-width characters correctly

9 releases

new 0.2.5 Sep 21, 2021
0.2.4 Sep 18, 2021
0.1.2 Sep 8, 2021
0.1.0 Oct 14, 2020

#10 in Text editors

46 downloads per month
Used in 2 crates

MIT license

2MB
28K SLoC

Perl 5K SLoC // 0.1% comments Rust 3K SLoC // 0.2% comments D 2.5K SLoC // 0.1% comments Objective-C++ 2.5K SLoC // 0.1% comments C++ 2.5K SLoC // 0.1% comments Python 1.5K SLoC // 0.6% comments JavaScript 1.5K SLoC // 0.5% comments Java 1K SLoC // 0.5% comments Shell 1K SLoC // 0.5% comments C# 822 SLoC // 0.7% comments Ruby 678 SLoC // 0.5% comments Scala 622 SLoC // 0.6% comments Go 605 SLoC // 0.8% comments Erlang 588 SLoC // 0.9% comments Clojure 543 SLoC // 0.7% comments Objective-C 503 SLoC // 0.5% comments OCaml 485 SLoC // 0.2% comments Lua 458 SLoC // 0.6% comments C 334 SLoC // 0.6% comments PHP 324 SLoC // 0.8% comments ASP 290 SLoC // 0.7% comments Groovy 289 SLoC // 0.2% comments TCL 211 SLoC // 0.4% comments Batch 127 SLoC // 0.8% comments GNU Style Assembly 114 SLoC R 81 SLoC // 0.8% comments Lisp 51 SLoC // 0.7% comments Haskell 43 SLoC // 0.7% comments SQL 27 SLoC // 0.7% comments Ruby HTML 23 SLoC Pascal 8 SLoC // 0.6% comments

Ultron

Ultron is a web based monospace text-editor with syntax highlighting, completely written in rust.

Screenshot

Feature

  • Real monospace GUI with support for multi-width characters such as CJK and unicode box drawing.
  • Fast, typing latency at ~15ms and cursor move at ~10ms.

Syntax-highlighter for static site generator

Ultron comes with ultron-ssg crate which can be used for syntax highlighting for a static site generator.


use ultron_ssg;

fn main() {
    let content = r#"
        fn main(){
            println!("hello from ultron-ssg");
        }
    "#
    let html =
        ultron_ssg::render_to_string(content, "rust", Some("gruvbox-dark"));
    std::fs::create_dir_all("out").expect("must create dir");
    std::fs::write("out/hello.html", html).expect("must write to file");
}

Use-case

I wrote this code editor for my very specific usecase:

  • real monospace on GUI editors for ascii diagrams with support for multi-width characters such that it aligns with other characters on other lines with respect to their character width.

GUI editors don't handle monospace font quite well for CJK characters or any unicode characters that have are more than 1 character wide.

Terminal have no problem displaying them. Fonts in GUI seems to adjust characters on how closely they are lined up together. That is good for reading and all, but not for Ascii diagrams.

The solution would be to wrap each characters with a <div> to force them to be in one cell. Wide characters will be using <div class"wide_{n}"> where n is the unicode_width. The style for this char will then be set with a multiplier to the normal width.

Similar projects:

Build and run the editor

git clone https://github.com/ivanceras/ultron.git

cd ultron
./serve.sh

Then, navigate to http://localhost:4002

Demo

link

Patreon link

Become a patron

Dependencies

~16MB
~296K SLoC