| 97 | 97 | def v_flexmark = '0.64.8' |
| 98 | 98 | def v_jackson = '2.19.2' |
| 99 | def v_echosvg = '2.2' | |
| 99 | def v_echosvg = '2.2.1' | |
| 100 | 100 | def v_picocli = '4.7.7' |
| 101 | 101 | |
| 102 | 102 | // JavaFX |
| 103 | 103 | implementation 'org.controlsfx:controlsfx:11.2.2' |
| 104 | 104 | implementation 'org.fxmisc.richtext:richtextfx:0.11.6' |
| 105 | 105 | implementation 'org.fxmisc.flowless:flowless:0.7.4' |
| 106 | 106 | implementation 'org.fxmisc.wellbehaved:wellbehavedfx:0.3.3' |
| 107 | implementation 'org.openjfx:javafx-media:26-ea+3' | |
| 107 | implementation 'org.openjfx:javafx-media:26-ea+13' | |
| 108 | 108 | implementation 'com.dlsc.preferencesfx:preferencesfx-core:11.17.0' |
| 109 | 109 | implementation 'com.panemu:tiwulfx-dock:0.5' |
| ... | ||
| 187 | 187 | testImplementation "org.junit.jupiter:junit-jupiter-params:${v_junit}" |
| 188 | 188 | testImplementation 'org.testfx:testfx-junit5:4.0.18' |
| 189 | testImplementation 'org.assertj:assertj-core:3.27.4' | |
| 189 | testImplementation 'org.assertj:assertj-core:3.27.6' | |
| 190 | 190 | } |
| 191 | 191 | |
| 9 | 9 | When exporting multiple documents, the application uses an alphanumeric sorting |
| 10 | 10 | algorithm to determine the order files are concatenated prior to processing. |
| 11 | This files are collated in a natural order that honours both alphabetic and | |
| 12 | numeric sequences within file names. | |
| 11 | This means files are collated in a natural order that honours both alphabetic | |
| 12 | and numeric sequences within file names. | |
| 13 | 13 | |
| 14 | 14 | Consider the following file names: |
| ... | ||
| 60 | 60 | If the first file processed contains numeric digits in its name, only files |
| 61 | 61 | containing numeric digits will be included in the export. If the first file |
| 62 | contains no digits, all matching files are processed in alphabetical order. | |
| 62 | contains no digits, all matching files will be processed in alphabetical order. | |
| 63 | 63 | |
| 64 | 64 | ### Chapter ranges |
| 37 | 37 | |
| 38 | 38 | * must not include spaces; |
| 39 | * must a sibling directory of all other themes; | |
| 39 | * must be a sibling directory of all other themes; | |
| 40 | 40 | * should be lowercase; and |
| 41 | 41 | * should be a single word (Latin works well). |
| ... | ||
| 110 | 110 | |
| 111 | 111 | Lua is a programming language that is tightly integrated with ConTeXt. Here's |
| 112 | an example of using Lua to create a list of replacements: | |
| 112 | an example of using Lua to create a list of text replacements: | |
| 113 | 113 | |
| 114 | 114 | ``` lua |
| 4 | 4 | readonly SCRIPT_DIR="$(cd "${SCRIPT_SRC}" >/dev/null 2>&1 && pwd)" |
| 5 | 5 | |
| 6 | #keenwrite.bin \ | |
| 7 | java -jar /tmp/keenwrite.jar \ | |
| 6 | keenwrite.bin \ | |
| 8 | 7 | $1 \ |
| 9 | --debug \ | |
| 10 | 8 | --all \ |
| 11 | 9 | --chapters="1-" \ |
| 12 | 10 | -i 01-introduction.md \ |
| 13 | 11 | -o user-manual.pdf \ |
| 14 | --variables=$(pwd)/metadata.yaml \ | |
| 12 | --variables=${SCRIPT_DIR}/metadata.yaml \ | |
| 15 | 13 | --set="version.java=$(cat ../java.version)" \ |
| 16 | 14 | --metadata="title={{document.title}}" \ |
| 1 | 24.0.2+12 | |
| 1 | 25.0.1+11 | |
| 2 | 2 |
| 6 | 6 | java \ |
| 7 | 7 | -Dprism.order=sw \ |
| 8 | -Djdk.xml.maxParameterEntitySizeLimit=100000 \ | |
| 8 | 9 | --enable-native-access=javafx.graphics \ |
| 9 | 10 | --sun-misc-unsafe-memory-access=allow \ |
| 22 | 22 | |
| 23 | 23 | cat << EOF |
| 24 | # Release Notes | |
| 24 | # Release notes | |
| 25 | 25 | |
| 26 | 26 | $CURRENT_DATE |
| 54 | 54 | scp "${FILENAME}" "${URL}" |
| 55 | 55 | else |
| 56 | $log "Skipping ${FILE_BINARY} ..." | |
| 56 | $log "Skipping ${FILENAME} ..." | |
| 57 | 57 | fi |
| 58 | 58 | } |
| 59 | 59 | |
| 60 | release "Windows" | |
| 60 | #release "Windows" | |
| 61 | 61 | release "MacOS" |
| 62 | 62 | release "Linux" |
| 114 | 114 | |
| 115 | 115 | if( !xml.isBlank() ) { |
| 116 | try( final var reader = new StringReader( xml ) ) { | |
| 116 | try( final var reader = new StringReader( declareEntities( xml ) ) ) { | |
| 117 | 117 | final var input = new InputSource(); |
| 118 | 118 | |
| ... | ||
| 128 | 128 | |
| 129 | 129 | return sDocumentBuilder.newDocument(); |
| 130 | } | |
| 131 | ||
| 132 | /** | |
| 133 | * Fixes issue where entity "nbsp" was referenced, but not declared. | |
| 134 | * | |
| 135 | * @param xml The document text to convert to a DOM. | |
| 136 | * @return The DOM with the "nbsp" entity declared. | |
| 137 | */ | |
| 138 | private static String declareEntities( final String xml ) { | |
| 139 | return xml.startsWith( "<!DOCTYPE" ) | |
| 140 | ? xml | |
| 141 | : """ | |
| 142 | <!DOCTYPE html [ | |
| 143 | <!ENTITY nbsp " "> | |
| 144 | ]> | |
| 145 | """ + xml; | |
| 130 | 146 | } |
| 131 | 147 | |
| ... | ||
| 197 | 213 | } |
| 198 | 214 | |
| 199 | public static Node evaluate( final String xpath, final Document doc ) throws XPathExpressionException { | |
| 215 | public static Node evaluate( final String xpath, final Document doc ) | |
| 216 | throws XPathExpressionException { | |
| 200 | 217 | return (Node) XPATH.evaluate( xpath, doc, NODE ); |
| 201 | 218 | } |