summaryrefslogtreecommitdiff
path: root/res/about
diff options
context:
space:
mode:
authorJaakko Keränen <jaakko.keranen@iki.fi>2022-01-05 13:52:53 +0200
committerJaakko Keränen <jaakko.keranen@iki.fi>2022-01-05 13:52:53 +0200
commitdb50d121c7503ae38ebae5de21ef6705518b4122 (patch)
tree83ed50257c45708c300ba90252778031b532ce54 /res/about
parent680db07eabd116cfde9d2894c69ff14e6d5e01ad (diff)
parent2bd476483a37662797b70d6577ddb0da64cdbaa6 (diff)
Merge branch 'work/v1.10' into dev
# Conflicts: # CMakeLists.txt # Depends-Android.cmake # res/about/version.gmi # res/lang/cs.bin # res/lang/eo.bin # res/lang/es.bin # res/lang/fi.bin # res/lang/gl.bin # res/lang/ia.bin # res/lang/ie.bin # res/lang/ru.bin # res/lang/sr.bin # res/lang/tok.bin # res/lang/tr.bin # res/lang/uk.bin # res/lang/zh_Hant.bin # src/app.c # src/main.c # src/ui/documentwidget.c # src/ui/labelwidget.c # src/ui/sidebarwidget.c # src/ui/util.c
Diffstat (limited to 'res/about')
-rw-r--r--res/about/android-help.gmi173
-rw-r--r--res/about/android-version.gmi25
-rw-r--r--res/about/help.gmi4
-rw-r--r--res/about/ios-help.gmi204
-rw-r--r--res/about/ios-version.gmi83
-rw-r--r--res/about/version.gmi24
6 files changed, 511 insertions, 2 deletions
diff --git a/res/about/android-help.gmi b/res/about/android-help.gmi
new file mode 100644
index 00000000..48835967
--- /dev/null
+++ b/res/about/android-help.gmi
@@ -0,0 +1,173 @@
1```LAGRANGE
2 __ __ __ ___
3| /\ / _` |__) /\ |\ | / _` |__
4|___ /~~\ \__> | \ /~~\ | \| \__> |___
5
6```
7# Help
8
9## What is Gemini
10
11Gemini is a simple protocol for serving content over the internet. It specifies a Markdown inspired format allowing basic plain text document markup. Compared to HTTP and HTML, Gemini is vastly simpler and easier to work with.
12
13=> gemini://gemini.circumlunar.space/docs/faq.gmi Project Gemini FAQ
14=> gemini://gemini.circumlunar.space/docs/specification.gmi Protocol and 'text/gemini' specification
15
16## What is Lagrange
17
18Lagrange is a GUI client for browsing Geminispace. It offers modern conveniences familiar from web browsers, such as smooth scrolling, inline image viewing, multiple tabs, visual themes, Unicode fonts, bookmarks, history, and page outlines.
19
20Like Gemini, Lagrange has been designed with minimalism in mind. It depends on a small number of essential libraries. It is written in C and uses SDL for hardware-accelerated graphics. OpenSSL is used for secure communications.
21
22=> about:lagrange About Lagrange
23=> https://www.libsdl.org SDL: Simple DirectMedia Layer
24=> https://www.openssl.org OpenSSL: Cryptography and SSL/TLS Toolkit
25
26### Features
27
28* Beautiful typography with full Unicode support
29* Autogenerated page style and symbol for each Gemini domain
30* Light and dark color themes
31* Scaling page content (50%...200%)
32* Freely adjustable scaling factor for the UI
33* Sidebar for managing bookmarks, subscribed feeds, and viewing browsing history and the page outline
34* Multiple tabs
35* Find text on the page
36* Open image and audio links inline on the same page
37* Smart suggestions when typing an URL — search bookmarks, history, identities
38* Search engine integration
39* Identity management — create and use TLS client certificates
40* Subscribe to Gemini and Atom feeds
41* Use Gemini pages as a source of bookmarks
42* Audio playback: MP3, Ogg Vorbis, WAV
43* Read Gempub books and view ZIP archive contents
44* Built-in support for Gopher
45* Built-in support for uploading data using the Titan protocol
46* Use proxy servers for HTTP, Gopher, or Gemini content
47
48# Work in progress!
49
50This documentation is a work in progress. You may find it useful to alse see the desktop Help page:
51=> gemini://git.skyjake.fi:1968/lagrange/release/res/about/help.gmi Help page (desktop version, latest release)
52
53# 1 User interface
54
55## 1.6 Identities (client certificates)
56
57Gemini uses TLS client certificates for user/session identification purposes. Unlike on the web where user identity tracking is covert and automatic, client certificates must be manually taken into use, and you are able to define how long each certificate remains valid. The term "Identity" is used in Lagrange to refer to client certificates.
58
59The Identities sidebar tab shows all identities known to Lagrange. This includes identities created in Lagrange and any identities based on imported X.509 certificates.
60
61### 1.6.1 Creating a new identity
62
63Click on the 👤 button in the toolbar and select "New Identity...".
64
65Consider any information you enter in the certificate as public — only the Common Name is required to be non-empty. The generated certificate will use the Common Name as the issuer and subject of the certificate, making it clear that the certificate is self-signed. The other required field is the expiration date in "Valid until". Entering a year is sufficient, and means that the certificate is valid until the end of that year.
66
67### 1.6.2 Using an identity
68
69You will need to select an identity when you encounter this error message:
70
71> 🔑 Certificate Required
72
73Go to Settings > Identities and tap on an identity to toggle it on/off for the currently open URL. On subsequent page loads, the certificate will then be sent to the server when the URL or any URL under it is fetched. You can click on the 👤 button in the navigation bar to see which identity is being used for the current page.
74
75As the sidebar is not keyboard-navigable, note that identities can also be accessed via lookup results. Identities matching the search terms are shown as the last category in the lookup results list. From there, one can toggle an identity for the current page, or stop using it on all pages.
76
77### 1.6.3 Importing existing certificates
78
79To import an existing X.509 certificate as an identity, click on 👤 and select "Import...".
80
81When the Import Identity dialog opens, it checks the currently open page and the system clipboard for any certificates and private keys in PEM format. If found, these are automatically loaded in.
82
83## 1.8 Uploads (with Titan)
84
85Titan is a sister protocol to Gemini that enables sending arbitrary amounts of data from a client to a server. The Gemini protocol itself only enables sending up to 1024 bytes of data in a request. Furthermore, the request URL also counts against that limit, and the sent data must be percent-encoded so it can be parsed as a valid URL. Consequently, Gemini clients can only send very limited amounts of data to a server. Titan solves this by expanding the request so that the request URL is followed by a payload field. When it comes to TLS, Titan is equivalent to Gemini, so the same server and client certificates can be used with both.
86
87=> gemini://transjovian.org/titan Titan Protocol (by Alex Schroeder)
88
89While Titan and Gemini are related, Titan is a separate protocol and regular Gemini servers are not expected to support it. Whether it makes sense to allow clients to upload large amounts of data is a service-specific question. For example, a server that hosts a gemlog could enable Titan uploads for submitting new posts, or editing existing posts by uploading a revised version.
90
91As far as Lagrange is concerned, Titan is just one of the supported URL schemes. Whenever you try to open a "titan://" URL, no matter if it is manually entered into the URL field, or by clicking on a link, opening a bookmark, feed entry, or via a redirect, a dialog will open where you can specify the data to upload.
92
93The Titan upload dialog supports two ways to enter the data:
94
95* You can type text in the input field on the "Text" tab. It will be sent to the server using 'text/plain' as the media type.
96* You can drag and drop a file on the dialog. The details of the file to be uploaded are visible on the "File" tab. The media type can be specified manually if Lagrange does not correctly detect it.
97
98The upload token is a feature of Titan where servers can require a certain token text/passphrase for uploads. It is up to the server how this is interpreted. It could be used as a simple password, or even a command to further instruct the server about what to do with the uploaded data. Please refer to the server's instructions about what to enter here. The token may also be left empty.
99
100The text entered into the upload dialog's main text field is protected against accidental closing of the dialog or the application, or a crash. The previous text is restored when the dialog is reopened. The text field contents are only cleared when the submitted Titan request has been successfully completed.
101
102# 2 Customization
103
104## 2.1 Browsing behavior
105
106The "Open archive indices" option controls whether index.gmi pages are automatically opened while browsing the contents of a ZIP archive. The purpose is to simulate the behavior of a Gemini server where opening a directory will by default show its index page. Enabling this option makes navigating an archived copy of a capsule a more streamlined experience.
107
108## 2.4 Fonts
109
110This version of Lagrange supports TrueType fonts. To use a new font, simply view a .ttf (or .fontpack) file in the app and a page footer action is available for performing the installation.
111
112The "Fonts" page of Settings contains options that affect the appearance of text in page content, the user interface, and text rendering in general.
113
114To be precise, on this tab you can select which _typefaces_ to use for certain elements of the page and the UI; picking a particular font (including its size, weight, style, etc.) for specific elements is not possible. Lagrange controls the size and styling of text by choosing fonts according to your theme and typeface preferences. The term "font" is often used to mean "typeface" in this document and in the app UI.
115
116The fonts for document headings, body text, preformatted blocks, and the user interface can be chosen separately. There is also a separate font for monospaced body text, used when the protocol-specific "Monospace body" option is enabled.
117
118There are two built-in fonts available:
119
120* "Source Sans" is the default UI font that is also used for page content.
121* "Iosevka" is the monospaced font.
122
123There is also an "Iosevka (compact)" variant that actually uses the font's original line spacing. It is the default for preformatted blocks to avoid gaps between lines of ASCII art, but not for body text for better legibility.
124
125See sections 2.4.4 and 5 for more details about font management, compatibility, and configuration.
126
127### 2.4.1 Monospace body
128
129The "Monospace body" option causes all pages to be displayed in a monospace font. For example, most Gopher content has been written with the assumption of a monospace font, so it may provide a better reading experience to enable this for Gopher pages. The selected "Monospace font" is applied to the entire document.
130
131Handling of whitespace in page content also changes when this option is enabled: spaces are no longer normalized so if the source uses multiple spaces somewhere, those are shown as-is.
132
133### 2.4.2 ANSI escapes
134
135=> https://en.wikipedia.org/wiki/ANSI_escape_code ANSI escape code (Wikipedia):
136> ANSI escape sequences are a standard for in-band signaling to control cursor location, color, font styling, and other options on video text terminals and terminal emulators.
137
138Sometimes these codes are used for things like colored ASCII art. However, Lagrange is not a terminal emulator so only a very minimal set of codes have any effect; the rest are ignored.
139
140The "ANSI escapes" setting controls which ANSI escape codes are enabled:
141
142* "FG Color" enables changes to text foreground color.
143* "BG Color" enables changes to text background color.
144* "Font Style" enables changing the font style: bold, italic, or monospace. (These correspond to codes 1, 3, and 11.)
145
146A warning banner is displayed if any codes are detected on a page. This helps you be aware of potential visual artifacts, like text color that is being forced to black regardless of the page background color. Click on the warning to dismiss it on a per-site basis.
147
148If you serve content via Gemini, please be aware that ANSI escapes may not be supported by clients, and may in fact disrupt the behavior of a client in unexpected ways. For instance, consider a screen reader or a web proxy that doesn't filter out the codes. Only employ ANSI escapes when the user has somehow indicated that is their preference.
149
150### 2.4.3 Other font options
151
152The "Glyph warnings" option controls whether a warning will be shown when a page is missing one or more characters. This is typically due to the page being in a language that is not covered by any of the installed fonts. Clicking on the glyph warning banner opens the font management page.
153
154"Smoothing" enables or disables glyph antialiasing. In this version, it is recommended that smoothing is always enabled. This is because the text renderer does not support hinting of any kind, which means that without smoothing, glyph shapes will be severely distorted. You may still want to try disabling this option if antialiasing causes eye strain for you.
155
156### 2.4.4 Managing fonts
157
158Open "about:fonts" to see all the installed fonts, and enable, disable or uninstall individual fontpacks. At the top of the page, there is a link to the skyjake.fi Font Library: a curated collection of fontpacks that can be freely distributed. From there you can conveniently install more fonts specifically tuned for Lagrange.
159
160The rest of the page is divided to two sections: enabled and disabled fontpacks. Individual packs can be disabled, so they remain installed but not in use. (Tip: Use the Outline sidebar to see a list of all packs, if there are many.)
161
162Click on the "View file" links to see what each fontpack contains. The fontpack format is described in section 5: it is simply a ZIP archive with some metadata and a bunch of font files. When you install a TrueType font (i.e., copy it to the user's fonts directory), it is treated as a fontpack containing a single file, although no ZIP archive is created for it. Use the "View fontpack.ini template" link to see the generated metadata that can be used as a basis for creating an actual fontpack.
163
164About compatibility: fonts are complex, and while the TrueType format is not the most advanced one, it still has features that are not supported in Lagrange. The technical reason is that glyphs are rasterized using stb_truetype, a rather simple TrueType font library. (It's nice and small, though.) You may find that some fonts simply fail to load correctly, or look wrong in the app.
165
166* Hinting is not supported.
167* Bitmap glyphs are not supported.
168* Multi-color glyphs are not supported.
169
170TrueType Collections (.ttc) can be used, with the restriction that each declared font uses a single index from the collection. The index must be appended to the file name:
171```.ttc example
172regular = "NotoSansCJK-Regular.ttc:2"
173```
diff --git a/res/about/android-version.gmi b/res/about/android-version.gmi
new file mode 100644
index 00000000..fc7b444b
--- /dev/null
+++ b/res/about/android-version.gmi
@@ -0,0 +1,25 @@
1```LAGRANGE
2 __ __ __ ___
3| /\ / _` |__) /\ |\ | / _` |__
4|___ /~~\ \__> | \ /~~\ | \| \__> |___
5
6```
7# Release notes
8
9## 1.10 (Alpha 3)
10* Added Android-specific release notes.
11* Added Settings > UI > Toolbar Actions: customize the two leftmost phone toolbar buttons.
12* Show build version in Settings > About.
13* Changed return key behavior to insert newlines where possible.
14* Fixed sizing of the UI when the device has on-screen system keys.
15* Fixed the copy/paste menu staying hidden behind the keyboard.
16* Fixed system Auto-Rotate setting not locking the screen orientation.
17
18## 1.10 (Alpha 2)
19* Upgraded SDL to 2.0.18, which fixed a lot of stability issues.
20* Added native binaries for arm64, x86, and x86_64.
21* Enabled bidirectional text and complex scripts (with HarfBuzz and FriBidi).
22* Enabled switching to landscape orientation.
23
24## 1.10 (Alpha 1)
25Initial test build with SDL 2.0.5 and 32-bit ARM binaries. It works, but barely. \ No newline at end of file
diff --git a/res/about/help.gmi b/res/about/help.gmi
index 8a63152e..7949b775 100644
--- a/res/about/help.gmi
+++ b/res/about/help.gmi
@@ -253,7 +253,7 @@ You will need to select an identity when you encounter this error message:
253 253
254> 🔑 Certificate Required 254> 🔑 Certificate Required
255 255
256Clicking on an identity in the sidebar will toggle it on/off for the currently open URL. On subsequent page loads, the certificate will then be sent to the server when the URL or any URL under it is fetched. You can click on the 👤 button in the navigation bar to see which identity is being used for the current page. 256Clicking on an identity in the sidebar shows a menu where you can control usage of the identity for the currently open URL. On subsequent page loads, the certificate will then be sent to the server when the URL or any URL under it is fetched. You can click on the 👤 button in the navigation bar to see which identity is being used for the current page.
257 257
258As the sidebar is not keyboard-navigable, note that identities can also be accessed via lookup results. Identities matching the search terms are shown as the last category in the lookup results list. From there, one can toggle an identity for the current page, or stop using it on all pages. 258As the sidebar is not keyboard-navigable, note that identities can also be accessed via lookup results. Identities matching the search terms are shown as the last category in the lookup results list. From there, one can toggle an identity for the current page, or stop using it on all pages.
259 259
@@ -390,7 +390,7 @@ Page content color themes are selected on the "Colors" tab of Preferences. The "
390 390
391## 2.4 Fonts 391## 2.4 Fonts
392 392
393This version of Lagrange supports TrueType fonts. To use a new font in the app, simply view the .ttf file in the app and a page footer action is available for performing the installation. For example, try drag-and-dropping a .ttf file on the window. Alternatively, you can manually copy the font to the "fonts" subdirectory of the user-specific configuration directory (see section 3.5). 393This version of Lagrange supports TrueType fonts. To use a new font, simply view a .ttf file in the app and a page footer action is available for performing the installation. For example, try drag-and-dropping a .ttf file on the window. Alternatively, you can manually copy the font to the "fonts" subdirectory of the user-specific configuration directory (see section 3.5).
394 394
395The "Fonts" tab of the Preferences dialog contains options that affect the appearance of text in page content, the user interface, and text rendering in general. 395The "Fonts" tab of the Preferences dialog contains options that affect the appearance of text in page content, the user interface, and text rendering in general.
396 396
diff --git a/res/about/ios-help.gmi b/res/about/ios-help.gmi
new file mode 100644
index 00000000..41a8445b
--- /dev/null
+++ b/res/about/ios-help.gmi
@@ -0,0 +1,204 @@
1```LAGRANGE
2 __ __ __ ___
3| /\ / _` |__) /\ |\ | / _` |__
4|___ /~~\ \__> | \ /~~\ | \| \__> |___
5
6```
7# Help
8
9## What is Gemini
10
11Gemini is a simple protocol for serving content over the internet. It specifies a Markdown inspired format allowing basic plain text document markup. Compared to HTTP and HTML, Gemini is vastly simpler and easier to work with.
12
13=> gemini://gemini.circumlunar.space/docs/faq.gmi Project Gemini FAQ
14=> gemini://gemini.circumlunar.space/docs/specification.gmi Protocol and 'text/gemini' specification
15
16## What is Lagrange
17
18Lagrange is a GUI client for browsing Geminispace. It offers modern conveniences familiar from web browsers, such as smooth scrolling, inline image viewing, multiple tabs, visual themes, Unicode fonts, bookmarks, history, and page outlines.
19
20Like Gemini, Lagrange has been designed with minimalism in mind. It depends on a small number of essential libraries. It is written in C and uses SDL for hardware-accelerated graphics. OpenSSL is used for secure communications.
21
22=> about:lagrange About Lagrange
23=> https://www.libsdl.org SDL: Simple DirectMedia Layer
24=> https://www.openssl.org OpenSSL: Cryptography and SSL/TLS Toolkit
25
26### Features
27
28* Beautiful typography with full Unicode support
29* Autogenerated page style and symbol for each Gemini domain
30* Light and dark color themes
31* Scaling page content (50%...200%)
32* Freely adjustable scaling factor for the UI
33* Sidebar for managing bookmarks, subscribed feeds, and viewing browsing history and the page outline
34* Multiple tabs
35* Split view for browsing two pages at once (iPad only)
36* Find text on the page
37* Open image and audio links inline on the same page
38* Smart suggestions when typing an URL — search bookmarks, history, identities
39* Search engine integration
40* Identity management — create and use TLS client certificates
41* Subscribe to Gemini and Atom feeds
42* Use Gemini pages as a source of bookmarks
43* Audio playback: MP3, Ogg Vorbis, WAV
44* Read Gempub books and view ZIP archive contents
45* Built-in support for Gopher
46* Built-in support for uploading data using the Titan protocol
47* Use proxy servers for HTTP, Gopher, or Gemini content
48
49# Work in progress!
50
51This documentation is a work in progress. You may find it useful to alse see the desktop Help page:
52=> gemini://git.skyjake.fi:1968/lagrange/release/res/about/help.gmi Help page (desktop version, latest release)
53
54# 1 User interface
55
56## 1.6 Identities (client certificates)
57
58Gemini uses TLS client certificates for user/session identification purposes. Unlike on the web where user identity tracking is covert and automatic, client certificates must be manually taken into use, and you are able to define how long each certificate remains valid. The term "Identity" is used in Lagrange to refer to client certificates.
59
60The Identities sidebar tab shows all identities known to Lagrange. This includes identities created in Lagrange and any identities based on imported X.509 certificates.
61
62### 1.6.1 Creating a new identity
63
64Click on the 👤 button in the toolbar and select "New Identity...".
65
66Consider any information you enter in the certificate as public — only the Common Name is required to be non-empty. The generated certificate will use the Common Name as the issuer and subject of the certificate, making it clear that the certificate is self-signed. The other required field is the expiration date in "Valid until". Entering a year is sufficient, and means that the certificate is valid until the end of that year.
67
68### 1.6.2 Using an identity
69
70You will need to select an identity when you encounter this error message:
71
72> 🔑 Certificate Required
73
74Go to Settings > Identities and tap on an identity to toggle it on/off for the currently open URL. On subsequent page loads, the certificate will then be sent to the server when the URL or any URL under it is fetched. You can click on the 👤 button in the navigation bar to see which identity is being used for the current page.
75
76As the sidebar is not keyboard-navigable, note that identities can also be accessed via lookup results. Identities matching the search terms are shown as the last category in the lookup results list. From there, one can toggle an identity for the current page, or stop using it on all pages.
77
78### 1.6.3 Importing existing certificates
79
80To import an existing X.509 certificate as an identity, click on 👤 and select "Import...".
81
82When the Import Identity dialog opens, it checks the currently open page and the system clipboard for any certificates and private keys in PEM format. If found, these are automatically loaded in.
83
84## 1.8 Uploads (with Titan)
85
86Titan is a sister protocol to Gemini that enables sending arbitrary amounts of data from a client to a server. The Gemini protocol itself only enables sending up to 1024 bytes of data in a request. Furthermore, the request URL also counts against that limit, and the sent data must be percent-encoded so it can be parsed as a valid URL. Consequently, Gemini clients can only send very limited amounts of data to a server. Titan solves this by expanding the request so that the request URL is followed by a payload field. When it comes to TLS, Titan is equivalent to Gemini, so the same server and client certificates can be used with both.
87
88=> gemini://transjovian.org/titan Titan Protocol (by Alex Schroeder)
89
90While Titan and Gemini are related, Titan is a separate protocol and regular Gemini servers are not expected to support it. Whether it makes sense to allow clients to upload large amounts of data is a service-specific question. For example, a server that hosts a gemlog could enable Titan uploads for submitting new posts, or editing existing posts by uploading a revised version.
91
92As far as Lagrange is concerned, Titan is just one of the supported URL schemes. Whenever you try to open a "titan://" URL, no matter if it is manually entered into the URL field, or by clicking on a link, opening a bookmark, feed entry, or via a redirect, a dialog will open where you can specify the data to upload.
93
94The Titan upload dialog supports two ways to enter the data:
95
96* You can type text in the input field on the "Text" tab. It will be sent to the server using 'text/plain' as the media type.
97* You can drag and drop a file on the dialog. The details of the file to be uploaded are visible on the "File" tab. The media type can be specified manually if Lagrange does not correctly detect it.
98
99The upload token is a feature of Titan where servers can require a certain token text/passphrase for uploads. It is up to the server how this is interpreted. It could be used as a simple password, or even a command to further instruct the server about what to do with the uploaded data. Please refer to the server's instructions about what to enter here. The token may also be left empty.
100
101The text entered into the upload dialog's main text field is protected against accidental closing of the dialog or the application, or a crash. The previous text is restored when the dialog is reopened. The text field contents are only cleared when the submitted Titan request has been successfully completed.
102
103## 1.9 Split view mode (iPad only)
104
105By default, only one tab is visible at a time in the application window. However, sometimes it is beneficial to see two pages at once. For example, many capsules have top-level menus or lists of articles, and keeping the menu/index visible on the side makes navigation less cumbersome.
106
107Split view mode divides the UI into two equivalent parts. You can have multiple tabs in each split. Closing all tabs on one side will remove the split and return back to the normal unsplit mode.
108
109Each split has its own sidebars, which means that in split view mode you can have a total of four sidebars open at the same time.
110
111### 1.9.1 Switching focus
112
113At any given time, one of the splits has input focus. This is indicated by a colored line at the top of the section, and some UI elements will be dimmed out on the unfocused side.
114
115If a keyboard is connected, you can use the Next/Previous Tab keybindings or Ctrl+Tab to switch keyboard focus between the sections. Next/Previous Tab is particularly convenient as it cycles through all open tabs, jumping to the other side of the split when appropriate. You may also press Tab to cycle input focus between all the URL input fields.
116
117### 1.9.2 Pinning
118
119While it is sometimes useful to simply have two independent browsers open side by side, by default view splitting is meant to assist in navigating hierarchies and lists. In the typical use case, you'll have a menu or an index page on the left, and a content page open on the right. Links clicked on the left will automatically open on the right.
120
121This is called "pinning" and the behavior can be configured in Settings. The "Split view pinning" setting on the "General" page of Settings controls where links get opened in a split view. There are three modes available:
122
123* "None" causes links to open in the tab where the link is clicked. In this mode, both sides of the split can be navigated independently.
124* "Left Tab" causes links clicked on the left tab to open on the right side. The page open in the left tab is therefore "pinned" and does not change unless you enter a new URL or navigate to the parent or root.
125* "Right Tab" is the same but works the other way around. The page open in the right tab is pinned and clicked links open on the left.
126
127The default pinning mode is "Left Tab".
128
129The ◧ indicator is shown in the URL input field when the current tab is pinned.
130
131# 2 Customization
132
133## 2.1 Browsing behavior
134
135The "Open archive indices" option controls whether index.gmi pages are automatically opened while browsing the contents of a ZIP archive. The purpose is to simulate the behavior of a Gemini server where opening a directory will by default show its index page. Enabling this option makes navigating an archived copy of a capsule a more streamlined experience.
136
137"Split view pinning" controls which tab links will be opened on when browsing in split view mode. The default mode is "Left Tab", which means that the page in the left tab is pinned (remains unchanged) when clicking on a link. For more information, see section 1.9.
138
139## 2.4 Fonts
140
141This version of Lagrange supports TrueType fonts. To use a new font, simply view a .ttf (or .fontpack) file in the app and a page footer action is available for performing the installation.
142
143The "Fonts" page of Settings contains options that affect the appearance of text in page content, the user interface, and text rendering in general.
144
145To be precise, on this tab you can select which _typefaces_ to use for certain elements of the page and the UI; picking a particular font (including its size, weight, style, etc.) for specific elements is not possible. Lagrange controls the size and styling of text by choosing fonts according to your theme and typeface preferences. The term "font" is often used to mean "typeface" in this document and in the app UI.
146
147The fonts for document headings, body text, preformatted blocks, and the user interface can be chosen separately. There is also a separate font for monospaced body text, used when the protocol-specific "Monospace body" option is enabled.
148
149There are two built-in fonts available:
150
151* "Source Sans" is the default UI font that is also used for page content.
152* "Iosevka" is the monospaced font.
153
154There is also an "Iosevka (compact)" variant that actually uses the font's original line spacing. It is the default for preformatted blocks to avoid gaps between lines of ASCII art, but not for body text for better legibility.
155
156See sections 2.4.4 and 5 for more details about font management, compatibility, and configuration.
157
158### 2.4.1 Monospace body
159
160The "Monospace body" option causes all pages to be displayed in a monospace font. For example, most Gopher content has been written with the assumption of a monospace font, so it may provide a better reading experience to enable this for Gopher pages. The selected "Monospace font" is applied to the entire document.
161
162Handling of whitespace in page content also changes when this option is enabled: spaces are no longer normalized so if the source uses multiple spaces somewhere, those are shown as-is.
163
164### 2.4.2 ANSI escapes
165
166=> https://en.wikipedia.org/wiki/ANSI_escape_code ANSI escape code (Wikipedia):
167> ANSI escape sequences are a standard for in-band signaling to control cursor location, color, font styling, and other options on video text terminals and terminal emulators.
168
169Sometimes these codes are used for things like colored ASCII art. However, Lagrange is not a terminal emulator so only a very minimal set of codes have any effect; the rest are ignored.
170
171The "ANSI escapes" setting controls which ANSI escape codes are enabled:
172
173* "FG Color" enables changes to text foreground color.
174* "BG Color" enables changes to text background color.
175* "Font Style" enables changing the font style: bold, italic, or monospace. (These correspond to codes 1, 3, and 11.)
176
177A warning banner is displayed if any codes are detected on a page. This helps you be aware of potential visual artifacts, like text color that is being forced to black regardless of the page background color. Click on the warning to dismiss it on a per-site basis.
178
179If you serve content via Gemini, please be aware that ANSI escapes may not be supported by clients, and may in fact disrupt the behavior of a client in unexpected ways. For instance, consider a screen reader or a web proxy that doesn't filter out the codes. Only employ ANSI escapes when the user has somehow indicated that is their preference.
180
181### 2.4.3 Other font options
182
183The "Glyph warnings" option controls whether a warning will be shown when a page is missing one or more characters. This is typically due to the page being in a language that is not covered by any of the installed fonts. Clicking on the glyph warning banner opens the font management page.
184
185"Smoothing" enables or disables glyph antialiasing. In this version, it is recommended that smoothing is always enabled. This is because the text renderer does not support hinting of any kind, which means that without smoothing, glyph shapes will be severely distorted. You may still want to try disabling this option if antialiasing causes eye strain for you.
186
187### 2.4.4 Managing fonts
188
189Open "about:fonts" to see all the installed fonts, and enable, disable or uninstall individual fontpacks. At the top of the page, there is a link to the skyjake.fi Font Library: a curated collection of fontpacks that can be freely distributed. From there you can conveniently install more fonts specifically tuned for Lagrange.
190
191The rest of the page is divided to two sections: enabled and disabled fontpacks. Individual packs can be disabled, so they remain installed but not in use. (Tip: Use the Outline sidebar to see a list of all packs, if there are many.)
192
193Click on the "View file" links to see what each fontpack contains. The fontpack format is described in section 5: it is simply a ZIP archive with some metadata and a bunch of font files. When you install a TrueType font (i.e., copy it to the user's fonts directory), it is treated as a fontpack containing a single file, although no ZIP archive is created for it. Use the "View fontpack.ini template" link to see the generated metadata that can be used as a basis for creating an actual fontpack.
194
195About compatibility: fonts are complex, and while the TrueType format is not the most advanced one, it still has features that are not supported in Lagrange. The technical reason is that glyphs are rasterized using stb_truetype, a rather simple TrueType font library. (It's nice and small, though.) You may find that some fonts simply fail to load correctly, or look wrong in the app.
196
197* Hinting is not supported.
198* Bitmap glyphs are not supported.
199* Multi-color glyphs are not supported.
200
201TrueType Collections (.ttc) can be used, with the restriction that each declared font uses a single index from the collection. The index must be appended to the file name:
202```.ttc example
203regular = "NotoSansCJK-Regular.ttc:2"
204```
diff --git a/res/about/ios-version.gmi b/res/about/ios-version.gmi
new file mode 100644
index 00000000..f3122dbe
--- /dev/null
+++ b/res/about/ios-version.gmi
@@ -0,0 +1,83 @@
1```LAGRANGE
2 __ __ __ ___
3| /\ / _` |__) /\ |\ | / _` |__
4|___ /~~\ \__> | \ /~~\ | \| \__> |___
5
6```
7# Release notes
8
9## 1.10 (9)
10* Added "Share" actions for downloaded files (via "Download Linked File") and selected text on page.
11* Added "Edit Page with Titan": opens the Upload dialog with the page contents prefilled (previous contents are lost!).
12* Inlining `image/*` responses into the current document regardless of file extension in URL.
13* Fixed glitch with banner not being visible until page has finished loading.
14* Fixed possible crash when creating a bookmark.
15
16## 1.10 (7)
17* Link context menu shows used identity and date of last visit in addition to the URL.
18* Removed the "Show URL on hover" setting. URLs are shown in the link context menu.
19* Inline image metadata goes under the image instead of possibly overlapping the image caption text.
20* Improved appearance of hover/open link highlighting. It no longer goes under the side elements on the page.
21* Gempub: Open books in 1:2 split mode instead of 1:1.
22* Fixed opening links in split view mode. Links would open on the wrong side.
23* Upgraded SDL to version 2.0.18.
24
25## 1.10 (6)
26* Added "Paste Preceding Line" in the input prompt dialog. Potential use cases include user-editable sections on a page and suggested/example input values.
27* Fixed UI glitches and a potential memory leak when navigating via swipes. Sometimes swipe navigation would stop working because animation placeholders were not destroyed.
28* Fixed Settings background fade.
29* Fixed sidebar background fade in portrait phone layout.
30
31## 1.10 (5)
32* Fixed positioning of native UI controls in non-animated input widgets.
33* Fixed input widgets not reacting to keyboard being dismissed by system.
34* iPad: Faster back swipe animation.
35
36## 1.10 (4)
37* Fixed crash when closing sidebar in bookmark edit mode.
38* Fixed incorrect initial height of an unfocused multiline input widget.
39* Fixed lookup results having too narrow a width.
40* Fixed padding at bottom of the upload text editor.
41* Fixed missing "Folder" field in the bookmark editor. Edited bookmarks would be moved to the root folder.
42* Fixed missing "Glyph Warnings" toggle in Settings.
43* Removed "Return Key Behavior" from Settings since it has no effect.
44* Minor improvements in page caching.
45* Tuned page swipe animations.
46* Optimized UI layout updates.
47* Audio subsystem is only initialized when actually needed.
48* Prevent state file corruption if the app happens to get killed while state is being saved.
49
50## 1.10 (3)
51* Revised layout of the Upload dialog. There is a new edit field that lets you modify the file path of the URL. Identity names are in bold.
52* Added an edit actions menu in the Upload text editor (only in portrait phone layout for now).
53* Fixed persistent storage of the Upload text field contents.
54* Fixed input widget positioning and behavior in the Upload dialog.
55* Fixed minimum width of main panel in dialogs.
56* Fixed use of cached content when the same URL was found multiple times in history. Previously, only the latest page was used.
57* Changed input field tint color to match chosen UI accent color.
58* Optimized memory use during UI event processing.
59
60## 1.10 (2)
61* Fixed pull-to-refresh on short pages.
62* Fixed URL field contents not being clipped to widget bounds.
63* Fixed major glitches in back/forward swipe navigation, e.g., top banner showing incorrect contents, incorrect theme colors, scroll position jumping.
64* Fixed major and minor UI element positioning glitches, e.g., native text fields, maximum height of input fields, input length counter, Translate dialog.
65* Fixed inappropriate font sizes, e.g., sidebar action labels.
66* Fixed color issues: tint color of native input, and footer buttons not being prominent enough.
67* Bookmarks: In Edit mode, folders still get (un)folded when tapped.
68* Feeds: Added "No Unread Entries" message.
69* Identities: Show the current page's URL in the context menu to make it clearer what "This Page" refers to.
70
71## 1.10 (1)
72* Use native iOS text input UI controls for entering text.
73* Pull-to-refresh on pages.
74* Redesigned phone sidebar that mimics Safari on iPhone. Opens half-height for better reachability of tab buttons, can be swiped up and down.
75* Bookmark edit mode for reordering and organizing bookmarks into folders.
76* Sidebar has new action buttons for Feeds and History.
77* Identity toolbar button has been revised for quickly switching between alternate identities for current site, and opening Settings > Identities.
78* Settings: Managing identities.
79* Settings: Improved widgets used in button/radio groups to closer match iOS design.
80* Settings: Added new options from desktop version.
81* Mobile-friendly layout for value input dialogs.
82* Various animation issues fixes, e.g., context menu animations on iPad.
83* Various layout issues fixed, e.g., related to safe area insets.
diff --git a/res/about/version.gmi b/res/about/version.gmi
index 575dbf70..ff954fc6 100644
--- a/res/about/version.gmi
+++ b/res/about/version.gmi
@@ -6,6 +6,30 @@
6``` 6```
7# Release notes 7# Release notes
8 8
9## 1.10
10New features:
11* Added "Paste Preceding Line" in the input prompt dialog. Potential use cases include user-editable sections on a page and suggested/example input values.
12* Identity toolbar menu can be used to switch between alternate identities. If you have used multiple identities on one site, this makes it more convenient to switch between them.
13* Added option to disable cursor blinking in input fields.
14* UI language for Dutch.
15
16Changes and enhancements:
17* Inline image metadata goes under the image instead of possibly overlapping the image caption text.
18* Improved apperance of opened links highlighting. It no longer goes under the side elements on the page.
19* Entry dates in feed links are de-emphasized for improved readability.
20* Revised layout of the Upload dialog. There is a new edit field that lets you modify the file path of the URL. Identity names are in bold.
21* Optimized UI layout procedure and memory use during UI event processing.
22* Audio subsystem is only initialized when actually needed.
23* Prevent state file corruption if the app happens to get killed while state is being saved.
24* Gempub: Open books in 1:2 split mode instead of 1:1.
25* Minor improvements in page caching.
26
27Fixes:
28* Fixed a history caching issue: if there were multiple instances of the same URL in history, only the latest one's content would be used when navigating back/forward.
29* Fixed very narrow input fields causing the app to hang.
30* Fixed initial scroll position in multiline input fields.
31* Fixed lookup results list becoming too narrow.
32
9## 1.9.5 33## 1.9.5
10* Fixed misshapen button borders (SDL 2.0.16 line drawing workaround). 34* Fixed misshapen button borders (SDL 2.0.16 line drawing workaround).
11* Fixed actions being triggered when navigating via home row keys. 35* Fixed actions being triggered when navigating via home row keys.