| 1 | --- | |
| 2 | name: Bug report | |
| 3 | about: Create a report to help us improve | |
| 4 | title: '' | |
| 5 | labels: bug | |
| 6 | assignees: '' | |
| 7 | ||
| 8 | --- | |
| 9 | ||
| 10 | **Description** | |
| 11 | A concise problem description. | |
| 12 | ||
| 13 | **Replicate** | |
| 14 | Exact and complete steps to reproduce the problem 100% of the time: | |
| 15 | ||
| 16 | 1. Open '...' | |
| 17 | 1. Click '....' | |
| 18 | 1. Click '....' | |
| 19 | ||
| 20 | **Expected** | |
| 21 | Describe the expected behaviour. | |
| 22 | ||
| 23 | **Actual** | |
| 24 | Describe the actual behaviour. | |
| 25 | ||
| 26 | **Screenshots** | |
| 27 | Add screenshots to show the problem, if applicable. | |
| 28 | ||
| 29 | **Environment** | |
| 30 | - Operating System: (Windows, Linux, Mac) | |
| 31 | - Application: e.g., 1.7.16 | |
| 32 | ||
| 33 | **Details** | |
| 34 | Add additional information, if applicable. | |
| 35 | 1 |
| 2 | 2 | *.bin |
| 3 | 3 | *.exe |
| 4 | *.app | |
| 4 | 5 | /*.jar |
| 5 | 6 | build |
| ... | ||
| 14 | 15 | tex |
| 15 | 16 | spell |
| 16 | keenwrite.github.io | |
| 17 | 17 | keenwrite.build_artifacts.txt |
| 18 | 18 | todo |
| 7 | 7 | Download and install the following software packages: |
| 8 | 8 | |
| 9 | * [JDK 20](https://bell-sw.com/pages/downloads) (Full JDK + JavaFX) | |
| 10 | * [Gradle 8.1.1](https://gradle.org/releases) | |
| 9 | * [JDK 21](https://bell-sw.com/pages/downloads) (Full JDK + JavaFX) | |
| 10 | * [Gradle 8.3](https://gradle.org/releases) | |
| 11 | 11 | * [Git 2.40.1](https://git-scm.com/downloads) |
| 12 | 12 | * [warp v0.4.0-alpha](https://github.com/Reisz/warp/releases/tag/v0.4.0) |
| 13 | 13 | |
| 14 | 14 | Note: The forked warp packer release fixes a bug in the main branch. |
| 15 | 15 | |
| 16 | 16 | ## Repository |
| 17 | 17 | |
| 18 | 18 | Clone the repository as follows: |
| 19 | 19 | |
| 20 | git clone https://github.com/DaveJarvis/keenwrite.git | |
| 20 | git clone https://gitlab.com/DaveJarvis/KeenWrite.git | |
| 21 | 21 | |
| 22 | 22 | The repository is cloned. |
| ... | ||
| 101 | 101 | After installing `scripts/build-template`, build release binaries as follows: |
| 102 | 102 | |
| 103 | git tag -a 2.0.0 -m "Release name" | |
| 103 | git tag -a 4.0.0 -m "Release name" | |
| 104 | 104 | git push origin --tags |
| 105 | 105 | ./release.sh |
| 1 |     | |
| 2 | ||
| 3 | 1 | #  |
| 4 | 2 | |
| ... | ||
| 34 | 32 | On other platforms, such as MacOS, start the application as follows: |
| 35 | 33 | |
| 36 | 1. Download the *Full version* of the Java Runtime Environment, [JRE 20](https://bell-sw.com/pages/downloads). | |
| 34 | 1. Download the *Full version* of the Java Runtime Environment, [JRE 21](https://bell-sw.com/pages/downloads). | |
| 37 | 35 | * JavaFX, which is bundled with BellSoft's *Full version*, is required. |
| 38 | 36 | 1. Install the JRE (include JRE's `bin` directory in the `PATH` environment variable). |
| 16 | 16 | plugins { |
| 17 | 17 | id 'application' |
| 18 | id 'org.openjfx.javafxplugin' version '0.0.14' | |
| 18 | id 'org.openjfx.javafxplugin' version '0.1.0' | |
| 19 | 19 | id 'com.palantir.git-version' version '3.0.0' |
| 20 | id "com.github.spotbugs" version "5.0.14" | |
| 20 | id "com.github.spotbugs" version "5.1.3" | |
| 21 | 21 | } |
| 22 | 22 | |
| 23 | 23 | spotbugs { |
| 24 | 24 | excludeFilter.set( |
| 25 | file("${projectDir}/bug-filter.xml") | |
| 25 | file( "${projectDir}/bug-filter.xml" ) | |
| 26 | 26 | ) |
| 27 | 27 | } |
| ... | ||
| 54 | 54 | if ('windows' == targetOs) { |
| 55 | 55 | os = ["win"] |
| 56 | } else if ('macos' == targetOs) { | |
| 57 | os = ["mac"] | |
| 56 | 58 | } else { |
| 57 | 59 | os = [targetOs] |
| ... | ||
| 76 | 78 | |
| 77 | 79 | java { |
| 78 | sourceCompatibility = 20 | |
| 79 | targetCompatibility = 20 | |
| 80 | sourceCompatibility = 21 | |
| 81 | targetCompatibility = 21 | |
| 80 | 82 | } |
| 81 | 83 | |
| 82 | 84 | javafx { |
| 83 | version = '20' | |
| 85 | version = '21' | |
| 84 | 86 | modules = ['javafx.base', 'javafx.controls', 'javafx.graphics', 'javafx.swing'] |
| 85 | 87 | configuration = 'compileOnly' |
| 86 | 88 | } |
| 87 | 89 | |
| 88 | 90 | dependencies { |
| 89 | 91 | def v_junit = '5.9.3' |
| 90 | def v_flexmark = '0.64.6' | |
| 92 | def v_flexmark = '0.64.8' | |
| 91 | 93 | def v_jackson = '2.15.2' |
| 92 | def v_echosvg = '0.3.1' | |
| 93 | def v_picocli = '4.7.4' | |
| 94 | def v_echosvg = '1.0' | |
| 95 | def v_picocli = '4.7.5' | |
| 94 | 96 | |
| 95 | 97 | // JavaFX |
| 96 | 98 | implementation 'org.controlsfx:controlsfx:11.1.2' |
| 97 | implementation 'org.fxmisc.richtext:richtextfx:0.11.0' | |
| 98 | implementation 'org.fxmisc.flowless:flowless:0.7.0' | |
| 99 | implementation 'org.fxmisc.richtext:richtextfx:0.11.1' | |
| 100 | implementation 'org.fxmisc.flowless:flowless:0.7.1' | |
| 99 | 101 | implementation 'org.fxmisc.wellbehaved:wellbehavedfx:0.3.3' |
| 100 | implementation 'com.miglayout:miglayout-javafx:11.0' | |
| 102 | implementation 'com.miglayout:miglayout-javafx:11.1' | |
| 101 | 103 | implementation 'com.dlsc.preferencesfx:preferencesfx-core:11.16.0' |
| 102 | 104 | implementation 'com.panemu:tiwulfx-dock:0.2' |
| ... | ||
| 111 | 113 | |
| 112 | 114 | // YAML |
| 113 | implementation 'org.yaml:snakeyaml:2.0' | |
| 115 | implementation 'org.yaml:snakeyaml:2.2' | |
| 114 | 116 | implementation "com.fasterxml.jackson.core:jackson-core:${v_jackson}" |
| 115 | 117 | implementation "com.fasterxml.jackson.core:jackson-databind:${v_jackson}" |
| 116 | 118 | implementation "com.fasterxml.jackson.core:jackson-annotations:${v_jackson}" |
| 117 | 119 | implementation "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:${v_jackson}" |
| 118 | 120 | |
| 119 | 121 | // HTML parsing and rendering |
| 120 | 122 | implementation 'org.jsoup:jsoup:1.16.1' |
| 121 | // TODO: https://github.com/flyingsaucerproject/flyingsaucer/pull/170 | |
| 122 | //implementation 'org.xhtmlrenderer:flying-saucer-core:9.1.22' | |
| 123 | implementation 'org.xhtmlrenderer:flying-saucer-core:9.3.1' | |
| 123 | 124 | |
| 124 | 125 | // R |
| 125 | implementation 'org.apache.commons:commons-compress:1.23.0' | |
| 126 | implementation 'org.apache.commons:commons-compress:1.24.0' | |
| 126 | 127 | implementation 'org.codehaus.plexus:plexus-utils:4.0.0' |
| 127 | 128 | implementation 'org.renjin:renjin-script-engine:3.5-beta76' |
| ... | ||
| 165 | 166 | } |
| 166 | 167 | |
| 167 | testImplementation 'org.testfx:testfx-junit5:4.0.16-alpha' | |
| 168 | testImplementation 'org.testfx:testfx-junit5:4.0.17' | |
| 168 | 169 | testImplementation "org.junit.jupiter:junit-jupiter-api:${v_junit}" |
| 169 | 170 | testImplementation "org.junit.jupiter:junit-jupiter-params:${v_junit}" |
| 87 | 87 | fc-cache -f -v && \ |
| 88 | 88 | mkdir -p tex && \ |
| 89 | rsync \ | |
| 90 | --recursive --links --times \ | |
| 91 | --info=progress2,remove,symsafe,flist,del \ | |
| 92 | --human-readable --del \ | |
| 93 | rsync://contextgarden.net/minimals/current/modules/ modules && \ | |
| 94 | rsync \ | |
| 95 | -rlt --exclude=/VERSION --del modules/*/ tex/texmf-modules && \ | |
| 89 | #rsync \ | |
| 90 | #--recursive --links --times \ | |
| 91 | #--info=progress2,remove,symsafe,flist,del \ | |
| 92 | #--human-readable --del \ | |
| 93 | #rsync://contextgarden.net/minimals/current/modules/ modules && \ | |
| 94 | #rsync \ | |
| 95 | #-rlt --exclude=/VERSION --del modules/*/ tex/texmf-modules && \ | |
| 96 | 96 | sh install.sh && \ |
| 97 | 97 | rm -f $DOWNLOAD_DIR/*.zip && \ |
| ... | ||
| 108 | 108 | find \ |
| 109 | 109 | /usr/share/inkscape \ |
| 110 | -type f -not -iname "*.xml" -exec rm {} \; && \ | |
| 110 | -type f -not -iname \*.xml -exec rm {} \; && \ | |
| 111 | 111 | find \ |
| 112 | 112 | $CONTEXT_HOME \ |
| 1 | # Overview | |
| 2 | ||
| 3 | This document describes how to maintain the containerized typesetting system. | |
| 4 | Broadly, the container is built locally then deployed to a web server capable | |
| 5 | of serving static web pages. | |
| 6 | ||
| 7 | ## Installation wizard | |
| 8 | ||
| 9 | The installation wizard is responsible for installing the containerization | |
| 10 | software and the container image. The container manager class loads the | |
| 11 | image from a URL. That URL is defined in the `messages.properties` file. | |
| 12 | ||
| 13 | # Upgrade | |
| 14 | ||
| 15 | Upgrade the containerization software as follows: | |
| 16 | ||
| 17 | 1. Edit `src/main/resources/com/keenwrite/messages.properties`. | |
| 18 | 1. Set `Wizard.typesetter.container.version` to the latest version. | |
| 19 | 1. Set `Wizard.typesetter.container.checksum` to the Windows version checksum. | |
| 20 | 1. Set `Wizard.typesetter.container.image.version` to the latest image version. | |
| 21 | 1. Save the file. | |
| 22 | ||
| 23 | The containerization software versions are changed. | |
| 24 | ||
| 25 | # Publish | |
| 26 | ||
| 27 | Publish the changes to the container image as follows: | |
| 28 | ||
| 29 | ``` bash | |
| 30 | ./manage.sh --build | |
| 31 | ./manage.sh --export | |
| 32 | ./manage.sh --publish | |
| 33 | ``` | |
| 34 | ||
| 35 | The container image is published. | |
| 36 | ||
| 1 | 37 |
| 9 | 9 | source ../scripts/build-template |
| 10 | 10 | |
| 11 | readonly BUILD_DIR=build | |
| 12 | readonly PROPERTIES="${SCRIPT_DIR}/../src/main/resources/bootstrap.properties" | |
| 11 | # Reads the value of a property from a properties file. | |
| 12 | # | |
| 13 | # $1 - The key name to obtain. | |
| 14 | function property { | |
| 15 | grep "^${1}" "${PROPERTIES}" | cut -d'=' -f2 | |
| 16 | } | |
| 13 | 17 | |
| 14 | # Read the properties file to get the container version. | |
| 15 | while IFS='=' read -r key value | |
| 16 | do | |
| 17 | key=$(echo $key | tr '.' '_') | |
| 18 | eval ${key}=\${value} | |
| 19 | done < "${PROPERTIES}" | |
| 18 | readonly BUILD_DIR=build | |
| 19 | readonly PROPERTIES="${SCRIPT_DIR}/../src/main/resources/com/keenwrite/messages.properties" | |
| 20 | 20 | |
| 21 | 21 | readonly CONTAINER_EXE=podman |
| 22 | readonly CONTAINER_SHORTNAME=typesetter | |
| 23 | readonly CONTAINER_VERSION=${container_version} | |
| 22 | readonly CONTAINER_SHORTNAME=$(property Wizard.typesetter.container.image.name) | |
| 23 | readonly CONTAINER_VERSION=$(property Wizard.typesetter.container.image.version) | |
| 24 | 24 | readonly CONTAINER_NETWORK=host |
| 25 | readonly CONTAINER_FILE="${CONTAINER_SHORTNAME}" | |
| 25 | readonly CONTAINER_FILE="${CONTAINER_SHORTNAME}-${CONTAINER_VERSION}" | |
| 26 | 26 | readonly CONTAINER_ARCHIVE_FILE="${CONTAINER_FILE}.tar" |
| 27 | 27 | readonly CONTAINER_ARCHIVE_PATH="${BUILD_DIR}/${CONTAINER_ARCHIVE_FILE}" |
| 28 | 28 | readonly CONTAINER_COMPRESSED_FILE="${CONTAINER_ARCHIVE_FILE}.gz" |
| 29 | 29 | readonly CONTAINER_COMPRESSED_PATH="${BUILD_DIR}/${CONTAINER_ARCHIVE_FILE}.gz" |
| 30 | readonly CONTAINER_IMAGE_FILE="${BUILD_DIR}/${CONTAINER_FILE}" | |
| 30 | 31 | readonly CONTAINER_DIR_SOURCE="/root/source" |
| 31 | 32 | readonly CONTAINER_DIR_TARGET="/root/target" |
| 32 | 33 | readonly CONTAINER_DIR_IMAGES="/root/images" |
| 33 | 34 | readonly CONTAINER_DIR_FONTS="/root/fonts" |
| 34 | readonly CONTAINER_REPO=ghcr.io | |
| 35 | 35 | |
| 36 | 36 | ARG_CONTAINER_NAME="${CONTAINER_SHORTNAME}:${CONTAINER_VERSION}" |
| 37 | 37 | ARG_CONTAINER_COMMAND="context --version" |
| 38 | 38 | ARG_MOUNTPOINT_SOURCE="" |
| 39 | 39 | ARG_MOUNTPOINT_TARGET="." |
| 40 | 40 | ARG_MOUNTPOINT_IMAGES="" |
| 41 | 41 | ARG_MOUNTPOINT_FONTS="${HOME}/.fonts" |
| 42 | ARG_ACCESS_TOKEN="" | |
| 43 | 42 | |
| 44 | 43 | DEPENDENCIES=( |
| ... | ||
| 56 | 55 | "i,images,Set mount point for image files (to typeset)" |
| 57 | 56 | "f,fonts,Set mount point for font files (during typesetting)" |
| 58 | "k,token,Set personal access token (to publish)" | |
| 59 | 57 | "l,load,Load container (${CONTAINER_COMPRESSED_PATH})" |
| 60 | "p,publish,Publish the container (after logging in)" | |
| 58 | "p,publish,Publish the container" | |
| 61 | 59 | "r,run,Run a command in the container (\"${ARG_CONTAINER_COMMAND}\")" |
| 62 | "v,version,Set container version to publish (${CONTAINER_VERSION})" | |
| 63 | 60 | "x,export,Save container (${CONTAINER_COMPRESSED_PATH})" |
| 64 | 61 | ) |
| ... | ||
| 98 | 95 | # Show what commands are run while building, but not the commands' output. |
| 99 | 96 | ${CONTAINER_EXE} build \ |
| 100 | --network=${CONTAINER_NETWORK} \ | |
| 97 | --network="${CONTAINER_NETWORK}" \ | |
| 101 | 98 | --squash \ |
| 102 | -t ${ARG_CONTAINER_NAME} . | \ | |
| 99 | -t "${ARG_CONTAINER_NAME}" . | \ | |
| 103 | 100 | grep ^STEP |
| 104 | 101 | } |
| 105 | 102 | |
| 106 | 103 | # --------------------------------------------------------------------------- |
| 107 | 104 | # Publishes the container to the repository. |
| 108 | 105 | # --------------------------------------------------------------------------- |
| 109 | 106 | utile_publish() { |
| 110 | local -r username=$(git config user.name | tr '[A-Z]' '[a-z]') | |
| 111 | local -r repo="${CONTAINER_REPO}/${username}/${ARG_CONTAINER_NAME}" | |
| 112 | ||
| 113 | if [ ! -z ${ARG_ACCESS_TOKEN} ]; then | |
| 114 | echo ${ARG_ACCESS_TOKEN} | \ | |
| 115 | ${CONTAINER_EXE} login ghcr.io -u $(git config user.name) --password-stdin | |
| 116 | ||
| 117 | $log "Tagging" | |
| 118 | ||
| 119 | ${CONTAINER_EXE} tag ${ARG_CONTAINER_NAME} ${repo} | |
| 107 | local -r TOKEN_FILE="token.txt" | |
| 120 | 108 | |
| 121 | $log "Pushing ${ARG_CONTAINER_NAME} to ${CONTAINER_REPO}" | |
| 109 | if [[ -f "${TOKEN_FILE}" ]]; then | |
| 110 | local -r repository=$(cat ${TOKEN_FILE}) | |
| 111 | local -r remote_file="${CONTAINER_SHORTNAME}:${CONTAINER_VERSION}" | |
| 112 | local -r remote_path="${repository}/${remote_file}" | |
| 122 | 113 | |
| 123 | ${CONTAINER_EXE} push ${repo} | |
| 114 | $log "Publishing to ${remote_path}" | |
| 124 | 115 | |
| 125 | $log "Published ${ARG_CONTAINER_NAME} to ${CONTAINER_REPO}" | |
| 116 | # Path to the repository. | |
| 117 | scp -q "${CONTAINER_IMAGE_FILE}" "${remote_path}" | |
| 126 | 118 | else |
| 127 | error "Provide a personal access token (-k TOKEN) to publish." | |
| 119 | error "Create ${TOKEN_FILE} with publish credentials" | |
| 128 | 120 | fi |
| 129 | 121 | } |
| ... | ||
| 232 | 224 | gzip "${CONTAINER_ARCHIVE_PATH}" |
| 233 | 225 | |
| 234 | $log "Saved ${CONTAINER_SHORTNAME} image" | |
| 226 | $log "Renaming to ${CONTAINER_IMAGE_FILE}" | |
| 227 | mv "${CONTAINER_COMPRESSED_PATH}" "${CONTAINER_IMAGE_FILE}" | |
| 228 | ||
| 229 | $log "Saved ${CONTAINER_IMAGE_FILE} image" | |
| 235 | 230 | fi |
| 236 | 231 | } |
| ... | ||
| 265 | 260 | -d|--delete) |
| 266 | 261 | do_delete=utile_delete |
| 267 | ;; | |
| 268 | -k|--token) | |
| 269 | if [ ! -z "${2+x}" ]; then | |
| 270 | ARG_ACCESS_TOKEN="$2" | |
| 271 | consume=2 | |
| 272 | fi | |
| 273 | 262 | ;; |
| 274 | 263 | -l|--load) |
| ... | ||
| 301 | 290 | if [ ! -z "${2+x}" ]; then |
| 302 | 291 | ARG_MOUNTPOINT_SOURCE="$2" |
| 303 | consume=2 | |
| 304 | fi | |
| 305 | ;; | |
| 306 | -v|--version) | |
| 307 | if [ ! -z "${2+x}" ]; then | |
| 308 | ARG_CONTAINER_NAME="${CONTAINER_SHORTNAME}:$2" | |
| 309 | 292 | consume=2 |
| 310 | 293 | fi |
| 1 | 1 |
| 1 | 1 |
| 31 | 31 | ARG_JAVA_OS="linux" |
| 32 | 32 | ARG_JAVA_ARCH="amd64" |
| 33 | ARG_JAVA_VERSION="20.0.1" | |
| 34 | ARG_JAVA_UPDATE="10" | |
| 33 | ARG_JAVA_VERSION="21" | |
| 34 | ARG_JAVA_UPDATE="37" | |
| 35 | 35 | ARG_JAVA_DIR="java" |
| 36 | 36 | |
| ... | ||
| 44 | 44 | "gradle,https://gradle.org" |
| 45 | 45 | "warp-packer,https://github.com/Reisz/warp/releases" |
| 46 | "linux-x64.warp-packer,https://github.com/dgiagio/warp/releases" | |
| 46 | 47 | "tar,https://www.gnu.org/software/tar" |
| 47 | 48 | "wine,https://www.winehq.org" |
| 48 | 49 | "unzip,http://infozip.sourceforge.net" |
| 49 | 50 | ) |
| 50 | 51 | |
| 51 | 52 | ARGUMENTS+=( |
| 52 | 53 | "a,arch,Target operating system architecture (amd64)" |
| 53 | "o,os,Target operating system (linux, windows, mac)" | |
| 54 | "o,os,Target operating system (linux, windows, macos)" | |
| 54 | 55 | "u,update,Java update version number (${ARG_JAVA_UPDATE})" |
| 55 | 56 | "v,version,Full Java version (${ARG_JAVA_VERSION})" |
| ... | ||
| 94 | 95 | do_create_launch_script=utile_create_launch_script_windows |
| 95 | 96 | do_brand_windows=utile_brand_windows |
| 97 | elif [ "${ARG_JAVA_OS}" = "macos" ]; then | |
| 98 | APP_EXTENSION="app" | |
| 96 | 99 | fi |
| 97 | 100 | } |
| ... | ||
| 128 | 131 | local -r java_vm="jre" |
| 129 | 132 | local -r java_version="${ARG_JAVA_VERSION}+${ARG_JAVA_UPDATE}" |
| 130 | local -r url_java="https://download.bell-sw.com/java/${java_version}/bellsoft-${java_vm}${java_version}-${ARG_JAVA_OS}-${ARG_JAVA_ARCH}-full.${ARCHIVE_EXT}" | |
| 131 | 133 | |
| 132 | local -r file_java="${java_vm}-${java_version}-${ARG_JAVA_OS}-${ARG_JAVA_ARCH}.${ARCHIVE_EXT}" | |
| 134 | java_os="${ARG_JAVA_OS}" | |
| 135 | java_arch="${ARG_JAVA_ARCH}" | |
| 136 | archive_ext="" | |
| 137 | ||
| 138 | if [ "${ARG_JAVA_OS}" = "macos" ]; then | |
| 139 | archive_ext=".jre" | |
| 140 | fi | |
| 141 | ||
| 142 | local -r url_java="https://download.bell-sw.com/java/${java_version}/bellsoft-${java_vm}${java_version}-${java_os}-${java_arch}-full.${ARCHIVE_EXT}" | |
| 143 | ||
| 144 | local -r file_java="${java_vm}-${java_version}-${java_os}-${java_arch}.${ARCHIVE_EXT}" | |
| 133 | 145 | local -r path_java="/tmp/${file_java}" |
| 134 | 146 | |
| ... | ||
| 142 | 154 | $ARCHIVE_APP "${path_java}" |
| 143 | 155 | |
| 144 | local -r dir_java="${java_vm}-${ARG_JAVA_VERSION}-full" | |
| 156 | local -r dir_java="${java_vm}-${ARG_JAVA_VERSION}-full${archive_ext}" | |
| 145 | 157 | |
| 146 | 158 | $log "Rename ${dir_java} to ${ARG_JAVA_DIR}" |
| ... | ||
| 227 | 239 | # --------------------------------------------------------------------------- |
| 228 | 240 | utile_create_launcher() { |
| 241 | packer=warp-packer | |
| 242 | packer_opt_pack="pack" | |
| 243 | packer_opt_input="input-dir" | |
| 244 | ||
| 229 | 245 | local -r FILE_APP_NAME="${APP_NAME}.${APP_EXTENSION}" |
| 230 | 246 | $log "Create ${FILE_APP_NAME}" |
| 231 | 247 | |
| 232 | # Warp-packer does not seem to overwrite the file. | |
| 248 | # Warp-packer does not overwrite the file. | |
| 233 | 249 | rm -f "${FILE_APP_NAME}" |
| 234 | 250 | |
| 235 | 251 | # Download uses amd64, but warp-packer differs. |
| 236 | 252 | if [ "${ARG_JAVA_ARCH}" = "amd64" ]; then |
| 237 | 253 | ARG_JAVA_ARCH="x64" |
| 238 | 254 | fi |
| 239 | 255 | |
| 240 | warp-packer \ | |
| 241 | pack \ | |
| 256 | # The warp-packer fork that fixes Windows doesn't support MacOS. | |
| 257 | if [ "${ARG_JAVA_OS}" = "macos" ]; then | |
| 258 | packer=linux-x64.warp-packer | |
| 259 | packer_opt_pack="" | |
| 260 | packer_opt_input="input_dir" | |
| 261 | fi | |
| 262 | ||
| 263 | ${packer} \ | |
| 264 | ${packer_opt_pack} \ | |
| 242 | 265 | --arch "${ARG_JAVA_OS}-${ARG_JAVA_ARCH}" \ |
| 243 | --input-dir "${ARG_DIR_DIST}" \ | |
| 266 | --${packer_opt_input} "${ARG_DIR_DIST}" \ | |
| 244 | 267 | --exec "${FILE_DIST_EXEC}" \ |
| 245 | 268 | --output "${FILE_APP_NAME}" > /dev/null |
| 1 | #!/usr/bin/env bash | |
| 2 | ||
| 3 | SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd) | |
| 4 | ||
| 5 | java \ | |
| 6 | --add-opens=javafx.controls/javafx.scene.control=ALL-UNNAMED \ | |
| 7 | --add-opens=javafx.controls/javafx.scene.control.skin=ALL-UNNAMED \ | |
| 8 | --add-opens=javafx.graphics/javafx.scene.text=ALL-UNNAMED \ | |
| 9 | --add-opens=javafx.graphics/com.sun.javafx.css=ALL-UNNAMED \ | |
| 10 | --add-opens=javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED \ | |
| 11 | --add-opens=javafx.graphics/com.sun.javafx.text=ALL-UNNAMED \ | |
| 12 | --add-exports=javafx.base/com.sun.javafx.event=ALL-UNNAMED \ | |
| 13 | --add-exports=javafx.graphics/com.sun.javafx.application=ALL-UNNAMED \ | |
| 14 | --add-exports=javafx.graphics/com.sun.javafx.geom=ALL-UNNAMED \ | |
| 15 | --add-exports=javafx.graphics/com.sun.javafx.text=ALL-UNNAMED \ | |
| 16 | --add-exports=javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED \ | |
| 17 | --add-exports=javafx.graphics/com.sun.javafx.scene.text=ALL-UNNAMED \ | |
| 18 | --add-exports=javafx.graphics/com.sun.javafx.scene.traversal=ALL-UNNAMED \ | |
| 19 | -jar ${SCRIPT_DIR}/keenwrite.jar $@ | |
| 20 | ||
| 21 | 1 |
| 30 | 30 | mv "build/libs/${application_title,,}.jar" . |
| 31 | 31 | |
| 32 | $log "Build Windows installer binary" | |
| 33 | ${BIN_INSTALLER} -o windows | |
| 34 | ||
| 35 | 32 | $log "Build Linux installer binary" |
| 36 | 33 | ${BIN_INSTALLER} -o linux |
| 34 | ||
| 35 | $log "Build MacOS installer binary" | |
| 36 | ${BIN_INSTALLER} -o macos | |
| 37 | ||
| 38 | $log "Build Windows installer binary" | |
| 39 | ${BIN_INSTALLER} -o windows | |
| 37 | 40 | } |
| 38 | 41 |
| 34 | 34 | public static final String APP_TITLE; |
| 35 | 35 | public static final String APP_VERSION; |
| 36 | public static final String CONTAINER_VERSION; | |
| 37 | 36 | |
| 38 | 37 | public static final String APP_TITLE_ABBR = "kwr"; |
| ... | ||
| 45 | 44 | |
| 46 | 45 | static { |
| 47 | // There's no way to know what container version is compatible. This | |
| 48 | // value will cause a failure when downloading the container, | |
| 49 | var containerVersion = "1.0.0"; | |
| 50 | 46 | var appVersion = "0.0.0"; |
| 51 | 47 | var appTitle = "KeenWrite"; |
| 52 | 48 | |
| 53 | 49 | try( final var in = openResource( PATH_BOOTSTRAP ) ) { |
| 54 | 50 | sP.load( in ); |
| 55 | 51 | |
| 56 | 52 | appTitle = sP.getProperty( "application.title" ); |
| 57 | containerVersion = sP.getProperty( "container.version" ); | |
| 58 | 53 | } catch( final Exception ex ) { |
| 59 | 54 | final var fmt = "Unable to load %s resource, applying defaults.%n"; |
| 60 | 55 | clue( ex, fmt, PATH_BOOTSTRAP ); |
| 61 | 56 | } |
| 62 | 57 | |
| 63 | CONTAINER_VERSION = containerVersion; | |
| 64 | 58 | APP_TITLE = appTitle; |
| 65 | 59 | APP_TITLE_LOWERCASE = APP_TITLE.toLowerCase(); |
| 26 | 26 | import static com.keenwrite.ui.actions.ApplicationBars.*; |
| 27 | 27 | import static javafx.application.Platform.runLater; |
| 28 | import static javafx.scene.input.KeyCode.*; | |
| 29 | import static javafx.scene.input.KeyEvent.KEY_PRESSED; | |
| 28 | import static javafx.scene.input.KeyCode.SCROLL_LOCK; | |
| 30 | 29 | import static javafx.scene.input.KeyEvent.KEY_RELEASED; |
| 31 | 30 | |
| ... | ||
| 191 | 190 | private Scene createScene( final Parent parent ) { |
| 192 | 191 | final var scene = new Scene( parent ); |
| 193 | ||
| 194 | // After the app loses focus, when the user switches back using Alt+Tab, | |
| 195 | // the menu is sometimes engaged. See MainApp::initStage(). | |
| 196 | // | |
| 197 | // JavaFX Bug: https://bugs.openjdk.java.net/browse/JDK-8090647 | |
| 198 | scene.addEventHandler( KEY_PRESSED, event -> { | |
| 199 | // Only consume lone ALT key press events. If the modifier is used in | |
| 200 | // combination with another key, don't consume the event. First check | |
| 201 | // if ALT is down before getting the key code as a micro-optimization. | |
| 202 | if( event.isAltDown() ) { | |
| 203 | if( event.getCode() == ALT || event.getCode() == ALT_GRAPH ) { | |
| 204 | event.consume(); | |
| 205 | } | |
| 206 | } | |
| 207 | } ); | |
| 208 | 192 | |
| 209 | 193 | // Update the synchronized scrolling status when user presses scroll lock. |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 1 | 5 | package com.keenwrite.cmdline; |
| 2 | 6 |
| 2 | 2 | package com.keenwrite.collections; |
| 3 | 3 | |
| 4 | import org.jetbrains.annotations.NotNull; | |
| 5 | ||
| 4 | 6 | import java.util.*; |
| 5 | 7 | |
| ... | ||
| 180 | 182 | */ |
| 181 | 183 | @Override |
| 184 | @NotNull | |
| 182 | 185 | public Iterator<E> iterator() { |
| 183 | 186 | return new Iterator<>() { |
| 70 | 70 | * contain the key name, including the original sigils. |
| 71 | 71 | * |
| 72 | * @param value Value containing zero or more key references. | |
| 72 | * @param value Value containing zero or more key references. | |
| 73 | 73 | * @return The given value with all embedded key references interpolated. |
| 74 | 74 | */ |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.constants; |
| 3 | 6 |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.constants; |
| 3 | 6 |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.dom; |
| 3 | 6 |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 1 | 5 | package com.keenwrite.dom; |
| 2 | 6 |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.editors; |
| 3 | 6 |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.editors; |
| 3 | 6 |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.editors; |
| 3 | 6 |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.editors.common; |
| 3 | 6 |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.editors.common; |
| 3 | 6 |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.editors.definition; |
| 3 | 6 |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.editors.definition; |
| 3 | 6 |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.editors.definition; |
| 3 | 6 |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.editors.definition; |
| 3 | 6 |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.editors.definition; |
| 3 | 6 |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.editors.markdown; |
| 3 | 6 |
| 1 | /* | |
| 2 | * Copyright 2020-2021 White Magic Software, Ltd. | |
| 3 | * | |
| 4 | * All rights reserved. | |
| 5 | * | |
| 6 | * Redistribution and use in source and binary forms, with or without | |
| 7 | * modification, are permitted provided that the following conditions are met: | |
| 8 | * | |
| 9 | * o Redistributions of source code must retain the above copyright | |
| 10 | * notice, this list of conditions and the following disclaimer. | |
| 11 | * | |
| 12 | * o Redistributions in binary form must reproduce the above copyright | |
| 13 | * notice, this list of conditions and the following disclaimer in the | |
| 14 | * documentation and/or other materials provided with the distribution. | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 15 | 2 | * |
| 16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
| 17 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
| 18 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
| 19 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |
| 20 | * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
| 21 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
| 22 | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
| 23 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
| 24 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
| 25 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
| 26 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
| 3 | * SPDX-License-Identifier: MIT | |
| 27 | 4 | */ |
| 28 | 5 | package com.keenwrite.editors.markdown; |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.editors.markdown; |
| 3 | 6 |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.events; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.events; |
| 3 | 6 |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.events; |
| 3 | 6 |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.events; |
| 3 | 6 |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.events; |
| 3 | 6 |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.events; |
| 3 | 6 |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.events; |
| 3 | 6 |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.events; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.events; |
| 3 | 6 |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.events; |
| 3 | 6 |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.events; |
| 3 | 6 |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.events; |
| 3 | 6 |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.events; |
| 3 | 6 |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.events; |
| 3 | 6 |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.events; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.events.spelling; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.events.spelling; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.events.workspace; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.events.workspace; |
| 3 | 6 |
| 1 | /* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.exceptions; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.io; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.io; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.io; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.io.downloads; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.io.downloads.events; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.io.downloads.events; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.io.downloads.events; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.io.downloads.events; |
| 3 | 6 |
| 86 | 86 | |
| 87 | 87 | /** |
| 88 | * Creates the preferences dialog based using | |
| 89 | * {@link SkeletonStorageHandler} and | |
| 88 | * Creates the preferences dialog using {@link SkeletonStorageHandler} and | |
| 90 | 89 | * numerous {@link Category} objects. |
| 91 | 90 | * |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.preview; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.processors; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.spelling.impl; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.typesetting; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.typesetting; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.typesetting.containerization; |
| 3 | 6 | |
| ... | ||
| 30 | 33 | * Requests that the container manager load an image into the container. |
| 31 | 34 | * |
| 32 | * @param name The full container name of the image to pull. | |
| 33 | 35 | * @param processor Processes the command output (in a separate thread). |
| 34 | 36 | * @throws CommandNotFoundException The container executable was not found. |
| 35 | 37 | */ |
| 36 | void pull( StreamProcessor processor, String name ) | |
| 38 | void load( StreamProcessor processor ) | |
| 37 | 39 | throws CommandNotFoundException; |
| 38 | 40 | |
| 2 | 2 | package com.keenwrite.typesetting.containerization; |
| 3 | 3 | |
| 4 | import com.keenwrite.Messages; | |
| 4 | 5 | import com.keenwrite.io.CommandNotFoundException; |
| 5 | 6 | import com.keenwrite.io.SysFile; |
| 6 | 7 | |
| 7 | 8 | import java.io.File; |
| 8 | 9 | import java.nio.file.Files; |
| 9 | 10 | import java.nio.file.Path; |
| 10 | 11 | import java.util.LinkedList; |
| 11 | 12 | import java.util.List; |
| 12 | 13 | |
| 13 | import static com.keenwrite.Bootstrap.CONTAINER_VERSION; | |
| 14 | 14 | import static com.keenwrite.events.StatusEvent.clue; |
| 15 | 15 | import static com.keenwrite.io.SysFile.toFile; |
| ... | ||
| 34 | 34 | ); |
| 35 | 35 | private static final SysFile MANAGER = new SysFile( BINARY ); |
| 36 | ||
| 37 | public static final String CONTAINER_SHORTNAME = "typesetter"; | |
| 38 | public static final String CONTAINER_NAME = | |
| 39 | format( "%s:%s", CONTAINER_SHORTNAME, CONTAINER_VERSION ); | |
| 40 | 36 | |
| 41 | 37 | private final List<String> mMountPoints = new LinkedList<>(); |
| ... | ||
| 104 | 100 | |
| 105 | 101 | @Override |
| 106 | public void pull( final StreamProcessor processor, final String name ) | |
| 102 | public void load( final StreamProcessor processor ) | |
| 107 | 103 | throws CommandNotFoundException { |
| 108 | podman( processor, "pull", "ghcr.io/davejarvis/" + name ); | |
| 104 | final var url = Messages.get( "Wizard.typesetter.container.image.url" ); | |
| 105 | ||
| 106 | podman( processor, "load", "-i", url ); | |
| 109 | 107 | } |
| 110 | 108 | |
| ... | ||
| 125 | 123 | final StreamProcessor processor, |
| 126 | 124 | final String... args ) throws CommandNotFoundException { |
| 125 | final var tag = Messages.get( "Wizard.typesetter.container.image.tag" ); | |
| 126 | ||
| 127 | 127 | final var options = new LinkedList<String>(); |
| 128 | 128 | options.add( "run" ); |
| 129 | 129 | options.add( "--rm" ); |
| 130 | 130 | options.add( "--network=host" ); |
| 131 | 131 | options.addAll( mMountPoints ); |
| 132 | 132 | options.add( "-t" ); |
| 133 | options.add( CONTAINER_NAME ); | |
| 133 | options.add( tag ); | |
| 134 | 134 | options.add( "/bin/sh" ); |
| 135 | 135 | options.add( "-lc" ); |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.typesetting.installer; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.typesetting.installer.panes; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.typesetting.installer.panes; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.typesetting.installer.panes; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.typesetting.installer.panes; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.typesetting.installer.panes; |
| 3 | 6 | |
| 4 | import static com.keenwrite.typesetting.containerization.Podman.CONTAINER_NAME; | |
| 7 | import com.keenwrite.typesetting.containerization.ContainerManager; | |
| 5 | 8 | |
| 6 | 9 | /** |
| ... | ||
| 15 | 18 | PREFIX + ".correct", |
| 16 | 19 | PREFIX + ".missing", |
| 17 | (container, processor) -> container.pull( processor, CONTAINER_NAME ), | |
| 20 | ContainerManager::load, | |
| 18 | 21 | 45 |
| 19 | 22 | ); |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.typesetting.installer.panes; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.typesetting.installer.panes; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.typesetting.installer.panes; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.typesetting.installer.panes; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.typesetting.installer.panes; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.ui.clipboard; |
| 3 | 6 |
| 166 | 166 | } |
| 167 | 167 | |
| 168 | private void addAll( final Node... nodes ) { | |
| 169 | getChildren().addAll( nodes ); | |
| 170 | } | |
| 171 | ||
| 168 | 172 | /** |
| 169 | 173 | * Creates a vertical bar, used to divide the search results from the |
| 170 | 174 | * application status message. |
| 171 | 175 | * |
| 172 | 176 | * @return A vertical separator. |
| 173 | 177 | */ |
| 174 | private Node createSeparatorVertical() { | |
| 178 | private static Node createSeparatorVertical() { | |
| 175 | 179 | return new Separator( VERTICAL ); |
| 176 | 180 | } |
| ... | ||
| 183 | 187 | * @return A new {@link Node} having about 10px of space. |
| 184 | 188 | */ |
| 185 | private Node createSpacer( final int width ) { | |
| 189 | private static Node createSpacer( final int width ) { | |
| 186 | 190 | final var spacer = new Region(); |
| 187 | 191 | spacer.setPrefWidth( width ); |
| 188 | 192 | VBox.setVgrow( spacer, ALWAYS ); |
| 189 | 193 | return spacer; |
| 190 | 194 | } |
| 191 | 195 | |
| 192 | private Node getIcon( final String id ) { | |
| 196 | private static Node getIcon( final String id ) { | |
| 193 | 197 | return createGraphic( getMessageValue( id, "icon" ) ); |
| 194 | 198 | } |
| 195 | 199 | |
| 196 | private String getMessageValue( final String id, final String suffix ) { | |
| 200 | private static String getMessageValue( final String id, | |
| 201 | final String suffix ) { | |
| 197 | 202 | return get( format( MESSAGE_KEY, id, suffix ) ); |
| 198 | } | |
| 199 | ||
| 200 | private void addAll( final Node... nodes ) { | |
| 201 | getChildren().addAll( nodes ); | |
| 202 | 203 | } |
| 203 | 204 | } |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.ui.dialogs; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.ui.dialogs; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.util; |
| 3 | 6 |
| 1 | 1 | application.title=KeenWrite |
| 2 | container.version=3.0.0 | |
| 3 | 2 |
| 321 | 321 | Wizard.typesetter.name=ConTeXt |
| 322 | 322 | Wizard.typesetter.container.name=Podman |
| 323 | Wizard.typesetter.container.version=4.5.1 | |
| 324 | Wizard.typesetter.container.checksum=883c9901d1eedb3a130256574afa270656e4d322dce0bb880808d9d7776eff8a | |
| 325 | Wizard.typesetter.themes.version=1.8.3 | |
| 326 | Wizard.typesetter.themes.checksum=983b8d3c4051c6c002b8111ea786ebc83d5496ab5f8d734e96413c59304b2a75 | |
| 323 | Wizard.typesetter.container.version=4.6.2 | |
| 324 | Wizard.typesetter.container.checksum=a51acef00b17cce83dd4d364817af32dd5e541db8d2d13063ae73742744ba3ad | |
| 325 | Wizard.typesetter.container.image.name=typesetter | |
| 326 | Wizard.typesetter.container.image.version=3.0.1 | |
| 327 | Wizard.typesetter.container.image.tag=${Wizard.typesetter.container.image.name}:${Wizard.typesetter.container.image.version} | |
| 328 | Wizard.typesetter.container.image.url=https://repository.keenwrite.com/containers/${Wizard.typesetter.container.image.tag} | |
| 329 | Wizard.typesetter.themes.version=1.8.4 | |
| 330 | Wizard.typesetter.themes.checksum=b30dd800df89c1d06b2446469e62c12252434946f950a874e1ca225719ba4efc | |
| 327 | 331 | |
| 328 | 332 | Wizard.container.install.command=Installing container using: ''{0}'' |
| ... | ||
| 450 | 454 | Wizard.typesetter.all.5.download.themes.header=Download ${Wizard.typesetter.name} themes |
| 451 | 455 | Wizard.typesetter.all.5.download.themes.download.link.lbl=repository |
| 452 | Wizard.typesetter.all.5.download.themes.download.link.url=https://github.com/DaveJarvis/keenwrite-themes/releases/download/${Wizard.typesetter.themes.version}/theme-pack.zip | |
| 456 | Wizard.typesetter.all.5.download.themes.download.link.url=https://gitlab.com/DaveJarvis/keenwrite-themes/-/releases/${Wizard.typesetter.themes.version}/downloads/theme-pack.zip | |
| 453 | 457 | Wizard.typesetter.all.5.download.themes.paths=Downloading {0} into {1}. |
| 454 | 458 | Wizard.typesetter.all.5.download.themes.status.bytes=Downloaded {0} bytes (size unknown). |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.io; |
| 3 | 6 |
| 1 | /* Copyright 2022 White Magic Software, Ltd. -- All rights reserved. */ | |
| 1 | /* Copyright 2023 White Magic Software, Ltd. -- All rights reserved. | |
| 2 | * | |
| 3 | * SPDX-License-Identifier: MIT | |
| 4 | */ | |
| 2 | 5 | package com.keenwrite.io.downloads; |
| 3 | 6 |
| 1 | MIT License | |
| 2 | ||
| 3 | Copyright (c) 2022 KeenWrite | |
| 4 | ||
| 5 | Permission is hereby granted, free of charge, to any person obtaining a copy | |
| 6 | of this software and associated documentation files (the "Software"), to deal | |
| 7 | in the Software without restriction, including without limitation the rights | |
| 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
| 9 | copies of the Software, and to permit persons to whom the Software is | |
| 10 | furnished to do so, subject to the following conditions: | |
| 11 | ||
| 12 | The above copyright notice and this permission notice shall be included in all | |
| 13 | copies or substantial portions of the Software. | |
| 14 | ||
| 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
| 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
| 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
| 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
| 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
| 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |
| 21 | SOFTWARE. | |
| 1 | 22 |
| 1 | 1 | |
| 2 |  | |
| 3 | ||
| 4 |
| 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
| 2 | <svg | |
| 3 | viewBox="0 0 157.33104 75" | |
| 4 | version="1.1" | |
| 5 | id="svg1" | |
| 6 | width="157.33104" | |
| 7 | height="75" | |
| 8 | xmlns="http://www.w3.org/2000/svg" | |
| 9 | xmlns:svg="http://www.w3.org/2000/svg"> | |
| 10 | <defs | |
| 11 | id="defs1" /> | |
| 12 | <!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --> | |
| 13 | <path | |
| 14 | d="m 56.86155,15.62503 c 0,-1.72852 -1.39648,-3.125 -3.125,-3.125 -1.72852,0 -3.125,1.39648 -3.125,3.125 V 39.3262 l -7.16797,-7.16797 c -1.2207,-1.2207 -3.20312,-1.2207 -4.42383,0 -1.2207,1.22071 -1.2207,3.20313 0,4.42383 l 12.5,12.5 c 1.22071,1.2207 3.20313,1.2207 4.42383,0 l 12.5,-12.5 c 1.2207,-1.2207 1.2207,-3.20312 0,-4.42383 -1.2207,-1.2207 -3.20312,-1.2207 -4.42383,0 l -7.1582,7.16797 z m -21.875,31.25 c -3.44727,0 -6.25,2.80273 -6.25,6.25 v 3.125 c 0,3.44727 2.80273,6.25 6.25,6.25 h 37.5 c 3.44727,0 6.25,-2.80273 6.25,-6.25 v -3.125 c 0,-3.44727 -2.80273,-6.25 -6.25,-6.25 h -9.91211 l -4.42383,4.42383 c -2.4414,2.4414 -6.39648,2.4414 -8.83789,0 l -4.41406,-4.42383 z m 35.9375,10.15625 c -1.29883,0 -2.34375,-1.04492 -2.34375,-2.34375 0,-1.29883 1.04492,-2.34375 2.34375,-2.34375 1.29883,0 2.34375,1.04492 2.34375,2.34375 0,1.29883 -1.04492,2.34375 -2.34375,2.34375 z" | |
| 15 | id="path16323" | |
| 16 | style="fill:#000000;fill-opacity:1;stroke-width:0.0976562" /> | |
| 17 | <path | |
| 18 | d="m 121.70706,38.92224 c -0.0223,-4.09673 1.83069,-7.18881 5.58138,-9.46601 -2.0986,-3.00277 -5.26882,-4.65486 -9.45485,-4.97858 -3.96277,-0.31256 -8.29392,2.31069 -9.87903,2.31069 -1.67441,0 -5.51439,-2.19906 -8.52833,-2.19906 -6.22882,0.10046 -12.84832,4.96742 -12.84832,14.86877 q 0,4.38696 1.60743,9.06415 c 1.42883,4.09673 6.58602,14.1432 11.96646,13.97576 2.81303,-0.067 4.79998,-1.99813 8.46136,-1.99813 3.54976,0 5.39161,1.99813 8.52834,1.99813 5.4251,-0.0781 10.09112,-9.20927 11.45298,-13.31716 -7.27811,-3.42696 -6.88742,-10.04647 -6.88742,-10.25856 z m -6.31811,-18.32922 c 3.04743,-3.61673 2.76836,-6.90974 2.67906,-8.09299 -2.69022,0.15627 -5.80463,1.83069 -7.5795,3.89579 -1.95348,2.21023 -3.10325,4.9451 -2.85767,8.02602 2.91348,0.22325 5.57021,-1.27256 7.75811,-3.82882 z" | |
| 19 | id="path5811" | |
| 20 | style="fill:#000000;fill-opacity:1;stroke-width:0.111627" /> | |
| 21 | </svg> | |
| 1 | 22 |
| 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
| 2 | <svg | |
| 3 | viewBox="0 0 157.33104 75" | |
| 4 | version="1.1" | |
| 5 | id="svg1" | |
| 6 | width="157.33104" | |
| 7 | height="75" | |
| 8 | xmlns="http://www.w3.org/2000/svg" | |
| 9 | xmlns:svg="http://www.w3.org/2000/svg"> | |
| 10 | <defs | |
| 11 | id="defs1" /> | |
| 12 | <!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --> | |
| 13 | <path | |
| 14 | d="m 53.68516,15.625 c 0,-1.72852 -1.39648,-3.125 -3.125,-3.125 -1.72852,0 -3.125,1.39648 -3.125,3.125 V 39.32617 L 40.26719,32.1582 c -1.2207,-1.2207 -3.20312,-1.2207 -4.42383,0 -1.2207,1.22071 -1.2207,3.20313 0,4.42383 l 12.5,12.5 c 1.22071,1.2207 3.20313,1.2207 4.42383,0 l 12.5,-12.5 c 1.2207,-1.2207 1.2207,-3.20312 0,-4.42383 -1.2207,-1.2207 -3.20312,-1.2207 -4.42383,0 l -7.1582,7.16797 z m -21.875,31.25 c -3.44727,0 -6.25,2.80273 -6.25,6.25 v 3.125 c 0,3.44727 2.80273,6.25 6.25,6.25 h 37.5 c 3.44727,0 6.25,-2.80273 6.25,-6.25 v -3.125 c 0,-3.44727 -2.80273,-6.25 -6.25,-6.25 h -9.91211 l -4.42383,4.42383 c -2.4414,2.4414 -6.39648,2.4414 -8.83789,0 L 41.72227,46.875 Z m 35.9375,10.15625 c -1.29883,0 -2.34375,-1.04492 -2.34375,-2.34375 0,-1.29883 1.04492,-2.34375 2.34375,-2.34375 1.29883,0 2.34375,1.04492 2.34375,2.34375 0,1.29883 -1.04492,2.34375 -2.34375,2.34375 z" | |
| 15 | id="path16474" | |
| 16 | style="fill:#000000;fill-opacity:1;stroke-width:0.0976562" /> | |
| 17 | <path | |
| 18 | d="m 121.74171,43.05624 c 0.95702,-0.65429 2.28513,-1.22069 2.28513,-1.22069 0,0 -3.77925,0.68359 -7.53897,0.99608 -4.59954,0.38086 -9.54088,0.45898 -12.02132,0.12695 -5.86906,-0.78124 3.22261,-2.93941 3.22261,-2.93941 0,0 -3.52534,-0.23437 -7.87099,1.85544 -5.12688,2.48044 12.69515,3.61324 21.92354,1.18163 z m -8.33973,-3.13473 c -1.85545,-4.16986 -8.11513,-7.83192 0,-14.23809 C 123.52489,17.69525 118.33355,12.5 118.33355,12.5 c 2.09959,8.25185 -7.38271,10.75181 -10.8104,15.8787 -2.33395,3.50581 1.14256,7.26553 5.87883,11.54281 z m 11.19126,-17.2068 c 0.01,0 -17.10915,4.27729 -8.93543,13.69123 2.41208,2.7734 -0.63476,5.27336 -0.63476,5.27336 0,0 6.12297,-3.16402 3.3105,-7.11904 -2.62691,-3.69136 -4.63861,-5.52727 6.25969,-11.84555 z m -0.5957,26.41567 a 1.190414,1.190414 0 0 1 -0.19531,0.2539 c 12.52914,-3.29097 7.91982,-11.61117 1.93357,-9.50183 a 1.6923604,1.6923604 0 0 0 -0.80077,0.61523 6.879792,6.879792 0 0 1 1.0742,-0.29297 c 3.02731,-0.63475 7.37296,4.05268 -2.01169,8.92567 z m 4.60541,6.0839 c 0,0 1.416,1.1621 -1.55272,2.07029 -5.65422,1.70896 -23.51531,2.22653 -28.47618,0.0684 -1.78709,-0.77147 1.56248,-1.85544 2.61715,-2.08005 1.09374,-0.23437 1.72849,-0.19531 1.72849,-0.19531 -1.98239,-1.39646 -12.82209,2.74411 -5.50773,3.92573 19.94504,3.24215 36.3667,-1.45506 31.19099,-3.78901 z m -21.83174,-4.04291 c -7.68545,2.1484 4.67767,6.58194 14.4627,2.39254 a 18.15308,18.15308 0 0 1 -2.75387,-1.34764 c -4.36518,0.83007 -6.38664,0.88866 -10.35143,0.43945 -3.27144,-0.37109 -1.3574,-1.48435 -1.3574,-1.48435 z m 17.55836,9.49206 c -7.68545,1.44529 -17.16774,1.27928 -22.7829,0.35156 0,-0.01 1.15232,0.94725 7.07022,1.3281 9.00378,0.57617 22.83173,-0.32226 23.15399,-4.58001 0,0 -0.62499,1.6113 -7.44131,2.90035 z M 120.07181,46.9722 c -5.78117,1.11327 -9.13074,1.08397 -13.3592,0.64453 -3.27144,-0.3418 -1.13279,-1.92381 -1.13279,-1.92381 -8.47645,2.81247 4.70696,5.99602 16.55251,2.52927 a 5.89543,5.89543 0 0 1 -2.06052,-1.24999 z" | |
| 19 | id="path5936" | |
| 20 | style="fill:#000000;fill-opacity:1;stroke-width:0.097655" /> | |
| 21 | </svg> | |
| 1 | 22 |
| 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
| 2 | <svg | |
| 3 | viewBox="0 0 157.33104 75" | |
| 4 | version="1.1" | |
| 5 | id="svg1" | |
| 6 | width="157.33104" | |
| 7 | height="75" | |
| 8 | xmlns="http://www.w3.org/2000/svg" | |
| 9 | xmlns:svg="http://www.w3.org/2000/svg"> | |
| 10 | <defs | |
| 11 | id="defs1" /> | |
| 12 | <!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --> | |
| 13 | <path | |
| 14 | d="m 111.9104,24.539926 c 0.0976,0.0488 0.17577,0.166 0.29295,0.166 0.10741,0 0.27341,-0.039 0.28318,-0.14647 0.0196,-0.13671 -0.18553,-0.22459 -0.31248,-0.28318 -0.166,-0.0684 -0.38082,-0.0976 -0.53706,-0.01 -0.039,0.0195 -0.0781,0.0684 -0.0586,0.10741 0.0293,0.12695 0.22459,0.10742 0.332,0.166 z m -2.13849,0.166 c 0.11718,0 0.1953,-0.11718 0.29294,-0.166 0.10742,-0.0586 0.30271,-0.039 0.34177,-0.15624 0.0195,-0.0391 -0.0195,-0.0879 -0.0586,-0.10741 -0.15623,-0.0879 -0.37106,-0.0586 -0.53706,0.01 -0.12694,0.0586 -0.33201,0.14647 -0.31248,0.28318 0.01,0.0976 0.17577,0.14647 0.27342,0.13671 z m 21.59,27.22431 c -0.35153,-0.3906 -0.51753,-1.13273 -0.70306,-1.92368 -0.17577,-0.79095 -0.38083,-1.64048 -1.02531,-2.18731 -0.12694,-0.10742 -0.25388,-0.20506 -0.39059,-0.28318 -0.12694,-0.0781 -0.26365,-0.14648 -0.40036,-0.1953 0.89836,-2.66579 0.54683,-5.32182 -0.3613,-7.72397 -1.11318,-2.9392 -3.05638,-5.50735 -4.54063,-7.26502 -1.66979,-2.09944 -3.29075,-4.09146 -3.26146,-7.03067 0.0488,-4.48205 0.49801,-12.81143 -7.40172,-12.8212 -9.99918,-0.0196 -7.49938,10.09682 -7.6068,13.20203 -0.166,2.28497 -0.62495,4.08169 -2.19708,6.31784 -1.84555,2.19708 -4.442986,5.74171 -5.673356,9.44257 -0.58588,1.7479 -0.8593,3.5251 -0.60541,5.20465 -0.63472,0.56636 -1.11319,1.43543 -1.62096,1.97249 -0.41012,0.41989 -1.00578,0.57612 -1.66002,0.81048 -0.65424,0.23436 -1.36708,0.58589 -1.8065,1.4159 -0.20506,0.38083 -0.27341,0.79095 -0.27341,1.21084 0,0.38083 0.0586,0.77142 0.11718,1.15225 0.11717,0.79095 0.24412,1.53307 0.0781,2.03108 -0.50777,1.40613 -0.57613,2.38261 -0.21483,3.09544 0.37106,0.71283 1.11319,1.02531 1.96273,1.20108 1.68931,0.35153 3.98405,0.26365 5.79054,1.2206 1.933426,1.01554 3.896156,1.37684 5.458526,1.01554 1.13271,-0.25389 2.06037,-0.93742 2.52908,-1.97249 1.22061,-0.01 2.56815,-0.5273 4.71641,-0.64448 1.45496,-0.11718 3.28098,0.51753 5.38041,0.40035 0.0586,0.2246 0.13671,0.44919 0.24412,0.65425 v 0.01 c 0.81048,1.63072 2.32403,2.37285 3.93522,2.2459 1.62097,-0.12694 3.32981,-1.07413 4.71641,-2.72438 1.32802,-1.60143 3.51533,-2.26544 4.97029,-3.14427 0.7226,-0.43941 1.30849,-0.98624 1.35731,-1.78696 0.039,-0.80071 -0.42965,-1.68931 -1.51355,-2.90015 z m -19.16833,-30.90565 c 0.95695,-2.16779 3.33957,-2.12873 4.29652,-0.0391 0.63471,1.38661 0.35153,3.01733 -0.41989,3.94499 -0.15623,-0.0781 -0.57612,-0.25388 -1.23036,-0.47847 0.10741,-0.11718 0.30271,-0.26365 0.38082,-0.44919 0.46872,-1.15224 -0.0195,-2.6365 -0.88859,-2.66579 -0.71284,-0.0488 -1.35731,1.0546 -1.15225,2.24591 -0.40036,-0.1953 -0.91789,-0.34177 -1.26943,-0.42965 -0.0976,-0.67378 -0.0293,-1.42567 0.28318,-2.12874 z m -3.97428,-1.12295 c 0.98625,0 2.03108,1.3866 1.86508,3.27122 -0.34177,0.0976 -0.6933,0.24412 -0.99601,0.44918 0.11718,-0.86907 -0.32224,-1.96274 -0.93742,-1.91391 -0.82025,0.0684 -0.95696,2.07014 -0.17577,2.74392 0.0977,0.0781 0.18553,-0.0195 -0.57613,0.53706 -1.52331,-1.42566 -1.0253,-5.08747 0.82025,-5.08747 z m -1.32802,5.92724 c 0.60542,-0.44918 1.32802,-0.97648 1.37685,-1.0253 0.45894,-0.42965 1.31825,-1.3866 2.72438,-1.3866 0.6933,0 1.52331,0.22459 2.52909,0.86906 0.61518,0.40036 1.10342,0.42966 2.20684,0.90813 0.82025,0.34177 1.33778,0.94719 1.02531,1.7772 -0.25389,0.6933 -1.07413,1.40613 -2.21661,1.76743 -1.0839,0.35153 -1.93344,1.56237 -3.73016,1.45496 -0.38083,-0.0196 -0.68354,-0.0977 -0.93742,-0.20507 -0.78119,-0.34176 -1.19131,-1.01554 -1.95297,-1.46472 -0.83977,-0.46871 -1.28896,-1.01554 -1.43543,-1.49401 -0.13671,-0.47848 0,-0.87884 0.41012,-1.20108 z m 0.32224,32.61449 c -0.26365,3.42745 -4.28675,3.35909 -7.352896,1.75766 -2.91968,-1.54284 -6.69866,-0.63471 -7.47009,-2.13849 -0.23435,-0.45895 -0.23435,-1.24013 0.25389,-2.57791 v -0.0195 c 0.23435,-0.74213 0.0586,-1.56237 -0.0586,-2.33379 -0.11718,-0.76166 -0.17577,-1.46472 0.0879,-1.95297 0.34177,-0.65424 0.83002,-0.8886 1.4452,-1.10342 1.00578,-0.3613 1.15225,-0.33201 1.9139,-0.96672 0.53707,-0.55659 0.92766,-1.25966 1.39637,-1.75766 0.49801,-0.53707 0.97648,-0.79095 1.72837,-0.67378 0.79095,0.11718 1.474486,0.66401 2.138496,1.56237 l 1.9139,3.47628 c 0.92766,1.9432 4.20863,4.72617 4.00357,6.72796 z m -0.1367,-2.52909 c -0.40036,-0.64448 -0.93743,-1.32801 -1.40614,-1.9139 0.6933,0 1.38661,-0.21483 1.63073,-0.86907 0.22459,-0.60542 0,-1.45496 -0.7226,-2.43144 -1.31825,-1.7772 -3.73992,-3.17357 -3.73992,-3.17357 -1.31825,-0.82024 -2.06038,-1.82602 -2.40215,-2.91968 -0.34176,-1.09366 -0.29294,-2.2752 -0.0293,-3.43721 0.50777,-2.23614 1.81626,-4.4137 2.65603,-5.78077 0.22459,-0.16601 0.0781,0.31247 -0.84954,2.03108 -0.83,1.57214 -2.382606,5.20465 -0.25388,8.04621 0.0586,-2.02132 0.53706,-4.08169 1.34754,-6.00536 1.17178,-2.67556 3.64228,-7.31385 3.83757,-11.00495 0.10742,0.0781 0.44919,0.31247 0.60543,0.40036 0.44918,0.26365 0.79095,0.65424 1.23036,1.00577 1.21084,0.97648 2.78298,0.89836 4.14028,0.11718 0.60542,-0.34177 1.09366,-0.73236 1.55261,-0.87883 0.96672,-0.30271 1.73814,-0.83978 2.17755,-1.46473 0.75189,2.96851 2.50956,7.25526 3.63251,9.34493 0.59566,1.11319 1.78697,3.46651 2.3045,6.30807 0.32224,-0.01 0.68354,0.039 1.06437,0.13671 1.34754,-3.48604 -1.14249,-7.24549 -2.27521,-8.29033 -0.45894,-0.44918 -0.47847,-0.64448 -0.25388,-0.63471 1.23037,1.09366 2.85133,3.29074 3.43722,5.76124 0.27341,1.13272 0.32223,2.31426 0.039,3.48604 1.60143,0.66401 3.50557,1.7479 2.9978,3.39815 -0.21483,-0.01 -0.31248,0 -0.41013,0 0.31248,-0.98624 -0.38082,-1.7186 -2.22637,-2.54861 -1.91391,-0.83978 -3.51534,-0.83978 -3.73993,1.2206 -1.18154,0.41012 -1.78696,1.43543 -2.08967,2.66579 -0.27341,1.09366 -0.35153,2.41191 -0.42965,3.89617 -0.0488,0.75189 -0.35154,1.75766 -0.66401,2.83179 -3.1345,2.23615 -7.48961,3.21263 -11.16118,0.70307 z m 25.13463,-1.12295 c -0.0879,1.64049 -4.0231,1.94319 -6.17136,4.54063 -1.28895,1.53308 -2.87085,2.38262 -4.25746,2.49003 -1.38661,0.10741 -2.58768,-0.46871 -3.29074,-1.88461 -0.45895,-1.08389 -0.23436,-2.25567 0.10741,-3.54462 0.3613,-1.38661 0.89836,-2.81227 0.96672,-3.96452 0.0781,-1.48425 0.166,-2.78297 0.41012,-3.77898 0.25388,-1.00578 0.64448,-1.67955 1.33778,-2.06038 0.0293,-0.0195 0.0684,-0.0293 0.0976,-0.0488 0.0781,1.28895 0.71284,2.59744 1.83579,2.88062 1.23037,0.32223 2.9978,-0.73237 3.74969,-1.59167 0.87884,-0.0293 1.53308,-0.0879 2.20685,0.49801 0.96672,0.83001 0.6933,2.95874 1.66978,4.06216 1.03507,1.13272 1.36708,1.90414 1.33778,2.40215 z m -24.93934,-27.77114 c 0.1953,0.18553 0.45895,0.43942 0.78119,0.6933 0.64448,0.50777 1.54284,1.03507 2.6658,1.03507 1.13271,0 2.19708,-0.57612 3.10521,-1.0546 0.47847,-0.25388 1.06436,-0.68353 1.44519,-1.01554 0.38083,-0.332 0.57612,-0.61518 0.30271,-0.64447 -0.27342,-0.0293 -0.25389,0.25388 -0.58589,0.498 -0.42965,0.31248 -0.94719,0.7226 -1.35731,0.95695 -0.7226,0.41012 -1.90414,0.99601 -2.91968,0.99601 -1.01554,0 -1.82602,-0.46871 -2.43144,-0.94718 -0.30271,-0.24412 -0.55659,-0.48824 -0.75189,-0.67378 -0.14647,-0.1367 -0.18553,-0.44918 -0.41989,-0.47847 -0.13671,-0.01 -0.17577,0.3613 0.166,0.63471 z" | |
| 15 | id="path6061" | |
| 16 | style="fill:#000000;fill-opacity:1;stroke-width:0.097648" /> | |
| 17 | <path | |
| 18 | d="m 52.578354,15.625006 c 0,-1.72852 -1.39648,-3.125 -3.125,-3.125 -1.72852,0 -3.125,1.39648 -3.125,3.125 v 23.70117 l -7.16797,-7.16797 c -1.2207,-1.2207 -3.20312,-1.2207 -4.42383,0 -1.2207,1.22071 -1.2207,3.20313 0,4.42383 l 12.5,12.5 c 1.22071,1.2207 3.20313,1.2207 4.42383,0 l 12.5,-12.5 c 1.2207,-1.2207 1.2207,-3.20312 0,-4.42383 -1.2207,-1.2207 -3.20312,-1.2207 -4.42383,0 l -7.1582,7.16797 z m -21.875,31.25 c -3.44727,0 -6.25,2.80273 -6.25,6.25 v 3.125 c 0,3.44727 2.80273,6.25 6.25,6.25 h 37.5 c 3.44727,0 6.25,-2.80273 6.25,-6.25 v -3.125 c 0,-3.44727 -2.80273,-6.25 -6.25,-6.25 h -9.91211 l -4.42383,4.42383 c -2.4414,2.4414 -6.39648,2.4414 -8.83789,0 l -4.41406,-4.42383 z m 35.9375,10.15625 c -1.29883,0 -2.34375,-1.04492 -2.34375,-2.34375 0,-1.29883 1.04492,-2.34375 2.34375,-2.34375 1.29883,0 2.34375,1.04492 2.34375,2.34375 0,1.29883 -1.04492,2.34375 -2.34375,2.34375 z" | |
| 19 | id="path15448" | |
| 20 | style="fill:#000000;fill-opacity:1;stroke-width:0.0976562" /> | |
| 21 | </svg> | |
| 1 | 22 |
| 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
| 2 | <svg | |
| 3 | viewBox="0 0 157.33104 75" | |
| 4 | version="1.1" | |
| 5 | id="svg1" | |
| 6 | width="157.33104" | |
| 7 | height="75" | |
| 8 | xmlns="http://www.w3.org/2000/svg" | |
| 9 | xmlns:svg="http://www.w3.org/2000/svg"> | |
| 10 | <defs | |
| 11 | id="defs1" /> | |
| 12 | <!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --> | |
| 13 | <path | |
| 14 | d="M 83.66552,19.38616 104.15659,16.5625 V 36.36161 H 83.66552 Z m 0,36.22768 20.49107,2.82366 V 38.88393 H 83.66552 Z m 22.74554,3.125 L 133.66552,62.5 V 38.88393 h -27.25446 z m 0,-42.47768 v 20.10045 h 27.25446 V 12.5 Z" | |
| 15 | id="path6186" | |
| 16 | style="fill:#000000;fill-opacity:1;stroke-width:0.111607" /> | |
| 17 | <path | |
| 18 | d="m 51.79052,15.625 c 0,-1.72852 -1.39648,-3.125 -3.125,-3.125 -1.72852,0 -3.125,1.39648 -3.125,3.125 V 39.32617 L 38.37255,32.1582 c -1.2207,-1.2207 -3.20312,-1.2207 -4.42383,0 -1.2207,1.22071 -1.2207,3.20313 0,4.42383 l 12.5,12.5 c 1.22071,1.2207 3.20313,1.2207 4.42383,0 l 12.5,-12.5 c 1.2207,-1.2207 1.2207,-3.20312 0,-4.42383 -1.2207,-1.2207 -3.20312,-1.2207 -4.42383,0 l -7.1582,7.16797 z m -21.875,31.25 c -3.44727,0 -6.25,2.80273 -6.25,6.25 v 3.125 c 0,3.44727 2.80273,6.25 6.25,6.25 h 37.5 c 3.44727,0 6.25,-2.80273 6.25,-6.25 v -3.125 c 0,-3.44727 -2.80273,-6.25 -6.25,-6.25 h -9.91211 l -4.42383,4.42383 c -2.4414,2.4414 -6.39648,2.4414 -8.83789,0 L 39.82763,46.875 Z m 35.9375,10.15625 c -1.29883,0 -2.34375,-1.04492 -2.34375,-2.34375 0,-1.29883 1.04492,-2.34375 2.34375,-2.34375 1.29883,0 2.34375,1.04492 2.34375,2.34375 0,1.29883 -1.04492,2.34375 -2.34375,2.34375 z" | |
| 19 | id="path16036" | |
| 20 | style="fill:#000000;fill-opacity:1;stroke-width:0.0976562" /> | |
| 21 | </svg> | |
| 1 | 22 |
| 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
| 2 | <svg | |
| 3 | height="493.14542" | |
| 4 | viewBox="0 0 500.05118 493.14542" | |
| 5 | width="500.05118" | |
| 6 | version="1.1" | |
| 7 | id="svg37" | |
| 8 | sodipodi:docname="logo-icon.svg" | |
| 9 | inkscape:version="1.2.1 (9c6d41e410, 2022-07-14, custom)" | |
| 10 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |
| 11 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |
| 12 | xmlns="http://www.w3.org/2000/svg" | |
| 13 | xmlns:svg="http://www.w3.org/2000/svg" | |
| 14 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |
| 15 | xmlns:cc="http://creativecommons.org/ns#" | |
| 16 | xmlns:dc="http://purl.org/dc/elements/1.1/"> | |
| 17 | <sodipodi:namedview | |
| 18 | id="namedview18" | |
| 19 | pagecolor="#ffffff" | |
| 20 | bordercolor="#666666" | |
| 21 | borderopacity="1.0" | |
| 22 | inkscape:showpageshadow="2" | |
| 23 | inkscape:pageopacity="0.0" | |
| 24 | inkscape:pagecheckerboard="0" | |
| 25 | inkscape:deskcolor="#d1d1d1" | |
| 26 | showgrid="false" | |
| 27 | inkscape:zoom="2.1352728" | |
| 28 | inkscape:cx="250.3193" | |
| 29 | inkscape:cy="246.57271" | |
| 30 | inkscape:current-layer="svg37" /> | |
| 31 | <metadata | |
| 32 | id="metadata43"> | |
| 33 | <rdf:RDF> | |
| 34 | <cc:Work | |
| 35 | rdf:about=""> | |
| 36 | <dc:format>image/svg+xml</dc:format> | |
| 37 | <dc:type | |
| 38 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |
| 39 | </cc:Work> | |
| 40 | </rdf:RDF> | |
| 41 | </metadata> | |
| 42 | <defs | |
| 43 | id="defs41"> | |
| 44 | <linearGradient | |
| 45 | id="a" | |
| 46 | gradientTransform="matrix(-8.7796153,42.985832,-42.985832,-8.7796153,514.83476,136.06192)" | |
| 47 | gradientUnits="userSpaceOnUse" | |
| 48 | x1="0.152358" | |
| 49 | x2="0.96880901" | |
| 50 | y1="-0.044911999" | |
| 51 | y2="-0.049470998"> | |
| 52 | <stop | |
| 53 | offset="0" | |
| 54 | stop-color="#ec706a" | |
| 55 | id="stop2" /> | |
| 56 | <stop | |
| 57 | offset="1" | |
| 58 | stop-color="#ecd980" | |
| 59 | id="stop4" /> | |
| 60 | </linearGradient> | |
| 61 | </defs> | |
| 62 | <g | |
| 63 | id="g485" | |
| 64 | transform="matrix(2.5605898,1.4612315,-1.4612315,2.5605898,-947.38048,-777.17055)"> | |
| 65 | <path | |
| 66 | style="fill:url(#a);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.226;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" | |
| 67 | paint-order="stroke" | |
| 68 | d="m 496.76229,150.80474 c -4.25368,20.68081 3.28191,25.95476 3.28191,25.95476 v 0 c 0,0 3.00963,-13.19543 8.64082,-10.76172 v 0 c 4.83401,2.08299 1.12516,10.97002 1.12516,10.97002 v 0 c 0,0 31.78993,-30.5076 7.60484,-40.99434 v 0 c 0,0 -5.30287,-2.76791 -10.69842,-0.65209 v 0 c -3.94735,1.54891 -7.94375,5.71058 -9.95431,15.48337" | |
| 69 | stroke-linecap="round" | |
| 70 | id="path14-3" /> | |
| 71 | <path | |
| 72 | d="m 530.80335,138.63592 -10.99206,-16.95952 1.75995,-6.49966 10.01483,2.71233 z" | |
| 73 | fill="#126d95" | |
| 74 | id="path9" /> | |
| 75 | <path | |
| 76 | d="m 533.0598,112.36676 -0.91739,3.38458 -9.99361,-2.70665 0.91739,-3.38458 z" | |
| 77 | fill="#126d95" | |
| 78 | id="path11" /> | |
| 79 | <g | |
| 80 | fill="#51a9cf" | |
| 81 | id="g19" | |
| 82 | transform="translate(-295.50101,-692.52836)"> | |
| 83 | <path | |
| 84 | d="m 834.01973,741.0381 c -1.68105,0.0185 -3.22054,1.13771 -3.68367,2.84981 -0.56186,2.07405 0.665,4.21099 2.73743,4.77241 l -13.96475,51.52944 -9.99361,-2.70665 c 8.36013,-31.46487 4.99411,-51.98144 4.99411,-51.98144 14.99782,-11.92097 23.67,-25.56577 27.63101,-32.97331 z" | |
| 85 | id="path13" /> | |
| 86 | <path | |
| 87 | d="m 818.56767,802.18881 -0.9174,3.38458 -10.03996,-2.72957 0.91314,-3.37522 z" | |
| 88 | id="path15" /> | |
| 89 | <path | |
| 90 | d="m 817.07405,807.70594 -1.75995,6.49966 -18.03534,9.08805 9.78412,-18.31044 z" | |
| 91 | id="path17" /> | |
| 92 | </g> | |
| 93 | <path | |
| 94 | d="m 540.69709,49.12083 7.72577,-28.52932 c -0.3195,8.40427 0.28451,24.55036 7.21678,42.41047 0,0 -11.89603,16.50235 -21.99788,47.3763 l -10.03442,-2.71758 13.96533,-51.5284 c 2.08221,0.56405 4.21039,-0.66603 4.77182,-2.73844 0.45427,-1.67248 -0.26571,-3.38317 -1.64739,-4.27302" | |
| 95 | fill="#126d95" | |
| 96 | id="path21" /> | |
| 97 | <text | |
| 98 | transform="translate(-295.73751,-689.6407)" | |
| 99 | id="text25" /> | |
| 100 | </g> | |
| 101 | </svg> | |
| 1 | 102 |
| 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
| 2 | <!-- Created with Inkscape (http://www.inkscape.org/) --> | |
| 3 | ||
| 4 | <svg | |
| 5 | width="300" | |
| 6 | height="71.784302" | |
| 7 | viewBox="0 0 79.374996 18.99293" | |
| 8 | version="1.1" | |
| 9 | id="svg1" | |
| 10 | xmlns:xlink="http://www.w3.org/1999/xlink" | |
| 11 | xmlns="http://www.w3.org/2000/svg" | |
| 12 | xmlns:svg="http://www.w3.org/2000/svg"> | |
| 13 | <defs | |
| 14 | id="defs1"> | |
| 15 | <linearGradient | |
| 16 | xlink:href="#a" | |
| 17 | id="linearGradient347" | |
| 18 | gradientUnits="userSpaceOnUse" | |
| 19 | gradientTransform="matrix(-5.2145621,25.530992,-25.530992,-5.2145621,762.29957,221.94944)" | |
| 20 | x1="0.152358" | |
| 21 | y1="-0.044911999" | |
| 22 | x2="0.96880901" | |
| 23 | y2="-0.049470998" /> | |
| 24 | <linearGradient | |
| 25 | id="a" | |
| 26 | gradientTransform="matrix(-5.2145621,25.530992,-25.530992,-5.2145621,762.29957,221.94944)" | |
| 27 | gradientUnits="userSpaceOnUse" | |
| 28 | x1="0.152358" | |
| 29 | x2="0.96880901" | |
| 30 | y1="-0.044911999" | |
| 31 | y2="-0.049470998"> | |
| 32 | <stop | |
| 33 | offset="0" | |
| 34 | stop-color="#ec706a" | |
| 35 | id="stop2" /> | |
| 36 | <stop | |
| 37 | offset="1" | |
| 38 | stop-color="#ecd980" | |
| 39 | id="stop4" /> | |
| 40 | </linearGradient> | |
| 41 | </defs> | |
| 42 | <g | |
| 43 | id="layer1" | |
| 44 | transform="matrix(0.76997495,0,0,0.76997495,-41.151955,-104.91711)"> | |
| 45 | <g | |
| 46 | id="g3650" | |
| 47 | transform="matrix(0.26458333,0,0,0.26458333,-70.48435,95.775023)"> | |
| 48 | <path | |
| 49 | style="fill:url(#linearGradient347);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.72817;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" | |
| 50 | paint-order="stroke" | |
| 51 | d="m 751.56561,230.70578 c -2.52643,12.28316 1.94926,15.41557 1.94926,15.41557 v 0 c 0,0 1.78754,-7.83729 5.13213,-6.39182 v 0 c 2.87111,1.23717 0.66827,6.51553 0.66827,6.51553 v 0 c 0,0 18.8813,-18.11967 4.51682,-24.34816 v 0 c 0,0 -3.14959,-1.64397 -6.35422,-0.3873 v 0 c -2.34448,0.91995 -4.71811,3.39174 -5.91226,9.19618" | |
| 52 | stroke-linecap="round" | |
| 53 | id="path14" /> | |
| 54 | <path | |
| 55 | d="m 771.78395,223.47824 -6.52862,-10.07293 1.0453,-3.86041 5.94821,1.61096 z" | |
| 56 | fill="#126d95" | |
| 57 | id="path9" | |
| 58 | style="stroke-width:0.59394" /> | |
| 59 | <path | |
| 60 | d="m 773.12415,207.87594 -0.54488,2.01024 -5.9356,-1.60759 0.54487,-2.01024 z" | |
| 61 | fill="#126d95" | |
| 62 | id="path11" | |
| 63 | style="stroke-width:0.59394" /> | |
| 64 | <g | |
| 65 | fill="#51a9cf" | |
| 66 | id="g19" | |
| 67 | transform="matrix(0.5939397,0,0,0.5939397,281.00899,-270.18322)"> | |
| 68 | <path | |
| 69 | d="m 834.01973,741.0381 c -1.68105,0.0185 -3.22054,1.13771 -3.68367,2.84981 -0.56186,2.07405 0.665,4.21099 2.73743,4.77241 l -13.96475,51.52944 -9.99361,-2.70665 c 8.36013,-31.46487 4.99411,-51.98144 4.99411,-51.98144 14.99782,-11.92097 23.67,-25.56577 27.63101,-32.97331 z" | |
| 70 | id="path13" /> | |
| 71 | <path | |
| 72 | d="m 818.56767,802.18881 -0.9174,3.38458 -10.03996,-2.72957 0.91314,-3.37522 z" | |
| 73 | id="path15" /> | |
| 74 | <path | |
| 75 | d="m 817.07405,807.70594 -1.75995,6.49966 -18.03534,9.08805 9.78412,-18.31044 z" | |
| 76 | id="path17" /> | |
| 77 | </g> | |
| 78 | <path | |
| 79 | d="m 777.66024,170.31167 4.58864,-16.94469 c -0.18977,4.99163 0.16898,14.58143 4.28633,25.18926 0,0 -7.06553,9.8014 -13.06542,28.13866 l -5.95984,-1.61407 8.29457,-30.60477 c 1.23671,0.33502 2.50072,-0.39558 2.83417,-1.62646 0.26981,-0.99336 -0.15781,-2.0094 -0.97845,-2.53792" | |
| 80 | fill="#126d95" | |
| 81 | id="path21" | |
| 82 | style="stroke-width:0.59394" /> | |
| 83 | </g> | |
| 84 | <g | |
| 85 | style="font-style:italic;font-weight:800;font-size:133.333px;font-family:'Merriweather Sans';letter-spacing:0;word-spacing:0;fill:#51a9cf" | |
| 86 | id="g35" | |
| 87 | transform="matrix(0.15714654,0,0,0.15714654,50.302906,133.11748)"> | |
| 88 | <text | |
| 89 | x="16.133343" | |
| 90 | y="130.6234" | |
| 91 | id="text29"><tspan | |
| 92 | x="16.133343" | |
| 93 | y="130.6234" | |
| 94 | id="tspan27">KeenWr</tspan></text> | |
| 95 | <text | |
| 96 | x="552.53137" | |
| 97 | y="130.6234" | |
| 98 | id="text33"><tspan | |
| 99 | x="552.53137" | |
| 100 | y="130.6234" | |
| 101 | id="tspan31">te</tspan></text> | |
| 102 | </g> | |
| 103 | </g> | |
| 104 | </svg> | |
| 1 | 105 |
| 1 | <!DOCTYPE html> | |
| 2 | <html lang="en"> | |
| 3 | <head> | |
| 4 | <title>KeenWrite</title> | |
| 5 | <meta charset="UTF-8"> | |
| 6 | <meta name="description" content="cross-platform, open-source desktop editor"> | |
| 7 | <meta name="keywords" content="markdown, text, editor, software"> | |
| 8 | <meta name="robots" content="index, follow"> | |
| 9 | <style> | |
| 10 | /* ************************************************************************ | |
| 11 | * | |
| 12 | * Page | |
| 13 | * | |
| 14 | * ************************************************************************ */ | |
| 15 | :root { | |
| 16 | --accent-colour: #ec706a; | |
| 17 | --link-colour: #8cc6de; | |
| 18 | } | |
| 19 | ||
| 20 | body { | |
| 21 | /* Ensure the page doesn't extend full screen on large monitors. */ | |
| 22 | max-width: 1000px; | |
| 23 | margin: 0 auto; | |
| 24 | ||
| 25 | background: #363636; | |
| 26 | color: #eaeaea; | |
| 27 | } | |
| 28 | ||
| 29 | /* Text alignment. */ | |
| 30 | header, nav, footer { | |
| 31 | text-align: center; | |
| 32 | } | |
| 33 | ||
| 34 | /* ************************************************************************ | |
| 35 | * Header | |
| 36 | * ************************************************************************ */ | |
| 37 | ||
| 38 | header { | |
| 39 | /* Avoid being flush with top of page, put space between the title and | |
| 40 | * the download buttons, ensure any text won't be flush with edges. | |
| 41 | */ | |
| 42 | margin: 2em; | |
| 43 | } | |
| 44 | ||
| 45 | header p { | |
| 46 | line-height: 1.5em; | |
| 47 | } | |
| 48 | ||
| 49 | /* Ensure the application title is large enough. */ | |
| 50 | header > img.title { | |
| 51 | width: 100%; | |
| 52 | height: 72pt; | |
| 53 | } | |
| 54 | ||
| 55 | /* ************************************************************************ | |
| 56 | * Download buttons | |
| 57 | * ************************************************************************ */ | |
| 58 | ||
| 59 | main { | |
| 60 | /* Arrange the buttons in a responsive, 2 x 2 grid. */ | |
| 61 | display: grid; | |
| 62 | grid-template-rows: 1fr 1fr; | |
| 63 | grid-template-columns: max-content max-content; | |
| 64 | justify-content: center; | |
| 65 | } | |
| 66 | ||
| 67 | /* Make hyperlinks resemble buttons. */ | |
| 68 | a.download { | |
| 69 | display: inline-block; | |
| 70 | ||
| 71 | /* Separate the buttons from one another. */ | |
| 72 | margin-top: 2em; | |
| 73 | margin-left: 1em; | |
| 74 | margin-right: 1em; | |
| 75 | ||
| 76 | /* Fancy buttons. */ | |
| 77 | border-radius: 1em; | |
| 78 | background: var( --accent-colour ); | |
| 79 | } | |
| 80 | ||
| 81 | a.download:hover { | |
| 82 | background: var( --link-colour ); | |
| 83 | } | |
| 84 | ||
| 85 | img.download { | |
| 86 | /* Replace icon black with another colour. */ | |
| 87 | filter: invert(6%) | |
| 88 | sepia(58%) saturate(857%) hue-rotate(158deg) brightness(91%) contrast(91%); | |
| 89 | } | |
| 90 | ||
| 91 | /* ************************************************************************ | |
| 92 | * Navigation | |
| 93 | * ************************************************************************ */ | |
| 94 | ||
| 95 | nav { | |
| 96 | /* Don't crowd navigation links against the download buttons. */ | |
| 97 | margin-top: 4em; | |
| 98 | } | |
| 99 | ||
| 100 | nav ul { | |
| 101 | /* Remove the bullets */ | |
| 102 | list-style: none; | |
| 103 | padding: 0; | |
| 104 | margin: 0; | |
| 105 | } | |
| 106 | ||
| 107 | nav li { | |
| 108 | /* Put navigation items along a single line. */ | |
| 109 | display: inline; | |
| 110 | } | |
| 111 | ||
| 112 | nav li:not(:last-child)::after { | |
| 113 | /* Separate navigation items with a bar. */ | |
| 114 | content: " | "; | |
| 115 | } | |
| 116 | ||
| 117 | nav a, nav a:visited { | |
| 118 | color: var( --link-colour ); | |
| 119 | } | |
| 120 | ||
| 121 | nav a:link:hover, nav a:visited:hover { | |
| 122 | color: var( --accent-colour ); | |
| 123 | } | |
| 124 | ||
| 125 | /* ************************************************************************ | |
| 126 | * Footer | |
| 127 | * ************************************************************************ */ | |
| 128 | ||
| 129 | /* Align and center footer along bottom of page. */ | |
| 130 | footer { | |
| 131 | position: fixed; | |
| 132 | bottom: 1em; | |
| 133 | left: 50%; | |
| 134 | transform: translateX(-50%); | |
| 135 | width: 100%; | |
| 136 | } | |
| 137 | </style> | |
| 138 | </head> | |
| 139 | <body> | |
| 140 | <header> | |
| 141 | <img src="images/logo/title.svg" alt="KeenWrite" class="title"> | |
| 142 | <p> | |
| 143 | A free, cross-platform, open-source desktop text editor. | |
| 144 | </p> | |
| 145 | </header> | |
| 146 | <main> | |
| 147 | <a href="https://gitlab.com/DaveJarvis/KeenWrite/-/releases/permalink/latest/keenwrite.bin" | |
| 148 | class="download" | |
| 149 | title="Download for 64-bit Linux (x86)" | |
| 150 | aria-label="Download for Linux"><img | |
| 151 | src="images/icons/linux.svg" | |
| 152 | alt="Download for Linux" | |
| 153 | class="download"></a> | |
| 154 | <a href="https://gitlab.com/DaveJarvis/KeenWrite/-/releases/permalink/latest/keenwrite.jar" | |
| 155 | class="download" | |
| 156 | title="Download for Java virtual machine" | |
| 157 | aria-label="Download for Java"><img | |
| 158 | src="images/icons/java.svg" | |
| 159 | alt="Download for Java" | |
| 160 | class="download"></a> | |
| 161 | <a href="https://gitlab.com/DaveJarvis/KeenWrite/-/releases/permalink/latest/keenwrite.exe" | |
| 162 | class="download" | |
| 163 | title="Download for 64-bit Windows (x86)" | |
| 164 | aria-label="Download for Windows"><img | |
| 165 | src="images/icons/windows.svg" | |
| 166 | alt="Download for Windows" | |
| 167 | class="download"></a> | |
| 168 | <a href="https://gitlab.com/DaveJarvis/KeenWrite/-/releases/permalink/latest/keenwrite.app" | |
| 169 | class="download" | |
| 170 | title="Download for 64-bit MacOS (x86)" | |
| 171 | aria-label="Download for MacOS"><img | |
| 172 | src="images/icons/apple.svg" | |
| 173 | alt="Download for MacOS" | |
| 174 | class="download"></a> | |
| 175 | </main> | |
| 176 | <nav> | |
| 177 | <ul> | |
| 178 | <li><a href="https://www.youtube.com/playlist?list=PLB-WIt1cZYLm1MMx2FBG9KWzPIoWZMKu_">Tutorials</a></li> | |
| 179 | <li><a href="https://gitlab.com/DaveJarvis/KeenWrite">Sources</a></li> | |
| 180 | <li><a href="https://gitlab.com/DaveJarvis/KeenWrite/issues">Issues</a></li> | |
| 181 | <li><a href="https://gitlab.com/DaveJarvis/KeenWrite/-/blob/main/docs/README.md">Documentation</a></li> | |
| 182 | </ul> | |
| 183 | </nav> | |
| 184 | <footer> | |
| 185 | © 2023, White Magic Software, Ltd. | |
| 186 | </footer> | |
| 187 | </body> | |
| 188 | </html> | |
| 189 | ||
| 1 | 190 |