From 4a74ae18b9ae0c6d6e4205a5a9852edb67808a95 Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Wed, 14 Jul 2021 21:01:01 +0300 Subject: Updated README and release notes Details about HarfBuzz and FriBidi. --- README.md | 39 ++++++++++++++++++++++++++------------- res/about/help.gmi | 5 +++-- res/about/version.gmi | 27 +++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 4cb6f03b..3aa3d4e8 100644 --- a/README.md +++ b/README.md @@ -8,14 +8,14 @@ Like Gemini, Lagrange has been designed with minimalism in mind. It depends on a ## Features -* Beautiful typography using Unicode fonts -* Autogenerated page style and Unicode icon for each Gemini domain +* Beautiful typography with full Unicode support +* Autogenerated page style and symbol for each Gemini domain * Smart suggestions when typing the URL — search bookmarks, history, identities * Sidebar for page outline, managing bookmarks and identities, and viewing history * Multiple tabs * Identity management — create and use TLS client certificates * Audio playback: MP3, Ogg Vorbis, WAV -* And more! Open `about:help` in the app, or see [help.gmi](https://git.skyjake.fi/gemini/lagrange/raw/branch/release/res/about/help.gmi) +* And much more! Open `about:help` in the app, or see [help.gmi](https://git.skyjake.fi/gemini/lagrange/raw/branch/release/res/about/help.gmi) ## Downloads @@ -35,9 +35,11 @@ sudo zypper install lagrange ## How to compile -This is how to build Lagrange in a POSIX-compatible environment. The required tools are a C11 compiler (e.g., Clang or GCC), CMake and `pkg-config`. +You need a POSIX-compatible environment to compile Lagrange. -1. Download and extract a source tarball from [Releases][rel]. Please note that the GitHub/Gitea-generated tarballs do not contain the ["the_Foundation" submodule](https://git.skyjake.fi/skyjake/the_Foundation); check which tarball you are getting. Alternatively, you may also clone the repository and its submodules: `git clone --recursive --branch release https://git.skyjake.fi/gemini/lagrange` +The required tools are a C11 compiler (e.g., Clang or GCC), CMake and `pkg-config`. Additional tools are required for the optional compilation of HarfBuzz and GNU FriBidi (see next section for details). + +1. Download and extract a source tarball from [Releases][rel]. Please note that the GitHub/Gitea-generated tarballs do not contain HarfBuzz, GNU FriBidi, or [the_Foundation](https://git.skyjake.fi/skyjake/the_Foundation) submodules; check which tarball you are getting. Alternatively, you may also clone the repository and its submodules: `git clone --recursive --branch release https://git.skyjake.fi/gemini/lagrange` 2. Check that you have the required dependencies installed: CMake, SDL 2, OpenSSL 1.1.1, libpcre, zlib, libunistring. For example, on macOS this would do the trick (using Homebrew): ```brew install cmake sdl2 openssl@1.1 pcre libunistring``` Or on Ubuntu: ```sudo apt install cmake libsdl2-dev libssl-dev libpcre3-dev zlib1g-dev libunistring-dev``` 3. Optionally, install the mpg123 decoder library for MPEG audio support. For example, the macOS Homebrew package is `mpg123` and on Ubuntu it is `libmpg123-dev`. 4. Create a build directory. @@ -47,16 +49,27 @@ This is how to build Lagrange in a POSIX-compatible environment. The required to ### Unicode text rendering -(details about HarfBuzz and FriBidi) +Lagrange relies on the [HarfBuzz](https://harfbuzz.github.io) and [GNU FriBidi](https://github.com/fribidi/fribidi/) libraries for handling complex scripts and bidirectional text. This repository includes these two libraries as submodules. By default, HarfBuzz and GNU FriBidi will be compiled as part of the app, without any additional dependencies. This allows the app to be built on systems where these libraries are not readily available. + +Note that compiling these libraries has the following requirements: + +* HarfBuzz requires a C++ compiler. +* GNU FriBidi cannot be compiled with CMake; you need to have [Meson](https://mesonbuild.com) and [Ninja](https://ninja-build.org). + +If these requirements cannot be met, or you would prefer the use the system-provided HarfBuzz and GNU FriBidi, the build options can be changed. See the table below for `ENABLE_HARFBUZZ_MINIMAL` and `ENABLE_FRIBIDI_BUILD` (set both to **NO**). Note that a system-provided HarfBuzz likely has dependencies to other libraries, such as FreeType and GLib. + +You also may disable HarfBuzz and/or GNU FriBidi entirely. The old text renderer that supports only non-complex left-to-right scripts is then used. + +### Installing to a custom directory -### Installing to a directory +By default, the compiled app will be installed to a system-wide location determined by CMake. -Set `CMAKE_INSTALL_PREFIX` to install to a directory of your choosing. +Set `CMAKE_INSTALL_PREFIX` to install to a directory of your choosing: 1. `cmake {path_of_lagrange_sources} -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/dest/path` 2. `cmake --build . --target install` -This will also install an XDG .desktop file for launching the app. +Note that the `install` target also deploys an XDG .desktop file for launching the app. ### Build options @@ -68,9 +81,9 @@ This will also install an XDG .desktop file for launching the app. | `ENABLE_IDLE_SLEEP` | Sleep in the main thread instead of waiting for events. On some platforms, `SDL_WaitEvent()` may have a relatively high CPU usage. Setting this to **ON** polls for events periodically but otherwise keeps the main thread sleeping, reducing CPU usage. The drawback is that there is a slightly increased latency reacting to new events after idle mode ends. | | `ENABLE_FRIBIDI` | Use the GNU FriBidi library for processing bidirectional text. FriBidi implements the Unicode Bidirectional Algorithm to determine text directions. | | `ENABLE_FRIBIDI_BUILD` | Compile the GNU FriBidi library as part of the build. If set to **OFF**, `pkg-config` is used instead to locate the library. | -| `ENABLE_HARFBUZZ` | Use the HarfBuzz library for shaping Unicode text. This is required for correctly rendering complex scripts and composite glyphs. If disabled, a simplified text shaping algorithm is used that only works for non-complex languages like English. | -| `ENABLE_HARFBUZZ_MINIMAL` | Build the HarfBuzz library with all dependencies disabled. Useful when building the application for distribution so that the number of deployed dependencies will be minimized. A system-provided version of HarfBuzz is likely built with dependencies on FreeType and ICU at least. If set to **OFF**, `pkg-config` will be used to find HarfBuzz. | -| `ENABLE_IPC` | Instances of the Lagrange executable communicate via signals or (on Windows) a system-provided IPC mechanism. This is used for controlling an existing Lagrange window via the CLI. If set to **OFF**, each instance of the application runs without knowledge of other instances. This may cause them to overwrite each other's runtime files. | +| `ENABLE_HARFBUZZ` | Use the HarfBuzz library for shaping Unicode text. This is required for correctly rendering complex scripts and combining glyphs. If disabled, a simplified text shaping algorithm is used that only works for non-complex languages like English. | +| `ENABLE_HARFBUZZ_MINIMAL` | Build the HarfBuzz library with all dependencies disabled. Useful when building the app for distribution so that the number of deployed dependencies will be minimized. A system-provided version of HarfBuzz is likely built with dependencies on FreeType and ICU at least. If set to **OFF**, `pkg-config` will be used to find HarfBuzz. | +| `ENABLE_IPC` | Instances of the Lagrange executable communicate via signals or (on Windows) a system-provided IPC mechanism. This is used for controlling an existing Lagrange window via the CLI. If set to **OFF**, each instance of the app runs without knowledge of other instances. This may cause them to overwrite each other's runtime files. | | `ENABLE_KERNING` | Use kerning information in the fonts to adjust glyph placement. Setting this **ON** improves text appearance in subtle ways but slows down text rendering. It may be a good idea to set this to **OFF** when running on a slow CPU. This option only affects the simple built-in text renderer, and has no effect on HarfBuzz. | | `ENABLE_MPG123` | Use the mpg123 library for decoding MPEG audio files. | | `ENABLE_RELATIVE_EMBED` | Locate resources only in relation to the executable. Useful when any system/predefined directories are not supposed to be accessed, e.g., in the Windows portable build. | @@ -137,4 +150,4 @@ On Linux/*BSD/other operating systems, user files stored in `~/.config/lagrange` The usage and contents of the user files are described in the Help document. You can delete one or more of the files while Lagrange is not running to reset the corresponding data to the default/empty state. -One instance of Lagrange can be running at a time per user file directory. +One instance of Lagrange can be running at a time per user directory. diff --git a/res/about/help.gmi b/res/about/help.gmi index 9ebf79ba..ebae8846 100644 --- a/res/about/help.gmi +++ b/res/about/help.gmi @@ -25,8 +25,8 @@ Like Gemini, Lagrange has been designed with minimalism in mind. It depends on a ### Features -* Beautiful typography using Unicode fonts -* Autogenerated page style and Unicode icon for each Gemini domain +* Beautiful typography with full Unicode support +* Autogenerated page style and symbol for each Gemini domain * Light and dark color themes * Smooth scrolling * Scaling page content (50%...200%) @@ -36,6 +36,7 @@ Like Gemini, Lagrange has been designed with minimalism in mind. It depends on a * Split view for browsing two pages at once * Persistent app state — tabs and history are restored on next run * Configurable keybindings +* Customizable UI color palette * Open links via keyboard shortcuts * Select and copy text with the mouse * Find text on the page diff --git a/res/about/version.gmi b/res/about/version.gmi index b213a24b..04ad0b99 100644 --- a/res/about/version.gmi +++ b/res/about/version.gmi @@ -6,6 +6,33 @@ ``` # Release notes +## 1.6 +* Added support for bidirectional text and complex scripts such as Arabic. العالم متنوع +* Added setting for adjusting line spacing. +* Added settings for keyboard and mouse scrolling speeds. +* Added configuration file for defining UI color palette (see Help page). +* Added link context menu item for deleting local files (e.g., Downloads). +* Inline images/audio will not get discarded during back/forward navigation. The Network > Memory Size setting determines the maximum memory usage for media. Setting the Memory Size to zero is equivalent to the previous behavior of discarding everything when the page changes. +* Page contents are cached in presentation form for quicker restoring during back/forward navigation. +* Debug information includes RAM use in addition to cache size. This includes document layout and media stored in memory (e.g., raw pixel data of images). +* Right-to-left paragraphs are aligned to the right. +* Preferences have been reorganized. There is a new Fonts page, and some General settings have been moved to the Style page. All color-related settings are on the Colors page, including UI theme colors. +* Opened links are updated to reflect visited status even when opened in background or to the side. +* Large lede paragraph font is not applied if the paragraph has too many lines. +* Input dialog is not accidentally dismissed unless the Cancel button is clicked or Escape is pressed. +* Unicode Byte Order Mark is ignored in the beginning of a `text/gemini` page. +* Improved internal handling of URLs. For example, some URLs were not being recognized as visited because of percent-encoding differences. +* Fixed URL in the generated page for viewing a single image (spaces weren't encoded). +* Fixed sizing of characters in the Noto Symbols fonts. +* Adjusted kerning of Nunito. +* Updated Smol Emoji with new characters. +* Query/Feeds indicators have a smaller appearance in a narrow window to leave room for the URL. +* Workaround for a potential hang during the closing of a socket. +* Gopher: Improved detection of ASCII art. +* Gopher: All preformatted blocks are unindented. +* Gopher: Don't collapse preformatted blocks since everything is preformatted in the source. +* macOS: ^⌘Space shows the system-provided symbols and Emoji character palette. + ## 1.5.2 * Fixed pasting a PEM-formatted certificate and/or private key via clipboard in Import Identity. * Possible workaround for a visual glitch in the URL field. -- cgit v1.2.3