LINUX.ORG.RU

litehtml v0.9

 , , litehtml


3

2

Состоялся выпуск litehtml, легковесного движка рендеринга HTML/CSS. Основная цель библиотеки litehtml – предоставить разработчикам простой способ отображения HTML-страниц в своих приложениях. Например, он может использоваться программах-словарях вместо WebEngine. Qt Assistant использует эту библиотеку для показа справки.

Библиотека не занимается отрисовкой текста или изображений, поэтому у нее нет привязки к какому-либо тулкиту.

Кроме множества улучшений, выпуск примечателен базовой реализацией CSS Flexbox.

litehtml распространяется на условиях New BSD License и использует gumbo-parser с лицензией Apache v.2.

>>> Подробности



Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 1)

он может использоваться программах-словарях вместо WebEngine

Интересно, но в своей программе я уже перешел с веб-движка на табличный виджет.

baobab
()
Ответ на: комментарий от buddhist

От него избавятся в 6 плазме? Я не в курсе планов. Новые коммиты пока приходят, движок используется в kmail и konqueror, а может ещё где.

InterVi ★★★★
()

базовой реализацией CSS Flexbox

Хоть кто-то смог. Netsurf до сих пор не умеет.

ivanov17
()
Ответ на: комментарий от thegoldone

litehtml пока реализует не все возможности HTML, к тому же litebrowser устроен очень просто и это совсем не браузер в привычном понимании. А если учесть, что JavaScript движок не поддерживает, то некоторые сайты будут выглядеть пустыми.

NickNotNick
() автор топика
Ответ на: комментарий от NickNotNick

А мне всё нравится. Только жаль, что на Си, а не на Java.

Shushundr ★★★
()
Ответ на: комментарий от thegoldone
[ 84%] Linking CXX executable litehtml_tests
CMake Error at /usr/share/cmake/Modules/GoogleTestAddTests.cmake:112 (message):
  Error running test executable.

    Path: '/home/alex/code/other/litebrowser-linux/build/litehtml/litehtml_tests'
    Result: 1
    Output:
      Running main() from /home/alex/code/other/litebrowser-linux/build/_deps/googletest-src/googletest/src/gtest_main.cc
      ../test/render/
      

Call Stack (most recent call first):
  /usr/share/cmake/Modules/GoogleTestAddTests.cmake:225 (gtest_discover_tests_impl)


make[2]: *** [litehtml/CMakeFiles/litehtml_tests.dir/build.make:262: litehtml/litehtml_tests] Ошибка 1
make[2]: *** Удаляется файл «litehtml/litehtml_tests»
make[1]: *** [CMakeFiles/Makefile2:985: litehtml/CMakeFiles/litehtml_tests.dir/all] Ошибка 2
make: *** [Makefile:136: all] Ошибка 2

Ну ожидаемо. Когда вижу make — сразу ясно, что это говно не соберётся. Жаль, идея-то хорошая.

InterVi ★★★★
()
Ответ на: комментарий от pihter

Посмотри на команды сборки выше, ну и ошибки в конце тоже как бэ намекают. Они там оба. Хз почему так, просто статистика.

InterVi ★★★★
()
Ответ на: комментарий от InterVi

С ninja было бы тоже самое: какой-то из тестов зафейлился.

NickNotNick
() автор топика
Ответ на: комментарий от InterVi

Не нужен никакой пердолинг, ты же не будешь использовать эту библиотеку.

NickNotNick
() автор топика

Нужно! А rss-читалки на нём ещё нет?

MataMerah
()
Ответ на: комментарий от InterVi

Когда вижу make — сразу ясно, что это говно не соберётся.

Используй ninja, кто ж запрещает?

$ mkdir build && cd build && cmake -GNinja .. && ninja

Но у меня собирается и с помощью make:

$ mkdir build && cd build && cmake .. && cmake --build .
[  1%] Building C object src/gumbo/CMakeFiles/gumbo.dir/attribute.c.o
[  2%] Building C object src/gumbo/CMakeFiles/gumbo.dir/char_ref.c.o
[  3%] Building C object src/gumbo/CMakeFiles/gumbo.dir/error.c.o
...
[ 98%] Building CXX object _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o
[100%] Linking CXX static library ../../../lib/libgmock_main.a
[100%] Built target gmock_main

Тесты тоже все проходит:

$ ctest
Test project /home/bcat/git/third_party/litehtml/build
        Start   1: CSSTest.Url
  1/476 Test   #1: CSSTest.Url ...................................................................   Passed    0.01 sec
...
        Start 476: render_test._/"/text-justify.htm"
476/476 Test #476: render_test._/"/text-justify.htm" .............................................   Passed    0.04 sec

100% tests passed, 0 tests failed out of 476

Total Test time (real) =   8.40 sec
cyberhoffman
()

Состоялся выпуск litehtml, легковесного движка рендеринга HTML/CSS ...
Библиотека не занимается отрисовкой текста или изображений ...

Непонятно. Что же делает эта библиотека?

superuser ★★★★★
()
Ответ на: комментарий от InterVi

Не знаю, по твоему приведённого логу ничего не понятно. Может, там в build где-нить лежит более подробный лог. Кстати, моё предыдущее сообщение было об litehtml, но litebrowser тоже собирается без проблем тем же макаром.

cyberhoffman
()
Ответ на: комментарий от cyberhoffman

Я перешёл в litehtml, выполнил там сборку и случилась магия. А ты прям по рецепту собирал или тоже не в litebrowser-linux/build?

InterVi ★★★★
()

Собрал. К сожалению, ЛОР с него можно только читать, так как нет поддержки форм.

P.S. А ещё интерфейс браузера рисуется в один поток, и рендер жирных страниц завешивает интерфейс. Но это я так понимаю проблема тестового браузера, а не библиотеки.

Werenter ★★★
()
Последнее исправление: Werenter (всего исправлений: 1)

litebrowser постоянно жрёт память, обратно не отдаёт. Интересно, утечка памяти на уровне браузера или движка?

InterVi ★★★★
()
Ответ на: комментарий от Werenter

Значит ЛОР плохо написан. Сайты Столярова отображаются великолепно.

InterVi ★★★★
()
Ответ на: комментарий от InterVi

Нет никаких магических рецептов. Это же cmake, тут всё стандартно. Директорию, где будет производиться «магия» можно назвать как угодно, хошь «build», хошь «sborka», это значения не имеет. Главное, чтоб при генерации скриптов сборки (первый запуск команды cmake) был правильно указан путь, где хранится CMakeLists.txt.

cyberhoffman
()
Ответ на: комментарий от InterVi

Библиотеку собирать не пробовал, браузер собрался с первой попытки по инструкции. Хотя не, со второй. С первой не нашлась одна библиотека, которую пришлось доустановить.

Werenter ★★★
()
Ответ на: комментарий от CYB3R

А если серьёзно, можно ли как-то применить эту библиотеку во встраиваемых системах? Например, вместе с LVGL.

CYB3R ★★★★★
()
Ответ на: комментарий от InterVi

КМК, проблема в файле litebrowser-linux/litehtml/test/render_test.cpp, в строчке

const char* test_dir = "../test/render"; // ctest is run from litehtml/build

То есть, когда собирается просто библиотека, все работает как надо, а в составе litebrowser-linux тесты падают, но они по умолчанию выключены. И даже если тесты крашатся, сам браузер собирается.

NickNotNick
() автор топика
Ответ на: комментарий от CYB3R

Это библиотека не моя, я только разместил объявление.

NickNotNick
() автор топика
Ответ на: комментарий от NickNotNick

Вот оно чё. Потому-то и собралось нормально из другой директории.

InterVi ★★★★
()

и использует gumbo-parser

Лучше бы lexbor использовали.

dataman ★★★★
()

Молодцы, что пилят альтернативу. Но… когда дорастут до Qt WebEngine, тогда и поговорим.

Gonzo ★★★★★
()

Библиотека не занимается отрисовкой текста или изображений

А как она тогда рендерит страницу?

Xintrea ★★★★★
()
Ответ на: комментарий от Xintrea

Пользователь библиотеки должен реализовать класс document_container, в котором, в том числе, есть методы для отрисовки:

virtual void draw_text(
         litehtml::uint_ptr hdc,
         const char* text,
         litehtml::uint_ptr hFont,
         litehtml::web_color color,
         const litehtml::position& pos) = 0;

virtual void draw_list_marker(
         litehtml::uint_ptr hdc,
         const litehtml::list_marker& marker) = 0;

virtual void draw_background(
         litehtml::uint_ptr hdc,
         const std::vector<litehtml::background_paint>& bg) = 0;

virtual void draw_borders(
         litehtml::uint_ptr hdc,
         const litehtml::borders& borders,
         const litehtml::position& draw_pos,
         bool root) = 0;

Думаю, эта библиотека не очень подходит для mytetra.

NickNotNick
() автор топика
Ответ на: комментарий от NickNotNick

Известно, что для правильного отображения текста на странице, нужно знать его размеры. Здесь для этого я вижу только функцию text_width(const char* text, litehtml::uint_ptr hFont). Получается, чтобы движку правильно определить ширину текста и где сделать перенос, придётся последовательно запрашивать ширину строки, предположим, бинарным поиском (проверили ширину исходной строки, если больше допустимой — разделяем по пробелу и замеряем снова, и так далее). Но функция при этом принимает null-terminated string. Это означает, что каждую подстроку придётся отдельно аллоцировать для передачи в функцию?

static_lab ★★★★★
()
Ответ на: комментарий от static_lab

Я не ковырялся в кишках библиотеки и не знаю как это сделано. На мой взгляд, правильнее алоцировать куски, но можно и жонглировать указателем и временно вставлять \0 в нужных местах.

NickNotNick
() автор топика
Ответ на: комментарий от NickNotNick

Если строку делим по словам, то заменить символ пробела на \0 ещё можно, но в режиме word-break: break-all придётся именно вставлять нулевой символ в середину строки. Это вообще никуда не годится.

static_lab ★★★★★
()
Ответ на: комментарий от static_lab

Ну так-то word-break: break-all еще не поддерживается. litehtml рзбивает весь текст по словам. Никаких замен чего-то на \0 нет. text_width вызывается для каждого слова и даже для пробела. Да, работа с текстом не идеальна и не оптимальна, но пока так. В дальнейшем постараюсь это исправить.

Если что, я автор litehtml. Был раз увидеть этот топик и обсуждение под ним.

Про компиляцию litebrowser. Один из последних комитов как раз отключает автоматическую сборку тестов litehtml на litebrowser, так-то должно быть проще собрать.

tordex
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.