From 20c39e467a698b044bbe790ab2b73ffeb747fec7 Mon Sep 17 00:00:00 2001 From: Rajwar92 <105267135+Rajwar92@users.noreply.github.com> Date: Wed, 22 May 2024 14:49:22 +0530 Subject: [PATCH] Update. --- .editorconfig | 24 + .git-blame-ignore-revs | 26 + .gitattributes | 52 + .github/CONTRIBUTING.md | 97 + .github/actions/render/action.yml | 75 + .github/dependabot.yml | 15 + .github/no-response.yml | 14 + .github/stale.yml | 52 + .github/workflows/clean.rb | 10 + .github/workflows/deploy.yml | 58 + .../workflows/gradle-wrapper-validation.yml | 13 + .github/workflows/prettier.yml | 37 + .github/workflows/preview.yml | 82 + .github/workflows/release.yml | 147 + .gitignore | 18 + .husky/pre-commit | 1 + .nvmrc | 1 + .../resources/idGenerationDefaultOptions.xml | 28 + .prettierignore | 28 + .prettierrc.yml | 35 + DITA-OT_docs.xpr | 9771 +++++++++++++++++ LICENSE.md | 201 + README.md | 154 + build.gradle | 192 + .../extension-points-by-plugin.dita | 25 + .../extension-points-details.dita | 144 + extension-points/extension-points.ditamap | 25 + .../plugin-extension-points-general.dita | 119 + ...lugin-extension-points-pre-processing.dita | 183 + .../plugin-extension-points-support.dita | 62 + .../plugin-extension-points-xslt-import.dita | 189 + ...ugin-extension-points-xslt-parameters.dita | 129 + extension-points/plugin-extension-points.dita | 59 + gradle.properties | 2 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 61574 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 244 + gradlew.bat | 92 + index.dita | 74 + package-lock.json | 4707 ++++++++ package.json | 56 + parameters/ant-parameters-details.dita | 904 ++ parameters/configuration-properties-file.dita | 194 + parameters/configuration-properties.dita | 49 + parameters/dita-command-arguments.dita | 464 + parameters/generate-copy-outer.dita | 83 + parameters/index.dita | 13 + parameters/internal-ant-properties.dita | 65 + parameters/local-properties-file.dita | 63 + parameters/parameters.ditamap | 28 + parameters/parameters_intro.dita | 37 + parameters/plugin-properties-file.dita | 33 + reference/architecture.dita | 27 + reference/books.dita | 13 + reference/common-html-processing.dita | 41 + reference/dita-spec-support.dita | 19 + reference/dita-v1-2-support.dita | 61 + reference/dita-v1-3-support.dita | 87 + reference/dita-v2-0-support.dita | 212 + reference/docs-dita-features.dita | 132 + reference/eclipsehelp-processing.dita | 75 + reference/extended-functionality.dita | 176 + reference/flagging-migration.dita | 208 + reference/gloss-argument.dita | 7 + reference/gloss-dita-open-toolkit.dita | 28 + reference/gloss-extension-point.dita | 10 + reference/gloss-option.dita | 7 + reference/gloss-output-format.dita | 7 + reference/gloss-parameter.dita | 7 + reference/gloss-plug-in.dita | 7 + reference/gloss-processor.dita | 8 + reference/gloss-property.dita | 7 + reference/gloss-template-plugin.dita | 10 + reference/gloss-template-xslt.dita | 7 + reference/gloss-transformation-type.dita | 16 + reference/gloss-transtype.dita | 7 + reference/gloss-variable.dita | 8 + reference/glossary.dita | 7 + reference/glossary.ditamap | 21 + reference/html-based-processing.dita | 20 + reference/html5-processing.dita | 31 + reference/htmlhelp-processing.dita | 45 + reference/images/processing-flow.graffle | Bin 0 -> 4995 bytes reference/images/processing-flow.svg | 1 + .../sample-project-filtering-scenario.svg | 1 + .../implementation-dependent-features.dita | 124 + reference/index.dita | 8 + reference/java-api.dita | 76 + reference/license.dita | 26 + reference/license.ditamap | 10 + reference/map-first-preprocessing.dita | 130 + reference/markdown-formats.dita | 25 + reference/markdown-formats.ditamap | 66 + reference/markdown/.gitrepo | 12 + reference/markdown/Common-syntax.md | 238 + reference/markdown/Custom-schemas.md | 114 + reference/markdown/Format-comparison.md | 39 + reference/markdown/Home.md | 6 + reference/markdown/Installing.md | 11 + reference/markdown/MDITA-syntax.md | 141 + reference/markdown/Markdown-DITA-syntax.md | 317 + reference/markdown/Markdown-schemas.md | 61 + reference/markdown/Usage.md | 35 + reference/pdf-transform.dita | 107 + reference/pdf-transformation-history.dita | 59 + reference/preprocess-branch-filter.dita | 24 + reference/preprocess-chunk.dita | 35 + reference/preprocess-clean-map.dita | 17 + reference/preprocess-conref.dita | 74 + reference/preprocess-conrefpush.dita | 20 + reference/preprocess-copy-to.dita | 18 + reference/preprocess-copyfiles.dita | 22 + reference/preprocess-debugfilter.dita | 44 + reference/preprocess-flagging.dita | 269 + reference/preprocess-genlist.dita | 180 + reference/preprocess-keyref.dita | 19 + reference/preprocess-maplink.dita | 33 + reference/preprocess-mapref.dita | 33 + reference/preprocess-metadata.dita | 63 + reference/preprocess-profile.dita | 21 + reference/preprocess-topic-fragment.dita | 31 + reference/preprocess-topicpull.dita | 37 + reference/preprocessing.dita | 17 + reference/processing-order.dita | 62 + reference/processing-pipeline-modules.dita | 62 + reference/processing-structure.dita | 43 + reference/reference.ditamap | 100 + reference/store-api.dita | 78 + reference/third-party-software.dita | 184 + reference/xhtml-processing.dita | 22 + release-notes/changes.ditamap | 31 + release-notes/history.dita | 8 + release-notes/index.dita | 517 + release-notes/rel1.0.1.dita | 9 + release-notes/rel1.0.2.dita | 8 + release-notes/rel1.0.dita | 18 + release-notes/rel1.1.1.dita | 11 + release-notes/rel1.1.2.1.dita | 24 + release-notes/rel1.1.2.dita | 23 + release-notes/rel1.1.dita | 77 + release-notes/rel1.2.1.dita | 11 + release-notes/rel1.2.2.dita | 12 + release-notes/rel1.2.dita | 56 + release-notes/rel1.3.1.dita | 9 + release-notes/rel1.3.dita | 86 + release-notes/rel1.4.1.dita | 15 + release-notes/rel1.4.2.1.dita | 10 + release-notes/rel1.4.2.dita | 22 + release-notes/rel1.4.3.dita | 27 + release-notes/rel1.4.dita | 43 + release-notes/rel1.5.1.dita | 43 + release-notes/rel1.5.2.dita | 34 + release-notes/rel1.5.3.dita | 76 + release-notes/rel1.5.4.dita | 203 + release-notes/rel1.5.dita | 26 + release-notes/rel1.6.dita | 383 + release-notes/rel1.7.dita | 251 + release-notes/rel1.8.dita | 181 + release-notes/rel2.0.dita | 591 + release-notes/rel2.1.dita | 387 + release-notes/rel2.2.dita | 761 ++ release-notes/rel2.3.dita | 655 ++ release-notes/rel2.4.dita | 594 + release-notes/rel2.5.dita | 619 ++ release-notes/rel3.0.dita | 694 ++ release-notes/rel3.1.dita | 459 + release-notes/rel3.2.dita | 422 + release-notes/rel3.3.dita | 710 ++ release-notes/rel3.4.dita | 416 + release-notes/rel3.5.dita | 584 + release-notes/rel3.6.dita | 473 + release-notes/rel3.7.dita | 828 ++ release-notes/rel4.0.dita | 424 + release-notes/rel4.1.dita | 563 + resources/common-resources.ditamap | 12 + resources/common-toc.ditamap | 52 + resources/conref-task.dita | 168 + resources/dita-ot-day-video-keys.ditamap | 14 + resources/dita-ot-doc.css | 1047 ++ .../ditaotdaykeys/all-conferences.ditaval | 5 + .../dita-ot-day-2014-keys.ditamap | 191 + .../dita-ot-day-2015-keys.ditamap | 238 + .../dita-ot-day-2016-keys.ditamap | 221 + .../dita-ot-day-2017-keys.ditamap | 226 + .../dita-ot-day-2018-keys.ditamap | 260 + .../dita-ot-day-2019-keys.ditamap | 225 + .../dita-ot-day-2022-keys.ditamap | 213 + .../dita-ot-day-2024-keys.ditamap | 312 + resources/expert.ditaval | 6 + resources/extension-points.xsl | 169 + resources/external-links.ditamap | 1114 ++ resources/fact.hs | 6 + resources/header.xml | 4 + resources/html.ditaval | 6 + resources/key-definitions.ditamap | 197 + resources/messages.xsl | 133 + resources/novice.ditaval | 6 + resources/params.xsl | 197 + resources/pdf.ditaval | 6 + resources/properties-file.xsl | 165 + resources/reltable.ditamap | 398 + resources/reusable-components.dita | 276 + resources/site.ditaval | 7 + resources/source-files.ditamap | 249 + .../subjectscheme-deliverytarget.ditamap | 60 + resources/subjectscheme-outputclass.ditamap | 170 + resources/subjectscheme.ditamap | 31 + resources/theme/.gitrepo | 12 + resources/theme/Extending-themes.md | 21 + resources/theme/FAQ.md | 5 + resources/theme/Header-and-footer.md | 30 + resources/theme/Home.md | 17 + resources/theme/How-to.md | 120 + resources/theme/Page-settings.md | 32 + resources/theme/Styles.md | 628 ++ resources/theme/Syntactic-sugar.md | 86 + resources/theme/Theme.md | 40 + resources/theme/Variables.md | 16 + resources/theme/duplex.recto.png | Bin 0 -> 55414 bytes resources/theme/duplex.verso.png | Bin 0 -> 23962 bytes resources/theme/header-image.svg | 61 + resources/theme/simplex.png | Bin 0 -> 56345 bytes samples/ant_sample/build-chm-pdf-hybrid.xml | 26 + samples/ant_sample/build-chm-pdf.xml | 22 + samples/ant_sample/dita-cmd.xml | 32 + samples/ant_sample/sample_all.xml | 27 + samples/ant_sample/sample_eclipsehelp.xml | 19 + samples/ant_sample/sample_html5.xml | 20 + samples/ant_sample/sample_htmlhelp.xml | 19 + samples/ant_sample/sample_pdf.xml | 19 + samples/ant_sample/sample_xhtml_plus_css.xml | 26 + samples/ant_sample/template_eclipsehelp.xml | 24 + samples/ant_sample/template_htmlhelp.xml | 24 + samples/ant_sample/template_pdf.xml | 24 + samples/concepts/garageconceptsoverview.xml | 9 + samples/concepts/lawnmower.xml | 11 + samples/concepts/oil.xml | 14 + samples/concepts/paint.xml | 14 + samples/concepts/shelving.xml | 14 + samples/concepts/snowshovel.xml | 15 + samples/concepts/toolbox.xml | 15 + samples/concepts/tools.xml | 28 + samples/concepts/waterhose.xml | 14 + samples/concepts/wheelbarrow.xml | 9 + samples/concepts/workbench.xml | 12 + samples/concepts/wwfluid.xml | 12 + samples/css/style.css | 95 + samples/docker/Dockerfile | 8 + .../build-using-a-project-file.yaml | 19 + .../github-actions/build-with-commands.yaml | 21 + samples/github-actions/dita-ot-pipeline.yaml | 50 + .../install-using-bash-script.yaml | 19 + .../install-using-commands.yaml | 21 + .../github-actions/install-using-plugins.yaml | 20 + samples/github-actions/minimal-action.yaml | 18 + samples/hierarchy.ditamap | 28 + samples/image/carwash.jpg | Bin 0 -> 8121 bytes .../build_html5-custom-css.xml | 14 + .../css/custom.css | 5 + .../com.example.html5-custom-css/plugin.xml | 8 + .../build_html5-javascript.xml | 11 + .../include/javascript.ftr.xml | 15 + .../com.example.html5-javascript/plugin.xml | 8 + .../build_html5-webfont.xml | 16 + .../com.example.html5-webfont/css/custom.css | 3 + .../include/webfont.hdf.xml | 3 + .../com.example.html5-webfont/plugin.xml | 8 + .../com.example.print-pdf/cfg/catalog.xml | 6 + .../cfg/common/vars/en.xml | 9 + .../cfg/fo/attrs/custom.xsl | 7 + .../cfg/fo/xsl/custom.xsl | 20 + .../com.example.print-pdf/integrator.xml | 10 + .../plugins/com.example.print-pdf/plugin.xml | 9 + samples/project-files/all.xml | 7 + samples/project-files/common.json | 11 + samples/project-files/common.xml | 10 + samples/project-files/common.yaml | 7 + samples/project-files/distribution-docs.xml | 6 + samples/project-files/html.json | 51 + samples/project-files/html.xml | 20 + samples/project-files/html.yaml | 29 + samples/project-files/htmlhelp.xml | 15 + samples/project-files/param-override.xml | 14 + samples/project-files/pdf.xml | 20 + samples/properties/chm.properties | 2 + samples/properties/pdf.properties | 3 + samples/properties/sequence-html5.properties | 14 + samples/sequence.ditamap | 24 + samples/taskbook.ditamap | 77 + samples/taskbook/closeprograms.dita | 32 + samples/taskbook/configuredatabase.dita | 30 + samples/taskbook/configurestorage.dita | 35 + samples/taskbook/configurewebserver.dita | 38 + samples/taskbook/configuring.dita | 12 + samples/taskbook/databasetrouble.dita | 32 + samples/taskbook/drivetrouble.dita | 42 + samples/taskbook/insertdrive.dita | 35 + samples/taskbook/installdb.dita | 18 + samples/taskbook/installing.dita | 13 + samples/taskbook/installstorage.dita | 20 + samples/taskbook/installwebserver.dita | 19 + samples/taskbook/maintaindatabase.dita | 29 + samples/taskbook/maintaining.dita | 11 + samples/taskbook/maintainserver.dita | 31 + samples/taskbook/maintainstorage.dita | 36 + samples/taskbook/notices.dita | 29 + samples/taskbook/replacecover.dita | 29 + samples/taskbook/restart.dita | 39 + samples/taskbook/runsetup.dita | 38 + samples/taskbook/task_appendix.dita | 11 + samples/taskbook/task_preface.dita | 13 + samples/taskbook/taskbook-abstract.dita | 10 + samples/taskbook/trademarks.dita | 19 + samples/taskbook/troubleshooting.dita | 12 + samples/taskbook/unscrewcover.dita | 31 + samples/taskbook/webtrouble.dita | 33 + samples/tasks/changingtheoil.xml | 37 + samples/tasks/garagetaskoverview.xml | 9 + samples/tasks/organizing.xml | 9 + samples/tasks/shovellingsnow.xml | 27 + samples/tasks/spraypainting.xml | 32 + samples/tasks/takinggarbage.xml | 23 + samples/tasks/washingthecar.xml | 40 + samples/themes/dita-ot-docs-theme.yaml | 220 + samples/themes/dita-ot-docs_A4.yaml | 4 + samples/themes/dita-ot-docs_Letter.yaml | 4 + samples/themes/dita-ot-logo-inverse.svg | 1 + settings.gradle | 1 + site.ditamap | 9 + topics/Test.dita | 14 + topics/adding-new-languages.dita | 98 + topics/adding-new-strings.dita | 121 + topics/adding-plugins.dita | 25 + topics/ant.dita | 30 + topics/building-output.dita | 8 + topics/building-with-ant.dita | 61 + topics/configuring-proxies.dita | 73 + topics/creating-an-ant-build-script.dita | 106 + topics/creating-docker-images.dita | 122 + topics/creating-plugins.ditamap | 8 + topics/custom-plugins.dita | 26 + topics/customizing.dita | 41 + topics/determining-version-of-ditaot.dita | 43 + topics/dita-and-dita-ot-resources.dita | 11 + topics/dita-command-help.dita | 50 + topics/dita-ot-day-2014.ditamap | 129 + topics/dita-ot-day-2015.ditamap | 151 + topics/dita-ot-day-2016.ditamap | 136 + topics/dita-ot-day-2017.ditamap | 138 + topics/dita-ot-day-2018.ditamap | 152 + topics/dita-ot-day-2019.ditamap | 140 + topics/dita-ot-day-2022.ditamap | 118 + topics/dita-ot-day-2024.ditamap | 33 + topics/dita-ot-day-videos-intro-2014.dita | 17 + topics/dita-ot-day-videos-intro-2015.dita | 17 + topics/dita-ot-day-videos-intro-2016.dita | 17 + topics/dita-ot-day-videos-intro-2017.dita | 17 + topics/dita-ot-day-videos-intro-2018.dita | 17 + topics/dita-ot-day-videos-intro-2019.dita | 18 + topics/dita-ot-day-videos-intro-2022.dita | 17 + topics/dita-ot-day-videos-intro-2024.dita | 17 + topics/dita-ot-day-videos.dita | 13 + topics/dita-ot-day-videos.ditamap | 17 + topics/dita-resources.ditamap | 51 + topics/dita-xml-input.dita | 16 + topics/dita2dita.dita | 67 + topics/dita2eclipsehelp.dita | 64 + topics/dita2html5.dita | 47 + topics/dita2htmlhelp.dita | 71 + topics/dita2markdown.dita | 61 + topics/dita2pdf.dita | 35 + topics/dita2xhtml.dita | 43 + topics/enabling-debug-mode.dita | 55 + topics/error-messages-details.xml | 872 ++ topics/globalization-languages.dita | 331 + topics/globalization-support.dita | 67 + topics/globalization.dita | 24 + topics/globalizing.ditamap | 15 + topics/html-customization-css.dita | 70 + topics/html-customization-header.dita | 76 + topics/html-customization-navigation.dita | 68 + topics/html-customization-parameters.dita | 20 + .../html-customization-plugin-bundle-css.dita | 130 + .../html-customization-plugin-javascript.dita | 139 + topics/html-customization-plugin-webfont.dita | 163 + topics/html-customization-plugins.dita | 33 + .../html-customization-properties-file.dita | 63 + topics/html-customization.dita | 23 + topics/html-customization.ditamap | 26 + ...plement-saxon-collation-uri-resolvers.dita | 102 + topics/implement-saxon-customizations.dita | 71 + .../implement-saxon-extension-functions.dita | 63 + topics/increasing-the-jvm.dita | 66 + topics/input-formats.dita | 30 + topics/input-formats.ditamap | 13 + topics/installing-client.dita | 63 + topics/installing-via-homebrew.dita | 90 + topics/installing.ditamap | 32 + topics/logging.dita | 146 + topics/lwdita-input.dita | 112 + topics/markdown-input.dita | 74 + topics/migrating-ant-to-dita.dita | 123 + topics/migrating-to-1.5.4.dita | 197 + topics/migrating-to-1.6.dita | 208 + topics/migrating-to-1.7.dita | 110 + topics/migrating-to-1.8.dita | 139 + topics/migrating-to-2.0.dita | 78 + topics/migrating-to-2.1.dita | 190 + topics/migrating-to-2.2.dita | 89 + topics/migrating-to-2.3.dita | 168 + topics/migrating-to-2.4.dita | 116 + topics/migrating-to-2.5.dita | 103 + topics/migrating-to-3.0.dita | 89 + topics/migrating-to-3.1.dita | 101 + topics/migrating-to-3.2.dita | 62 + topics/migrating-to-3.3.dita | 121 + topics/migrating-to-3.4.dita | 98 + topics/migrating-to-3.5.dita | 156 + topics/migrating-to-3.6.dita | 110 + topics/migrating-to-3.7.dita | 129 + topics/migrating-to-4.0.dita | 70 + topics/migrating-to-4.1.dita | 32 + topics/migrating-to-4.2.dita | 95 + topics/migration.dita | 33 + topics/migration.ditamap | 31 + topics/other-errors.dita | 62 + topics/output-formats.dita | 27 + topics/overriding-strings.dita | 95 + topics/pdf-customization-approaches.dita | 97 + topics/pdf-customization-example.dita | 138 + topics/pdf-customization-plugin-types.dita | 36 + topics/pdf-customization-plugins.dita | 19 + topics/pdf-customization-resources.dita | 74 + topics/pdf-customization.dita | 37 + topics/pdf-customization.ditamap | 41 + topics/pdf-plugin-structure.dita | 114 + .../pdf-plugin-structure_common-artwork.dita | 28 + topics/pdf-plugin-structure_common-index.dita | 40 + topics/pdf-plugin-structure_common-vars.dita | 45 + topics/pdf-plugin-structure_fo-attrs.dita | 35 + topics/pdf-plugin-structure_fo-i18n.dita | 41 + topics/pdf-plugin-structure_fo-xsl.dita | 19 + topics/pdf-themes.dita | 32 + topics/pdf-themes.ditamap | 15 + topics/pdf2-creating-change-bars.dita | 84 + topics/plug-ins.ditamap | 143 + topics/plugin-addgeneratedtext.dita | 65 + topics/plugin-antpreprocess.dita | 67 + topics/plugin-anttarget.dita | 55 + topics/plugin-benefits.dita | 31 + topics/plugin-coding-conventions.dita | 226 + topics/plugin-configfile.dita | 394 + topics/plugin-dependencies.dita | 60 + topics/plugin-javalib.dita | 103 + topics/plugin-messages.dita | 109 + topics/plugin-newextensions.dita | 160 + topics/plugin-newtranstype.dita | 100 + topics/plugin-overridestyle.dita | 74 + topics/plugin-preprocess-xslt.dita | 90 + topics/plugin-rewrite-rules.dita | 59 + topics/plugin-set-parameters.dita | 64 + topics/plugin-use-cases.dita | 16 + topics/plugin-xmlcatalog.dita | 74 + topics/plugin-xsltparams.dita | 79 + topics/plugins-installing.dita | 41 + topics/plugins-registry.dita | 278 + topics/plugins-removing.dita | 36 + topics/prerequisite-software.dita | 79 + topics/project-files-json.dita | 47 + topics/project-files-xml.dita | 81 + topics/project-files-yaml.dita | 47 + topics/publishing-reltables.ditamap | 77 + topics/publishing-with-ant.dita | 19 + topics/publishing.ditamap | 39 + topics/rebuilding-docs.dita | 59 + topics/reducing-processing-time.dita | 94 + topics/referencing-other-plugins.dita | 95 + topics/release-history.dita | 13 + topics/sample-pdf-theme.dita | 156 + topics/transformations.ditamap | 15 + topics/troubleshooting-overview.dita | 11 + topics/troubleshooting.ditamap | 16 + topics/using-dita-command.dita | 94 + topics/using-dita-properties-file.dita | 89 + topics/using-docker-images.dita | 113 + topics/using-github-actions.dita | 99 + topics/using-plugins.ditamap | 25 + topics/using-project-files.dita | 161 + topics/web-based-resources.dita | 73 + userguide-book.ditamap | 65 + userguide.ditamap | 37 + 491 files changed, 57923 insertions(+) create mode 100644 .editorconfig create mode 100644 .git-blame-ignore-revs create mode 100644 .gitattributes create mode 100644 .github/CONTRIBUTING.md create mode 100644 .github/actions/render/action.yml create mode 100644 .github/dependabot.yml create mode 100644 .github/no-response.yml create mode 100644 .github/stale.yml create mode 100644 .github/workflows/clean.rb create mode 100644 .github/workflows/deploy.yml create mode 100644 .github/workflows/gradle-wrapper-validation.yml create mode 100644 .github/workflows/prettier.yml create mode 100644 .github/workflows/preview.yml create mode 100644 .github/workflows/release.yml create mode 100644 .gitignore create mode 100644 .husky/pre-commit create mode 100644 .nvmrc create mode 100644 .oxygen/frameworks/dita/resources/idGenerationDefaultOptions.xml create mode 100644 .prettierignore create mode 100644 .prettierrc.yml create mode 100644 DITA-OT_docs.xpr create mode 100644 LICENSE.md create mode 100644 README.md create mode 100644 build.gradle create mode 100644 extension-points/extension-points-by-plugin.dita create mode 100644 extension-points/extension-points-details.dita create mode 100644 extension-points/extension-points.ditamap create mode 100644 extension-points/plugin-extension-points-general.dita create mode 100644 extension-points/plugin-extension-points-pre-processing.dita create mode 100644 extension-points/plugin-extension-points-support.dita create mode 100644 extension-points/plugin-extension-points-xslt-import.dita create mode 100644 extension-points/plugin-extension-points-xslt-parameters.dita create mode 100644 extension-points/plugin-extension-points.dita create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 index.dita create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 parameters/ant-parameters-details.dita create mode 100644 parameters/configuration-properties-file.dita create mode 100644 parameters/configuration-properties.dita create mode 100644 parameters/dita-command-arguments.dita create mode 100644 parameters/generate-copy-outer.dita create mode 100644 parameters/index.dita create mode 100644 parameters/internal-ant-properties.dita create mode 100644 parameters/local-properties-file.dita create mode 100644 parameters/parameters.ditamap create mode 100644 parameters/parameters_intro.dita create mode 100644 parameters/plugin-properties-file.dita create mode 100644 reference/architecture.dita create mode 100644 reference/books.dita create mode 100644 reference/common-html-processing.dita create mode 100644 reference/dita-spec-support.dita create mode 100644 reference/dita-v1-2-support.dita create mode 100644 reference/dita-v1-3-support.dita create mode 100644 reference/dita-v2-0-support.dita create mode 100644 reference/docs-dita-features.dita create mode 100644 reference/eclipsehelp-processing.dita create mode 100644 reference/extended-functionality.dita create mode 100644 reference/flagging-migration.dita create mode 100644 reference/gloss-argument.dita create mode 100644 reference/gloss-dita-open-toolkit.dita create mode 100644 reference/gloss-extension-point.dita create mode 100644 reference/gloss-option.dita create mode 100644 reference/gloss-output-format.dita create mode 100644 reference/gloss-parameter.dita create mode 100644 reference/gloss-plug-in.dita create mode 100644 reference/gloss-processor.dita create mode 100644 reference/gloss-property.dita create mode 100644 reference/gloss-template-plugin.dita create mode 100644 reference/gloss-template-xslt.dita create mode 100644 reference/gloss-transformation-type.dita create mode 100644 reference/gloss-transtype.dita create mode 100644 reference/gloss-variable.dita create mode 100644 reference/glossary.dita create mode 100644 reference/glossary.ditamap create mode 100644 reference/html-based-processing.dita create mode 100644 reference/html5-processing.dita create mode 100644 reference/htmlhelp-processing.dita create mode 100644 reference/images/processing-flow.graffle create mode 100644 reference/images/processing-flow.svg create mode 100644 reference/images/sample-project-filtering-scenario.svg create mode 100644 reference/implementation-dependent-features.dita create mode 100644 reference/index.dita create mode 100644 reference/java-api.dita create mode 100644 reference/license.dita create mode 100644 reference/license.ditamap create mode 100644 reference/map-first-preprocessing.dita create mode 100644 reference/markdown-formats.dita create mode 100644 reference/markdown-formats.ditamap create mode 100644 reference/markdown/.gitrepo create mode 100644 reference/markdown/Common-syntax.md create mode 100644 reference/markdown/Custom-schemas.md create mode 100644 reference/markdown/Format-comparison.md create mode 100644 reference/markdown/Home.md create mode 100644 reference/markdown/Installing.md create mode 100644 reference/markdown/MDITA-syntax.md create mode 100644 reference/markdown/Markdown-DITA-syntax.md create mode 100644 reference/markdown/Markdown-schemas.md create mode 100644 reference/markdown/Usage.md create mode 100644 reference/pdf-transform.dita create mode 100644 reference/pdf-transformation-history.dita create mode 100644 reference/preprocess-branch-filter.dita create mode 100644 reference/preprocess-chunk.dita create mode 100644 reference/preprocess-clean-map.dita create mode 100644 reference/preprocess-conref.dita create mode 100644 reference/preprocess-conrefpush.dita create mode 100644 reference/preprocess-copy-to.dita create mode 100644 reference/preprocess-copyfiles.dita create mode 100644 reference/preprocess-debugfilter.dita create mode 100644 reference/preprocess-flagging.dita create mode 100644 reference/preprocess-genlist.dita create mode 100644 reference/preprocess-keyref.dita create mode 100644 reference/preprocess-maplink.dita create mode 100644 reference/preprocess-mapref.dita create mode 100644 reference/preprocess-metadata.dita create mode 100644 reference/preprocess-profile.dita create mode 100644 reference/preprocess-topic-fragment.dita create mode 100644 reference/preprocess-topicpull.dita create mode 100644 reference/preprocessing.dita create mode 100644 reference/processing-order.dita create mode 100644 reference/processing-pipeline-modules.dita create mode 100644 reference/processing-structure.dita create mode 100644 reference/reference.ditamap create mode 100644 reference/store-api.dita create mode 100644 reference/third-party-software.dita create mode 100644 reference/xhtml-processing.dita create mode 100644 release-notes/changes.ditamap create mode 100644 release-notes/history.dita create mode 100644 release-notes/index.dita create mode 100644 release-notes/rel1.0.1.dita create mode 100644 release-notes/rel1.0.2.dita create mode 100644 release-notes/rel1.0.dita create mode 100644 release-notes/rel1.1.1.dita create mode 100644 release-notes/rel1.1.2.1.dita create mode 100644 release-notes/rel1.1.2.dita create mode 100644 release-notes/rel1.1.dita create mode 100644 release-notes/rel1.2.1.dita create mode 100644 release-notes/rel1.2.2.dita create mode 100644 release-notes/rel1.2.dita create mode 100644 release-notes/rel1.3.1.dita create mode 100644 release-notes/rel1.3.dita create mode 100644 release-notes/rel1.4.1.dita create mode 100644 release-notes/rel1.4.2.1.dita create mode 100644 release-notes/rel1.4.2.dita create mode 100644 release-notes/rel1.4.3.dita create mode 100644 release-notes/rel1.4.dita create mode 100644 release-notes/rel1.5.1.dita create mode 100644 release-notes/rel1.5.2.dita create mode 100644 release-notes/rel1.5.3.dita create mode 100644 release-notes/rel1.5.4.dita create mode 100644 release-notes/rel1.5.dita create mode 100644 release-notes/rel1.6.dita create mode 100644 release-notes/rel1.7.dita create mode 100644 release-notes/rel1.8.dita create mode 100644 release-notes/rel2.0.dita create mode 100644 release-notes/rel2.1.dita create mode 100644 release-notes/rel2.2.dita create mode 100644 release-notes/rel2.3.dita create mode 100644 release-notes/rel2.4.dita create mode 100644 release-notes/rel2.5.dita create mode 100644 release-notes/rel3.0.dita create mode 100644 release-notes/rel3.1.dita create mode 100644 release-notes/rel3.2.dita create mode 100644 release-notes/rel3.3.dita create mode 100644 release-notes/rel3.4.dita create mode 100644 release-notes/rel3.5.dita create mode 100644 release-notes/rel3.6.dita create mode 100644 release-notes/rel3.7.dita create mode 100644 release-notes/rel4.0.dita create mode 100644 release-notes/rel4.1.dita create mode 100644 resources/common-resources.ditamap create mode 100644 resources/common-toc.ditamap create mode 100644 resources/conref-task.dita create mode 100644 resources/dita-ot-day-video-keys.ditamap create mode 100644 resources/dita-ot-doc.css create mode 100644 resources/ditaotdaykeys/all-conferences.ditaval create mode 100644 resources/ditaotdaykeys/dita-ot-day-2014-keys.ditamap create mode 100644 resources/ditaotdaykeys/dita-ot-day-2015-keys.ditamap create mode 100644 resources/ditaotdaykeys/dita-ot-day-2016-keys.ditamap create mode 100644 resources/ditaotdaykeys/dita-ot-day-2017-keys.ditamap create mode 100644 resources/ditaotdaykeys/dita-ot-day-2018-keys.ditamap create mode 100644 resources/ditaotdaykeys/dita-ot-day-2019-keys.ditamap create mode 100644 resources/ditaotdaykeys/dita-ot-day-2022-keys.ditamap create mode 100644 resources/ditaotdaykeys/dita-ot-day-2024-keys.ditamap create mode 100644 resources/expert.ditaval create mode 100644 resources/extension-points.xsl create mode 100644 resources/external-links.ditamap create mode 100644 resources/fact.hs create mode 100644 resources/header.xml create mode 100644 resources/html.ditaval create mode 100644 resources/key-definitions.ditamap create mode 100644 resources/messages.xsl create mode 100644 resources/novice.ditaval create mode 100644 resources/params.xsl create mode 100644 resources/pdf.ditaval create mode 100644 resources/properties-file.xsl create mode 100644 resources/reltable.ditamap create mode 100644 resources/reusable-components.dita create mode 100644 resources/site.ditaval create mode 100644 resources/source-files.ditamap create mode 100644 resources/subjectscheme-deliverytarget.ditamap create mode 100644 resources/subjectscheme-outputclass.ditamap create mode 100644 resources/subjectscheme.ditamap create mode 100644 resources/theme/.gitrepo create mode 100644 resources/theme/Extending-themes.md create mode 100644 resources/theme/FAQ.md create mode 100644 resources/theme/Header-and-footer.md create mode 100644 resources/theme/Home.md create mode 100644 resources/theme/How-to.md create mode 100644 resources/theme/Page-settings.md create mode 100644 resources/theme/Styles.md create mode 100644 resources/theme/Syntactic-sugar.md create mode 100644 resources/theme/Theme.md create mode 100644 resources/theme/Variables.md create mode 100644 resources/theme/duplex.recto.png create mode 100644 resources/theme/duplex.verso.png create mode 100644 resources/theme/header-image.svg create mode 100644 resources/theme/simplex.png create mode 100644 samples/ant_sample/build-chm-pdf-hybrid.xml create mode 100644 samples/ant_sample/build-chm-pdf.xml create mode 100644 samples/ant_sample/dita-cmd.xml create mode 100644 samples/ant_sample/sample_all.xml create mode 100644 samples/ant_sample/sample_eclipsehelp.xml create mode 100644 samples/ant_sample/sample_html5.xml create mode 100644 samples/ant_sample/sample_htmlhelp.xml create mode 100644 samples/ant_sample/sample_pdf.xml create mode 100644 samples/ant_sample/sample_xhtml_plus_css.xml create mode 100644 samples/ant_sample/template_eclipsehelp.xml create mode 100644 samples/ant_sample/template_htmlhelp.xml create mode 100644 samples/ant_sample/template_pdf.xml create mode 100644 samples/concepts/garageconceptsoverview.xml create mode 100644 samples/concepts/lawnmower.xml create mode 100644 samples/concepts/oil.xml create mode 100644 samples/concepts/paint.xml create mode 100644 samples/concepts/shelving.xml create mode 100644 samples/concepts/snowshovel.xml create mode 100644 samples/concepts/toolbox.xml create mode 100644 samples/concepts/tools.xml create mode 100644 samples/concepts/waterhose.xml create mode 100644 samples/concepts/wheelbarrow.xml create mode 100644 samples/concepts/workbench.xml create mode 100644 samples/concepts/wwfluid.xml create mode 100644 samples/css/style.css create mode 100644 samples/docker/Dockerfile create mode 100644 samples/github-actions/build-using-a-project-file.yaml create mode 100644 samples/github-actions/build-with-commands.yaml create mode 100644 samples/github-actions/dita-ot-pipeline.yaml create mode 100644 samples/github-actions/install-using-bash-script.yaml create mode 100644 samples/github-actions/install-using-commands.yaml create mode 100644 samples/github-actions/install-using-plugins.yaml create mode 100644 samples/github-actions/minimal-action.yaml create mode 100644 samples/hierarchy.ditamap create mode 100644 samples/image/carwash.jpg create mode 100644 samples/plugins/com.example.html5-custom-css/build_html5-custom-css.xml create mode 100644 samples/plugins/com.example.html5-custom-css/css/custom.css create mode 100644 samples/plugins/com.example.html5-custom-css/plugin.xml create mode 100644 samples/plugins/com.example.html5-javascript/build_html5-javascript.xml create mode 100644 samples/plugins/com.example.html5-javascript/include/javascript.ftr.xml create mode 100644 samples/plugins/com.example.html5-javascript/plugin.xml create mode 100644 samples/plugins/com.example.html5-webfont/build_html5-webfont.xml create mode 100644 samples/plugins/com.example.html5-webfont/css/custom.css create mode 100644 samples/plugins/com.example.html5-webfont/include/webfont.hdf.xml create mode 100644 samples/plugins/com.example.html5-webfont/plugin.xml create mode 100644 samples/plugins/com.example.print-pdf/cfg/catalog.xml create mode 100644 samples/plugins/com.example.print-pdf/cfg/common/vars/en.xml create mode 100644 samples/plugins/com.example.print-pdf/cfg/fo/attrs/custom.xsl create mode 100644 samples/plugins/com.example.print-pdf/cfg/fo/xsl/custom.xsl create mode 100644 samples/plugins/com.example.print-pdf/integrator.xml create mode 100644 samples/plugins/com.example.print-pdf/plugin.xml create mode 100644 samples/project-files/all.xml create mode 100644 samples/project-files/common.json create mode 100644 samples/project-files/common.xml create mode 100644 samples/project-files/common.yaml create mode 100644 samples/project-files/distribution-docs.xml create mode 100644 samples/project-files/html.json create mode 100644 samples/project-files/html.xml create mode 100644 samples/project-files/html.yaml create mode 100644 samples/project-files/htmlhelp.xml create mode 100644 samples/project-files/param-override.xml create mode 100644 samples/project-files/pdf.xml create mode 100644 samples/properties/chm.properties create mode 100644 samples/properties/pdf.properties create mode 100644 samples/properties/sequence-html5.properties create mode 100644 samples/sequence.ditamap create mode 100644 samples/taskbook.ditamap create mode 100644 samples/taskbook/closeprograms.dita create mode 100644 samples/taskbook/configuredatabase.dita create mode 100644 samples/taskbook/configurestorage.dita create mode 100644 samples/taskbook/configurewebserver.dita create mode 100644 samples/taskbook/configuring.dita create mode 100644 samples/taskbook/databasetrouble.dita create mode 100644 samples/taskbook/drivetrouble.dita create mode 100644 samples/taskbook/insertdrive.dita create mode 100644 samples/taskbook/installdb.dita create mode 100644 samples/taskbook/installing.dita create mode 100644 samples/taskbook/installstorage.dita create mode 100644 samples/taskbook/installwebserver.dita create mode 100644 samples/taskbook/maintaindatabase.dita create mode 100644 samples/taskbook/maintaining.dita create mode 100644 samples/taskbook/maintainserver.dita create mode 100644 samples/taskbook/maintainstorage.dita create mode 100644 samples/taskbook/notices.dita create mode 100644 samples/taskbook/replacecover.dita create mode 100644 samples/taskbook/restart.dita create mode 100644 samples/taskbook/runsetup.dita create mode 100644 samples/taskbook/task_appendix.dita create mode 100644 samples/taskbook/task_preface.dita create mode 100644 samples/taskbook/taskbook-abstract.dita create mode 100644 samples/taskbook/trademarks.dita create mode 100644 samples/taskbook/troubleshooting.dita create mode 100644 samples/taskbook/unscrewcover.dita create mode 100644 samples/taskbook/webtrouble.dita create mode 100644 samples/tasks/changingtheoil.xml create mode 100644 samples/tasks/garagetaskoverview.xml create mode 100644 samples/tasks/organizing.xml create mode 100644 samples/tasks/shovellingsnow.xml create mode 100644 samples/tasks/spraypainting.xml create mode 100644 samples/tasks/takinggarbage.xml create mode 100644 samples/tasks/washingthecar.xml create mode 100644 samples/themes/dita-ot-docs-theme.yaml create mode 100644 samples/themes/dita-ot-docs_A4.yaml create mode 100644 samples/themes/dita-ot-docs_Letter.yaml create mode 100644 samples/themes/dita-ot-logo-inverse.svg create mode 100644 settings.gradle create mode 100644 site.ditamap create mode 100644 topics/Test.dita create mode 100644 topics/adding-new-languages.dita create mode 100644 topics/adding-new-strings.dita create mode 100644 topics/adding-plugins.dita create mode 100644 topics/ant.dita create mode 100644 topics/building-output.dita create mode 100644 topics/building-with-ant.dita create mode 100644 topics/configuring-proxies.dita create mode 100644 topics/creating-an-ant-build-script.dita create mode 100644 topics/creating-docker-images.dita create mode 100644 topics/creating-plugins.ditamap create mode 100644 topics/custom-plugins.dita create mode 100644 topics/customizing.dita create mode 100644 topics/determining-version-of-ditaot.dita create mode 100644 topics/dita-and-dita-ot-resources.dita create mode 100644 topics/dita-command-help.dita create mode 100644 topics/dita-ot-day-2014.ditamap create mode 100644 topics/dita-ot-day-2015.ditamap create mode 100644 topics/dita-ot-day-2016.ditamap create mode 100644 topics/dita-ot-day-2017.ditamap create mode 100644 topics/dita-ot-day-2018.ditamap create mode 100644 topics/dita-ot-day-2019.ditamap create mode 100644 topics/dita-ot-day-2022.ditamap create mode 100644 topics/dita-ot-day-2024.ditamap create mode 100644 topics/dita-ot-day-videos-intro-2014.dita create mode 100644 topics/dita-ot-day-videos-intro-2015.dita create mode 100644 topics/dita-ot-day-videos-intro-2016.dita create mode 100644 topics/dita-ot-day-videos-intro-2017.dita create mode 100644 topics/dita-ot-day-videos-intro-2018.dita create mode 100644 topics/dita-ot-day-videos-intro-2019.dita create mode 100644 topics/dita-ot-day-videos-intro-2022.dita create mode 100644 topics/dita-ot-day-videos-intro-2024.dita create mode 100644 topics/dita-ot-day-videos.dita create mode 100644 topics/dita-ot-day-videos.ditamap create mode 100644 topics/dita-resources.ditamap create mode 100644 topics/dita-xml-input.dita create mode 100644 topics/dita2dita.dita create mode 100644 topics/dita2eclipsehelp.dita create mode 100644 topics/dita2html5.dita create mode 100644 topics/dita2htmlhelp.dita create mode 100644 topics/dita2markdown.dita create mode 100644 topics/dita2pdf.dita create mode 100644 topics/dita2xhtml.dita create mode 100644 topics/enabling-debug-mode.dita create mode 100644 topics/error-messages-details.xml create mode 100644 topics/globalization-languages.dita create mode 100644 topics/globalization-support.dita create mode 100644 topics/globalization.dita create mode 100644 topics/globalizing.ditamap create mode 100644 topics/html-customization-css.dita create mode 100644 topics/html-customization-header.dita create mode 100644 topics/html-customization-navigation.dita create mode 100644 topics/html-customization-parameters.dita create mode 100644 topics/html-customization-plugin-bundle-css.dita create mode 100644 topics/html-customization-plugin-javascript.dita create mode 100644 topics/html-customization-plugin-webfont.dita create mode 100644 topics/html-customization-plugins.dita create mode 100644 topics/html-customization-properties-file.dita create mode 100644 topics/html-customization.dita create mode 100644 topics/html-customization.ditamap create mode 100644 topics/implement-saxon-collation-uri-resolvers.dita create mode 100644 topics/implement-saxon-customizations.dita create mode 100644 topics/implement-saxon-extension-functions.dita create mode 100644 topics/increasing-the-jvm.dita create mode 100644 topics/input-formats.dita create mode 100644 topics/input-formats.ditamap create mode 100644 topics/installing-client.dita create mode 100644 topics/installing-via-homebrew.dita create mode 100644 topics/installing.ditamap create mode 100644 topics/logging.dita create mode 100644 topics/lwdita-input.dita create mode 100644 topics/markdown-input.dita create mode 100644 topics/migrating-ant-to-dita.dita create mode 100644 topics/migrating-to-1.5.4.dita create mode 100644 topics/migrating-to-1.6.dita create mode 100644 topics/migrating-to-1.7.dita create mode 100644 topics/migrating-to-1.8.dita create mode 100644 topics/migrating-to-2.0.dita create mode 100644 topics/migrating-to-2.1.dita create mode 100644 topics/migrating-to-2.2.dita create mode 100644 topics/migrating-to-2.3.dita create mode 100644 topics/migrating-to-2.4.dita create mode 100644 topics/migrating-to-2.5.dita create mode 100644 topics/migrating-to-3.0.dita create mode 100644 topics/migrating-to-3.1.dita create mode 100644 topics/migrating-to-3.2.dita create mode 100644 topics/migrating-to-3.3.dita create mode 100644 topics/migrating-to-3.4.dita create mode 100644 topics/migrating-to-3.5.dita create mode 100644 topics/migrating-to-3.6.dita create mode 100644 topics/migrating-to-3.7.dita create mode 100644 topics/migrating-to-4.0.dita create mode 100644 topics/migrating-to-4.1.dita create mode 100644 topics/migrating-to-4.2.dita create mode 100644 topics/migration.dita create mode 100644 topics/migration.ditamap create mode 100644 topics/other-errors.dita create mode 100644 topics/output-formats.dita create mode 100644 topics/overriding-strings.dita create mode 100644 topics/pdf-customization-approaches.dita create mode 100644 topics/pdf-customization-example.dita create mode 100644 topics/pdf-customization-plugin-types.dita create mode 100644 topics/pdf-customization-plugins.dita create mode 100644 topics/pdf-customization-resources.dita create mode 100644 topics/pdf-customization.dita create mode 100644 topics/pdf-customization.ditamap create mode 100644 topics/pdf-plugin-structure.dita create mode 100644 topics/pdf-plugin-structure_common-artwork.dita create mode 100644 topics/pdf-plugin-structure_common-index.dita create mode 100644 topics/pdf-plugin-structure_common-vars.dita create mode 100644 topics/pdf-plugin-structure_fo-attrs.dita create mode 100644 topics/pdf-plugin-structure_fo-i18n.dita create mode 100644 topics/pdf-plugin-structure_fo-xsl.dita create mode 100644 topics/pdf-themes.dita create mode 100644 topics/pdf-themes.ditamap create mode 100644 topics/pdf2-creating-change-bars.dita create mode 100644 topics/plug-ins.ditamap create mode 100644 topics/plugin-addgeneratedtext.dita create mode 100644 topics/plugin-antpreprocess.dita create mode 100644 topics/plugin-anttarget.dita create mode 100644 topics/plugin-benefits.dita create mode 100644 topics/plugin-coding-conventions.dita create mode 100644 topics/plugin-configfile.dita create mode 100644 topics/plugin-dependencies.dita create mode 100644 topics/plugin-javalib.dita create mode 100644 topics/plugin-messages.dita create mode 100644 topics/plugin-newextensions.dita create mode 100644 topics/plugin-newtranstype.dita create mode 100644 topics/plugin-overridestyle.dita create mode 100644 topics/plugin-preprocess-xslt.dita create mode 100644 topics/plugin-rewrite-rules.dita create mode 100644 topics/plugin-set-parameters.dita create mode 100644 topics/plugin-use-cases.dita create mode 100644 topics/plugin-xmlcatalog.dita create mode 100644 topics/plugin-xsltparams.dita create mode 100644 topics/plugins-installing.dita create mode 100644 topics/plugins-registry.dita create mode 100644 topics/plugins-removing.dita create mode 100644 topics/prerequisite-software.dita create mode 100644 topics/project-files-json.dita create mode 100644 topics/project-files-xml.dita create mode 100644 topics/project-files-yaml.dita create mode 100644 topics/publishing-reltables.ditamap create mode 100644 topics/publishing-with-ant.dita create mode 100644 topics/publishing.ditamap create mode 100644 topics/rebuilding-docs.dita create mode 100644 topics/reducing-processing-time.dita create mode 100644 topics/referencing-other-plugins.dita create mode 100644 topics/release-history.dita create mode 100644 topics/sample-pdf-theme.dita create mode 100644 topics/transformations.ditamap create mode 100644 topics/troubleshooting-overview.dita create mode 100644 topics/troubleshooting.ditamap create mode 100644 topics/using-dita-command.dita create mode 100644 topics/using-dita-properties-file.dita create mode 100644 topics/using-docker-images.dita create mode 100644 topics/using-github-actions.dita create mode 100644 topics/using-plugins.ditamap create mode 100644 topics/using-project-files.dita create mode 100644 topics/web-based-resources.dita create mode 100644 userguide-book.ditamap create mode 100644 userguide.ditamap diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..05c40e3 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,24 @@ +# editorconfig.org + +root = true + +[*] +charset = utf-8 +# Leave line endings to Git: `core.autocrlf` +# & `.gitattributes` text=auto normalization +# end_of_line = lf +indent_size = 2 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +# Preserve trailing space in Markdown +# > When you do want to insert a
break tag using Markdown, +# > you end a line with two or more spaces, then type return. + +[*.md, *.mdown, *.markdown] +trim_trailing_whitespace = false + +[.git/config] +# Prevent mixed indentation in Git config (Git commands insert tabs) +indent_style = tab diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 0000000..00095e8 --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,26 @@ +# List of commits to ignore during blame + +# Set your local config to use this file +# $ git config blame.ignoreRevsFile .git-blame-ignore-revs + +# Format: 1 unabbreviated SHA-1 per line + +# Batch format & indent files 2019-11-13 +530b8c28ae4d24b392c77b81ca45605cc09a8427 + +# Initial Prettier setup run: 2020-09-26 +76c423f4b020096626d803db1afea3896033413e + +# Subsequent Prettier formatting commits +b2d430307b1cae70e391cbc71cf7e9cdd02652e5 +c734de7bcabac40513752fb0a9c4ce79869be7da +b79e3346415ba66544bd7fe8439272f6e130ce3c +71b3285875cb65b3bd23dc98152f03752cd6f08d + +# Miscellaneous other formatting commits +9213e9277cf7c713607b277adc795c99a0a50332 + +# [1]: https://git-scm.com/docs/git-blame#Documentation/git-blame.txt---ignore-revltrevgt +# [2]: https://black.readthedocs.io/en/hello-furo/guides/introducing_black_to_your_project.html#avoiding-ruining-git-blame +# [3]: https://www.moxio.com/blog/43/ignoring-bulk-change-commits-with-git-blame +# [4]: https://docs.github.com/en/repositories/working-with-files/using-files/viewing-a-file#ignore-commits-in-the-blame-view diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..7084f5b --- /dev/null +++ b/.gitattributes @@ -0,0 +1,52 @@ +# Handle line endings per + +# Set the default behavior, in case `core.autocrlf` isn’t set +# (auto-detect text files and perform LF normalization): +* text=auto + +# Normalize text files & convert to native line endings on checkout: +*.css text +*.dita* text +*.dtd text +*.ent text +*.htm text diff=html +*.html text diff=html +*.js text +*.less text +*.md text +*.mod text +*.properties text +*.sass text +*.scss text +*.txt text +*.xml text +*.xsd text +*.xsl text + +# Files that should always have Windows CRLF line endings on checkout: +*.bat text eol=crlf +*.cmd text eol=crlf + +# Files that should always have UNIX LF line endings on checkout: +*.sh text eol=lf + +# These files are binary and should be left untouched: +*.ico binary +*.jpeg binary +*.jpg binary +*.png binary +# Fonts +*.eot binary +*.otf binary +*.ttf binary +*.woff binary + +# Diff text content of Word files & similar formats as plain text: +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000..02171fb --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,97 @@ +# Contributing to the DITA-OT docs + +We welcome your contributions to the DITA-OT documentation. + +Thanks for your interest — here’s how you can help us _“write the docs.”_ + +## Creating an issue + +If you find a bug or would like to suggest a new topic for the DITA-OT docs, create an issue: + +1. Search [dita-ot/docs/issues][1] to ensure your issue hasn’t already been reported. +2. [Create an issue][2]. If it’s a bug, provide steps to recreate the issue. +3. [Send a pull request][3]. If you know how to fix the issue yourself, submit a pull request with the proposed changes. + +_Read on for details…_ + +## Submitting pull requests + +Good pull requests—corrections, improvements, new topics—are a great help. They should remain focused in scope and shouldn’t contain unrelated commits. + +Follow this process to ensure your contribution meets our expectations and increase the chances that your changes will be included: + +1. [Fork][4] the docs repository, clone your fork, and configure the remotes: + + ```bash + # Clone your docs fork into the current directory + git clone https://github.com//docs + + # Navigate to the newly cloned directory + cd docs + + # Assign the original repo to a remote called "upstream" + git remote add upstream https://github.com/dita-ot/docs + ``` + +2. If you cloned a while ago, get the latest changes from upstream: + + ```bash + git checkout develop + git pull upstream develop + ``` + +3. Create a new feature branch _(off the upstream project’s `develop` branch)_ for your new feature, change, or fix: + + ```bash + git checkout -b your-new-branch + ``` + +4. Commit your changes in logical chunks. + + Please be sure to follow the [coding guidelines][5] and [best practices][6] outlined in the docs project wiki: + + - [Test before committing][7] + - [Commit related changes][8] + - [Commit often][9] + - [Write good commit messages][10] + + Use Git’s [interactive rebase][11] feature to tidy up your commits, if necessary, before making them public. + +5. Indicate that you agree to the terms of the Apache License Version 2.0 by "[signing off][12]" your contribution with `git commit -s`. + + This adds a line with your name and e-mail address to your Git commit message: + + ```bash + Signed-off-by: Jane Doe + ``` + +6. Locally merge _(or rebase)_ the upstream `develop` branch into your feature branch: + + ```bash + git pull [--rebase] upstream develop + ``` + +7. Push your feature branch up to your fork: + + ```bash + git push origin your-new-branch + ``` + +8. [Open a pull request][3] with a clear title and description. + + **Pro tip:** If there’s no corresponding issue for the changes you're proposing, there’s no need to create one first. + You can describe the problem and provide the solution all in one step. + _(Under the hood, pull requests are just a special type of issue.)_ + +[1]: https://github.com/dita-ot/docs/issues +[2]: https://github.com/dita-ot/docs/issues/new +[3]: https://help.github.com/articles/using-pull-requests/ +[4]: https://help.github.com/articles/fork-a-repo/ +[5]: https://github.com/dita-ot/docs/wiki/Coding-guidelines +[6]: https://github.com/dita-ot/docs/wiki/Git-workflow#best-practices +[7]: https://github.com/dita-ot/docs/wiki/Git-workflow#test-before-committing +[8]: https://github.com/dita-ot/docs/wiki/Git-workflow#commit-related-changes +[9]: https://github.com/dita-ot/docs/wiki/Git-workflow#commit-often +[10]: https://github.com/dita-ot/docs/wiki/Git-workflow#writing-good-commit-messages +[11]: https://help.github.com/articles/interactive-rebase +[12]: https://www.dita-ot.org/DCO diff --git a/.github/actions/render/action.yml b/.github/actions/render/action.yml new file mode 100644 index 0000000..4405a5d --- /dev/null +++ b/.github/actions/render/action.yml @@ -0,0 +1,75 @@ +name: 'Render website' +description: 'Render dita-ot/docs into dita-ot/website' +inputs: + WEBSITE_PLUGIN_BRANCH: + description: 'Website plug-in ref' + default: 'master' + DITA_OT_VERSION: + description: 'DITA-OT version used for rendering' + default: '4.2.3' +runs: + using: 'composite' + steps: + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 17 + cache: 'gradle' + - name: Set Node.js version 12.x + uses: actions/setup-node@v4 + with: + node-version: '20.x' + cache: 'npm' + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: 2.6 + - name: Download website plug-in + shell: bash + run: | + curl -sL https://github.com/dita-ot/org.dita-ot.html/archive/refs/heads/${{ inputs.WEBSITE_PLUGIN_BRANCH }}.zip -o org.dita-ot.html.zip + - name: Cache stable DITA-OT + uses: actions/cache@v2 + with: + path: dita-ot-${{ inputs.DITA_OT_VERSION }} + key: ${{ runner.os }}-dita-ot-${{ inputs.DITA_OT_VERSION }} + - name: Download stable DITA-OT + shell: bash + run: | + if [ ! -d "dita-ot-${{ inputs.DITA_OT_VERSION }}" ]; then + curl -sL https://github.com/dita-ot/dita-ot/releases/download/${{ inputs.DITA_OT_VERSION }}/dita-ot-${{ inputs.DITA_OT_VERSION }}.zip -o dita-ot-${{ inputs.DITA_OT_VERSION }}.zip + unzip dita-ot-${{ inputs.DITA_OT_VERSION }}.zip + else + echo "Use cached dita-ot-${{ inputs.DITA_OT_VERSION }}" + fi + dita-ot-${{ inputs.DITA_OT_VERSION }}/bin/dita install org.dita-ot.html.zip --force -v + - name: Get develop DITA-OT ETag + shell: bash + run: | + curl -sI https://s3-eu-west-1.amazonaws.com/dita-ot/dita-ot-develop.zip | grep -F ETag | cut -d'"' -f 2 > dita-ot-develop.etag + - name: Cache develop DITA-OT + uses: actions/cache@v2 + with: + path: dita-ot-develop + key: ${{ runner.os }}-dita-ot-develop-${{ hashFiles('dita-ot-develop.etag') }} + restore-keys: | + ${{ runner.os }}-dita-ot-develop- + - name: Download develop DITA-OT + shell: bash + run: | + if [ ! -d "dita-ot-develop" ]; then + curl -sL https://s3-eu-west-1.amazonaws.com/dita-ot/dita-ot-develop.zip -o dita-ot-develop.zip + unzip dita-ot-develop.zip -d dita-ot-develop + else + echo "Use cached dita-ot-develop" + fi + echo "DITA_OT_DEV=$(find dita-ot-develop -name 'dita-ot-*@*' -type d | head -1)" >> $GITHUB_ENV + - name: Run DITA-OT + shell: bash + run: | + ./gradlew site \ + -PditaHome=${{ github.workspace }}/dita-ot-${{ inputs.DITA_OT_VERSION }} \ + -PoutputDir=${{ github.workspace }}/website/dev \ + -PditaHomeSrc=${{ env.DITA_OT_DEV }} \ + --info --stacktrace --no-daemon diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..4d7083b --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,15 @@ +version: 2 +updates: + - package-ecosystem: npm + directory: '/' + schedule: + interval: monthly + time: '12:00' + timezone: 'Europe/Berlin' + open-pull-requests-limit: 10 + - package-ecosystem: github-actions + directory: '/' + schedule: + interval: monthly + time: '12:00' + timezone: 'Europe/Berlin' diff --git a/.github/no-response.yml b/.github/no-response.yml new file mode 100644 index 0000000..79fba2d --- /dev/null +++ b/.github/no-response.yml @@ -0,0 +1,14 @@ +# Configuration for probot-no-response - https://github.com/probot/no-response + +# Number of days of inactivity before an Issue is closed for lack of response +daysUntilClose: 30 + +# Label requiring a response +responseRequiredLabel: need-more-info + +# Comment to post when closing an Issue for lack of response. Set to `false` to disable +closeComment: > + This issue has been automatically closed because there has been no response + to our request for more information from the original author. With only the + information that is currently in the issue, we don’t have enough to go on. + Please reach out if you have any updates that would allow us to proceed. diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 0000000..5895866 --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,52 @@ +# Configuration for probot-stale - https://github.com/probot/stale + +# Number of days of inactivity before an Issue or Pull Request becomes stale +daysUntilStale: 730 + +# Number of days of inactivity before an Issue or Pull Request with the stale label is closed. +# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale. +daysUntilClose: 14 + +# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable +exemptLabels: + - pinned + - security + +# Set to true to ignore issues in a project (defaults to false) +exemptProjects: true + +# Set to true to ignore issues in a milestone (defaults to false) +exemptMilestones: false + +# Label to use when marking as stale +staleLabel: stale + +# Comment to post when marking as stale. Set to `false` to disable +markComment: > + This issue has been automatically marked as stale because it has not been updated recently. + It will be closed soon if no further activity occurs. Thank you for your contributions. + +# Comment to post when removing the stale label. +# unmarkComment: > +# Your comment here. + +# Comment to post when closing a stale Issue or Pull Request. +# closeComment: > +# Your comment here. + +# Limit the number of actions per hour, from 1-30. Default is 30 +limitPerRun: 30 +# Limit to only `issues` or `pulls` +# only: issues + +# Optionally, specify configuration settings that are specific to just 'issues' or 'pulls': +# pulls: +# daysUntilStale: 30 +# markComment: > +# This pull request has been automatically marked as stale because it has not had +# recent activity. It will be closed if no further activity occurs. Thank you +# for your contributions. + +# issues: +# exemptLabels: +# - confirmed diff --git a/.github/workflows/clean.rb b/.github/workflows/clean.rb new file mode 100644 index 0000000..9b7011e --- /dev/null +++ b/.github/workflows/clean.rb @@ -0,0 +1,10 @@ +#!/usr/bin/env ruby + +changed = `git diff --name-only`.split("\n") +changed.each do |file| + diff = `git diff -U0 #{file}`.split("\n") + if (diff.length == 7 && diff[5].start_with?("-commit:") && diff[6].start_with?("+commit:")) + puts "Reset #{file}" + `git checkout -- #{file}` + end +end diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..f06669d --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,58 @@ +# This workflow builds changes to develop branch and commits to website repo + +name: Generate website + +on: + push: + branches: [develop] + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Check out docs + uses: actions/checkout@v4 + - name: Check out website + uses: actions/checkout@v4 + with: + repository: dita-ot/website + token: ${{ secrets.COMMITTER_TOKEN }} + path: website + + - name: Clean output + run: | + # Remove target output directory before generating new output + for i in `find "$SITE_DIR/dev" -type f`; do + if grep -q 'Generated from DITA source' "$i"; then + echo "Skip generated file $i" + elif grep -q 'generated: true' "$i"; then + echo "Skip generated file $i" + else + rm "$i" + fi + done + env: + SITE_DIR: ${{ github.workspace }}/website + + - name: Render website + uses: ./.github/actions/render + + - name: Reset unchanged + working-directory: ${{ github.workspace }}/website + run: | + ruby ${{ github.workspace }}/.github/workflows/clean.rb + + - name: Push website + working-directory: ${{ github.workspace }}/website + run: | + if [ $(git status -s | wc -l) != 0 ]; then + git config user.email "ditaotbot@gmail.com" + git config user.name "DITA-OT Bot" + git add --all + # Commit generated site output + git commit -a -m "🚀 Deploy dita-ot/docs@${GITHUB_SHA:0:7} to 'dev' docs" + # push + git push -v origin master + else + echo "Nothing to commit" + fi diff --git a/.github/workflows/gradle-wrapper-validation.yml b/.github/workflows/gradle-wrapper-validation.yml new file mode 100644 index 0000000..616013d --- /dev/null +++ b/.github/workflows/gradle-wrapper-validation.yml @@ -0,0 +1,13 @@ +# https://github.com/marketplace/actions/gradle-wrapper-validation + +name: 'Validate Gradle Wrapper' + +on: [pull_request] + +jobs: + validation: + name: 'Validation' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: gradle/wrapper-validation-action@v3 diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml new file mode 100644 index 0000000..fa67669 --- /dev/null +++ b/.github/workflows/prettier.yml @@ -0,0 +1,37 @@ +# This workflow checks code formatting + +name: Run Prettier + +# This action works with pull requests and pushes + +on: + pull_request: + push: + branches: + # Push events on development branch + - develop + +jobs: + prettier: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + # Make sure the actual branch is checked out when running on pull requests + ref: ${{ github.ref }} + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '20.x' + cache: 'npm' + + - name: Install dependencies + run: | + npm ci + + - name: Prettify code + run: | + npm run check diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml new file mode 100644 index 0000000..8b7f6ff --- /dev/null +++ b/.github/workflows/preview.yml @@ -0,0 +1,82 @@ +# This workflow builds PR changes and deploys to Netlify + +name: Generate website preview + +on: + pull_request: + branches: + - 'develop' + - 'release/*' + types: [opened, synchronize, reopened] + +jobs: + preview: + if: github.event.pull_request.head.repo.full_name == github.repository + runs-on: ubuntu-latest + env: + WEBSITE_BRANCH: 'master' + steps: + - name: Check out docs + uses: actions/checkout@v4 + - name: Check out website + uses: actions/checkout@v4 + with: + repository: dita-ot/website + ref: ${{ env.WEBSITE_BRANCH }} + path: website + + - name: Render website + uses: ./.github/actions/render + + - name: Cache NPM + uses: actions/cache@v4 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + + - name: Build website + run: | + cd ${{ github.workspace }}/website && npm ci && npm run install + cd ${{ github.workspace }} + echo "PR_ID=$(echo $GITHUB_REF | cut -d'/' -f 3 )" >> $GITHUB_ENV + + # Move website to root + mv -f ${{ github.workspace }}/website/* ${{ github.workspace }}/ + rm -fr build + + - name: Cache gems + uses: actions/cache@v4 + with: + path: vendor/bundle + key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }} + restore-keys: | + ${{ runner.os }}-gems- + + - name: Install Jekyll + run: | + bundle config path vendor/bundle + bundle install + - name: Run Jekyll + run: | + bundle exec jekyll build + + - name: Deploy to Netlify + uses: netlify/actions/cli@master + with: + args: deploy --dir _site --alias "preview-pr-${{ env.PR_ID }}" + env: + NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }} + NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }} + + - name: Create status + uses: Sibz/github-status-action@v1 + with: + authToken: ${{ secrets.GITHUB_TOKEN }} + sha: ${{ github.event.pull_request.head.sha }} + # may have to use $GITHUB_REPOSITORY and split it into repository and owner by / + context: 'Preview' + description: 'Website preview generated' + state: 'success' + target_url: 'https://preview-pr-${{ env.PR_ID }}--dita-ot.netlify.app' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..d94fecd --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,147 @@ +# This workflow builds changes to release tag and commits to website repo for release PR + +name: Generate website release PR +on: + workflow_dispatch: + inputs: + dita-ot-version: + description: 'DITA-OT version' + required: true + docs-tag: + description: 'Docs tag' + required: true + repository_dispatch: + types: [release] +jobs: + deploy: + runs-on: ubuntu-latest + env: + WEBSITE_PLUGIN_BRANCH: 'master' + DITA_OT_VERSION: '4.2.3' + steps: + - name: Parse arguments + run: | + if [[ -n "${{ github.event.client_payload.dita_ot_version }}" ]]; then + readonly TOKENS=($(echo "${{ github.event.client_payload.dita_ot_version }}" | tr '.' ' ')) + echo "RELEASE_VERSION=${{ github.event.client_payload.dita_ot_version }}" >> $GITHUB_ENV + else + readonly TOKENS=($(echo "${{ github.event.inputs.dita-ot-version }}" | tr '.' ' ')) + echo "RELEASE_VERSION=${{ github.event.inputs.dita-ot-version }}" >> $GITHUB_ENV + fi + echo "RELEASE=${TOKENS[0]}.${TOKENS[1]}" >> $GITHUB_ENV + if [[ -n "${{ github.event.client_payload.docs_tag }}" ]]; then + echo "TAG=${{ github.event.client_payload.docs_tag }}" >> $GITHUB_ENV + else + echo "TAG=${{ github.event.inputs.docs-tag }}" >> $GITHUB_ENV + fi + - name: Check out docs + uses: actions/checkout@v4 + with: + ref: ${{ env.TAG }} + - name: Set variables + run: | + echo "GITHUB_SHA_SHORT=$(git rev-parse --short HEAD)" >> $GITHUB_ENV + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 17 + cache: 'gradle' + - name: Check out website + uses: actions/checkout@v4 + with: + repository: dita-ot/website + token: ${{ secrets.COMMITTER_TOKEN }} + path: website + - name: Download website plug-in + run: | + curl -sL https://github.com/dita-ot/org.dita-ot.html/archive/refs/heads/${{ env.WEBSITE_PLUGIN_BRANCH }}.zip -o org.dita-ot.html.zip + - name: Cache render DITA-OT + uses: actions/cache@v4 + with: + path: dita-ot-${{ env.DITA_OT_VERSION }} + key: ${{ runner.os }}-dita-ot-${{ env.DITA_OT_VERSION }} + - name: Download render DITA-OT + run: | + if [ ! -d "dita-ot-${{ env.DITA_OT_VERSION }}" ]; then + curl -sL https://github.com/dita-ot/dita-ot/releases/download/${{ env.DITA_OT_VERSION }}/dita-ot-${{ env.DITA_OT_VERSION }}.zip -o dita-ot-${{ env.DITA_OT_VERSION }}.zip + unzip dita-ot-${{ env.DITA_OT_VERSION }}.zip + else + echo "Use cached dita-ot-${{ env.DITA_OT_VERSION }}" + fi + dita-ot-${{ env.DITA_OT_VERSION }}/bin/dita install org.dita-ot.html.zip --force -v + - name: Download release DITA-OT + run: | + curl -sL https://github.com/dita-ot/dita-ot/releases/download/$VERSION/dita-ot-$VERSION.zip -o dita-ot-$VERSION.zip + unzip dita-ot-$VERSION.zip -d src-dita-ot + env: + VERSION: ${{ env.RELEASE_VERSION }} + - name: Run DITA-OT + run: | + ./gradlew site \ + -PditaHome=$DITA_HOME \ + -PoutputDir=$WEBSITE_DIR/${{ env.RELEASE }} \ + -PditaHomeSrc=${{ env.RELEASE_DITA_OT }} \ + -PnoCommitMeta=true \ + --info --stacktrace --no-daemon + env: + VERSION: ${{ env.RELEASE_VERSION }} + WEBSITE_DIR: ${{ github.workspace }}/website + DITA_HOME: ${{ github.workspace }}/dita-ot-${{ env.DITA_OT_VERSION }} + RELEASE_DITA_OT: ${{ github.workspace }}/src-dita-ot/dita-ot-${{ env.RELEASE_VERSION }} + - name: Create release PR + uses: peter-evans/create-pull-request@v6 + with: + branch: release/${{ env.RELEASE_VERSION }} + title: 'Update site for ${{ env.RELEASE_VERSION }}' + body: | + Update DITA-OT ${{ env.RELEASE_VERSION }} docs to `/${{ env.RELEASE }}`. + + Built from commits: + * dita-ot/docs@${{ env.GITHUB_SHA_SHORT }} (${{ github.event.inputs.docs-tag }}) + * dita-ot/dita-ot (${{ env.RELEASE_VERSION }}) + * dita-ot/org.dita-ot.html (${{ env.WEBSITE_PLUGIN_BRANCH }}) + commit-message: 'Update ‘${{ env.RELEASE }}’ docs for ${{ env.RELEASE_VERSION }}' + committer: 'DITA-OT Bot ' + author: 'DITA-OT Bot ' + signoff: true + token: ${{ secrets.DOCS_RELEASE_TOKEN }} + path: website + labels: | + release-updates + update-ci: + runs-on: ubuntu-latest + steps: + - name: Parse arguments + run: | + if [[ -n "${{ github.event.client_payload.dita_ot_version }}" ]]; then + echo "RELEASE_VERSION=${{ github.event.client_payload.dita_ot_version }}" >> $GITHUB_ENV + else + echo "RELEASE_VERSION=${{ github.event.inputs.dita-ot-version }}" >> $GITHUB_ENV + fi + - name: Check out docs + uses: actions/checkout@v4 + with: + ref: develop + - name: Update GitHub Actions release workflow + uses: mikefarah/yq@master + with: + cmd: yq -i '.jobs.deploy.env.DITA_OT_VERSION = "${{ env.RELEASE_VERSION }}"' '.github/workflows/release.yml' + - name: Update GitHub Actions render action + uses: mikefarah/yq@master + with: + cmd: yq -i '.inputs.DITA_OT_VERSION.default = "${{ env.RELEASE_VERSION }}"' '.github/actions/render/action.yml' + - name: Create release PR + uses: peter-evans/create-pull-request@v6 + with: + branch: feature/update-github-actions-${{ env.RELEASE_VERSION }} + title: 'Update docs GitHub Actions for ${{ env.RELEASE_VERSION }}' + body: | + Update docs GitHub Actions for ${{ env.RELEASE_VERSION }}. + commit-message: 'Update GitHub Actions for ${{ env.RELEASE_VERSION }}' + committer: 'DITA-OT Bot ' + author: 'DITA-OT Bot ' + signoff: true + token: ${{ secrets.DOCS_RELEASE_TOKEN }} + labels: | + release-updates diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6d41d2f --- /dev/null +++ b/.gitignore @@ -0,0 +1,18 @@ +# This file specifies intentionally untracked files that Git should ignore + +## Directories generated during builds +.gradle/ +build/ +logs/ +node_modules/ +out/ +temp/ + +## Autogenerated files created by the build process +error-messages.xml +extension-points/all-extension-points.dita +extension-points/extension-points-in-*.dita +parameters/all-parameters.dita +parameters/parameters-*.dita +platform.ditaval +samples/properties/template.properties diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..2312dc5 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +npx lint-staged diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..2dbbe00 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +20.11.1 diff --git a/.oxygen/frameworks/dita/resources/idGenerationDefaultOptions.xml b/.oxygen/frameworks/dita/resources/idGenerationDefaultOptions.xml new file mode 100644 index 0000000..ef691bc --- /dev/null +++ b/.oxygen/frameworks/dita/resources/idGenerationDefaultOptions.xml @@ -0,0 +1,28 @@ + + + + true + id + ${localName}_${id} + topic/topic + + + diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..3ce1002 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,28 @@ +# This file specifies files that Prettier should not format + +# Mirror entries from .gitignore (don't format untracked files) + +## Directories generated during builds +build/ +logs/ +node_modules/ +out/ +temp/ + +## Autogenerated files created by the build process +error-messages.xml +extension-points/all-extension-points.dita +extension-points/extension-points-in-*.dita +parameters/all-parameters.dita +parameters/parameters-*.dita +platform.ditaval +samples/properties/template.properties + +# Prettier-specific ignores +LICENSE* +publishing.ditamap +release-notes/changes.ditamap +release-notes/history.dita +release-notes/rel*.dita +resources/dita-ot-doc.css +samples/plugins/ diff --git a/.prettierrc.yml b/.prettierrc.yml new file mode 100644 index 0000000..161990d --- /dev/null +++ b/.prettierrc.yml @@ -0,0 +1,35 @@ +# Prettier Configuration File + +# https://prettier.io/docs/en/configuration.html + +arrowParens: avoid +bracketSameLine: false +bracketSpacing: false +endOfLine: lf +htmlWhitespaceSensitivity: css +printWidth: 120 +proseWrap: preserve +requirePragma: false +semi: true +singleQuote: true +tabWidth: 2 +trailingComma: all +useTabs: false +vueIndentScriptAndStyle: true +xmlSelfClosingSpace: false +xmlWhitespaceSensitivity: strict + +# Override configuration for certain files +overrides: + - files: external-links.ditamap + options: + printWidth: 80 + - files: source-files.ditamap + options: + printWidth: 200 + - files: '*.json' + options: + printWidth: 200 + +plugins: + - '@prettier/plugin-xml' diff --git a/DITA-OT_docs.xpr b/DITA-OT_docs.xpr new file mode 100644 index 0000000..a789639 --- /dev/null +++ b/DITA-OT_docs.xpr @@ -0,0 +1,9771 @@ + + + + + + + + + Filename_generation_from_topic_title_options + + + - + + + true + + + false + + + 0 + + + + + additional.frameworks.directories + + {$pd}/.oxygen + + + + dita.same.topic.frag + true + + + document.types + + + + + + + + + + + + name + + + -1 + + + DITA - Extension for DITA-OT Docs Project + + + set + + + + + + + + classpath + + + 0 + + + ${pdu}/.oxygen/frameworks/dita/resources + + + addIndex + + + + + + + + priority + + + -1 + + + 3 + + + set + + + + + + + + + DITA + + + + + DITA + + + + + + + ${framework}/dita.jar + ${framework}/resources/ + ${framework}/i18n/ + ${framework}/reuse/ + ${framework}/styleguide/ + ${framework}/refactoring/ + + + + + + + + + + + + ${framework}/css/edit/style-basic.css + + + Basic + + + false + + + + + ${framework}/css/edit/style-pure.css + + + Pure + + + false + + + + + ${framework}/css/edit/style-cursive.css + + + Cursive + + + false + + + + + ${framework}/css/edit/style-century.css + + + Century + + + false + + + + + ${framework}/css/edit/style-facet-design.css + + + Facet Design + + + false + + + + + ${framework}/css/edit/style-roboto.css + + + Roboto + + + false + + + + + ${framework}/css/edit/style-journal.css + + + Trip Journal + + + false + + + + + ${framework}/css/edit/style-papyrus.css + + + Papyrus + + + false + + + + + ${framework}/css/edit/alternate-full-width-layout.css + + + + Full width + + + true + + + + + ${framework}/css/edit/alternate-map-print-preview-layout-force-media-print.css + + + + Print ready + + + true + + + + + ${framework}/css/edit/alternate-coloured-revisions.css + + + + Colored revision changes + + + true + + + + + ${framework}/css/edit/alternate-syntax-highlight.css + + + + Codeblock syntax highlight + + + true + + + + + ${framework}/css/edit/alternate-table-show-colspec.css + + + + Show table column specifications + + + true + + + + + ${framework}/css/edit/alternate-hide-draft-comments.css + + + + Hide draft comments + + + true + + + + + ${framework}/css/edit/alternate-fold-prolog.css + + + + Fold prolog + + + true + + + + + ${framework}/css/hints/hints.css + + + + Hints + + + true + + + + + ${framework}/css/actions/actions.css + + + + Inline actions + + + true + + + + + ${framework}/css/webauthor/profiling.css + + + + + + false + + + + + ${framework}/css/webauthor/inline-insertion-actions.css + + + + Inline insertion actions + + + true + + + + + + true + + + true + + + + + + bold + + + ${i18n(bold)} + + + ${i18n(bold_description)} + + + /images/Bold24.png + + + /images/Bold16.png + + + B + + + M1 B + + + + + + + + + + + element + <b/> + + + + + ro.sync.ecss.extensions.commons.operations.ToggleSurroundWithElementOperation + + + + + + false + + + + + italic + + + ${i18n(italic)} + + + ${i18n(italic_description)} + + + /images/Italic24.png + + + /images/Italic16.png + + + I + + + M1 I + + + + + + + + + + + element + <i/> + + + + + ro.sync.ecss.extensions.commons.operations.ToggleSurroundWithElementOperation + + + + + + false + + + + + underline + + + ${i18n(underline)} + + + ${i18n(underline_description)} + + + /images/Underline24.png + + + /images/Underline16.png + + + U + + + M1 U + + + + + + + + + + + element + <u/> + + + + + ro.sync.ecss.extensions.commons.operations.ToggleSurroundWithElementOperation + + + + + + false + + + + + paragraph + + + ${i18n(paragraph)} + + + ${i18n(paragraph_description)} + + + /images/Paragraph24.png + + + /images/Paragraph16.png + + + P + + + M1 M2 P + + + + + + oxy:allows-child-element("*", "class", " topic/p ") + + + + + fragment + <p/> + + + insertPosition + After + + + + + ro.sync.ecss.extensions.commons.operations.InsertFragmentOperation + + + + + ancestor-or-self::*[contains(@class," topic/p ")] + + + + + fragment + <p/> + + + insertLocation + ancestor-or-self::*[contains(@class," topic/p ")][1] + + + insertPosition + After + + + + + ro.sync.ecss.extensions.commons.operations.InsertFragmentOperation + + + + + + + + + + fragment + <p/> + + + + + ro.sync.ecss.extensions.commons.operations.SurroundWithFragmentOperation + + + + + + false + + + + + listitem + + + ${i18n(listitem)} + + + ${i18n(listitem_description)} + + + /images/ListItem24.png + + + /images/ListItem16.png + + + + + + + + + + + + ancestor-or-self::*[contains(@class," task/substep ") or contains(@class," topic/ul ") or contains(@class," topic/ol ")][1][contains(@class," task/substep ")] + + + + + fragment + <substep><cmd/></substep> + + + insertLocation + ancestor-or-self::*[contains(@class," task/substep ")][1] + + + insertPosition + After + + + + + ro.sync.ecss.extensions.commons.operations.InsertFragmentOperation + + + + + self::*[contains(@class," task/substeps ")] + + + + + fragment + <substep><cmd/></substep> + + + + + ro.sync.ecss.extensions.commons.operations.InsertFragmentOperation + + + + + ancestor-or-self::*[contains(@class," task/step ") or contains(@class," topic/ul ") or contains(@class," topic/ol ")][1][contains(@class," task/step ")] + + + + + fragment + <step><cmd/></step> + + + insertLocation + ancestor-or-self::*[contains(@class," task/step ")][1] + + + insertPosition + After + + + + + ro.sync.ecss.extensions.commons.operations.InsertFragmentOperation + + + + + self::*[contains(@class," task/steps ") or contains(@class," task/steps-unordered ")] + + + + + fragment + <step><cmd/></step> + + + + + ro.sync.ecss.extensions.commons.operations.InsertFragmentOperation + + + + + ancestor-or-self::*[contains(@class," topic/dd pr-d/pd ")] | ancestor-or-self::*[contains(@class," topic/dt pr-d/pt ")] | ancestor-or-self::*[contains(@class," topic/dlentry pr-d/plentry ")] + + + + + fragment + <plentry> + <pt /> + <pd/> +</plentry> + + + insertLocation + ancestor-or-self::*[contains(@class," topic/dlentry pr-d/plentry ")][1] + + + + insertPosition + After + + + + + ro.sync.ecss.extensions.commons.operations.InsertFragmentOperation + + + + + self::*[contains(@class," topic/dl pr-d/parml ")] + + + + + fragment + <plentry> + <pt/> + <pd/> +</plentry> + + + schemaAware + true + + + + + ro.sync.ecss.extensions.commons.operations.SurroundWithFragmentOperation + + + + + ancestor-or-self::*[contains(@class," topic/dd ")] | ancestor-or-self::*[contains(@class," topic/dt ")] | ancestor-or-self::*[contains(@class," topic/dlentry ")] + + + + + fragment + <dlentry> +<dt/> +<dd/> +</dlentry> + + + insertLocation + ancestor-or-self::*[contains(@class," topic/dlentry ")][1] + + + + insertPosition + After + + + + + ro.sync.ecss.extensions.commons.operations.InsertFragmentOperation + + + + + self::*[contains(@class," topic/dl ")] + + + + + fragment + <dlentry> +<dt/> +<dd/> +</dlentry> + + + schemaAware + true + + + + + ro.sync.ecss.extensions.commons.operations.SurroundWithFragmentOperation + + + + + ancestor-or-self::*[contains(@class," task/li taskreq-d/reqcond ")] + + + + + fragment + <reqcond/> + + + insertLocation + ancestor-or-self::*[contains(@class," task/li taskreq-d/reqcond ")][1] + + + insertPosition + After + + + + + ro.sync.ecss.extensions.commons.operations.InsertFragmentOperation + + + + + self::*[contains(@class," task/ol taskreq-d/reqconds ")] + + + + + fragment + <reqcond/> + + + + + ro.sync.ecss.extensions.commons.operations.SurroundWithFragmentOperation + + + + + ancestor-or-self::*[contains(@class," task/li taskreq-d/supply ")] + + + + + fragment + <supply/> + + + insertLocation + ancestor-or-self::*[contains(@class," task/li taskreq-d/supply ")][1] + + + insertPosition + After + + + + + ro.sync.ecss.extensions.commons.operations.InsertFragmentOperation + + + + + self::*[contains(@class," task/ul taskreq-d/supplyli ")] + + + + + fragment + <supply/> + + + + + ro.sync.ecss.extensions.commons.operations.SurroundWithFragmentOperation + + + + + ancestor-or-self::*[contains(@class," task/li taskreq-d/spare ")] + + + + + fragment + <spare/> + + + insertLocation + ancestor-or-self::*[contains(@class," task/li taskreq-d/spare ")][1] + + + insertPosition + After + + + + + ro.sync.ecss.extensions.commons.operations.InsertFragmentOperation + + + + + self::*[contains(@class," task/ul taskreq-d/sparesli ")] + + + + + fragment + <spare/> + + + + + ro.sync.ecss.extensions.commons.operations.SurroundWithFragmentOperation + + + + + ancestor-or-self::*[contains(@class," task/li taskreq-d/safecond ")] + + + + + fragment + <safecond/> + + + insertLocation + ancestor-or-self::*[contains(@class," task/li taskreq-d/safecond ")][1] + + + insertPosition + After + + + + + ro.sync.ecss.extensions.commons.operations.InsertFragmentOperation + + + + + self::*[contains(@class," task/ol taskreq-d/safety ")] + + + + + fragment + <safecond/> + + + + + ro.sync.ecss.extensions.commons.operations.SurroundWithFragmentOperation + + + + + ancestor-or-self::*[contains(@class," topic/li ") or contains(@class," topic/ul ") or contains(@class," topic/sli ") or contains(@class," topic/sl ")][1][contains(@class," topic/li ")] + + + + + fragment + <li/> + + + insertLocation + ancestor-or-self::*[contains(@class," topic/li ")][1] + + + insertPosition + After + + + + + ro.sync.ecss.extensions.commons.operations.InsertFragmentOperation + + + + + ancestor-or-self::*[contains(@class," topic/sli ")] + + + + + fragment + <sli/> + + + insertLocation + ancestor-or-self::*[contains(@class," topic/sli ")][1] + + + insertPosition + After + + + schemaAware + false + + + + + ro.sync.ecss.extensions.commons.operations.InsertFragmentOperation + + + + + self::*[contains(@class," topic/sl ")] + + + + + fragment + <sli/> + + + + + ro.sync.ecss.extensions.commons.operations.SurroundWithFragmentOperation + + + + + self::*[contains(@class," topic/ul ")] | self::*[contains(@class," topic/ol ")] + + + + + fragment + <li/> + + + + + ro.sync.ecss.extensions.commons.operations.SurroundWithFragmentOperation + + + + + + false + + + + + orderedList + + + ${i18n(orderedList)} + + + ${i18n(orderedList_description)} + + + /images/OrderedList24.png + + + /images/OrderedList16.png + + + + + + M1 M2 7 + + + + + + oxy:allows-child-element("*", "class", " topic/ol ") + + + + + + ro.sync.ecss.extensions.dita.DITAInsertListOperation + + + + + oxy:allows-child-element("*", "class", " topic/sl ") + + + + + listType + simplelist + + + + + ro.sync.ecss.extensions.dita.DITAInsertListOperation + + + + + + + + + + + ro.sync.ecss.extensions.dita.DITAInsertListOperation + + + + + + false + + + + + unorderedList + + + ${i18n(unorderedList)} + + + ${i18n(unorderedList_description)} + + + /images/UnorderedList24.png + + + /images/UnorderedList16.png + + + + + + M1 M2 8 + + + + + + oxy:allows-child-element("*", "class", " topic/ul ") + + + + + listType + unorderedlist + + + + + ro.sync.ecss.extensions.dita.DITAInsertListOperation + + + + + oxy:allows-child-element("*", "class", " topic/sl ") + + + + + listType + simplelist + + + + + ro.sync.ecss.extensions.dita.DITAInsertListOperation + + + + + + + + + + listType + unorderedlist + + + + + ro.sync.ecss.extensions.dita.DITAInsertListOperation + + + + + + false + + + + + section + + + ${i18n(section)} + + + ${i18n(section_description)} + + + /images/Section24.png + + + /images/Section16.png + + + + + + + + + + + + oxy:allows-global-element("section") + + + + + fragment + <section><title/><p/></section> + + + insertEvenIfInvalid + false + + + + + ro.sync.ecss.extensions.commons.operations.InsertFragmentOperation + + + + + + false + + + + + insert.table + + + ${i18n(insert.table)} + + + ${i18n(insert.table_description)} + + + /images/Table24.png + + + /images/Table16.png + + + + + + + + + + + + oxy:allows-global-element("*", "class", " topic/table ") or +oxy:allows-global-element("*", "class", " topic/simpletable ") + + + + + defaultTableModel + none + + + + + ro.sync.ecss.extensions.dita.topic.table.InsertTableOperation + + + + + + false + + + + + insert.table.row.below + + + ${i18n(insert.table.row.below)} + + + ${i18n(insert.table.row.below_description)} + + + /images/TableRow24.png + + + /images/TableRow16.png + + + + + + + + + + + + self::*[contains(@class," topic/thead ") or contains(@class," topic/tbody ")] + + + + + insertLocation + + + + insertPosition + Inside as first child + + + + + ro.sync.ecss.extensions.dita.topic.table.cals.InsertSingleRowOperation + + + + + self::*[contains(@class," topic/simpletable ")] + + + + + insertPosition + Inside as first child + + + + + ro.sync.ecss.extensions.dita.topic.table.simpletable.InsertSingleRowOperation + + + + + ancestor-or-self::node()[self::*[contains(@class," topic/row ") or contains(@class," topic/strow ") or contains(@class, " topic/sthead ")]][1][self::*[contains(@class," topic/row ")]] + + + + + insertLocation + ancestor-or-self::*[contains(@class," topic/row ")][1] + + + insertPosition + After + + + + + ro.sync.ecss.extensions.dita.topic.table.cals.InsertSingleRowOperation + + + + + ancestor-or-self::node()[self::*[contains(@class," topic/row ") or contains(@class," topic/strow ") or contains(@class, " topic/sthead ")]][1][self::*[contains(@class," topic/strow ")]] + + + + + insertLocation + ancestor-or-self::*[contains(@class," topic/strow ")][1] + + + insertPosition + After + + + + + ro.sync.ecss.extensions.dita.topic.table.simpletable.InsertSingleRowOperation + + + + + ancestor-or-self::node()[self::*[contains(@class," topic/row ") or contains(@class," topic/strow ") or contains(@class, " topic/sthead ")]][1][self::*[contains(@class," topic/sthead ")]] + + + + + insertLocation + ancestor-or-self::*[contains(@class," topic/sthead ")][1] + + + insertPosition + After + + + + + ro.sync.ecss.extensions.dita.topic.table.simpletable.InsertSingleRowOperation + + + + + + false + + + + + insert.table.entry + + + ${i18n(insert.table.entry)} + + + ${i18n(insert.table.entry_description)} + + + /images/TableCell24.png + + + /images/TableCell16.png + + + + + + + + + + + + self::*[contains(@class," topic/row ")] + + + + + fragment + <entry/> + + + + + ro.sync.ecss.extensions.commons.operations.SurroundWithFragmentOperation + + + + + self::*[contains(@class," topic/strow ") or contains(@class," topic/sthead ")][not(ancestor-or-self::*[contains(@class, " task/choicetable ")])] + + + + + fragment + <stentry/> + + + + + ro.sync.ecss.extensions.commons.operations.SurroundWithFragmentOperation + + + + + self::*[contains(@class," topic/thead ") or contains(@class," topic/tbody ")] + + + + + fragment + <row><entry/></row> + + + + + ro.sync.ecss.extensions.commons.operations.SurroundWithFragmentOperation + + + + + self::*[contains(@class," topic/simpletable ")] + + + + + fragment + <strow><stentry/></strow> + + + + + ro.sync.ecss.extensions.commons.operations.SurroundWithFragmentOperation + + + + + ancestor-or-self::node()[self::*[contains(@class," topic/entry ") or contains(@class," topic/stentry ")]][1][self::*[contains(@class," topic/entry ")][not(ancestor-or-self::*[contains(@class, " task/choicetable ")])]] + + + + + fragment + <entry/> + + + insertLocation + ancestor-or-self::*[contains(@class," topic/entry ")][1] + + + insertPosition + After + + + + + ro.sync.ecss.extensions.commons.operations.InsertFragmentOperation + + + + + ancestor-or-self::*[contains(@class," topic/stentry ")][not(ancestor-or-self::*[contains(@class, " task/choicetable ")])] + + + + + fragment + <stentry/> + + + insertLocation + ancestor-or-self::*[contains(@class," topic/stentry ")][1] + + + insertPosition + After + + + + + ro.sync.ecss.extensions.commons.operations.InsertFragmentOperation + + + + + + false + + + + + insert.image + + + ${i18n(insert.image)} + + + ${i18n(insert.image_description)} + + + /images/Image24.png + + + /images/Image16.png + + + + + + + + + + + + oxy:allows-child-element("*", "class", " topic/image ") + + + + + + ro.sync.ecss.extensions.dita.topic.InsertImageOperation + + + + + + false + + + + + insert.concept + + + ${i18n(insert.concept)} + + + ${i18n(insert.concept_description)} + + + /images/InsertConcept24.png + + + /images/InsertConcept16.png + + + + + + + + + + + + oxy:allows-global-element("concept") + + + + + fragment + <concept id=""><title/><conbody></conbody></concept> + + + insertEvenIfInvalid + false + + + insertLocation + + + + insertPosition + After + + + schemaAware + true + + + + + ro.sync.ecss.extensions.commons.operations.InsertFragmentOperation + + + + + + false + + + + + insert.task + + + ${i18n(insert.task)} + + + ${i18n(insert.task_description)} + + + /images/InsertTask24.png + + + /images/InsertTask16.png + + + + + + + + + + + + oxy:allows-global-element("task") + + + + + fragment + <task id=""><title/><taskbody></taskbody></task> + + + insertEvenIfInvalid + false + + + insertLocation + + + + insertPosition + After + + + + + ro.sync.ecss.extensions.commons.operations.InsertFragmentOperation + + + + + + false + + + + + insert.topic + + + ${i18n(insert.topic)} + + + ${i18n(insert.topic_description)} + + + /images/InsertTopic24.png + + + /images/InsertTopic16.png + + + + + + + + + + + + not(ancestor::dita) and ancestor::topic + + + + + fragment + <topic id=""><title/><body><p/></body></topic> + + + insertLocation + ancestor::topic[1]/*[last()] + + + insertPosition + After + + + + + ro.sync.ecss.extensions.commons.operations.InsertFragmentOperation + + + + + self::dita or (not(ancestor::dita) and self::topic) + + + + + fragment + <topic id=""><title/><body><p/></body></topic> + + + + + ro.sync.ecss.extensions.commons.operations.InsertFragmentOperation + + + + + ancestor::dita and (self::*[contains(@class,"topic/topic ")]) + + + + + fragment + <topic id=""><title/><body><p/></body></topic> + + + + + ro.sync.ecss.extensions.commons.operations.InsertFragmentOperation + + + + + ancestor::dita and (ancestor-or-self::*[contains(@class,"topic/topic ")]) + + + + + fragment + <topic id=""><title/><body><p/></body></topic> + + + insertLocation + (ancestor-or-self::*[contains(@class,"topic/topic ")])/*[last()] + + + insertPosition + After + + + + + ro.sync.ecss.extensions.commons.operations.InsertFragmentOperation + + + + + + false + + + + + insert.reference + + + ${i18n(insert.reference)} + + + ${i18n(insert.reference_description)} + + + /images/InsertRef24.png + + + /images/InsertRef16.png + + + + + + + + + + + + oxy:allows-global-element("reference") + + + + + fragment + <reference id=""><title/><refbody/></reference> + + + insertEvenIfInvalid + false + + + insertLocation + + + + insertPosition + After + + + + + ro.sync.ecss.extensions.commons.operations.InsertFragmentOperation + + + + + + false + + + + + table.join.row.cells + + + ${i18n(table.join.row.cells)} + + + ${i18n(table.join.row.cells_description)} + + + /images/TableJoinRowCells24.png + + + /images/TableJoinRowCells16.png + + + + + + + + + + + + oxy:current-selected-element()[self::*[contains(@class," topic/row ")]][1] or ancestor-or-self::node()[self::*[contains(@class," topic/row ") or contains(@class," topic/strow ") or contains(@class, " topic/sthead ")]][1][self::*[contains(@class," topic/row ")]] + + + + + + ro.sync.ecss.extensions.dita.topic.table.cals.JoinRowCellsOperation + + + + + + false + + + + + table.split.left + + + ${i18n(table.split.left)} + + + ${i18n(table.split.left_description)} + + + /images/TableSplitCellLeft24.png + + + /images/TableSplitCellLeft16.png + + + + + + + + + + + + ancestor-or-self::node()[self::*[contains(@class," topic/entry ") or contains(@class," topic/stentry ")]][1][self::*[contains(@class," topic/entry ")]] + + + + + Split point + Left + + + + + ro.sync.ecss.extensions.dita.topic.table.cals.SplitLeftRightOperation + + + + + + false + + + + + table.split.right + + + ${i18n(table.split.right)} + + + ${i18n(table.split.right_description)} + + + /images/TableSplitCellRight24.png + + + /images/TableSplitCellRight16.png + + + + + + + + + + + + ancestor-or-self::node()[self::*[contains(@class," topic/entry ") or contains(@class," topic/stentry ")]][1][self::*[contains(@class," topic/entry ")]] + + + + + Split point + Right + + + + + ro.sync.ecss.extensions.dita.topic.table.cals.SplitLeftRightOperation + + + + + + false + + + + + table.join.cell.above + + + ${i18n(table.join.cell.above)} + + + ${i18n(table.join.cell.above_description)} + + + /images/TableJoinCellUp24.png + + + /images/TableJoinCellUp16.png + + + + + + + + + + + + ancestor-or-self::node()[self::*[contains(@class," topic/entry ") or contains(@class," topic/row ") or contains(@class," topic/stentry ")]][1][self::*[contains(@class," topic/entry ") or contains(@class," topic/row ")]] + + + + + Join direction + Above + + + + + ro.sync.ecss.extensions.dita.topic.table.cals.JoinCellAboveBelowOperation + + + + + + false + + + + + table.join.cell.below + + + ${i18n(table.join.cell.below)} + + + ${i18n(table.join.cell.below_description)} + + + /images/TableJoinCellDown24.png + + + /images/TableJoinCellDown16.png + + + + + + + + + + + + ancestor-or-self::node()[self::*[contains(@class," topic/entry ") or contains(@class," topic/row ") or contains(@class," topic/stentry ")]][1][self::*[contains(@class," topic/entry ") or contains(@class," topic/row ")]] + + + + + Join direction + Below + + + + + ro.sync.ecss.extensions.dita.topic.table.cals.JoinCellAboveBelowOperation + + + + + + false + + + + + table.split.below + + + ${i18n(table.split.below)} + + + ${i18n(table.split.below_description)} + + + /images/TableSplitCellDown24.png + + + /images/TableSplitCellDown16.png + + + + + + + + + + + + ancestor-or-self::node()[self::*[contains(@class," topic/entry ") or contains(@class," topic/stentry ")]][1][self::*[contains(@class," topic/entry ")]] + + + + + Split point + Below + + + + + ro.sync.ecss.extensions.dita.topic.table.cals.SplitCellAboveBelowOperation + + + + + + false + + + + + table.split.above + + + ${i18n(table.split.above)} + + + ${i18n(table.split.above_description)} + + + /images/TableSplitCellUp24.png + + + /images/TableSplitCellUp16.png + + + + + + + + + + + + ancestor-or-self::node()[self::*[contains(@class," topic/entry ") or contains(@class," topic/stentry ")]][1][self::*[contains(@class," topic/entry ")]] + + + + + Split point + Above + + + + + ro.sync.ecss.extensions.dita.topic.table.cals.SplitCellAboveBelowOperation + + + + + + false + + + + + insert.table.column.after + + + ${i18n(insert.table.column.after)} + + + ${i18n(insert.table.column.after_description)} + + + /images/TableColumn24.png + + + /images/TableColumn16.png + + + + + + + + + + + + ancestor-or-self::node()[self::*[contains(@class," topic/row ") or contains(@class," topic/strow ") or contains(@class," topic/sthead ")]][1][self::*[contains(@class," topic/row ")]] + + + + + defaultNamespace + + + + insertLocation + After + + + + + ro.sync.ecss.extensions.dita.topic.table.cals.InsertSingleColumnOperation + + + + + ancestor-or-self::node()[self::*[contains(@class," topic/row ") or contains(@class," topic/strow ") or contains(@class," topic/sthead ")]][1][self::*[contains(@class," topic/strow ") or contains(@class," topic/sthead ")]] + + + + + + ro.sync.ecss.extensions.dita.topic.table.simpletable.InsertSingleColumnOperation + + + + + + false + + + + + delete.table.column + + + ${i18n(delete.table.columns)} + + + ${i18n(delete.table.columns_description)} + + + /images/DeleteColumn24.png + + + /images/DeleteColumn16.png + + + + + + + + + + + + ancestor-or-self::node()[self::*[contains(@class," topic/tbody ") or contains(@class," topic/thead ") or contains(@class," topic/entry ") or contains(@class," topic/sthead ") or contains(@class," topic/strow ") or contains(@class," topic/stentry ") or contains(@class," topic/row ")]][1][self::*[contains(@class," topic/entry ") or contains(@class," topic/row ")][not(ancestor-or-self::*[contains(@class, " task/choicetable ")])]] or +oxy:current-selected-element()[self::*[contains(@class," topic/tbody ") or contains(@class," topic/thead ") or contains(@class," topic/entry ") or contains(@class," topic/sthead ") or contains(@class," topic/strow ") or contains(@class," topic/stentry ") or contains(@class," topic/row ")]][1][self::*[contains(@class," topic/entry ") or contains(@class," topic/row ")][not(ancestor-or-self::*[contains(@class, " task/choicetable ")])]] + + + + + + ro.sync.ecss.extensions.dita.topic.table.cals.DeleteColumnOperation + + + + + ancestor-or-self::node()[self::*[contains(@class," topic/tbody ") or contains(@class," topic/thead ") or contains(@class," topic/entry ") or contains(@class," topic/sthead ") or contains(@class," topic/strow ") or contains(@class," topic/stentry ")]][1][self::*[contains(@class," topic/stentry ") or contains(@class," topic/strow ") or contains(@class," topic/sthead ")][not(ancestor-or-self::*[contains(@class, " task/choicetable ")])]] or +oxy:current-selected-element()[self::*[contains(@class," topic/tbody ") or contains(@class," topic/thead ") or contains(@class," topic/entry ") or contains(@class," topic/sthead ") or contains(@class," topic/strow ") or contains(@class," topic/stentry ")]][1][self::*[contains(@class," topic/stentry ") or contains(@class," topic/strow ") or contains(@class," topic/sthead ")][not(ancestor-or-self::*[contains(@class, " task/choicetable ")])]] + + + + + + ro.sync.ecss.extensions.dita.topic.table.simpletable.DeleteColumnOperation + + + + + + false + + + + + delete.table.row + + + ${i18n(delete.table.rows)} + + + ${i18n(delete.table.rows_description)} + + + /images/DeleteRow24.png + + + /images/DeleteRow16.png + + + + + + + + + + + + oxy:is-editable-element((ancestor-or-self::*[contains(@class, ' topic/table ')])[last()]) and (ancestor-or-self::node()[self::*[contains(@class," topic/row ") or contains(@class," topic/sthead ") or contains(@class," topic/strow ") or contains(@class," topic/tbody ") or contains(@class," topic/thead ")]][1][self::*[contains(@class," topic/row ") or contains(@class," topic/tbody ") or contains(@class," topic/thead ")]]) + + + + + + ro.sync.ecss.extensions.dita.topic.table.cals.DeleteRowOperation + + + + + oxy:is-editable-element((ancestor-or-self::*[contains(@class, ' topic/simpletable ')])[last()]) and ancestor-or-self::node()[self::*[contains(@class," topic/row ") or contains(@class," topic/sthead ") or contains(@class," topic/strow ") or contains(@class," topic/simpletable ")]][1][self::*[contains(@class," topic/strow ") or contains(@class," topic/sthead ") or contains(@class," topic/simpletable ")]] + + + + + + ro.sync.ecss.extensions.dita.topic.table.simpletable.DeleteRowOperation + + + + + + true + + + + + insert.cross.reference + + + ${i18n(insert.cross.reference)} + + + ${i18n(insert.cross.reference_description)} + + + + + + + + + + + + + + + + + + oxy:allows-child-element("*", "class", " topic/xref ") + + + + + format + dita + + + href type + dita topic + + + type + + + + + + ro.sync.ecss.extensions.dita.link.InsertXrefOperation + + + + + + false + + + + + insert.file.reference + + + ${i18n(insert.file.reference)} + + + ${i18n(insert.file.reference_description)} + + + + + + + + + + + + + + + + + + oxy:allows-child-element("*", "class", " topic/xref ") + + + + + format + xml + + + href type + non dita resource + + + + + ro.sync.ecss.extensions.dita.link.InsertXrefOperation + + + + + + false + + + + + insert.related.link.2.topic + + + ${i18n(insert.related.link.2.topic)} + + + ${i18n(insert.related.link.2.topic_description)} + + + + + + + + + + + + + + + + + + + + + + + href type + dita topic + + + + + ro.sync.ecss.extensions.dita.link.InsertLinkOperation + + + + + + false + + + + + insert.related.link.2.web.page + + + ${i18n(insert.related.link.2.web.page)} + + + ${i18n(insert.related.link.2.web.page_description)} + + + + + + + + + + + + + + + + + + + + + + + format + html + + + href type + web page + + + scope + external + + + + + ro.sync.ecss.extensions.dita.link.InsertLinkOperation + + + + + + false + + + + + insert.related.link.2.file + + + ${i18n(insert.related.link.2.file)} + + + ${i18n(insert.related.link.2.file_description)} + + + + + + + + + + + + + + + + + + + + + + + format + xml + + + href type + non dita resource + + + + + ro.sync.ecss.extensions.dita.link.InsertLinkOperation + + + + + + false + + + + + insert.url.reference + + + ${i18n(insert.url.reference)} + + + ${i18n(insert.url.reference_description)} + + + + + + + + + + + + + + + + + + oxy:allows-child-element("*", "class", " topic/xref ") + + + + + format + html + + + href type + web page + + + scope + external + + + + + ro.sync.ecss.extensions.dita.link.InsertXrefOperation + + + + + + false + + + + + reuse.content + + + ${i18n(reuse.content)} + + + ${i18n(reuse.content_description)} + + + /images/Conref24.png + + + /images/Conref16.png + + + + + + + + + + + + self::* or oxy:current-selected-element()[self::*[contains(@class," topic/topic ")]] + + + + + + ro.sync.ecss.extensions.dita.conref.InsertConrefOperation + + + + + + false + + + + + id.options + + + ${i18n(id.options)} + + + ${i18n(id.options_description)} + + + + + + + + + I + + + + + + + + + true() + + + + + + ro.sync.ecss.extensions.dita.id.DITAConfigureAutoIDElementsOperation + + + + + + true + + + + + generate.ids + + + ${i18n(generate.ids)} + + + ${i18n(generate.ids_description)} + + + + + + + + + + + + + + + + + + true() + + + + + + ro.sync.ecss.extensions.dita.id.GenerateIDsDITAOperation + + + + + + false + + + + + conref.replace + + + ${i18n(conref.replace)} + + + ${i18n(conref.replace_description)} + + + + + + + + + + + + + + + + + + ancestor-or-self::*[@conref] | ancestor-or-self::*[@conkeyref] | oxy:current-selected-element()[ancestor-or-self::*][@conref] | oxy:current-selected-element()[ancestor-or-self::*][@conkeyref] + + + + + + ro.sync.ecss.extensions.dita.conref.ReplaceConrefOperation + + + + + + true + + + + + all.keyref.conref.replace + + + ${i18n(all.keyref.conref.replace)} + + + ${i18n(all.keyref.conref.replace_description)} + + + + + + + + + + + + + + + + + + //@*[local-name() = 'conkeyref' or local-name() = 'conref' or local-name() = 'keyref'] + + + + + + ro.sync.ecss.extensions.dita.conref.ReplaceAllKeyrefsAndConrefsOperation + + + + + + true + + + + + find.similar.topics + + + ${i18n(find.similar.topics)} + + + ${i18n(find.similar.topics_description)} + + + + + + + + + + + + + + + + + + //*[contains(@class," topic/shortdesc ") or contains(@class," topic/keyword ") or contains(@class," topic/indexterm ") or contains(@class," topic/title ")] and oxy:platform()="standalone" + + + + + + ro.sync.ecss.extensions.dita.FindSimilarTopicsOperation + + + + + + true + + + + + insert.key.reference + + + ${i18n(insert.key.reference)} + + + ${i18n(insert.key.reference_description)} + + + + + + + + + + + + + + + + + + + + + + + + ro.sync.ecss.extensions.dita.keyref.InsertKeyrefOperation + + + + + + false + + + + + insert.conkeyref + + + ${i18n(insert.conkeyref)} + + + ${i18n(insert.conkeyref_description)} + + + /images/Conkeyref24.png + + + /images/Conkeyref16.png + + + K + + + + + + + + + + + + + + + ro.sync.ecss.extensions.dita.keyref.InsertContentKeyrefOperation + + + + + + false + + + + + insert.equation + + + ${i18n(insert.equation)} + + + ${i18n(insert.equation_description)} + + + /images/Equation24.png + + + /images/Equation16.png + + + + + + + + + + + + self::*[contains(@class," math-d/math ")] + + + + + fragment + <mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML"></mml:math> + + + + + ro.sync.ecss.extensions.commons.operations.InsertEquationOperation + + + + + oxy:allows-child-element("*", "class", " math-d/equation ") + + + + + fragment + <equation><math type="presentation"><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML"></mml:math></math></equation> + + + + + ro.sync.ecss.extensions.commons.operations.InsertEquationOperation + + + + + oxy:allows-child-element("*", "class", " mathml-d/mathml ") + + + + + fragment + <mathml><m:math xmlns:m="http://www.w3.org/1998/Math/MathML"></m:math></mathml> + + + + + ro.sync.ecss.extensions.commons.operations.InsertEquationOperation + + + + + ancestor-or-self::*[contains(@class," topic/p ")] and oxy:allows-child-element("*", "class", " equation-d/equation-inline ") + + + + + fragment + <equation-inline><mathml><m:math xmlns:m="http://www.w3.org/1998/Math/MathML"></m:math></mathml></equation-inline> + + + + + ro.sync.ecss.extensions.commons.operations.InsertEquationOperation + + + + + oxy:allows-child-element("*", "class", " equation-d/equation-block ") + + + + + fragment + <equation-block><mathml><m:math xmlns:m="http://www.w3.org/1998/Math/MathML"></m:math></mathml></equation-block> + + + + + ro.sync.ecss.extensions.commons.operations.InsertEquationOperation + + + + + oxy:allows-child-element("{http://www.w3.org/1998/Math/MathML}math") + + + + + fragment + <m:math xmlns:m="http://www.w3.org/1998/Math/MathML"></m:math> + + + + + ro.sync.ecss.extensions.commons.operations.InsertEquationOperation + + + + + + + + + + fragment + <mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML"></mml:math> + + + + + ro.sync.ecss.extensions.commons.operations.InsertEquationOperation + + + + + + false + + + + + create_reusable_component + + + ${i18n(create_reusable_component)} + + + ${i18n(create_reusable_component_description)} + + + + + + + + + + + + + + + + + + + + + + + + ro.sync.ecss.extensions.dita.reuse.CreateReusableComponentOperation + + + + + + false + + + + + insert_reusable_component + + + ${i18n(insert_reusable_component)} + + + ${i18n(insert_reusable_component_description)} + + + + + + + + + + + + + + + + + + + + + + + + ro.sync.ecss.extensions.dita.reuse.InsertReusableComponentOperation + + + + + + false + + + + + remove_content_reference + + + ${i18n(remove_content_reference)} + + + ${i18n(remove_content_reference_description)} + + + + + + + + + + + + + + + + + + ancestor-or-self::*[@conref] | ancestor-or-self::*[@conkeyref] | oxy:current-selected-element()[ancestor-or-self::*][@conref] | oxy:current-selected-element()[ancestor-or-self::*][@conkeyref] + + + + + + ro.sync.ecss.extensions.dita.conref.RemoveConrefOperation + + + + + + true + + + + + add_edit_content_reference + + + ${i18n(edit_content_reference)} + + + ${i18n(edit_content_reference_description)} + + + + + + + + + + + + + + + + + + ancestor-or-self::*[@conref] | ancestor-or-self::*[@conkeyref] | oxy:current-selected-element()[ancestor-or-self::*][@conref] | oxy:current-selected-element()[ancestor-or-self::*][@conkeyref] + + + + + + ro.sync.ecss.extensions.dita.conref.AddEditConrefOperation + + + + + + true + + + + + paste.reference + + + ${i18n(paste.reference)} + + + ${i18n(paste.reference_description)} + + + + + + + + + + + + + + + + + + + + + + + + ro.sync.ecss.extensions.dita.link.PasteAsReferenceOperation + + + + + + false + + + + + paste.content.reference + + + ${i18n(paste.content.reference)} + + + ${i18n(paste.content.reference_description)} + + + + + + + + + + + + + + + + + + + + + + + + ro.sync.ecss.extensions.dita.conref.PasteAsContentReferenceOperation + + + + + + false + + + + + search.references + + + ${i18n(search.references)} + + + ${i18n(search.references_description)} + + + + + + /images/SearchReferences16.png + + + + + + M1 M3 G + + + + + + true() + + + + + + ro.sync.ecss.extensions.dita.search.SearchReferencesDITAOperation + + + + + + true + + + + + show.DITA.documentation + + + ${i18n(show.DITA.documentation)} + + + ${i18n(show.DITA.documentation_description)} + + + + + + /images/BrowseReferenceManual16.png + + + + + + + + + + + + true() + + + + + + ro.sync.ecss.extensions.dita.ShowDITAElementDocumentationOperation + + + + + + true + + + + + play.media + + + ${i18n(play.media.resource)} + + + ${i18n(play.media.desc)} + + + ${framework}/img/PlayMedia21.png + + + ${framework}/img/PlayMedia21.png + + + + + + + + + + + + self::object[@data] or self::object[param[@name='src'][@value]] + + + + + mediaType + media + + + resourcePath + @data | param[@name='src']/@value + + + + + ro.sync.ecss.extensions.commons.operations.OpenInSystemAppOperation + + + + + + true + + + + + paste.content.key.reference + + + ${i18n(paste.content.key.reference)} + + + ${i18n(paste.content.key.reference_description)} + + + + + + + + + + + + + + + + + + + + + + + + ro.sync.ecss.extensions.dita.conref.PasteAsContentKeyReferenceOperation + + + + + + false + + + + + paste.key.reference + + + ${i18n(paste.key.reference)} + + + ${i18n(paste.key.reference_description)} + + + + + + + + + + + + + + + + + + + + + + + + ro.sync.ecss.extensions.dita.keyref.PasteAsLinkKeyReferenceOperation + + + + + + false + + + + + cc.insert.related.link.2.topic + + + ${i18n(insert.related.link.2.topic)} + + + ${i18n(insert.related.link.2.topic_description)} + + + + + + + + + + + + + + + + + + oxy:allows-child-element("*", "class", " topic/link ") + + + + + href type + dita topic + + + + + ro.sync.ecss.extensions.dita.link.InsertLinkOperation + + + + + + false + + + + + cc.insert.related.link.2.web.page + + + ${i18n(insert.related.link.2.web.page)} + + + ${i18n(insert.related.link.2.web.page_description)} + + + + + + + + + + + + + + + + + + oxy:allows-child-element("*", "class", " topic/link ") + + + + + format + html + + + href type + web page + + + scope + external + + + + + ro.sync.ecss.extensions.dita.link.InsertLinkOperation + + + + + + false + + + + + styleguide + + + ${i18n(styleguide)} + + + ${i18n(styleguide_description)} + + + + + + + + + + + + + + + + + + true() + + + + + resourcePath + 'https://www.oxygenxml.com/dita/styleguide/webhelp-feedback/index.html' + + + + + ro.sync.ecss.extensions.commons.operations.OpenInSystemAppOperation + + + + + + true + + + + + styleguide.context + + + ${i18n(styleguide)} + + + ${i18n(styleguide_description)} + + + + + + + + + + + + + + + + + + self::* + + + + + resourcePath + let $i:=local-name(), +$loc:=doc('http://www.oxygenxml.com/documentation/dita/styleguide/contentCompletionElementsMap.xml')//*[$i=@elementName and @linkText='DITA Style Guide']/concat(base-uri(), @path) +return + if ($loc) + then $loc + else 'https://www.oxygenxml.com/dita/styleguide/webhelp-feedback/' + + + + + ro.sync.ecss.extensions.commons.operations.OpenInSystemAppOperation + + + + + + true + + + + + sort + + + ${i18n(sort)} + + + ${i18n(sort_description)} + + + /images/Sort24.png + + + /images/Sort16.png + + + + + + + + + + + + oxy:current-selected-element()[contains(@class," topic/table ")] or +oxy:current-selected-element()[contains(@class," topic/tbody ")] or +oxy:current-selected-element()[contains(@class," topic/thead ")] or +ancestor-or-self::node()[ +self::*[contains(@class," topic/tbody ") or contains(@class," topic/thead ") or contains(@class," topic/ul ") or contains(@class," topic/ol ")]][1][self::*[contains(@class," topic/tbody ") or contains(@class," topic/thead ")]] + + + + + + + ro.sync.ecss.extensions.dita.topic.table.DITACALSTableSortOperation + + + + + oxy:current-selected-element()[contains(@class," topic/simpletable ")] | +ancestor-or-self::node()[self::*[contains(@class," topic/simpletable ") + or contains(@class," topic/ul ") or contains(@class," topic/ol ")]][1][self::*[contains(@class," topic/simpletable ")]] + + + + + + ro.sync.ecss.extensions.dita.topic.table.DITASimpleTableSortOperation + + + + + oxy:current-selected-element()[contains(@class," topic/ol ")] or +oxy:current-selected-element()[contains(@class," topic/ul ")] or +oxy:current-selected-element()[contains(@class," topic/sl ")] or +oxy:current-selected-element()[contains(@class," topic/dl ")] or +ancestor-or-self::node()[self::*[contains(@class," topic/tbody ") or contains(@class," topic/thead ") or contains(@class," topic/ul ") or contains(@class," topic/ol ") or contains(@class," topic/sl ") or contains(@class," topic/dl ")]][1][self::*[ contains(@class," topic/ul ") or contains(@class," topic/ol ") or contains(@class," topic/sl ") or contains(@class," topic/dl ")]] + + + + + + ro.sync.ecss.extensions.commons.sort.DITAListSortOperation + + + + + + false + + + + + sort_table + + + ${i18n(sort)} + + + ${i18n(sort_description)} + + + /images/Sort24.png + + + /images/Sort16.png + + + + + + + + + + + + oxy:current-selected-element()[contains(@class," topic/table ")] or +oxy:current-selected-element()[contains(@class," topic/tbody ")] or +oxy:current-selected-element()[contains(@class," topic/thead ")] or +ancestor-or-self::node()[ +self::*[contains(@class," topic/tbody ") or contains(@class," topic/thead ") or contains(@class," topic/ul ") or contains(@class," topic/ol ")]][1][self::*[contains(@class," topic/tbody ") or contains(@class," topic/thead ")]] + + + + + + + ro.sync.ecss.extensions.dita.topic.table.DITACALSTableSortOperation + + + + + oxy:current-selected-element()[contains(@class," topic/simpletable ")] | +ancestor-or-self::node()[self::*[contains(@class," topic/simpletable ") + or contains(@class," topic/ul ") or contains(@class," topic/ol ")]][1][self::*[contains(@class," topic/simpletable ")]] + + + + + + ro.sync.ecss.extensions.dita.topic.table.DITASimpleTableSortOperation + + + + + + false + + + + + table.collapse.colspec + + + ${i18n(table.toggle.colspec)} + + + ${i18n(table.toggle.colspec_description)} + + + + + + /images/Expanded16.png + + + + + + + + + + + + 1 + + + + + elementLocation + . + + + name + -oxy-visible-colspecs + + + + + ro.sync.ecss.extensions.commons.operations.RemovePseudoClassOperation + + + + + + true + + + + + table.expand.colspec + + + ${i18n(table.toggle.colspec)} + + + ${i18n(table.toggle.colspec_description)} + + + + + + /images/Collapsed16.png + + + + + + + + + + + + 1 + + + + + elementLocation + . + + + name + -oxy-visible-colspecs + + + + + ro.sync.ecss.extensions.commons.operations.SetPseudoClassOperation + + + + + + true + + + + + insert.table.row.above + + + ${i18n(insert.table.row.above)} + + + ${i18n(insert.table.row.above_description)} + + + /images/TableRowAbove24.png + + + /images/TableRowAbove16.png + + + + + + + + + + + + (self::*[contains(@class," topic/thead ") or contains(@class," topic/tbody ")]) and oxy:current-selected-element() + + + + + insertLocation + oxy:current-selected-element() + + + insertPosition + Before + + + + + ro.sync.ecss.extensions.dita.topic.table.cals.InsertSingleRowOperation + + + + + self::*[contains(@class," topic/thead ") or contains(@class," topic/tbody ")] + + + + + insertLocation + + + + insertPosition + Inside as first child + + + + + ro.sync.ecss.extensions.dita.topic.table.cals.InsertSingleRowOperation + + + + + self::*[contains(@class," topic/simpletable ")] + + + + + insertPosition + Inside as first child + + + + + ro.sync.ecss.extensions.dita.topic.table.simpletable.InsertSingleRowOperation + + + + + ancestor-or-self::node()[self::*[contains(@class," topic/row ") or contains(@class," topic/strow ")]][1][self::*[contains(@class," topic/row ")]] + + + + + insertLocation + ancestor-or-self::*[contains(@class," topic/row ")][1] + + + insertPosition + Before + + + + + ro.sync.ecss.extensions.dita.topic.table.cals.InsertSingleRowOperation + + + + + ancestor-or-self::node()[self::*[contains(@class," topic/row ") or contains(@class," topic/strow ")]][1][self::*[contains(@class," topic/strow ")]] + + + + + insertLocation + ancestor-or-self::*[contains(@class," topic/strow ")][1] + + + insertPosition + Before + + + + + ro.sync.ecss.extensions.dita.topic.table.simpletable.InsertSingleRowOperation + + + + + ancestor-or-self::node()[self::*[contains(@class," topic/row ") or contains(@class," topic/strow ")]][1][self::*[contains(@class," topic/sthead ")]] + + + + + insertLocation + ancestor-or-self::*[contains(@class," topic/sthead ")][1] + + + insertPosition + Before + + + + + ro.sync.ecss.extensions.dita.topic.table.simpletable.InsertSingleRowOperation + + + + + + false + + + + + insert.table.column.before + + + ${i18n(insert.table.column.before)} + + + ${i18n(insert.table.column.before_description)} + + + /images/TableColumnBefore24.png + + + /images/TableColumnBefore16.png + + + + + + + + + + + + ancestor-or-self::node()[self::*[contains(@class," topic/row ") or contains(@class," topic/strow ") or contains(@class," topic/sthead ")]][1][self::*[contains(@class," topic/row ")]] + + + + + defaultNamespace + + + + insertLocation + After + + + insertPosition + Before + + + + + ro.sync.ecss.extensions.dita.topic.table.cals.InsertSingleColumnOperation + + + + + ancestor-or-self::node()[self::*[contains(@class," topic/row ") or contains(@class," topic/strow ") or contains(@class," topic/sthead ")]][1][self::*[contains(@class," topic/strow ") or contains(@class," topic/sthead ")]] + + + + + insertPosition + Before + + + + + ro.sync.ecss.extensions.dita.topic.table.simpletable.InsertSingleColumnOperation + + + + + + false + + + + + show.table.properties + + + ${i18n(show.table.properties)} + + + ${i18n(show.table.properties.description)} + + + /images/TableProperties24.png + + + /images/TableProperties16.png + + + + + + M1 T + + + + + + oxy:current-selected-element()[self::*[contains(@class," topic/table ") or contains(@class," topic/simpletable ")]][1][contains(@class," topic/table ")] or +( +not(oxy:current-selected-element()[self::*[contains(@class," topic/table ") or contains(@class," topic/simpletable ")]]) and +ancestor-or-self::node()[self::*[contains(@class," topic/table ") or contains(@class," topic/simpletable ")]][1][contains(@class," topic/table ")]) + + + + + + + ro.sync.ecss.extensions.dita.topic.table.cals.properties.DITACALSShowTablePropertiesOperation + + + + + oxy:current-selected-element()[self::*[contains(@class," topic/table ") or contains(@class," topic/simpletable ")]][1][contains(@class," topic/simpletable task/choicetable ")] or +( +not(oxy:current-selected-element()[self::*[contains(@class," topic/simpletable ") or contains(@class," topic/table ")]]) and +ancestor-or-self::node()[self::*[contains(@class," topic/simpletable ") or contains(@class," topic/table ")]][1][contains(@class," topic/simpletable task/choicetable ")]) + + + + + + ro.sync.ecss.extensions.dita.topic.table.simpletable.properties.ChoiceTableShowPropertiesOperation + + + + + oxy:current-selected-element()[self::*[contains(@class," topic/table ") or contains(@class," topic/simpletable ")]][1][contains(@class," topic/simpletable ")] or +( +not(oxy:current-selected-element()[self::*[contains(@class," topic/simpletable ") or contains(@class," topic/table ")]]) and +ancestor-or-self::node()[self::*[contains(@class," topic/simpletable ") or contains(@class," topic/table ")]][1][contains(@class," topic/simpletable ")]) + + + + + + ro.sync.ecss.extensions.dita.topic.table.simpletable.properties.SimpleTableShowPropertiesOperation + + + + + + false + + + + + insert.table.columns.custom + + + ${i18n(insert.table.columns.custom)}... + + + ${i18n(insert.table.columns.custom_description)} + + + + + + + + + + + + + + + + + + ancestor-or-self::node()[self::*[contains(@class," topic/row ") or contains(@class," topic/strow ") or contains(@class," topic/sthead ")]][1][self::*[contains(@class," topic/row ")]] + + + + + customColumnInsertion + true + + + defaultNamespace + + + + insertLocation + After + + + insertMultipleColumns + true + + + insertPosition + After + + + + + ro.sync.ecss.extensions.dita.topic.table.cals.InsertColumnOperation + + + + + ancestor-or-self::node()[self::*[contains(@class," topic/row ") or contains(@class," topic/strow ") or contains(@class," topic/sthead ")]][1][self::*[contains(@class," topic/strow ") or contains(@class," topic/sthead ")]] + + + + + customColumnInsertion + true + + + insertMultipleColumns + true + + + insertPosition + After + + + + + ro.sync.ecss.extensions.dita.topic.table.simpletable.InsertColumnOperation + + + + + + false + + + + + insert.table.rows.custom + + + ${i18n(insert.table.rows.custom)}... + + + ${i18n(insert.table.rows.custom_description)} + + + + + + + + + + + + + + + + + + self::*[contains(@class," topic/thead ") or contains(@class," topic/tbody ")] + + + + + customRowInsertion + true + + + insertLocation + + + + insertMultipleRows + true + + + insertPosition + Inside as first child + + + + + ro.sync.ecss.extensions.dita.topic.table.cals.InsertRowOperation + + + + + self::*[contains(@class," topic/simpletable ")] + + + + + customRowInsertion + true + + + insertMultipleRows + true + + + insertPosition + Inside as first child + + + + + ro.sync.ecss.extensions.dita.topic.table.simpletable.InsertRowOperation + + + + + ancestor-or-self::node()[self::*[contains(@class," topic/row ") or contains(@class," topic/strow ") or contains(@class, " topic/sthead ")]][1][self::*[contains(@class," topic/row ")]] + + + + + customRowInsertion + true + + + insertLocation + ancestor-or-self::*[contains(@class," topic/row ")][1] + + + insertMultipleRows + true + + + insertPosition + After + + + + + ro.sync.ecss.extensions.dita.topic.table.cals.InsertRowOperation + + + + + ancestor-or-self::node()[self::*[contains(@class," topic/row ") or contains(@class," topic/strow ") or contains(@class, " topic/sthead ")]][1][self::*[contains(@class," topic/strow ")]] + + + + + customRowInsertion + true + + + insertLocation + ancestor-or-self::*[contains(@class," topic/strow ")][1] + + + insertMultipleRows + true + + + insertPosition + After + + + + + ro.sync.ecss.extensions.dita.topic.table.simpletable.InsertRowOperation + + + + + ancestor-or-self::node()[self::*[contains(@class," topic/row ") or contains(@class," topic/strow ") or contains(@class, " topic/sthead ")]][1][self::*[contains(@class," topic/sthead ")]] + + + + + customRowInsertion + true + + + insertLocation + ancestor-or-self::*[contains(@class," topic/sthead ")][1] + + + insertMultipleRows + true + + + insertPosition + After + + + + + ro.sync.ecss.extensions.dita.topic.table.simpletable.InsertRowOperation + + + + + + false + + + + + insert.properties.table + + + ${i18n(props.table.wizard)} + + + ${i18n(props.table.description)} + + + + + + + + + + + + + + + + + + oxy:allows-global-element("*", "class", " reference/properties ") + + + + + defaultTableModel + properties + + + + + ro.sync.ecss.extensions.dita.topic.table.InsertTableOperation + + + + + + false + + + + + insert.choicetable + + + ${i18n(choicetable.wizard)} + + + ${i18n(choicetable.wizard_description)} + + + + + + + + + + + + + + + + + + oxy:allows-child-element("*", "class", " task/choicetable") +or self::*[contains(@class, " task/step ")] +or ancestor-or-self::*[contains(@class, " task/cmd ") and parent::*[contains(@class, " task/step ")]] + + + + + defaultTableModel + choice + + + + + ro.sync.ecss.extensions.dita.topic.table.InsertTableOperation + + + + + + false + + + + + insert.simpletable + + + ${i18n(simpletable.wizard)} + + + ${i18n(simpletable.wizard_description)} + + + + + + + + + + + + + + + + + + oxy:allows-global-element("*", "class", " topic/simpletable ") + + + + + defaultTableModel + simple + + + tableModel + simple + + + + + ro.sync.ecss.extensions.dita.topic.table.InsertTableOperation + + + + + + false + + + + + push.element + + + ${i18n(push.element)} + + + ${i18n(push.element_description)} + + + + + + + + + + + + + + + + + + + + + + + + ro.sync.ecss.extensions.dita.conref.PushElementOperation + + + + + + false + + + + + table.join + + + ${i18n(table.join)} + + + ${i18n(table.join_description)} + + + /images/TableJoin24.png + + + /images/TableJoin16.png + + + + + + + + + + + + ancestor-or-self::*[contains(@class," topic/table ")] + + + + + + ro.sync.ecss.extensions.dita.topic.table.cals.JoinOperation + + + + + + false + + + + + table.split + + + ${i18n(table.split)} + + + ${i18n(table.split_description)} + + + /images/TableSplitCell24.png + + + /images/TableSplitCell16.png + + + + + + + + + + + + oxy:current-selected-element()[self::*[contains(@class," topic/entry ") or +contains(@class," topic/stentry ")]][1][self::*[contains(@class," topic/entry ")]] or +ancestor-or-self::node()[self::*[contains(@class," topic/entry ") or +contains(@class," topic/stentry ")]][1][self::*[contains(@class," topic/entry ")]] + + + + + + ro.sync.ecss.extensions.dita.topic.table.cals.SplitOperation + + + + + + false + + + + + edit.image.map + + + ${i18n(Image_map_editor)}... + + + ${i18n(edit_image_map_description)} + + + + + + + + + + + + + + + + + + ancestor-or-self::*[contains(@class," ut-d/imagemap ")] or oxy:current-selected-element()[contains(@class," ut-d/imagemap ")] or +self::image[empty(parent::imagemap)] or oxy:current-selected-element()[self::image][empty(parent::imagemap)] + + + + + + ro.sync.ecss.extensions.dita.EditImageMapOperation + + + + + + false + + + + + imagemap.collapse.area + + + ${i18n(imagemap.toggle.area)} + + + ${i18n(imagemap.toggle.area_description)} + + + + + + /images/Expanded16.png + + + + + + + + + + + + 1 + + + + + elementLocation + .. + + + name + -oxy-visible-imagemap-area + + + + + ro.sync.ecss.extensions.commons.operations.RemovePseudoClassOperation + + + + + + true + + + + + imagemap.expand.area + + + ${i18n(imagemap.toggle.area)} + + + ${i18n(imagemap.toggle.area_description)} + + + + + + /images/Collapsed16.png + + + + + + + + + + + + 1 + + + + + elementLocation + .. + + + name + -oxy-visible-imagemap-area + + + + + ro.sync.ecss.extensions.commons.operations.SetPseudoClassOperation + + + + + + true + + + + + show.key.definition + + + ${i18n(show.key.definition)} + + + ${i18n(show.key.definition_description)} + + + + + + + + + + + + + + + + + + ancestor-or-self::*[@conkeyref] | ancestor-or-self::*[@keyref] | oxy:current-selected-element()[ancestor-or-self::*][@conkeyref] | oxy:current-selected-element()[ancestor-or-self::*][@keyref] + + + + + + ro.sync.ecss.extensions.dita.search.ShowKeyDefinitionOperation + + + + + + true + + + + + insert.table.wizard + + + ${i18n(table.wizard)} + + + ${i18n(table.wizard_description)} + + + /images/Table24.png + + + /images/Table16.png + + + + + + + + + + + + oxy:allows-global-element("*", "class", " topic/table ") + + + + + defaultTableModel + cals + + + + + ro.sync.ecss.extensions.dita.topic.table.InsertTableOperation + + + + + + false + + + + + insert.media + + + ${i18n(insert.media)} + + + ${i18n(insert.media_description)} + + + /images/InsertMedia24.png + + + /images/InsertMedia16.png + + + + + + + + + + + + oxy:allows-child-element("*", "class", " topic/object ") or oxy:allows-child-element("*", "class", "/video ") or oxy:allows-child-element("*", "class", "/audio ") + + + + + data + + + + + + ro.sync.ecss.extensions.dita.topic.InsertMediaOperation + + + + + + false + + + + + subscript + + + ${i18n(subscript)} + + + ${i18n(subscript_description)} + + + /images/Subscript24.png + + + /images/Subscript16.png + + + + + + + + + + + + + + + + + element + <sub/> + + + + + ro.sync.ecss.extensions.commons.operations.ToggleSurroundWithElementOperation + + + + + + false + + + + + superscript + + + ${i18n(superscript)} + + + ${i18n(superscript_description)} + + + /images/Superscript24.png + + + /images/Superscript16.png + + + + + + + + + + + + + + + + + element + <sup/> + + + + + ro.sync.ecss.extensions.commons.operations.ToggleSurroundWithElementOperation + + + + + + false + + + + + convert.cals.table.to.simple.table + + + ${i18n(convert.cals.table.to.simple.table)} + + + ${i18n(convert.cals.table.to.simple.table.description)} + + + + + + + + + + + + + + + + + + oxy:current-selected-element()[self::*[contains(@class," topic/table ")]] + + + + + externalParams + inPara=${xpath_eval(not(empty(oxy:current-selected-element()[self::*[contains(@class," topic/table ")]][1]/ancestor::p)))} + + + script + ${framework}/resources/author-action-scripts/convertCALSTable2Simpletable.xsl + + + sourceLocation + oxy:current-selected-element() + + + targetLocation + oxy:current-selected-element() + + + + + ro.sync.ecss.extensions.commons.operations.XSLTOperation + + + + + ancestor-or-self::*[self::*[contains(@class, " topic/table ")] or self::*[contains(@class, " topic/simpletable ")]][1][self::*[contains(@class, " topic/table ")]] and not(oxy:current-selected-element()[self::*[contains(@class," topic/simpletable ")]]) + + + + + externalParams + inPara=${xpath_eval(not(empty(ancestor-or-self::*[contains(@class," topic/table ")][1]/ancestor::p)))} + + + script + ${framework}/resources/author-action-scripts/convertCALSTable2Simpletable.xsl + + + sourceLocation + ancestor-or-self::*[contains(@class," topic/table ")][1] + + + targetLocation + ancestor-or-self::*[contains(@class," topic/table ")][1] + + + + + ro.sync.ecss.extensions.commons.operations.XSLTOperation + + + + + + false + + + + + convert.simple.table.to.cals.table + + + ${i18n(convert.simple.table.to.cals.table)} + + + ${i18n(convert.simple.table.to.cals.table.description)} + + + + + + + + + + + + + + + + + + oxy:current-selected-element()[self::*[contains(@class," topic/simpletable ")]] + + + + + script + ${framework}/refactoring/convertSimpletable2table.xsl + + + sourceLocation + oxy:current-selected-element() + + + targetLocation + oxy:current-selected-element() + + + + + ro.sync.ecss.extensions.commons.operations.XSLTOperation + + + + + ancestor-or-self::*[self::*[contains(@class, " topic/table ")] or self::*[contains(@class, " topic/simpletable ")]][1][self::*[contains(@class, " topic/simpletable ")]] and not(oxy:current-selected-element()[self::*[contains(@class," topic/table ")]]) + + + + + script + ${framework}/refactoring/convertSimpletable2table.xsl + + + sourceLocation + ancestor-or-self::*[contains(@class," topic/simpletable ")][1] + + + targetLocation + ancestor-or-self::*[contains(@class," topic/simpletable ")][1] + + + + + ro.sync.ecss.extensions.commons.operations.XSLTOperation + + + + + + false + + + + + apply.image.map + + + ${i18n(apply.image.map)} + + + ${i18n(apply.image.map.description)} + + + + + + + + + + + + + + + + + + oxy:current-selected-element()[contains(@class,'topic/image') and not(ancestor::imagemap) ] + + + + + fragment + <imagemap> + ${selection} + <area> + <shape/> + <coords/> + <xref/> + </area> +</imagemap> + + + insertLocation + oxy:current-selected-element() + + + insertPosition + Replace + + + + + ro.sync.ecss.extensions.commons.operations.InsertOrReplaceFragmentOperation + + + + + + false + + + + + insert.code.block + + + ${i18n(insert_code_block)} + + + ${i18n(insert_codeblock_description)} + + + /images/CodeBlock24.png + + + /images/CodeBlock16.png + + + + + + + + + + + + + + + + + fragment + <codeblock/> + + + insertPosition + After + + + + + ro.sync.ecss.extensions.commons.operations.InsertFragmentOperation + + + + + + false + + + + + insert.note + + + ${i18n(insert_note)} + + + ${i18n(insert_note_description)} + + + + + + /images/Note16.png + + + + + + + + + + + + + + + + + fragment + <note/> + + + insertPosition + After + + + + + ro.sync.ecss.extensions.commons.operations.InsertFragmentOperation + + + + + + false + + + + + insert.definition.list + + + ${i18n(insert_definition_list)} + + + ${i18n(insert_definition_list_description)} + + + + + + /images/DefinitionList16.png + + + + + + + + + + + + + + + + + fragment + <dl> + <dlentry> + <dt>${caret}</dt> + <dd/> + </dlentry> +</dl> + + + insertPosition + After + + + + + ro.sync.ecss.extensions.commons.operations.InsertFragmentOperation + + + + + + false + + + + + insert.code.phrase + + + ${i18n(code)} + + + ${i18n(code_description)} + + + /images/CodeBlock24.png + + + /images/CodeBlock16.png + + + + + + + + + + + + + + + + + element + <codeph/> + + + + + ro.sync.ecss.extensions.commons.operations.ToggleSurroundWithElementOperation + + + + + + false + + + + + up + + + ${i18n(Move_up)} + + + ${i18n(Move_up)} + + + /images/NodeUp24.png + + + /images/NodeUp16.png + + + + + + + + + + + + oxy:current-selected-element()[preceding-sibling::*[1]] + + + + + insertPosition + Before + + + sourceLocation + oxy:current-selected-element() + + + targetLocation + oxy:current-selected-element()/preceding-sibling::*[1] + + + + + ro.sync.ecss.extensions.commons.operations.MoveElementOperation + + + + + + false + + + + + down + + + ${i18n(Move_down)} + + + ${i18n(Move_down)} + + + /images/NodeDown24.png + + + /images/NodeDown16.png + + + + + + + + + + + + oxy:current-selected-element()[following-sibling::*[1]] + + + + + insertPosition + After + + + sourceLocation + oxy:current-selected-element() + + + targetLocation + oxy:current-selected-element()/following-sibling::*[1] + + + + + ro.sync.ecss.extensions.commons.operations.MoveElementOperation + + + + + + false + + + + + surround.uicontrol + + + ${i18n(surround_uicontrol)} + + + ${i18n(surround_uicontrol_description)} + + + ${framework}/img/UIControl24.png + + + ${framework}/img/UIControl16.png + + + + + + + + + + + + + + + + + element + <uicontrol/> + + + + + ro.sync.ecss.extensions.commons.operations.ToggleSurroundWithElementOperation + + + + + + false + + + + + surround.filepath + + + ${i18n(surround_filepath)} + + + ${i18n(surround_filepath_description)} + + + ${framework}/img/Filepath24.png + + + ${framework}/img/Filepath16.png + + + + + + + + + + + + + + + + + element + <filepath/> + + + + + ro.sync.ecss.extensions.commons.operations.ToggleSurroundWithElementOperation + + + + + + false + + + + + insert.menucascade + + + ${i18n(insert_menucascade)} + + + ${i18n(insert_menucascade_description)} + + + ${framework}/img/MenuCascade24.png + + + ${framework}/img/MenuCascade16.png + + + + + + + + + + + + + + + + + fragment + <menucascade><uicontrol/><uicontrol/></menucascade> + + + insertPosition + After + + + + + ro.sync.ecss.extensions.commons.operations.InsertFragmentOperation + + + + + + false + + + + + + + + DITA + + + D + + + + + + + + + reuse.content + + + + + push.element + + + + + + add_edit_content_reference + + + + + conref.replace + + + + + all.keyref.conref.replace + + + + + remove_content_reference + + + + + + create_reusable_component + + + + + insert_reusable_component + + + + + + ${i18n(paste.special)} + + + + + + /images/PasteSpecialDITA16.png + + + + + + paste.content.reference + + + + + paste.content.key.reference + + + + + + paste.reference + + + + + paste.key.reference + + + + + + + + + + + ${i18n(insert)} + + + + + + + + + + + + paragraph + + + + + section + + + + + insert.concept + + + + + insert.task + + + + + insert.topic + + + + + insert.reference + + + + + + insert.note + + + + + insert.code.block + + + + + insert.menucascade + + + + + + insert.image + + + + + insert.media + + + + + insert.equation + + + + + + + + + + + ${i18n(style)} + + + + + + + + + + + + bold + + + + + italic + + + + + underline + + + + + + subscript + + + + + superscript + + + + + + insert.code.phrase + + + + + surround.filepath + + + + + + surround.uicontrol + + + + + + + + + + + ${i18n(link)} + + + + + + /images/Link16.png + + + + + + insert.cross.reference + + + + + insert.file.reference + + + + + insert.url.reference + + + + + insert.related.link.2.topic + + + + + insert.related.link.2.file + + + + + insert.related.link.2.web.page + + + + + + + + + + + + ${i18n(list)} + + + + + + /images/UnorderedList16.png + + + + + + listitem + + + + + unorderedList + + + + + orderedList + + + + + insert.definition.list + + + + + + + + + + + ${i18n(table)} + + + + + + /images/Table16.png + + + + + + insert.table + + + + + + insert.table.row.above + + + + + insert.table.row.below + + + + + insert.table.rows.custom + + + + + delete.table.row + + + + + + insert.table.column.before + + + + + insert.table.column.after + + + + + insert.table.columns.custom + + + + + delete.table.column + + + + + + insert.table.entry + + + + + + table.join + + + + + table.split + + + + + + convert.cals.table.to.simple.table + + + + + convert.simple.table.to.cals.table + + + + + show.table.properties + + + + + + + + + + + + id.options + + + + + generate.ids + + + + + + find.similar.topics + + + + + styleguide + + + + + + + + + + + + + Contextual Menu + + + + + + + + + + + + edit.image.map + + + + + ${i18n(paste.special)} + + + + + + /images/PasteSpecialDITA16.png + + + + + + paste.content.reference + + + + + paste.content.key.reference + + + + + + paste.reference + + + + + paste.key.reference + + + + + + + + + + + + ${i18n(table)} + + + + + + /images/Table16.png + + + + + + insert.table.rows.custom + + + + + delete.table.row + + + + + + insert.table.columns.custom + + + + + delete.table.column + + + + + + table.join + + + + + table.split + + + + + + sort_table + + + + + + convert.cals.table.to.simple.table + + + + + convert.simple.table.to.cals.table + + + + + show.table.properties + + + + + + table + + + + + ${i18n(insert)} + + + + + + + + + + + + insert.table + + + + + insert.image + + + + + insert.media + + + + + insert.equation + + + + + + insert.note + + + + + insert.code.block + + + + + insert.menucascade + + + + + insert.definition.list + + + + + + paragraph + + + + + section + + + + + insert.concept + + + + + insert.task + + + + + insert.topic + + + + + insert.reference + + + + + + + + + + + ${i18n(style)} + + + + + + + + + + + + bold + + + + + italic + + + + + underline + + + + + + subscript + + + + + superscript + + + + + + insert.code.phrase + + + + + surround.filepath + + + + + + surround.uicontrol + + + + + + + + + + + ${i18n(link)} + + + + + + /images/Link16.png + + + + + + insert.cross.reference + + + + + insert.file.reference + + + + + insert.url.reference + + + + + + insert.related.link.2.topic + + + + + insert.related.link.2.file + + + + + insert.related.link.2.web.page + + + + + + + + + + + sort + + + + + + generate.ids + + + + + ${i18n(reuse)} + + + + + + + + + + + + reuse.content + + + + + push.element + + + + + + add_edit_content_reference + + + + + conref.replace + + + + + all.keyref.conref.replace + + + + + remove_content_reference + + + + + + create_reusable_component + + + + + insert_reusable_component + + + + + + + + + + + search.references + + + + + find.similar.topics + + + + + show.key.definition + + + + + + ${i18n(about.element)} + + + + + + + + + + + + styleguide.context + + + + + show.DITA.documentation + + + + + + + + + + + + + + + + + + + + DITA + + + 2 + + + + + + + + + + + + bold + + + + + italic + + + + + underline + + + + + + ${i18n(link)} + + + 3 + + + /images/Link24.png + + + /images/Link16.png + + + + + + insert.cross.reference + + + + + insert.file.reference + + + + + insert.url.reference + + + + + + insert.related.link.2.topic + + + + + insert.related.link.2.file + + + + + insert.related.link.2.web.page + + + + + + + + insert.image + + + + + insert.media + + + + + ${i18n(section)} + + + 3 + + + /images/Section24.png + + + /images/Section16.png + + + + + + section + + + + + insert.concept + + + + + insert.task + + + + + insert.topic + + + + + insert.reference + + + + + + + + paragraph + + + + + + reuse.content + + + + + + listitem + + + + + orderedList + + + + + unorderedList + + + + + + sort + + + + + + insert.table + + + + + insert.table.row.below + + + + + delete.table.row + + + + + insert.table.column.after + + + + + delete.table.column + + + + + + show.table.properties + + + + + + table.join + + + + + table.split + + + + + + + + + + + + + + + + + 0 + + + + insert.properties.table + + + + + + + + + + + + false + + + false + + + + + + 0 + + + + insert.simpletable + + + + + + simpletable + + + + + + false + + + true + + + + + + 0 + + + + insert.table.wizard + + + + + + table + + + + + + false + + + true + + + + + + 0 + + + + insert.table.row.below + + + + + + + + + + + + false + + + false + + + + + + 0 + + + + insert.choicetable + + + + + + + + + + + + false + + + false + + + + + + 0 + + + + insert.image + + + + + + image + + + + + + false + + + true + + + + + + 0 + + + + insert.cross.reference + + + ${i18n(xref.cross.reference)} + + + + + + + + + false + + + false + + + + + + 0 + + + + insert.url.reference + + + ${i18n(xref.web.link)} + + + + + + + + + false + + + false + + + + + + 0 + + + + cc.insert.related.link.2.topic + + + ${i18n(link.cross.reference)} + + + + + + + + + false + + + false + + + + + + 0 + + + + cc.insert.related.link.2.web.page + + + ${i18n(link.web.link)} + + + + + + + + + false + + + false + + + + + + + + + + 0 + + + + <SPLIT> table + + + + + + 0 + + + + <SPLIT> entry + + + + + + 0 + + + + row + + + + + + 0 + + + + choicetable + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${configured.ditaot.dir}/plugins/*/template_folders/* + ${frameworkDir}/templates/sample-project + ${frameworkDir}/templates/topic + ${frameworkDir}/templates/topic-xsd + ${frameworkDir}/templates/topic-rng + ${configured.ditaot.dir}/org.dita-ng.doctypes_oxygen_templates/topic-rng + ${configured.ditaot.dir}/plugins/net.sourceforge.dita4publishers.doctypes/oxygen_templates/topic (Dita 4 Publishers) + ${configured.ditaot.dir}/plugins/org.oasis-open.dita.v1_3/oxygen_templates/DITA 1.3/topic-rng + ${configured.ditaot.dir}/plugins/mathml/oxygen_templates/MathML + + + + + ${framework}/catalog.xml + ${configured.ditaot.dir.url}/catalog-dita.xml + ${framework}/styleguide/catalog.xml + ${framework}/plugin/catalog.xml + + + + Darwin Information Typing Architecture + + + + + + * + + + * + + + * + + + * + + + + + + noNamespaceSchemaLocation + + + http://www.w3.org/2001/XMLSchema-instance + + + urn:oasis:names:tc:dita:xsd:*task*.xsd + + + + + * + + + * + + + * + + + * + + + + + + noNamespaceSchemaLocation + + + http://www.w3.org/2001/XMLSchema-instance + + + urn:oasis:names:tc:dita:xsd:*reference*.xsd + + + + + * + + + * + + + * + + + * + + + + + + noNamespaceSchemaLocation + + + http://www.w3.org/2001/XMLSchema-instance + + + urn:oasis:names:tc:dita:xsd:*topic*.xsd + + + + + * + + + * + + + * + + + * + + + + + + noNamespaceSchemaLocation + + + http://www.w3.org/2001/XMLSchema-instance + + + urn:oasis:names:tc:dita:xsd:*concept*.xsd + + + + + + + + dita + + + * + + + * + + + + + + * + + + * + + + * + + + + + + + + * + + + * + + + *-//OASIS//DTD DITA Composite* + + + + + + * + + + * + + + * + + + + + + + + * + + + * + + + *-//OASIS//DTD DITA Concept* + + + + + + * + + + * + + + * + + + + + + + + * + + + * + + + *-//OASIS//DTD DITA General Task* + + + + + + * + + + * + + + * + + + + + + + + * + + + * + + + *-//OASIS//DTD DITA Glossary* + + + + + + * + + + * + + + * + + + + + + + + * + + + * + + + *-//OASIS//DTD DITA Glossary Group* + + + + + + * + + + * + + + * + + + + + + + + * + + + * + + + *-//OASIS//DTD DITA Machinery Task* + + + + + + * + + + * + + + * + + + + + + + + * + + + * + + + *-//OASIS//DTD DITA Reference* + + + + + + * + + + * + + + * + + + + + + + + * + + + * + + + *-//OASIS//DTD DITA Task* + + + + + + * + + + * + + + * + + + + + + + + * + + + * + + + *-//OASIS//DTD DITA Topic* + + + + + + * + + + * + + + * + + + + + + + + * + + + * + + + *-//OASIS//DTD DITA Troubleshooting* + + + + + + * + + + * + + + * + + + + + + + + * + + + * + + + *-//OASIS//DTD DITA Learning Overview* + + + + + + * + + + * + + + * + + + + + + + + * + + + * + + + *-//OASIS//DTD DITA Learning Content* + + + + + + * + + + * + + + * + + + + + + + + * + + + * + + + *-//OASIS//DTD DITA Learning Plan* + + + + + + * + + + * + + + * + + + + + + + + * + + + * + + + *-//OASIS//DTD DITA Learning Summary* + + + + + + * + + + * + + + * + + + + + + + + * + + + * + + + *-//OASIS//DTD DITA Learning Assessment* + + + + + + * + + + * + + + * + + + + + * + + + * + + + * + + + * + + + ro.sync.ecss.extensions.dita.topic.DITATopicCustomRuleMatcher + + + * + + + * + + + * + + + + + + + + + false + + + false + + + true + + + ${cfd} + + + ${cfd}/out/topic-html5 + + + ${cfd}/temp/topic-html5 + + + html5 + + + + + false + + + true + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + + + false + + + + + + + + + true + + + + + + DITA HTML5 + + + + + + + + + + + + + + + + + + + + + + + + false + + + false + + + DITAMAP + + + true + + + true + + + + + + false + + + + + + false + + + false + + + false + + + false + + + false + + + false + + + + + + + + + DITA-OT + + + + + + + + false + + + false + + + true + + + ${cfd} + + + ${cfd}/out/topic-xhtml + + + ${cfd}/temp/topic-xhtml + + + xhtml + + + + + false + + + true + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + + + false + + + + + + + + + true + + + + + + DITA XHTML + + + + + + + + + + + + + + + + + + + + + + + + false + + + false + + + DITAMAP + + + true + + + true + + + + + + false + + + + + + false + + + false + + + false + + + false + + + false + + + false + + + + + + + + + DITA-OT + + + + + + + + false + + + false + + + true + + + ${cfd} + + + ${cfd}/out/topic-pdf-css-html5 + + + ${cfd}/temp/topic-pdf-css-html5 + + + pdf-css-html5-single-topic + + + + + false + + + true + + + + + + + + + + + + + + true + + + + + + + + + + + + + + ${configured.ditaot.dir}/plugins/com.oxygenxml.webhelp.responsive/templates/oxygen + + + oxygen-tiles.opt + + + false + + + + + + + + + + + + + + + + + + + + args.root.map + + + + + + ${rootMapFile} + + + + + + 2 + + + + + + + + + + + + + + + false + + + + + + false + + + + + + + + + true + + + + + + DITA PDF - based on HTML5 & CSS + + + + + + + + + + + + + + + + + + + + + + + + false + + + false + + + DITAMAP + + + true + + + true + + + + + + false + + + + + + false + + + false + + + false + + + false + + + false + + + false + + + + + + + + + DITA-OT + + + + + + + + false + + + false + + + true + + + ${cfd} + + + ${cfd}/out/topic-pdf + + + ${cfd}/temp/topic-pdf + + + pdf2 + + + + + false + + + true + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + xep.failOnError + + + + + + true + + + + + + 4 + + + + + true + + + + + + + + + + + + + false + + + + + + false + + + + + + + + + true + + + + + + DITA PDF - based on XSL-FO + + + + + + + + + + + + + + + + + + + + + + + + false + + + false + + + DITAMAP + + + true + + + true + + + + + + false + + + + + + false + + + false + + + false + + + false + + + false + + + false + + + + + + + + + DITA-OT + + + + + + + + + + + + + + + + + text/xml + + + + + ${currentFileURL} + + + + + <Default engine> + + + true + + + + + true + + + + + + + + + + + + + + + + text/xml + + + + + ${currentFileURL} + + + + + <Default engine> + + + true + + + + + true + + + + + + + + + + + + + + 7 + + + ${framework}/resources/dita-1.2-for-xslt2-mandatory.sch + + + + + + + + + + + + text/xml + + + + + ${currentFileURL} + + + + + DITA Validation + + + true + + + + + true + + + + + + + + + + + + + + + + text/xml + + + + + ${currentFileURL} + + + + + <Default engine> + + + true + + + + + false + + + + + + + + + + + + + + 7 + + + ${framework}/styleguide/rules/styleguide.sch + + + + + + + + + + + Validation_scenario + + + DITA + + + + + + + + + + text/xml + + + + + ${currentFileURL} + + + + + <Default engine> + + + true + + + + + true + + + + + + + + + + + + + + 7 + + + ${framework}/resources/accessibility.sch + + + + + + + + + + + Validation_scenario + + + Accessibility + + + + + + + DITA + + + + + + + ro.sync.ecss.extensions.dita.DITAExtensionsBundle + + + true + + + Author + + + + + + + + + + + + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + + + + + editor.format.break.line.elements + + + + ol + + + 1 + + + + + p + + + 1 + + + + + ul + + + 1 + + + + + xref + + + 1 + + + + + dl + + + 1 + + + + + parml + + + 1 + + + + + title + + + 0 + + + + + section + + + 0 + + + + + indexterm + + + 1 + + + + + index-see + + + 1 + + + + + index-see-also + + + 1 + + + + + + editor.format.preserve.spaces.elements.v11 + + xsl:text + address + literallayout + programlisting + screen + synopsis + pre + xd:pre + codeblock + msgblock + lines + + + + editor.hard.line.wrap + true + + + editor.indent.in.preserve.space.elements + false + + + editor.indent.size.v9.2 + 2 + + + editor.line.width + 120 + + + enable.project.master.files.support + true + + + key.editor.document.type.association.option.pane + true + + + key.editor.document.type.custom.locations.option.pane + true + + + key.editor.format.option.pane.group + true + + + key.editor.format.xml.option.pane + true + + + key.editor.open.option.pane + false + + + key.editor.save.option.pane + false + + + key.markdown.schematron.validator.option.pane + false + + + key.topics.option.pane + true + + + keys.context + ${pdu}/userguide.ditamap + + + profiling.conditions + true + + + profiling.conditions.list + + + + deliveryTarget + + + true + + + + + + html + + + + + + 0 + + + + + + + + pdf + + + + + + 0 + + + + + + + + webhelp + + + + + + 0 + + + + + + + + + *DITA* + + + + + + + + + + + + profiling.conditions.set.list + + + + + + + *DITA* + + + HTML + + + ${pd}/resources/html.ditaval + + + true + + + + + + + + + + + *DITA* + + + PDF + + + ${pd}/resources/pdf.ditaval + + + true + + + + + + + + + scenarios + + + + false + + + false + + + false + + + ${cfd} + + + ${cfd}/out/metrics-report + + + ${cfd}/temp/metrics-report + + + metrics-report + + + + + false + + + true + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + args.input + + + + + + ${pd}/userguide.ditamap + + + + + + 5 + + + + + + + + + + + dita.dir + + + + + + ${frameworksDir}/dita/DITA-OT3.x + + + + + + 3 + + + + + + + + + + + + -Xmx384m + + + false + + + + + + false + + + + + + + + + true + + + + + + DITA Map Metrics Report + + + + + + + + + + + + + + + + + + + + + + + + false + + + false + + + DITAMAP + + + true + + + true + + + + + + true + + + ${cfd}/out/metrics-report/report.html + + + false + + + false + + + false + + + false + + + false + + + false + + + + + + + + + DITA-OT + + + + + + + + false + + + false + + + false + + + ${cfd} + + + ${cfd}/out/webhelp + + + ${cfd}/temp/webhelp + + + webhelp + + + + + false + + + true + + + + + + + + + + + + + + true + + + ${configured.ditaot.dir}/plugins/com.oxygenxml.webhelp/predefined-skins/dita/oxygen/skin.css + + + + + + + + + + + + + + + + + + + + + + + + + + + args.xhtml.classattr + + + + + + yes + + + yes + + + 4 + + + + yes + no + + + + + + + + + + + + + + -Xmx384m + + + false + + + + + + false + + + + + + + + + false + + + + + + DITA-OT User Guide WebHelp + + + + + + + + + + + + + + + + + + + + + + + + false + + + false + + + DITAMAP + + + true + + + true + + + + + + false + + + + + + false + + + false + + + false + + + false + + + false + + + false + + + + + + + + + DITA-OT + + + + + + + + + + + DITA Map Metrics Report + + + + + + + + + pdf + + + Apache FOP + + + + + + ${frameworks}/dita/report/report.xsl + + + ${currentFileURL} + + + false + + + false + + + XML + + + true + + + true + + + ${cfd}/out/metrics-report/${cfn}-report.html + + + false + + + + + + false + + + false + + + false + + + false + + + false + + + true + + + + + + + ${frameworks}/dita/report/report2XHTML.xsl + + + + Saxon-PE + + + + + + + + + storage.level.scenario.associations + false + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..5c304d1 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,201 @@ +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..6f86bfa --- /dev/null +++ b/README.md @@ -0,0 +1,154 @@ +# DITA Open Toolkit Docs [![Build Status][1]](https://github.com/dita-ot/docs/actions/workflows/deploy.yml) [![DITA-OT Discussions][2]](https://github.com/orgs/dita-ot/discussions) + +This repository tracks the [documentation][3] source files for the [DITA Open Toolkit project][4]. + + + +- [Building the documentation output](#building-the-documentation-output) +- [Building with development versions of DITA Open Toolkit](#building-with-development-versions-of-dita-open-toolkit) +- [Contribution guidelines](#contribution-guidelines) +- [Installing formatting tools](#installing-formatting-tools) +- [Running Prettier](#running-prettier) + + + +## Building the documentation output + +> **Note** +> +> The maps in this repository contain references to additional topics that are created at build time from the toolkit’s plug-in configuration. +> +> To generate the missing topics and build the HTML and PDF versions of the documentation, run the Gradle build script from the root level of the `docs` repository and pass the path to your DITA-OT installation as a parameter. + +### Prerequisites + +You must have a JRE and a local installation of DITA-OT. There is no need to download and install Gradle. + +### Steps + +1. Open a command prompt, and change to the directory of your docs repository clone. +2. Type a variant of the following command for your operating system, adjust the path to your DITA-OT installation, and press Enter: + + - On **Linux**, **macOS**, or **Git Bash**, use `./gradlew`: + + ./gradlew -PditaHome=/path/to/dita-ot + + - On **Windows**, use `gradlew.bat`: + + gradlew.bat -PditaHome=C:\path\to\dita-ot + +
+Alternative: Using a DITA-OT repository clone + +If you’re using a clone of the [DITA-OT development repository][5] as your toolkit installation alongside your clone of the `docs` repository: + +1. In the root directory of your `dita-ot` repository, run Gradle to compile the Java code and install plugins. + + - On **Linux**, **macOS**, or **Git Bash**, use `./gradlew`. + - On **Windows**, use `gradlew.bat`. + +2. Then run the Gradle build in the `docs` repository to generate topics and build the documentation output. + + - On **Linux**, **macOS**, or **Git Bash**, run the build script like this: + + ./gradlew -PditaHome=../dita-ot/src/main + + - On **Windows**, use `gradlew.bat`: + + gradlew.bat -PditaHome=C:\path\to\dita-ot\src\main + +
+ +You can also specify a single output format. To build HTML for example, add `html` to the end of the command: + + ./gradlew -PditaHome=/path/to/dita-ot html + +### Results + +If all goes well, you receive a "BUILD SUCCESSFUL" message, and the generated DITA topics are written to the `extension-points` and `parameters` directories in the `out` folder of the `docs` repository. + +This folder is created automatically if it doesn’t exist. _(Git ignores the contents so you don’t inadvertently commit these transient output files.)_ + +## Building with development versions of DITA Open Toolkit + +The `develop` branch of the documentation repository may depend on features from recent development versions of DITA Open Toolkit. + +To use these features when building the documentation, you may either download the [latest development version][6] of the distribution package, or clone the [DITA-OT repository][5] and install the [bundled plug-ins][7] via `dita install`. + +## Contribution guidelines + +We welcome contributions to the DITA-OT documentation. Please review the [guidelines for contributing][8] to this repository before creating issues or opening pull requests. + +For best results, follow the [coding guidelines][9] and [best practices][10] outlined in the docs project wiki: + +- [Test before committing][11] +- [Commit related changes][12] +- [Commit often][13] +- [Write good commit messages][14] +- [Sign your work][15] + +## Installing formatting tools + +The documentation repository uses the following JavaScript tools to keep source files consistently formatted: + +- [Prettier][16] is an opinionated code formatter that enforces a consistent style by parsing code and re-printing it. +- [Husky][17] uses Git hooks to ensure that Prettier runs on all staged changes to format files before committing. + +### Prerequisites + +- You must have a stand-alone installation of Git from [git-scm.com/downloads][18]. +- Include the Git installation location in the [`PATH`][19] environment variable. + +### Steps + +To set these tools up: + +1. Install Node.js® from [nodejs.org][20] +2. Open a command prompt, and change to the directory of your docs repository clone. +3. Run `npm install` + +With these tools in place, any changes you make to the documentation source files will be automatically formatted when you commit them with Git. This ensures that commits contain only related changes, and no extra formatting. + +
+Troubleshooting + +If the `git` command is not available in your command-line environment, the Husky installation may fail with an error message: + + "Cannot read property 'toString' of null" + +_Solution:_ Uninstall Husky via `npm husky uninstall`. Install [Git][18]. Add the installation location to the [`PATH`][19] environment variable. Re-run `npm install`. + +
+ +## Running Prettier + +If you'd like to check whether your changes are formatted correctly, or format them before committing, you can run Prettier manually from the command line. + +### Check formatting + + npm run check + +### Format all files + + npm run format + +[1]: https://github.com/dita-ot/docs/actions/workflows/deploy.yml/badge.svg +[2]: https://img.shields.io/github/discussions/dita-ot/dita-ot?label=DITA-OT%20Discussions +[3]: https://www.dita-ot.org/dev/ +[4]: https://www.dita-ot.org +[5]: https://github.com/dita-ot/dita-ot +[6]: https://s3-eu-west-1.amazonaws.com/dita-ot/dita-ot-develop.zip +[7]: https://github.com/dita-ot/dita-ot/blob/develop/build.gradle#L206-L217 +[8]: .github/CONTRIBUTING.md +[9]: https://github.com/dita-ot/docs/wiki/Coding-guidelines +[10]: https://github.com/dita-ot/docs/wiki/Git-workflow#best-practices +[11]: https://github.com/dita-ot/docs/wiki/Git-workflow#test-before-committing +[12]: https://github.com/dita-ot/docs/wiki/Git-workflow#commit-related-changes +[13]: https://github.com/dita-ot/docs/wiki/Git-workflow#commit-often +[14]: https://github.com/dita-ot/docs/wiki/Git-workflow#writing-good-commit-messages +[15]: https://www.dita-ot.org/DCO +[16]: https://prettier.io +[17]: https://github.com/typicode/husky +[18]: https://git-scm.com/downloads +[19]: https://en.wikipedia.org/wiki/PATH_(variable) +[20]: https://nodejs.org diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..d9c54a0 --- /dev/null +++ b/build.gradle @@ -0,0 +1,192 @@ +plugins { + id 'com.github.eerohele.dita-ot-gradle' version '0.7.1' + id 'com.github.eerohele.saxon-gradle' version '0.9.0-beta4' +} + +// Specify Saxon version per https://github.com/eerohele/saxon-gradle/blob/master/README.md + +repositories { + mavenCentral() +} + +configurations { + saxon +} + +dependencies { + // Use Saxon-HE 10.6 like DITA-OT, instead of the version that comes with `saxon-gradle` + saxon 'net.sf.saxon:Saxon-HE:10.6' +} + +import com.github.eerohele.DitaOtTask +import com.github.eerohele.SaxonXsltTask + +def getPropertyOrDefault(String name, def defaultValue) { + hasProperty(name) ? findProperty(name) : defaultValue +} + +String ditaHome = getPropertyOrDefault('ditaHome', projectDir.getParent()) +String ditaHomeSrc = getPropertyOrDefault('ditaHomeSrc', ditaHome) +String configDir = "${ditaHomeSrc}/config" +String ditavalFile = "${projectDir}/platform.ditaval" +Boolean toolkitBuild = file("${projectDir}/../lib/dost.jar").exists() +String samplesDir = toolkitBuild ? "${ditaHome}/docsrc/samples" : "${projectDir}/samples" +String outputDir = getPropertyOrDefault('outputDir', toolkitBuild ? "${ditaHome}/doc" : "${projectDir}/out") + +String toURI(String path) { + file(path).toURI().toString() +} + +ditaOt.dir ditaHome + +task messages(type: SaxonXsltTask) { + input "${configDir}/messages.xml" + output "${projectDir}/topics/error-messages.xml" + stylesheet "${projectDir}/resources/messages.xsl" +} + +task params(type: SaxonXsltTask) { + input "${configDir}/plugins.xml" + output "${projectDir}/parameters/all-parameters.dita" + stylesheet "${projectDir}/resources/params.xsl" + parameters('output-dir.url': toURI('parameters')) + outputs.dir "${projectDir}/parameters" +} + +task extensionPoints(type: SaxonXsltTask) { + input "${configDir}/plugins.xml" + output "${projectDir}/extension-points/all-extension-points.dita" + stylesheet "${projectDir}/resources/extension-points.xsl" + parameters('output-dir.url': toURI('extension-points')) + outputs.dir "${projectDir}/extension-points" +} + +task generatePlatformFilter { + ant.condition(property: 'platform', value: 'windows') { + os(family: 'windows') + } + + ant.condition(property: 'platform', value: 'mac' ) { + os(family: 'mac') + } + + ant.condition(property: 'platform', value: 'unix' ) { + os(family: 'unix') + } + + ant.echoxml(file: ditavalFile) { + val { + prop(action: 'include', att: 'platform', val: platform) + prop(action: 'exclude', att: 'platform') + } + } +} + +task generatePropertiesTemplate(type: SaxonXsltTask) { + input "${configDir}/plugins.xml" + output "${samplesDir}/properties/template.properties" + stylesheet "${projectDir}/resources/properties-file.xsl" +} + +task autoGenerate(dependsOn: [messages, params, extensionPoints, generatePlatformFilter, generatePropertiesTemplate]) { + description 'Run tasks that generate content from resource files and the build environment.' +} + +task pdf(type: DitaOtTask, dependsOn: autoGenerate) { + input "${projectDir}/userguide-book.ditamap" + output outputDir + transtype 'pdf' + filter "${projectDir}/resources/pdf.ditaval" + + properties { + property(name: 'args.chapter.layout', value: 'BASIC') + property(name: 'args.gen.task.lbl', value: 'YES') + property(name: 'include.rellinks', value: '#default external') + property(name: 'outputFile.base', value: 'userguide') + property(name: 'theme', value: "${projectDir}/samples/themes/dita-ot-docs-theme.yaml") + } +} + +task html(type: DitaOtTask, dependsOn: autoGenerate) { + input "${projectDir}/userguide.ditamap" + output outputDir + transtype 'html5' + filter "${projectDir}/resources/html.ditaval" + + properties { + property(name: 'args.copycss', value: 'yes') + property(name: 'args.css', value: 'dita-ot-doc.css') + property(name: 'args.csspath', value: 'css') + property(name: 'args.cssroot', value: "${projectDir}/resources/") + property(name: 'args.gen.task.lbl', value: 'YES') + property(name: 'args.hdr', value: "${projectDir}/resources/header.xml") + property(name: 'args.rellinks', value: 'noparent') + property(name: 'html5.toc.generate', value: 'no') + property(name: 'nav-toc', value: 'partial') + } +} + +task htmlhelp(type: DitaOtTask, dependsOn: autoGenerate) { + input "${projectDir}/userguide.ditamap" + output outputDir + transtype 'htmlhelp' + filter ditavalFile + + properties { + property(name: 'args.copycss', value: 'yes') + property(name: 'args.css', value: 'dita-ot-doc.css') + property(name: 'args.csspath', value: 'css') + property(name: 'args.cssroot', value: "${projectDir}/resources/") + property(name: 'args.gen.task.lbl', value: 'YES') + } + + doLast { + ant.move(todir: outputDir, failonerror: 'no') { + fileset(dir: "${outputDir}/htmlhelp", includes: '*.chm') + } + + ant.delete(dir: "${outputDir}/htmlhelp") + } +} + +task cleanUp { + doLast { + ant.delete(dir: outputDir) + } +} + +def commit = new ByteArrayOutputStream() + +task gitMetadata { + doLast { + exec { + workingDir = projectDir + commandLine 'git' + args = ['rev-parse', 'HEAD'] + standardOutput = commit + } + } +} + +task site(type: DitaOtTask) { + dependsOn 'messages', 'params', 'extensionPoints', 'gitMetadata' + + input file("${projectDir}/site.ditamap") + output getPropertyOrDefault('outputDir', "${buildDir}/site") + filter "${projectDir}/resources/site.ditaval" + + transtype 'org.dita-ot.html' + + properties { + property(name: 'args.gen.task.lbl', value: 'YES') + property(name: 'args.rellinks', value: 'noparent') + if (!(project.hasProperty('noCommitMeta') && Boolean.parseBoolean(project.property('noCommitMeta')))) { + property(name: 'commit', value: commit) + } + } +} + +task all(dependsOn: [pdf, html, htmlhelp]) +task dist(dependsOn: [pdf, html]) + +defaultTasks 'dist' diff --git a/extension-points/extension-points-by-plugin.dita b/extension-points/extension-points-by-plugin.dita new file mode 100644 index 0000000..3c33c4b --- /dev/null +++ b/extension-points/extension-points-by-plugin.dita @@ -0,0 +1,25 @@ + + + + + Extension points by plug-in + + Plug-in extension points + + The default plug-ins that ship with DITA Open Toolkit include a series of extension points that can be used + to modify various aspects of toolkit processing. + + + + plug-ins + extension points + + + + +
+

If your toolkit installation includes custom plug-ins that define additional extension points, you can add + topics by rebuilding the DITA-OT documentation.

+
+
+
diff --git a/extension-points/extension-points-details.dita b/extension-points/extension-points-details.dita new file mode 100644 index 0000000..5d5bc32 --- /dev/null +++ b/extension-points/extension-points-details.dita @@ -0,0 +1,144 @@ + + + + + Extension points details + This file provides additional details that are pushed to the generated topics to replace the navigation + titles and short descriptions embedded in the plug-in source code. Descriptions for individual extension points are + pushed from the manually authored topics as necessary. + + + + + + + + + + All transformations + + Common processing + + The + org.dita.base plug-in provides common extension points that are available to extend processing + in all transformations that DITA Open Toolkit supports. + org.dita.base + extension points + common + + + + + + + HTML-based output formats + + HTML-based output + + The + org.dita.xhtml plug-in provides shared extension points that can be used to modify processing + in HTML-based transformation types such as Eclipse help, HTML Help, and XHTML. + org.dita.xhtml + extension points + HTML + extension points + HTML5 + extension points + HTML Help + extension points + Eclipse Help + extension points + XHTML + HTML + HTML5 + extension points + HTML Help + Eclipse Help + XHTML + + + + + + + HTML5 extension points + + HTML5 + + In + addition to the extension points provided by common processing and those shared by with other HTML-based + transformations, the org.dita.html5 plug-in provides extension points that are specific to the + HTML5 transformation. + org.dita.html5 + extension points + org.dita.html5 + + + + + + + Eclipse Help + + Eclipse Help (org.dita.eclipsehelp) + + Certain extension points + are specific to the Eclipse Help transformation. + org.dita.eclipsehelp + extension points + org.dita.eclipsehelp + Eclipse Help + + + + + + + HTML Help + + HTML Help + + Certain extension points are + specific to the HTML Help transformation. + org.dita.htmlhelp + extension points + org.dita.htmlhelp + HTML Help + + + + + + + PDF + + PDF (org.dita.pdf2) + + Certain extension points are specific to the PDF transformation (formerly known as “PDF2”). + PDF + org.dita.pdf2 + org.dita.pdf2 + extension points + org.dita.pdf2 + + + + + + + diff --git a/extension-points/extension-points.ditamap b/extension-points/extension-points.ditamap new file mode 100644 index 0000000..69dffd6 --- /dev/null +++ b/extension-points/extension-points.ditamap @@ -0,0 +1,25 @@ + + + + + DITA-OT extension points + + + + + + + + + + + + + + + + + + + + diff --git a/extension-points/plugin-extension-points-general.dita b/extension-points/plugin-extension-points-general.dita new file mode 100644 index 0000000..8943405 --- /dev/null +++ b/extension-points/plugin-extension-points-general.dita @@ -0,0 +1,119 @@ + + + + + General extension points + These extension points enable you to extend DITA-OT. You can add Ant targets or imports; add a Java library + to the classpath parameter; add a new transformation type; extend a catalog file; add new + diagnostic messages, and more. + + + + deprecated features + dita.conductor.target + deprecated features + dita.specialization.catalog + + + + +
+
+ +
ant.import
+
Adds an Ant import to the main Ant build file.
+
+ +
dita.conductor.lib.import
+
Adds a Java + library to the DITA-OT classpath.
+
+ +
dita.conductor.target
+
Adds an Ant + import to the main Ant build file. +

+ This extension point is deprecated; use ant.import instead. +

+
+
+ +
dita.conductor.target.relative
+
Adds + an Ant import to the main Ant build file. +

+ As of DITA-OT 3.0, the ant.import extension point can be used + instead. +

+
+
+ +
dita.conductor.transtype.check
+
+

Adds a new value to the list of valid transformation types.

+ This extension point is still supported for backwards compatibility, but since DITA-OT 2.1, + any new customizations should instead use the transtype element in the + to define a new transformation. +
+
+ +
dita.specialization.catalog
+
Adds the + content of a catalog file to the main DITA-OT catalog file. This extension point is + deprecated; use dita.specialization.catalog.relative instead.
+
+ +
dita.specialization.catalog.relative
+
Adds the content of a catalog file to the main DITA-OT catalog file.
+
+ +
dita.transtype.print
+
Defines a + transformation as a print type. What does this + actually do? Does this interact with using the deprecated print + attribute?
+
+ +
dita.xsl.messages
+
Adds new diagnostic + messages to DITA-OT.
+
+ +
org.dita.pdf2.catalog.relative
+
Adds + the content of a catalog file to the main catalog file for the PDF plug-in.
+
+
+
+
+
diff --git a/extension-points/plugin-extension-points-pre-processing.dita b/extension-points/plugin-extension-points-pre-processing.dita new file mode 100644 index 0000000..9594bc1 --- /dev/null +++ b/extension-points/plugin-extension-points-pre-processing.dita @@ -0,0 +1,183 @@ + + + + + Pre-processing extension points + You can use these extension points to run an Ant target before or after the pre-processing stage. If + necessary, you can also run an Ant target before a specific pre-processing step — but this approach is not + recommended. + +
+ +
+ +
depend.preprocess.pre
+
Runs an Ant + target before the pre-processing stage.
+
+ +
depend.preprocess.post
+
Runs an Ant + target after the pre-processing stage.
+
+
+
+
+ Legacy pre-processing extensions +

The following extension points are available in the original preprocess pipeline that was used + by default for all transformations prior to DITA-OT 3.0. These extensions are not available in the newer + map-first pre-processing pipeline (preprocess2), which + is used in the PDF and HTML Help transformations as of DITA-OT 3.0.

+ +
+ +
depend.preprocess.chunk.pre
+
Runs an + Ant target before the chunk step in the pre-processing stage.
+
+ +
depend.preprocess.coderef.pre
+
Runs an + Ant target before the coderef step in the pre-processing stage.
+
+ +
depend.preprocess.conref.pre
+
Runs an + Ant target before the conref step in the pre-processing stage.
+
+ +
depend.preprocess.conrefpush.pre
+
Runs + an Ant target before the conrefpush step in the pre-processing stage.
+
+ +
depend.preprocess.clean-temp.pre
+
Runs + an Ant target before the clean-temp step in the pre-processing stage.
+
+ +
depend.preprocess.copy-files.pre
+
Runs + an Ant target before the copy-files step in the pre-processing stage.
+
+ +
depend.preprocess.copy-flag.pre
+
Runs + an Ant target before the copy-flag step in the pre-processing stage.
+
+ +
depend.preprocess.copy-html.pre
+
Runs + an Ant target before the copy-html step in the pre-processing stage.
+
+ +
depend.preprocess.copy-image.pre
+
Runs + an Ant target before the copy-image step in the pre-processing stage.
+
+ +
depend.preprocess.copy-subsidiary.pre
+
Runs an Ant target before the copy-subsidiary step in the pre-processing stage.
+
+ +
depend.preprocess.debug-filter.pre
+
Runs an Ant target before the debug-filter step in the pre-processing stage.
+
+ +
depend.preprocess.gen-list.pre
+
Runs + an Ant target before the gen-list step in the pre-processing stage.
+
+ +
depend.preprocess.keyref.pre
+
Runs an + Ant target before the keyref step in the pre-processing stage.
+
+ +
depend.preprocess.maplink.pre
+
Runs an + Ant target before the maplink step in the pre-processing stage.
+
+ +
depend.preprocess.mappull.pre
+
Runs an + Ant target before the mappull step in the pre-processing stage.
+
+ +
depend.preprocess.mapref.pre
+
Runs an + Ant target before the mapref step in the pre-processing stage.
+
+ +
depend.preprocess.move-meta-entries.pre
+
Runs an Ant target before the move-meta-entries step in the pre-processing stage.
+
+ +
depend.preprocess.topicpull.pre
+
Runs + an Ant target before the topicpull step in the pre-processing stage.
+
+
+
+
+
diff --git a/extension-points/plugin-extension-points-support.dita b/extension-points/plugin-extension-points-support.dita new file mode 100644 index 0000000..15ef06a --- /dev/null +++ b/extension-points/plugin-extension-points-support.dita @@ -0,0 +1,62 @@ + + + + + Version and support information + You can use these extension points to define version and support information for a plug-in. Currently, + DITA-OT does not do anything with this information, but it might do so in the future. + +
+
+ +
package.support.name
+
Specifies the + person who provides support for the DITA-OT plug-in.
+
+ +
package.support.email
+
Specifies the + e-mail address of the person who provides support for the DITA-OT plug-in.
+
+ +
package.version
+
Specifies the version + of the DITA-OT plug-in.
+
+

The value uses the following syntax:

+ major.minor.micro.qualifier +

where:

+
    +
  • major is a number and is required.
  • +
  • minor is a number and is optional.
  • +
  • micro is a number and is optional.
  • +
  • qualifier is optional and can be composed of numerals, uppercase or lower case + letters, underscores, and hyphens.
  • +
+

By default, the package.version value is set to 0.0.0.

+
+
+
+
+ + Example + <plugin id="com.example.WithSupportInfo"> + <feature extension="package.support.name" value="Joe the Author"/> + <feature extension="package.support.email" value="joe@example.com"/> + <feature extension="package.version" value="1.2.3"/> +</plugin> + +
+
diff --git a/extension-points/plugin-extension-points-xslt-import.dita b/extension-points/plugin-extension-points-xslt-import.dita new file mode 100644 index 0000000..2d1653d --- /dev/null +++ b/extension-points/plugin-extension-points-xslt-import.dita @@ -0,0 +1,189 @@ + + + + + XSLT-import extension points + You can use these extension points to override XSLT processing steps in pre-processing and certain + transformation types. The value of the file attribute in the feature + element specifies a relative path to an XSL file in the current plug-in. The plug-in installer adds a XSL import + statement to the default DITA-OT code, so that the XSL override becomes part of the normal build. + + + + xref + file + XSLT + extension points + extension points + XSLT + pre-processing + extension points, XSLT + + + + +
+ Pre-processing +

You can use the following extension points to add XSLT processing to modules in the pre-processing + pipeline:

+
+ +
dita.xsl.conref
+
Overrides the pre-processing step that resolves conref.
+
+ +
dita.xsl.maplink
+
Overrides the maplink step in the pre-processing pipeline. This is the step that + generates map-based links.
+
+ +
dita.xsl.mappull
+
Overrides the mappull step in the pre-processing pipeline. This is the step that updates + navigation titles in maps and causes attributes to cascade.
+
+ +
dita.xsl.mapref
+
Overrides the mapref step in the pre-processing pipeline. This is the step that resolves + references to other maps.
+
+ +
dita.xsl.topicpull
+
Overrides the topicpull step in the pre-processing pipeline. This is the step that pulls + text into xref elements, as well as performing other tasks.
+
+
+
+
+ Transformations +

You can use the following extension points to add XSLT processing to modules in DITA-OT transformations:

+
+ +
dita.map.eclipse.index.pre
+
Runs an Ant target before the Eclipse index extraction process.
+
+ +
dita.xsl.eclipse.plugin
+
Overrides the default XSLT step that generates the plugin.xml file for Eclipse + Help.
+
+ +
dita.xsl.eclipse.toc
+
Overrides the default XSLT step that generates the Eclipse Help table of contents (TOC).
+
+ +
dita.xsl.html.cover
+
Overrides the + default HTML cover page generation process.
+
+ +
dita.xsl.htmltoc
+
Overrides the + default XSLT step that generates the HTML table of contents (TOC).
+
+ +
dita.xsl.html5
+
Overrides the + default HTML5 transformation. The referenced file is integrated directly into the XSLT step that generates + HTML5.
+
+ +
dita.xsl.html5.cover
+
Overrides the + default HTML5 cover page generation process.
+
+ +
dita.xsl.html5.toc
+
Overrides the + default XSLT step that generates the HTML5 table of contents (TOC).
+
+ +
dita.xsl.htmlhelp.map2hhc
+
Overrides the default XSLT step that generates the HTML Help contents (.hhc) + file.
+
+ +
dita.xsl.htmlhelp.map2hhp
+
Overrides the default XSLT step that generates the HTML Help project (.hhp) file.
+
+ +
dita.xsl.xhtml
+
Overrides the + default HTML or XHTML transformation, including HTML Help and Eclipse Help. The referenced file is + integrated directly into the XSLT step that generates XHTML.
+
+ +
dita.xsl.xslfo
+
Overrides the default + PDF transformation. The referenced XSL file is integrated directly into the XSLT step that generates the + XSL-FO.
+
+
+
+ + Example +

The following two files represent a complete (albeit simple) plug-in that adds a company banner to the XHTML + output. The plugin.xml file declares an XSLT file that extends the XHTML processing; the + xsl/header.xsl file overrides the default header processing to provide a company + banner.

+ + Contents of the <filepath>plugin.xml</filepath> file + <?xml version="1.0" encoding="UTF-8"?> +<plugin id="com.example.brandheader"> + <feature extension="dita.xsl.xhtml" file="xsl/header.xsl"/> +</plugin> + + + Contents of the <filepath>xsl/header.xsl</filepath> file + <?xml version="1.0" encoding="UTF-8"?> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> + <xsl:template name="gen-user-header"> + <div> + <img src="http://www.example.com/company_banner.jpg" + alt="Example Company Banner"/> + </div> + </xsl:template> +</xsl:stylesheet> + +
+
+
diff --git a/extension-points/plugin-extension-points-xslt-parameters.dita b/extension-points/plugin-extension-points-xslt-parameters.dita new file mode 100644 index 0000000..e0b9889 --- /dev/null +++ b/extension-points/plugin-extension-points-xslt-parameters.dita @@ -0,0 +1,129 @@ + + + + + XSLT-parameter extension points + You can use these extension points to pass parameters into existing XSLT steps in both the pre-processing + pipeline and DITA-OT transformation. The parameters generally will be available as global + xsl:param values with XSLT overrides. + + + + XSLT + parameters + pre-processing + extension points, parameters + + + + +
+ Pre-processing +

You can use the following extension points to pass parameters to modules in the pre-processing pipeline:

+
+ +
dita.preprocess.conref.param
+
Pass parameters to the conref module in the pre-processing pipeline
+
+ +
dita.preprocess.mappull.param
+
Pass parameters to the mappull module in the pre-processing pipeline
+
+ +
dita.preprocess.mapref.param
+
Pass parameters to the mapref module in the pre-processing pipeline
+
+ +
dita.preprocess.topicpull.param
+
Pass parameters to the topicpull module in the pre-processing pipeline
+
+
+
+
+ Transformations +

You can use the following extension points to pass parameters to modules in DITA-OT transformations:

+
+ +
dita.conductor.eclipse.toc.param
+
Pass parameters to the XSLT step that generates the Eclipse Help table of contents (TOC).
+
+ +
dita.conductor.html.param
+
Pass + parameters to the HTML and HTML Help + transformations.
+
+ +
dita.conductor.html5.param
+
Pass + parameters to the HTML5 transformation.
+
+ +
dita.conductor.html5.toc.param
+
Pass + parameters to the XSLT step that generates the HTML5 table of contents (TOC).
+
+ +
dita.conductor.pdf2.param
+
Pass + parameters to the PDF transformation.
+
+ +
dita.conductor.xhtml.param
+
Pass + parameters to the XHTML and Eclipse Help transformations.
+
+ +
dita.conductor.xhtml.toc.param
+
Pass + parameters to the XSLT step that generates the XHTML table of contents (TOC).
+
+
+
+ + Example +

The following two files represent a complete (albeit simple) plug-in that passes the parameters defined in the + insertParameters.xml file to the XHTML transformation process.

+ + Contents of the <filepath>plugin.xml</filepath> file + <plugin id="com.example.newparam"> + <feature extension="dita.conductor.xhtml.param" + file="insertParameters.xml"/> +</plugin> + + + Contents of the <filepath>insertParameters.xml</filepath> + <dummy xmlns:if="ant:if" xmlns:unless="ant:unless"> + <!-- Any Ant code allowed in xslt task is possible. Example: --> + <param name="paramNameinXSLT" expression="${antProperty}" + if:set="antProperty"/> +</dummy> + +
+
+
diff --git a/extension-points/plugin-extension-points.dita b/extension-points/plugin-extension-points.dita new file mode 100644 index 0000000..55b2a15 --- /dev/null +++ b/extension-points/plugin-extension-points.dita @@ -0,0 +1,59 @@ + + + + + Extension point reference + + Extension points + + DITA Open Toolkit provides a series of extension points that can be used to integrate changes into the core + code. Extension points are defined in the plugin.xml file for each plug-in. When plug-ins are + installed, DITA-OT makes each extension visible to the rest of the toolkit. + + + + extension points + overview + plug-in + extension points + pre-processing + plugin.xml + topicmerge + org.dita.pdf2.xsl.topicmerge + + + + +
+

Depending on which extension points you use, your custom code will either run whenever output is generated, + before or after certain processing stages, or only with certain transformation types.

+
+ + Extension points govern when code runs +
    +
  • To run a custom Ant target after the pre-processing stage regardless of transformation type, use + depend.preprocess.post
  • +
  • To run an Ant target before the copy-html step when generating HTML output, use + depend.preprocess.copy-html.pre
  • +
+
+ + Checking the transformation type +

If you want to isolate your custom code so it only runs when output is generated for a particular + transformation type, you can define a condition that checks the transtype before running the custom code.

+ <!-- Add a condition that checks the transtype --> +<condition property="isYourTranstype"> + <matches pattern="your.transtype" string="${transtype}"/> +</condition> +

You can then check this condition before running your custom code:

+ <!-- Check the condition before running your target --> +<target name="your-target" if="${isYourTranstype}"> + ⋮ +</target> +
+
+
diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..87bfb2d --- /dev/null +++ b/gradle.properties @@ -0,0 +1,2 @@ +# Fix Java memory errors with Gradle 5.2 +org.gradle.jvmargs = -Xmx1024m diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..943f0cbfa754578e88a3dae77fce6e3dea56edbf GIT binary patch literal 61574 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 ScNgau(U?ep-K_E5zy1%ZQTdPn literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..5083229 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-bin.zip +networkTimeout=10000 +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..65dcd68 --- /dev/null +++ b/gradlew @@ -0,0 +1,244 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..93e3f59 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/index.dita b/index.dita new file mode 100644 index 0000000..a0abf73 --- /dev/null +++ b/index.dita @@ -0,0 +1,74 @@ + + + + + DITA Open Toolkit <keyword keyref="release"/> + DITA Open Toolkit, or DITA-OT for short, is a set of Java-based, open-source + tools that provide processing for content authored in the Darwin Information Typing + Architecture. + + + + OASIS + + + + + + While the DITA standard is owned and developed by OASIS, the DITA Open Toolkit project is governed separately. + DITA-OT is an independent, open-source implementation of the + DITA standard. + +

+ DITA-OT documentation +

The DITA Open Toolkit documentation provides information about installing, running, configuring and extending + the toolkit.

+
    +
  • See the + for information on the changes in the current + release.
  • +
  • + shows how to install the toolkit and run a + build to verify the installation.
  • +
  • + explains the methods that can be used to + transform DITA content to other formats, including the dita command, Ant, and the Java API, + along with information on publishing DITA content from a containerized environment.
  • +
  • + provides information on supported input formats, + including standard DITA XML, Markdown and the Lightweight DITA formats (XDITA, MDITA + and HDITA).
  • +
  • + Output formats describes the core + transformations that convert DITA to other formats.
  • +
  • + explains how to adjust the behavior of DITA Open + Toolkit via dita command arguments and options, DITA-OT parameter settings, and + configuration properties.
  • +
  • + shows how to .
  • +
  • + explains how to .
  • +
  • + explains how to install, remove, and discover new + plug-ins.
  • +
  • + provides information on extending DITA-OT with + plug-ins of your own.
  • +
  • + contains information about resolving + problems that you might encounter.
  • +
  • + topics provide additional information about the + , + , a + and other + .
  • +
+
+ + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..4c9c8a7 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4707 @@ +{ + "name": "docs", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "docs", + "license": "Apache-2.0", + "devDependencies": { + "@prettier/plugin-xml": "3.4.1", + "husky": "^9.0.11", + "lint-staged": "15.2.2", + "prettier": "3.2.5", + "stylelint": "^15.11.0", + "stylelint-config-recommended": "^13.0.0", + "stylelint-config-sass-guidelines": "^10.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.1.tgz", + "integrity": "sha512-xrvsmVUtefWMWQsGgFffqWSK03pZ1vfDki4IVIIUxxDKnGBzqNgv0A7SB1oXtVNEkcVO8xi1ZrTL29HhSu5kGA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^2.2.0" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.0.tgz", + "integrity": "sha512-wErmsWCbsmig8sQKkM6pFhr/oPha1bHfvxsUY5CYSQxwyhA9Ulrs8EqCgClhg4Tgg2XapVstGqSVcz0xOYizZA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + } + }, + "node_modules/@csstools/media-query-list-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.4.tgz", + "integrity": "sha512-V/OUXYX91tAC1CDsiY+HotIcJR+vPtzrX8pCplCpT++i8ThZZsq5F5dzZh/bDM3WUOjrvC1ljed1oSJxMfjqhw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^2.3.1", + "@csstools/css-tokenizer": "^2.2.0" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz", + "integrity": "sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.13" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@prettier/plugin-xml": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@prettier/plugin-xml/-/plugin-xml-3.4.1.tgz", + "integrity": "sha512-Uf/6/+9ez6z/IvZErgobZ2G9n1ybxF5BhCd7eMcKqfoWuOzzNUxBipNo3QAP8kRC1VD18TIo84no7LhqtyDcTg==", + "dev": true, + "dependencies": { + "@xml-tools/parser": "^1.0.11" + }, + "peerDependencies": { + "prettier": "^3.0.0" + } + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "node_modules/@xml-tools/parser": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@xml-tools/parser/-/parser-1.0.11.tgz", + "integrity": "sha512-aKqQ077XnR+oQtHJlrAflaZaL7qZsulWc/i/ZEooar5JiWj1eLt0+Wg28cpa+XLney107wXqneC+oG1IZvxkTA==", + "dev": true, + "dependencies": { + "chevrotain": "7.1.1" + } + }, + "node_modules/ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-escapes": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", + "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", + "dev": true, + "dependencies": { + "type-fest": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/brace-expansion/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", + "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", + "dev": true, + "dependencies": { + "camelcase": "^6.3.0", + "map-obj": "^4.1.0", + "quick-lru": "^5.1.1", + "type-fest": "^1.2.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chevrotain": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-7.1.1.tgz", + "integrity": "sha512-wy3mC1x4ye+O+QkEinVJkPf5u2vsrDIYW9G7ZuwFl6v/Yu0LwUuT2POsb+NUWApebyxfkQq6+yDfRExbnI5rcw==", + "dev": true, + "dependencies": { + "regexp-to-ast": "0.5.0" + } + }, + "node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "dev": true, + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "dev": true + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "dev": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "dev": true, + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-functions-list": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.1.tgz", + "integrity": "sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==", + "dev": true, + "engines": { + "node": ">=12 || >=16" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", + "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "dev": true, + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true + }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-7.0.1.tgz", + "integrity": "sha512-uLfFktPmRetVCbHe5UPuekWrQ6hENufnA46qEGbfACkK5drjTTdQYUragRgMjHldcbYG+nslUerqMPjbBSHXjQ==", + "dev": true, + "dependencies": { + "flat-cache": "^3.1.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", + "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/get-east-asian-width": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", + "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", + "dev": true + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/husky": { + "version": "9.0.11", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz", + "integrity": "sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==", + "dev": true, + "bin": { + "husky": "bin.mjs" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/known-css-properties": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", + "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", + "dev": true + }, + "node_modules/lilconfig": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", + "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/lint-staged": { + "version": "15.2.2", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.2.tgz", + "integrity": "sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==", + "dev": true, + "dependencies": { + "chalk": "5.3.0", + "commander": "11.1.0", + "debug": "4.3.4", + "execa": "8.0.1", + "lilconfig": "3.0.0", + "listr2": "8.0.1", + "micromatch": "4.0.5", + "pidtree": "0.6.0", + "string-argv": "0.3.2", + "yaml": "2.3.4" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/listr2": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.0.1.tgz", + "integrity": "sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==", + "dev": true, + "dependencies": { + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.0.0", + "rfdc": "^1.3.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, + "node_modules/log-update": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz", + "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==", + "dev": true, + "dependencies": { + "ansi-escapes": "^6.2.0", + "cli-cursor": "^4.0.0", + "slice-ansi": "^7.0.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "dev": true, + "dependencies": { + "get-east-asian-width": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true + }, + "node_modules/meow": { + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", + "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.2", + "camelcase-keys": "^7.0.0", + "decamelize": "^5.0.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.2", + "read-pkg-up": "^8.0.0", + "redent": "^4.0.0", + "trim-newlines": "^4.0.2", + "type-fest": "^1.2.2", + "yargs-parser": "^20.2.9" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", + "dev": true + }, + "node_modules/postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=", + "dev": true + }, + "node_modules/postcss-scss": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.6.tgz", + "integrity": "sha512-rLDPhJY4z/i4nVFZ27j9GqLxj1pwxE80eAzUNRMXtcpipFYIeowerzBgG3yJhMtObGEXidtIgbUpQ3eLDsf5OQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-scss" + } + ], + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.4.19" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/prettier": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", + "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", + "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0", + "read-pkg": "^6.0.0", + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/redent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", + "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", + "dev": true, + "dependencies": { + "indent-string": "^5.0.0", + "strip-indent": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/redent/node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/regexp-to-ast": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/regexp-to-ast/-/regexp-to-ast-0.5.0.tgz", + "integrity": "sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==", + "dev": true + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true + }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", + "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=", + "dev": true + }, + "node_modules/stylelint": { + "version": "15.11.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.11.0.tgz", + "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==", + "dev": true, + "dependencies": { + "@csstools/css-parser-algorithms": "^2.3.1", + "@csstools/css-tokenizer": "^2.2.0", + "@csstools/media-query-list-parser": "^2.1.4", + "@csstools/selector-specificity": "^3.0.0", + "balanced-match": "^2.0.0", + "colord": "^2.9.3", + "cosmiconfig": "^8.2.0", + "css-functions-list": "^3.2.1", + "css-tree": "^2.3.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.1", + "fastest-levenshtein": "^1.0.16", + "file-entry-cache": "^7.0.0", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.3.1", + "ignore": "^5.2.4", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.29.0", + "mathml-tag-names": "^2.1.3", + "meow": "^10.1.5", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.28", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^6.0.0", + "postcss-selector-parser": "^6.0.13", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "style-search": "^0.1.0", + "supports-hyperlinks": "^3.0.0", + "svg-tags": "^1.0.0", + "table": "^6.8.1", + "write-file-atomic": "^5.0.1" + }, + "bin": { + "stylelint": "bin/stylelint.mjs" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + } + }, + "node_modules/stylelint-config-recommended": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz", + "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==", + "dev": true, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "stylelint": "^15.10.0" + } + }, + "node_modules/stylelint-config-sass-guidelines": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-sass-guidelines/-/stylelint-config-sass-guidelines-10.0.0.tgz", + "integrity": "sha512-+Rr2Dd4b72CWA4qoj1Kk+y449nP/WJsrD0nzQAWkmPPIuyVcy2GMIcfNr0Z8JJOLjRvtlkKxa49FCNXMePBikQ==", + "dev": true, + "dependencies": { + "postcss-scss": "^4.0.6", + "stylelint-scss": "^4.4.0" + }, + "engines": { + "node": "^14.13.1 || >=16.13.0 || >=18.0.0" + }, + "peerDependencies": { + "postcss": "^8.4.21", + "stylelint": "^15.2.0" + } + }, + "node_modules/stylelint-scss": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-4.6.0.tgz", + "integrity": "sha512-M+E0BQim6G4XEkaceEhfVjP/41C9Klg5/tTPTCQVlgw/jm2tvB+OXJGaU0TDP5rnTCB62aX6w+rT+gqJW/uwjA==", + "dev": true, + "dependencies": { + "dlv": "^1.1.3", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-selector-parser": "^6.0.11", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "stylelint": "^14.5.1 || ^15.0.0" + } + }, + "node_modules/stylelint/node_modules/postcss-safe-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "dev": true, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, + "node_modules/stylelint/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz", + "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", + "dev": true + }, + "node_modules/table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/trim-newlines": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", + "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "dev": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "dev": true, + "requires": { + "@babel/highlight": "^7.22.5" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "dev": true + }, + "@babel/highlight": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@csstools/css-parser-algorithms": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.1.tgz", + "integrity": "sha512-xrvsmVUtefWMWQsGgFffqWSK03pZ1vfDki4IVIIUxxDKnGBzqNgv0A7SB1oXtVNEkcVO8xi1ZrTL29HhSu5kGA==", + "dev": true, + "requires": {} + }, + "@csstools/css-tokenizer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.0.tgz", + "integrity": "sha512-wErmsWCbsmig8sQKkM6pFhr/oPha1bHfvxsUY5CYSQxwyhA9Ulrs8EqCgClhg4Tgg2XapVstGqSVcz0xOYizZA==", + "dev": true + }, + "@csstools/media-query-list-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.4.tgz", + "integrity": "sha512-V/OUXYX91tAC1CDsiY+HotIcJR+vPtzrX8pCplCpT++i8ThZZsq5F5dzZh/bDM3WUOjrvC1ljed1oSJxMfjqhw==", + "dev": true, + "requires": {} + }, + "@csstools/selector-specificity": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz", + "integrity": "sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==", + "dev": true, + "requires": {} + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@prettier/plugin-xml": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@prettier/plugin-xml/-/plugin-xml-3.4.1.tgz", + "integrity": "sha512-Uf/6/+9ez6z/IvZErgobZ2G9n1ybxF5BhCd7eMcKqfoWuOzzNUxBipNo3QAP8kRC1VD18TIo84no7LhqtyDcTg==", + "dev": true, + "requires": { + "@xml-tools/parser": "^1.0.11" + } + }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "@xml-tools/parser": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@xml-tools/parser/-/parser-1.0.11.tgz", + "integrity": "sha512-aKqQ077XnR+oQtHJlrAflaZaL7qZsulWc/i/ZEooar5JiWj1eLt0+Wg28cpa+XLney107wXqneC+oG1IZvxkTA==", + "dev": true, + "requires": { + "chevrotain": "7.1.1" + } + }, + "ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ansi-escapes": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", + "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", + "dev": true, + "requires": { + "type-fest": "^3.0.0" + }, + "dependencies": { + "type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "dev": true + } + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + } + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "camelcase-keys": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", + "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", + "dev": true, + "requires": { + "camelcase": "^6.3.0", + "map-obj": "^4.1.0", + "quick-lru": "^5.1.1", + "type-fest": "^1.2.1" + } + }, + "chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true + }, + "chevrotain": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-7.1.1.tgz", + "integrity": "sha512-wy3mC1x4ye+O+QkEinVJkPf5u2vsrDIYW9G7ZuwFl6v/Yu0LwUuT2POsb+NUWApebyxfkQq6+yDfRExbnI5rcw==", + "dev": true, + "requires": { + "regexp-to-ast": "0.5.0" + } + }, + "cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "requires": { + "restore-cursor": "^4.0.0" + } + }, + "cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "dev": true, + "requires": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "emoji-regex": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "dev": true + }, + "string-width": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "dev": true, + "requires": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "dev": true, + "requires": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "css-functions-list": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.1.tgz", + "integrity": "sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==", + "dev": true + }, + "css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "requires": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + } + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", + "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true + } + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true + }, + "execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-7.0.1.tgz", + "integrity": "sha512-uLfFktPmRetVCbHe5UPuekWrQ6hENufnA46qEGbfACkK5drjTTdQYUragRgMjHldcbYG+nslUerqMPjbBSHXjQ==", + "dev": true, + "requires": { + "flat-cache": "^3.1.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", + "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", + "dev": true, + "requires": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-east-asian-width": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", + "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", + "dev": true + }, + "get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", + "dev": true + }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true + }, + "human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true + }, + "husky": { + "version": "9.0.11", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz", + "integrity": "sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==", + "dev": true + }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-core-module": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "known-css-properties": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", + "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", + "dev": true + }, + "lilconfig": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", + "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "lint-staged": { + "version": "15.2.2", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.2.tgz", + "integrity": "sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==", + "dev": true, + "requires": { + "chalk": "5.3.0", + "commander": "11.1.0", + "debug": "4.3.4", + "execa": "8.0.1", + "lilconfig": "3.0.0", + "listr2": "8.0.1", + "micromatch": "4.0.5", + "pidtree": "0.6.0", + "string-argv": "0.3.2", + "yaml": "2.3.4" + } + }, + "listr2": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.0.1.tgz", + "integrity": "sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==", + "dev": true, + "requires": { + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.0.0", + "rfdc": "^1.3.0", + "wrap-ansi": "^9.0.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, + "log-update": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz", + "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==", + "dev": true, + "requires": { + "ansi-escapes": "^6.2.0", + "cli-cursor": "^4.0.0", + "slice-ansi": "^7.0.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "dev": true, + "requires": { + "get-east-asian-width": "^1.0.0" + } + }, + "slice-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", + "dev": true, + "requires": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true + }, + "mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true + }, + "mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true + }, + "meow": { + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", + "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", + "dev": true, + "requires": { + "@types/minimist": "^1.2.2", + "camelcase-keys": "^7.0.0", + "decamelize": "^5.0.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.2", + "read-pkg-up": "^8.0.0", + "redent": "^4.0.0", + "trim-newlines": "^4.0.2", + "type-fest": "^1.2.2", + "yargs-parser": "^20.2.9" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true + }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "requires": { + "path-key": "^4.0.0" + }, + "dependencies": { + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true + } + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true + }, + "postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "dev": true, + "requires": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", + "dev": true + }, + "postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=", + "dev": true + }, + "postcss-scss": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.6.tgz", + "integrity": "sha512-rLDPhJY4z/i4nVFZ27j9GqLxj1pwxE80eAzUNRMXtcpipFYIeowerzBgG3yJhMtObGEXidtIgbUpQ3eLDsf5OQ==", + "dev": true, + "requires": {} + }, + "postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "prettier": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true + }, + "read-pkg": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", + "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^1.0.1" + } + }, + "read-pkg-up": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", + "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", + "dev": true, + "requires": { + "find-up": "^5.0.0", + "read-pkg": "^6.0.0", + "type-fest": "^1.0.1" + } + }, + "redent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", + "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", + "dev": true, + "requires": { + "indent-string": "^5.0.0", + "strip-indent": "^4.0.0" + }, + "dependencies": { + "indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true + } + } + }, + "regexp-to-ast": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/regexp-to-ast/-/regexp-to-ast-0.5.0.tgz", + "integrity": "sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + } + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rfdc": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true + } + } + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, + "spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true + }, + "string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true + }, + "strip-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", + "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", + "dev": true, + "requires": { + "min-indent": "^1.0.1" + } + }, + "style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=", + "dev": true + }, + "stylelint": { + "version": "15.11.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.11.0.tgz", + "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==", + "dev": true, + "requires": { + "@csstools/css-parser-algorithms": "^2.3.1", + "@csstools/css-tokenizer": "^2.2.0", + "@csstools/media-query-list-parser": "^2.1.4", + "@csstools/selector-specificity": "^3.0.0", + "balanced-match": "^2.0.0", + "colord": "^2.9.3", + "cosmiconfig": "^8.2.0", + "css-functions-list": "^3.2.1", + "css-tree": "^2.3.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.1", + "fastest-levenshtein": "^1.0.16", + "file-entry-cache": "^7.0.0", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.3.1", + "ignore": "^5.2.4", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.29.0", + "mathml-tag-names": "^2.1.3", + "meow": "^10.1.5", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.28", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^6.0.0", + "postcss-selector-parser": "^6.0.13", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "style-search": "^0.1.0", + "supports-hyperlinks": "^3.0.0", + "svg-tags": "^1.0.0", + "table": "^6.8.1", + "write-file-atomic": "^5.0.1" + }, + "dependencies": { + "postcss-safe-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "dev": true, + "requires": {} + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "stylelint-config-recommended": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz", + "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==", + "dev": true, + "requires": {} + }, + "stylelint-config-sass-guidelines": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-sass-guidelines/-/stylelint-config-sass-guidelines-10.0.0.tgz", + "integrity": "sha512-+Rr2Dd4b72CWA4qoj1Kk+y449nP/WJsrD0nzQAWkmPPIuyVcy2GMIcfNr0Z8JJOLjRvtlkKxa49FCNXMePBikQ==", + "dev": true, + "requires": { + "postcss-scss": "^4.0.6", + "stylelint-scss": "^4.4.0" + } + }, + "stylelint-scss": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-4.6.0.tgz", + "integrity": "sha512-M+E0BQim6G4XEkaceEhfVjP/41C9Klg5/tTPTCQVlgw/jm2tvB+OXJGaU0TDP5rnTCB62aX6w+rT+gqJW/uwjA==", + "dev": true, + "requires": { + "dlv": "^1.1.3", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-selector-parser": "^6.0.11", + "postcss-value-parser": "^4.2.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-hyperlinks": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz", + "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + } + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", + "dev": true + }, + "table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + } + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "trim-newlines": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", + "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", + "dev": true + }, + "type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "requires": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "emoji-regex": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "dev": true + }, + "string-width": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "dev": true, + "requires": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "dev": true + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..60dae2d --- /dev/null +++ b/package.json @@ -0,0 +1,56 @@ +{ + "name": "docs", + "description": "DITA-OT Documentation", + "homepage": "https://github.com/dita-ot/docs", + "repository": { + "type": "git", + "url": "https://github.com/dita-ot/docs.git" + }, + "license": "Apache-2.0", + "scripts": { + "check": "npm run prettier-check && npm run stylelint", + "fix:style": "stylelint \"**/*.css\" --fix", + "fmt": "npm run format", + "format": "prettier --write \"**/*.{css,dita*,json,md,scss,xml,yaml,yml}\"", + "lint-staged": "lint-staged --no-stash", + "prepare": "husky", + "prettier": "prettier --write \"**/*.{css,dita*,json,md,scss,xml,yaml,yml}\"", + "prettier-check": "prettier --check \"**/*.{css,dita*,json,md,scss,xml,yaml,yml}\"", + "stylelint": "stylelint \"**/*.css\"", + "test": "prettier --list-different \"**/*.{css,dita*,json,md,scss,xml,yaml,yml}\"" + }, + "lint-staged": { + "*.{css,dita*,json,md,scss,xml,yaml,yml}": [ + "prettier --write" + ], + "*.{css,scss}": [ + "stylelint" + ] + }, + "stylelint": { + "extends": [ + "stylelint-config-recommended", + "stylelint-config-sass-guidelines" + ], + "ignoreFiles": [ + "out/**/*.css" + ], + "rules": { + "no-descending-specificity": null, + "no-irregular-whitespace": null, + "selector-class-pattern": null, + "selector-max-id": 1, + "selector-max-type": 3, + "selector-no-qualifying-type": null + } + }, + "devDependencies": { + "@prettier/plugin-xml": "3.4.1", + "husky": "^9.0.11", + "lint-staged": "15.2.2", + "prettier": "3.2.5", + "stylelint": "^15.11.0", + "stylelint-config-recommended": "^13.0.0", + "stylelint-config-sass-guidelines": "^10.0.0" + } +} diff --git a/parameters/ant-parameters-details.dita b/parameters/ant-parameters-details.dita new file mode 100644 index 0000000..6d40e4c --- /dev/null +++ b/parameters/ant-parameters-details.dita @@ -0,0 +1,904 @@ + + + + + Ant parameter details + + + All transformations + + All transformations + + Certain parameters apply to all + transformations that DITA Open Toolkit supports. + + + + + + + + +
+ + + + args.draft + + + Corresponds to the XSLT parameter + DRAFT in most XSLT modules.For PDF output, setting the + args.draft parameter to causes the contents of the + titlealts element to be rendered below the title. + titlealts + XSLT + draft + args.draft + PDF + PDF + draft + parameters + args.draft + + + + + + args.figurelink.style + + + Specifying results in "Figure 5"; specifying + results in the title of the figure. Corresponds to + the XSLT parameter FIGURELINK.Support for PDF was added in + DITA-OT 2.0. By default PDF uses the value , which is not supported for other + transformation types; this results in "Figure 5. Title". + + + + args.filter + + +

Specifies filter file(s) used to include, exclude, or flag content. Relative paths are resolved against + the DITA-OT base directory (for backwards compatibility) and internally converted to absolute paths.

+ +

To specify multiple filter files, use the system path separator character to delimit individual file + paths (semicolon ‘;’ on Windows, and colon ‘:’ on macOS and Linux) + and wrap the value in quotes:

+

--args.filter="filter1.ditaval;filter2.ditaval;filter3.ditaval"

+

DITAVAL files are evaluated in the order specified, so conditions specified in the first file take + precedence over matching conditions specified in later files, just as conditions at the start of a + DITAVAL document take precedence over matching conditions later in the same document.

+ DITAVAL + args.filter + + DITAVAL + filters + DITAVAL + profiling + OS X + macOS + macOS + delimiter + Linux + delimiter + Windows + delimiter +
+
+
+ + + args.gen.task.lbl + + + + Corresponds to the XSLT parameter + GENERATE-TASK-LABELS. + + + + args.grammar.cache + + + + This option dramatically speeds up processing time. However, there is a known problem with using + this feature for documents that use XML entities. If your build fails with parser errors about entity + resolution, set this parameter to . + processing time + + + + + args.input + + + +

This parameter corresponds to the command-line argument + --input.

+

Typically this is a DITA map, however it also can be a DITA topic if you want to transform a single + DITA file. The path can be absolute, relative to args.input.dir, or relative to the + current directory if args.input.dir is not defined.

+
+ + args.rellinks + + +

For PDF output, the default value is . Other formats include all link roles + except ancestor links. + args.rellinks + PDF + related links + args.rellinks + HTML5 + related links + args.rellinks +

+
+ + args.resources + + +

This parameter corresponds to the command-line option + --resource.

+

Resource files can be used to convert partial documentation sets by processing input with additional + information.

+

For example, to process a single topic file with a map that contains key definitions, use a command + like this: + dita --input=topic.dita --format= --args.resources=keys.ditamap +

+

To convert a chapter map to HTML5 and insert related links from relationship tables in a separate map, + use: + dita --input=chapter.ditamap --format= --args.resources=reltables.ditamap +

+
+ + + args.tablelink.style + + + Specifying results in "Table 5"; specifying + results in the title of the table. Corresponds to + the XSLT parameter TABLELINK.Support for PDF was added in + DITA-OT 2.0. By default PDF uses the value , which is not supported for other + transformation types; this results in "Table 5. Title". + tables + args.tablelink.style + + + + + clean.temp + + + + + + + default.language + + Specifies the language + that is used if the input file does not have the xml:lang attribute set on the root + element. By default, this is set to . The allowed values are those that are defined in + IETF BCP 47, + Tags for Identifying + Languages. + xml:lang + IETF BCP 47 + languages + default + + + + + dita.temp.dir + + + +

This parameter corresponds to the command-line option + --temp.

+

The temporary directory is where DITA-OT writes intermediate files that are generated during the + transformation process.

+
+ + + dita.input.valfile + + + + This parameter is deprecated in favor of the args.filter + parameter. + + + + + filter-stage + + + + Changing the filtering stage may produce different results for the same initial data set and + filtering conditions. + + + + + force-unique + + + +

Setting this to ensures that unique output files are created for each instance of + a resource when a map contains multiple references to a single topic.

+
+ + + generate-debug-attributes + + + + Disabling debugging attributes reduces the size of temporary files and thus reduces memory + consumption. However, the log messages no longer have the source information available and thus the + ability to debug problems might deteriorate. + debugging + generate-debug-attributes + memory + + + + + + generate.copy.outer + + generate.copy.outer + + + +

See + for more information.

+
+
+ + + onlytopic.in.map + + + If set to , only files that are referenced directly from the + map will generate output. + + + + outer.control + + + + Microsoft HTML Help Compiler cannot produce HTML Help for + documentation projects that use outer content. The content files must reside in or below the directory + containing the root map file, and the map file cannot specify ".." at the start of the + href attributes for topicref elements. + topicref + href + + + + + + output.dir + + + +

This parameter corresponds to the command-line option + --output.

+

By default, the output is written to + DITA-dir/out.

+
+ + + result.rewrite-rule.class + + + The custom class should implement the + org.dita.dost.module.RewriteRule interface. + result.rewrite-rule.class + + + + + result.rewrite-rule.xsl + + + See + for details. + result.rewrite-rule.xsl + + + + + root-chunk-override + + + Acceptable values include any value normally allowed on the chunk + attribute. If the map does not have a chunk attribute, this value will be used; if the + map already has a chunk attribute specified, this value will be used instead. + chunk + root-chunk-override + + + + + store-type + + + +

+ For more information, see + .

+ Custom plug-ins that expect to find certain files on disk in the temporary + directory will not work with in-memory processing. +
+
+ + + transtype + + + +

This parameter corresponds to the command-line argument + --format.

+

+ + + +

+
+
+ + + HTML-based output parameters + + HTML-based output + + Certain parameters apply + to all HTML-based transformation types: HTML5, XHTML, HTML Help, and Eclipse help. + HTML5 + parameters + + + +
+ + + args.copycss + + +
If an external process will copy your custom .css file to the output + directory, leave this parameter unset (or set it to ). If DITA-OT should copy the + file when generating output, set it to .
+
+ + args.css + + +
The value of this parameter should be only the file name. The absolute path to + the parent directory should be specified with args.cssroot.
+
+ + + args.csspath + + +
Specifies the destination directory to which .css files are copied + (relative to the output directory).
+ + +
+

Corresponds to the XSLT parameter CSSPATH.

+

DITA-OT will copy the file to this location.

+ If args.csspath is not set, the custom CSS file (and the default + CSS files) will be copied to the root level of the output folder. To copy CSS files to an output + subfolder named css, set args.csspath to + . + CSS + copy to specific location +
+
+
+ + + args.cssroot + + +
Specifies the source directory that contains the custom .css + file.
+ + +
+

DITA-OT will copy the file from this location.

+ Enter the absolute path to the parent directory of the custom CSS file specified + with args.css. +
+
+ + + args.dita.locale + + + + This parameter is not available for the XHTML transformation. + + + + + args.ftr + + + +
+ Corresponds to the XSLT parameter FTR. + The footer file should be specified using an absolute path and must contain valid XML. A common + practice is to place all content into a div element. In HTML5 output, the + footer file contents will be wrapped in an HTML5 footer element with the + role attribute set to . + div + HTML footer + args.ftr + role + HTML5 + footers + +
+
+ + + args.gen.default.meta + + + +
Corresponds to the XSLT parameter genDefMeta. +
+
+
+ + args.hdf + + +
+

The contents of the header file will be inserted in the head element of the + generated HTML files.

+ The header file should be specified using an absolute path and must contain valid XML. + If you need to insert more than one element into the HTML page head, wrap the content in a + div element. The division wrapper in the header file will be discarded when + generating HTML files, and the contents will be inserted into each page head. + div + HTML head + args.hdf +
+
+ + + args.hdr + + + +
+ Corresponds to the XSLT parameter HDR. + The header file should be specified using an absolute path and must contain valid XML. A common + practice is to place all content into a div element. In HTML5 output, the + contents of the header file will be wrapped in an HTML5 header element with + the role attribute set to . + div + HTML header + args.hdr + header + role + HTML5 + headers + +
+
+ + + args.hide.parent.link + + deprecated features + args.hide.parent.link + + + +
+ Corresponds to the XSLT parameter NOPARENTLINK. + This parameter is deprecated in favor of the args.rellinks + parameter. +
+
+ + + args.outext + + + +
+ Corresponds to the XSLT parameter OUTEXT. +
+
+ + + args.xhtml.classattr + + + For example, the prereq element (which is specialized + from section) would generate class="section prereq". Corresponds to the XSLT parameter + PRESERVE-DITA-CLASS.Beginning with DITA-OT release 1.5.2, the default + value is . For release 1.5 and 1.5.1, the default value was . + prereq + section + + + + + args.xsl + + + +
The parameter must specify a fully qualified file name.
+
+
+
+
+
+ + + Eclipse help + + Eclipse help + + Certain parameters are + specific to the Eclipse help transformation. + +
+ + + + args.eclipsehelp.country + + + For example, , , and + would clarify a value of set for the args.eclipsehelp.language + parameter. The content will be moved into the appropriate directory structure for an Eclipse fragment. + What does "The content will be moved + into the appropriate directory structure for an Eclipse fragment" mean? + + + + args.eclipsehelp.language + + + This parameter is a prerequisite for the + args.eclipsehelp.country parameter. The content will be moved into the appropriate + directory structure for an Eclipse fragment. + + + + args.eclipse.provider + + + The default value is . The toolkit ignores + the value of this parameter when it processes an Eclipse map. + + + + + args.eclipse.version + + + The default value is .The toolkit ignores + the value of this parameter when it processes an Eclipse map. + + + + args.eclipse.symbolic.name + + + + The + id value from the DITA map or the Eclipse map collection (Eclipse help specialization) + is the symbolic name for the plugin in Eclipse. The default value is + .The toolkit ignores the value of this parameter + when it processes an Eclipse map. + id + args.eclipse.symbolic.name + + I'm not clear what this means. Is the + default value for the args.eclipse.symbolic.name parameter the value of the + id attribute on the map or plugin + element, if provided, and the if there is not a value for the + id attribute or the args.eclipse.symbolic.name + parameter? + + + +
+
+
+ + + HTML Help + + HTML Help + + Certain parameters are + specific to the Microsoft Compiled HTML Help (.chm) transformation. + + + + + PDF + + PDF + + Certain parameters are specific to the + PDF transformation. + +
+ + + + args.xsl.pdf + + + You must specify the fully qualified file name. + + + + org.dita.index.skip + + + +

Up until DITA-OT 3.4, indexing code was provided in the PDF plug-in and only available for PDF output. + In version 3.4 and above, indexing is provided by a separate plug-in to allow other transformations to + access the results.

+

If you have overridden PDF index processing via the transform.topic2fo target in the + past, you can set the org.dita.index.skip property to and + re-enable the transform.topic2fo.index target with feature + extension="depend.org.dita.pdf2.index" value="transform.topic2fo.index"/ in your plug-in + configuration.

+
+
+ + org.dita.pdf2.i18n.enabled + +

Enables internationalization (I18N) font processing to provide per-character font selection for FO + renderers that do not support the font-selection-strategy property (such as Apache + FOP prior to version 2.9). + Apache FOP + I18N + FOP + Apache FOP + I18N + org.dita.pdf2.i18n.enabled + fonts + PDF +

+

When this feature is enabled, DITA-OT uses a font mapping process that takes the content language into + consideration. The mapping process uses configuration files for each language to define characters that + should be rendered with certain logical fonts, and font mappings that associate each logical font to + physical font files.

+

The following values are allowed:

+
    +
  • (default) — Enables font mapping
  • +
  • — Disables font mapping
  • +
+ DITA-OT 4.2 includes FOP 2.9, which supports font-selection-strategy. As + of this version (or if you don’t use custom character mappings), you can turn off font mapping and + specify fonts directly in the XSL attributes files of your custom PDF plug-in. For background + information, see + . +
+
+ + + outputFile.base + + + By default, the PDF file uses the base filename of the input + .ditamap file. + DITA maps + PDF file name + + + + pdf.formatter + + The client package comes with Apache FOP; other XSL processors must be separately installed. + + + + Apache FOP + pdf.formatter + formatter + PDF + formatter + + + + + publish.required.cleanup + + deprecated features + publish.required.cleanup + + + The default value is the value of the args.draft parameter. + Corresponds to the XSLT parameter + publishRequiredCleanup.This parameter is deprecated in + favor of the args.draft parameter. + +
+
+
+
+ + + XHTML + Certain parameters are specific to + the XHTML transformation. + +
+ + + + args.xhtml.contenttarget + + + The default value is . Change this value to use a + different target name for the table of contents. + table of contents + XHTML + + + +
+
+
+ + + HTML5 parameters + + HTML5 + + The HTML5 transformation shares + common parameters with other HTML-based transformations and provides additional parameters that are specific to + HTML5 output. + HTML5 + + + +
+ + + + args.copycss + + +
+ + + args.css + + +
+ + + + + args.csspath + + +
+ + + +
+ + + + + + args.cssroot + + +
+ + +
+ + + + args.ftr + + + +
+ + + + args.gen.default.meta + + + +
+ + + + args.hdf + + +
+ + + + args.hdr + + + +
+ + + + args.hide.parent.link + + deprecated features + args.hide.parent.link + + + +
+ + + + args.outext + + + +
+ + + + args.xsl + + + +
+ + + + nav-toc + +

Specifies whether to generate a table of contents (ToC) in the HTML5 nav + element of each page. The navigation can then be rendered in a sidebar or menu via CSS. + HTML5 + nav-toc +

+

The following values are supported: +

    +
  • (default) – No table of contents will be generated
  • +
  • – Include the current topic in the ToC along with its parents, siblings + and children
  • +
  • – Generate a complete ToC for the entire map
  • +
+ table of contents + HTML5 + table of contents + nav-toc +

+
+
+ +
+
+
+
diff --git a/parameters/configuration-properties-file.dita b/parameters/configuration-properties-file.dita new file mode 100644 index 0000000..d7a03bb --- /dev/null +++ b/parameters/configuration-properties-file.dita @@ -0,0 +1,194 @@ + + + + + The <filepath>configuration.properties</filepath> file + + configuration.properties + + The configuration.properties file controls certain common properties, as well as some + properties that control PDF processing. + + + + configuration properties + default.cascade + org.dita.pdf2.i18n.enabled + plugin.ignores + plugin.order + plugindirs + temp-file-name-scheme + cli.color + registry + default.coderef-charset + + files + config/configuration.properties file + + PDF + configuration properties + + cascade + macOS + colored console output + Linux + colored console output + Windows + colored console output + command line + dita command + terminal + command line + grammar files + schema + DTD + dita command + colored console output + metadata + cascade + DITA 1.3 + cascade + default.cascade + org.dita.pdf2.i18n.enabled + plugin.ignores + plugin.order + plugindirs + temp-file-name-scheme + cli.color + registry + default.coderef-charset + Java + temporary file names + temporary file names + catalog + import precedence + internationalization + I18N + + + + +
+

The contents of the config/configuration.properties file are added to the DITA-OT + configuration in the dost-configuration.jar file when the plug-in integration process runs. The + following properties are typically set in this file:

+ + + default.cascade + +

Specifies the processing default value for the DITA 1.3 cascade attribute, which + determines how map-level metadata attributes are applied to the children of elements where the attributes + are specified. DITA-OT uses the value by default for backwards compatibility with + DITA 1.2 and earlier.

+ This property can only be set in + configuration.properties and should not be modified.
+
+ + temp-file-name-scheme + + +

This setting specifies the name of the Java class that defines how the source URL of a topic is mapped to + the URL of the temporary file name. The current default method uses a 1:1 mapping, though future + implementations may use alternative approaches such as hashes or full absolute paths as file names.

+ +
+
+ + filter-attributes + +

Specifies additional attributes to be used for filtering, in addition to those defined in the DITA + specification. The value is a comma-separated list of attribute QNames in Clark notation.

+

For example, to permit filtering by importance and status attributes, + set:

+ filter-attributes = importance, status +
+
+ + flag-attributes + +

Specifies additional attributes to be used for flagging, in addition to those defined in the DITA + specification. The value is a comma-separated list of attribute QNames in Clark notation.

+

For example, to enable flagging based on a custom cms:review attribute, + set:

+ flag-attributes = {http://www.cms.com/}review +

With this setting, a DITAVAL file could be used to flag content marked as new with a + purple background:

+ <val xmlns:cms="http://www.cms.com/"> + <prop action="flag" att="cms:review" val="new" backcolor="purple"/> +</val> +
+
+ + cli.color + +

Specifies whether the dita command prints colored output on the command line console. + When set to , error messages in dita command output will appear in + red on terminals that support + ANSI escape + codes, such as on Linux or macOS. Set to to disable the color. (Colored + output is not supported on Windows consoles such as cmd.exe or PowerShell).

+
+
+ + default.coderef-charset + +

Specifies the default character set for code references.

+
+
+ + plugindirs + +

A semicolon-separated list of directory paths that DITA-OT searches for plug-ins to install; any relative + paths are resolved against the DITA-OT base directory. Any immediate subdirectory that contains a + plugin.xml file is installed.

+ You can use this property to test custom plug-ins that are stored in other locations. For + example, to install all of the sample plug-ins that are included in the DITA-OT documentation, append + ;docsrc/samples/plugins to the property value and run dita + --install. You can maintain custom plug-ins in version-controlled repositories + outside of the DITA-OT installation directory, and add the repository locations to the list of plug-in + directories here to test your code.
+
+ + plugin.ignores + A semicolon-separated list of directory names to be ignored during plug-in + installation; any relative paths are resolved against the DITA-OT base directory. + + + plugin.order + Defines the order in which plug-ins are processed. In XML catalog files, the order of imports is + significant. If multiple plug-ins define the same thing (differently), the first catalog entry “wins”. + DITA-OT uses this property to define the order in which catalog entries are written. This mechanism is + currently used to ensure that DITA 1.3 grammar files take precedence over their DITA 1.2 equivalents. + + + registry + Defines the list (and order) of plug-in repositories that are searched for available plug-ins during the + installation process. In addition to the main plug-in registry at + , you can create a registry of your own to store the custom plug-ins + for your company or organization. To add a new entry, append the URL for your custom registry directory to + the registry key value, separating each entry with a space. For more information, see + . + + + + + + + default.coderef-charset + As of DITA-OT 3.3, the default character set for code references can be changed by specifying one of the + character set values supported by the Java + Charset class. + +
+
+
+ + + + + +
diff --git a/parameters/configuration-properties.dita b/parameters/configuration-properties.dita new file mode 100644 index 0000000..f29096f --- /dev/null +++ b/parameters/configuration-properties.dita @@ -0,0 +1,49 @@ + + + + + Configuration properties + DITA-OT uses .properties files and internal properties that store configuration + settings for the toolkit and its plug-ins. Configuration properties are available to both Ant and Java processes, + but unlike argument properties, they cannot be set at run time. + + + + command line + properties + properties + Ant + properties + Java + properties + Ant + configuring + Java + configuring + Ant + precedence + Java + precedence + local.properties file + + + + +
+

When DITA-OT starts the Ant process, it looks for property values in the following order and locations:

+
    +
  1. Any property passed to Ant from the command line with -Dproperty or + --property=
  2. +
  3. A custom property file passed with --propertyfile
  4. +
  5. A local.properties file in the root directory of the DITA-OT installation
  6. +
  7. The lib/org.dita.dost.platform/plugin.properties file
  8. +
  9. The configuration.properties file
  10. +
+

If a given property is set in multiple places, the first value “wins” and subsequent entries for the same + property are ignored.

+

You can use this mechanism to override DITA-OT default settings for your environment by passing parameters to + the dita command with --property=, or using + entries in .properties files.

+
+
+
diff --git a/parameters/dita-command-arguments.dita b/parameters/dita-command-arguments.dita new file mode 100644 index 0000000..36df794 --- /dev/null +++ b/parameters/dita-command-arguments.dita @@ -0,0 +1,464 @@ + + + + + Arguments and options for the <cmdname>dita</cmdname> command + + DITA command arguments + + The dita command takes mandatory arguments to process DITA content. Subcommands can be + used to manage plug-ins, or print information about the current configuration. A series of options are available to + modify the command behavior or specify additional configuration parameters. + + + + filters + dita command + dita command + arguments list + arguments + dita command + installing + uninstalling + artlbl + args.artlbl + + + + +
+ Usage +

To convert content from one format to another, specify the file to transform and the desired output format. If + necessary, you can set additional configuration parameters with options.

+ + + + dita + --input + = + file + --format + = + name + + options + + + + + + dita + --project + = + file + + options + + + + + Most dita command options support several syntax alternatives. All options can be + specified with a GNU-style option keyword preceded by two hyphens. In many cases, Unix-style single-letter + options (preceded by a single hyphen) are also available for brevity and backwards compatibility. +

The dita command also supports a series of subcommands that can be used to manage plug-ins, + or print information about the current configuration or version.

+ + + + dita + deliverables + file + + + + + dita + install + + ID + URL + file + + + + + + dita + plugins + + + + + dita + transtypes + + + + + dita + uninstall + ID + + + + + dita + version + + + + Prior to DITA-OT 3.5, subcommands were specified with the double-hyphen option syntax, + which is still supported for backwards compatibility. (For example, dita + --install will still work.) +
+ +
+ Arguments + --input + -i + --format + -f +

Each transformation requires you to specify at least the file to transform and the desired output format.

+ + + + --input=file + + -i + file + + Specifies the main file for your documentation project. + This argument corresponds to the common parameter + . + Typically this is a DITA map, however it also can be a DITA topic if you want to transform a single DITA + file. The path can be absolute, relative to args.input.dir, or relative to the current + directory if args.input.dir is not defined. + + + + --format=name + + -f + name + + + This argument corresponds to the common parameter + . + To list the formats that are currently available in your environment, use dita + transtypes. + +

+ + + + + --project=file + + Publish a project file with multiple deliverables. + You can add the --deliverable option to specify a single deliverable in the + project. + For more information, see + . + + +

+ +
+ Subcommands + deliverables subcommand + install subcommand + --install + install subcommand + uninstall subcommand + --uninstall + uninstall subcommand + plugins subcommand + --plugins + plugins subcommand + transtypes subcommand + --transtypes + transtypes subcommand + --help + -h + version subcommand + --version + version subcommand + + + + deliverables + file + Show a list of the available deliverables in the specified project file. + + + + install + { ID | URL | file } + + --install={ ID | URL | file } + Install a single plug-in ID from the registry at + (or a local registry), from a remote URL, or a + local ZIP file. + + The --force option can be passed as an additional option to the installation + subcommand to force-install an existing plug-in: dita + install plug-in-zip --force. + + The dita install command uses a network connection to install plug-ins + from the configured registry or process remote referenced resources. In environments where an HTTP proxy + is used to establish a network connection, you can provide the proxy configuration via the + ANT_OPTS environment variable. For more information, see + . + + + + + install + + + --install + + + + + + uninstall + ID + + + --uninstall=ID + + Remove the plug-in with the specified ID. + For a list of the currently installed plug-in IDs, use dita plugins. + + + + + + + plugins + + + --plugins + + Show a list of the currently installed plug-ins. + + + + transtypes + + + --transtypes + + Show a list of the available output formats (transformation types). + The entries in this list may be passed as values to the --format argument. + + + + version + + + --version + + Print version information and exit. + + +
+
+ Options + -o + --output + --filter + --force + --temp + -t + --verbose + -v + --debug + -d + --logfile + -l + --parameter + -D + --propertyfile + Java + classes + debugging + dita command + + + + --debug + + -d + + Debug logging prints considerably more additional information. The debug log includes all information from + the verbose log, plus details on Java classes, additional Ant properties and overrides, pre-processing + filters, parameters, and stages, and the complete build sequence. Debug logging requires additional + resources and can slow down the build process, so it should only be enabled when further details are + required to diagnose problems. + + + + --filter=files + + + +

Specifies filter file(s) used to include, exclude, or flag content. Relative paths are resolved against + the current directory and internally converted to absolute paths.

+ +

To specify multiple filter files, use the system path separator character to delimit individual file + paths (semicolon ‘;’ on Windows, and colon ‘:’ on macOS and Linux) and + wrap the value in quotes:

+

--filter="filter1.ditaval;filter2.ditaval;filter3.ditaval"

+

As of DITA-OT 3.6, the --filter option can also be passed multiple times:

+

--filter=filter1.ditaval --filter=filter2.ditaval --filter=filter3.ditaval

+

DITAVAL files are evaluated in the order specified, so conditions specified in the first file take + precedence over matching conditions specified in later files, just as conditions at the start of a + DITAVAL document take precedence over matching conditions later in the same document.

+
+
+
+ + + --help + + -h + + Print a list of available arguments, options, and subcommands. + + + + --logfile=file + + -l + file + + Write logging messages to a file. + + + + --no-color + + By default, DITA-OT prints certain log messages to the console in color. In terminal environments that do + not support colored output, the ANSI color escape codes will be shown instead. To deactivate colored output, + pass the --no-color option to the dita command, or set the + TERM=dumb or NO_COLOR environment variables. + + + + --output=dir + + -o + dir + + +

Specifies the path of the output directory; the path can be absolute or relative to the current + directory.

+

This option corresponds to the common parameter + .

+

By default, the output is written to the out subdirectory of the current + directory.

+
+
+ + + --parameter=value + + -Dparameter=value + + Specify a value for a DITA-OT or Ant build parameter. + The GNU-style --parameter=value form is only available for + parameters that are configured in the plug-in configuration file; the Java-style -D + form can also be used to specify additional non-configured parameters or set system properties. + Parameters not implemented by the specified transformation type or referenced in a + .properties file are ignored. + + + + + --propertyfile=file + + Use build parameters defined in the referenced .properties file. + Build parameters specified on the command line override those set in the .properties + file. + + + + --repeat=N + + Repeat the transformation N number of times. + This option can be used by plug-in developers to measure performance. To run a conversion five times, for + example, use --repeat=. The duration of each execution will appear in + the console when the final transformation is complete. + $ dita --input=docsrc/samples/sequence.ditamap --format= \ + --repeat= +1 11281ms +2 4132ms +3 3690ms +4 4337ms +5 3634ms + + + + + --resource=file + + + -r + file + + + This argument corresponds to the common parameter + . + Resource files can be used to convert partial documentation sets by processing input with additional + information. + For example, to process a single topic file with a map that contains key definitions, use a command like + this: + dita --input=topic.dita --resource=keys.ditamap --format= + + To convert a chapter map to HTML5 and insert related links from relationship tables in a separate map, + use: + dita --input=chapter.ditamap --resource=reltables.ditamap --format= + + + + + --temp=dir + + -t + dir + + + This option corresponds to the common parameter + . + The temporary directory is where DITA-OT writes intermediate files that are generated during the + transformation process. + + + + --theme=file + + Publish PDF output with a theme configuration file. + For more information, see + . + + + + --verbose + + -v + + Verbose logging prints additional information to the console, including directory settings, effective + values for Ant properties, input/output files, and informational messages to assist in troubleshooting. + +
+
+
+
diff --git a/parameters/generate-copy-outer.dita b/parameters/generate-copy-outer.dita new file mode 100644 index 0000000..6ba5f4c --- /dev/null +++ b/parameters/generate-copy-outer.dita @@ -0,0 +1,83 @@ + + + + + Handling content outside the map directory + By default, DITA-OT assumes content is located in or beneath the directory containing the DITA map file. + The generate.copy.outer parameter can be used to adjust how output is generated for content + that is located outside the map directory. + + + + generate.copy.outer + HTML + files outside map directory + DITA maps + relative file locations + + + + + +
+ Background +

This is an issue in the following situations: +

    +
  • The DITA map is in a directory that is a peer to directories that contain referenced objects.
  • +
  • The DITA map is in a directory that is below the directories that contain the referenced objects.
  • +

+

Let’s assume that the directory structure for the DITA content looks like the following:

+

images/
+  fig.png
+maps/
+  start.ditamap
+topics/
+  topic.dita

+

The DITA map is in the maps directory, the topics are in the topics + directory, and the images are in the images directory.

+
+ +
+ Exclude content outside the map directory + index + entry file + entry file + broken links, reason for +

Let’s assume that you run the HTML5 transformation. By default, DITA-OT uses the + generate.copy.outer parameter with a value of , which means that no + output is generated for content that is located outside the DITA map directory.

+

You receive only the following output:

+

index.html
+commonltr.css
+commonrtl.css

+

The index.html file contains the navigation structure, but all the links are broken, since + no HTML files were built for the topics.

+

How do you fix this? By adjusting the parameter setting to shift the output directory.

+
+ +
+ Shift the output directory to include all content +

To preserve the links to referenced topics and images and make it easier to copy the output directory, set the + generate.copy.outer parameter to .

+

Now your output directory structure resembles the structure of the source directory:

+

images/
+  fig.png
+maps/
+  index.html
+topics/
+  topic.html
+commonltr.css
+commonrtl.css

+

The index.html file is in the maps directory, the HTML files for the + topics are in the topics directory, and the referenced images are in the + images directory.

+ If args.csspath is not set, the default CSS files (and any custom CSS files + specified via args.css) will be copied to the root level of the output folder. To copy CSS + files to an output subfolder named css, set args.csspath to + . + CSS + copy to specific location + +
+
+
diff --git a/parameters/index.dita b/parameters/index.dita new file mode 100644 index 0000000..6ae812c --- /dev/null +++ b/parameters/index.dita @@ -0,0 +1,13 @@ + + + + + DITA Open Toolkit parameters + + Parameters + + + You can adjust DITA Open Toolkit behavior via dita command arguments and + options, DITA-OT parameter settings, and configuration properties. + + diff --git a/parameters/internal-ant-properties.dita b/parameters/internal-ant-properties.dita new file mode 100644 index 0000000..d2a6eaf --- /dev/null +++ b/parameters/internal-ant-properties.dita @@ -0,0 +1,65 @@ + + + + + Internal Ant properties + DITA-OT uses these Ant properties in certain internal operations. They are not intended for general use, + but may be adjusted by plug-in developers to configure custom transform types. + + + + role + args.rellinks + PDF + related links + args.rellinks + HTML5 + related links + args.rellinks + + + + +
+ Internal properties are subject to change from one version of DITA-OT to another. + + + include.rellinks + +

A space-separated list of link roles to be output; the #default value token represents + links without an explicit role (those for which no role attribute is defined). Defined by + args.rellinks, but may be overridden directly.

+

Valid roles include: +

    +
  • parent
  • +
  • child
  • +
  • sibling
  • +
  • friend
  • +
  • next
  • +
  • previous
  • +
  • cousin
  • +
  • ancestor
  • +
  • descendant
  • +
  • sample
  • +
  • external
  • +
  • other
  • +
+

+
+
+ + temp.output.dir.name + +

This property can be used to place all output in an internal directory, so that a final step in the + transform type can do some form of post-processing before the files are placed in the specified output + directory.

+

For example, if a custom HTML5 transform sets the property to zip_dir, all output files + (including HTML, images, and CSS) will be placed within the directory zip_dir in the + temporary processing directory. A final step can then be used to add more files, zip the directory, and + return that zip to the designated output directory.

+
+
+
+
+
+
diff --git a/parameters/local-properties-file.dita b/parameters/local-properties-file.dita new file mode 100644 index 0000000..61fb33e --- /dev/null +++ b/parameters/local-properties-file.dita @@ -0,0 +1,63 @@ + + + + + The <filepath>local.properties</filepath> file + + local.properties + + A local.properties file in the root directory of the DITA-OT installation can be used + to override the default values of various DITA-OT parameters. + + + + files + local.properties + local.properties file + Windows + RenderX + local.properties file + Antenna House + local.properties file + command line + local.properties file + Java + local.properties file + PDF + formatter + formatter + Apache FOP + Antenna House + RenderX + + + + + +

For example, if you always use the same rendering engine to produce PDF output for all of your projects, you + could create a local.properties file in the root directory of your DITA-OT installation to + set the pdf.formatter parameter and additional options for the XSL processor:

+ # Use RenderX XEP Engine for PDF output +pdf.formatter = xep + +# Specify the user configuration file for RenderX +custom.xep.config = /path/to/custom.config +

Backslash “\” characters in .properties files must be escaped with a second backslash as “\\”. If you use + Antenna House Formatter on a Windows system, for example, you would set the path to the command using a + properties file entry like this:

+ # Use Antenna House Formatter for PDF output +pdf.formatter = ah + +# Specify the path to the Antenna House Formatter command +axf.cmd=C:\\Program Files\\Antenna House\\AHFormatterV62 +
+
+ This file can only be used to set Ant property values that can be passed as argument parameters to the + command line. The DITA-OT Java code does not read this file. +
+
+
diff --git a/parameters/parameters.ditamap b/parameters/parameters.ditamap new file mode 100644 index 0000000..8d97ba4 --- /dev/null +++ b/parameters/parameters.ditamap @@ -0,0 +1,28 @@ + + + + + Parameter Reference + + + + + + + + + + HTML Help + + + + + + + + + + + + + diff --git a/parameters/parameters_intro.dita b/parameters/parameters_intro.dita new file mode 100644 index 0000000..a3d1bf8 --- /dev/null +++ b/parameters/parameters_intro.dita @@ -0,0 +1,37 @@ + + + + + DITA-OT parameters + + Certain parameters apply to all DITA-OT transformations. Other parameters are common to the HTML-based + transformations. Some parameters apply only to specific transformation types. These parameters can be passed as + options to the dita command using the --parameter=value + syntax or included in build scripts as Ant properties. + + + + dita command + parameters + parameters + transformations + parameters + transformations + HTML + Ant + properties + parameters + Ant + build script + script + + + + + +
+

If your toolkit installation includes custom plug-ins that define additional parameters, you can add entries to + the following topics by rebuilding the DITA-OT documentation.

+
+
+
diff --git a/parameters/plugin-properties-file.dita b/parameters/plugin-properties-file.dita new file mode 100644 index 0000000..31806e9 --- /dev/null +++ b/parameters/plugin-properties-file.dita @@ -0,0 +1,33 @@ + + + + + The <filepath>plugin.properties</filepath> file + + plugin.properties + + The plugin.properties file is used to store configuration properties that are set by + the plug-in installation process. + + + + files + plugin.properties + plugin.properties file + Java + plugin.properties + + + + +
+

The file is located in the config/org.dita.dost.platform directory of the DITA-OT + installation and stores a cached version of the plug-in configuration used by the Java code.

+

The contents of this file depend on the installed plug-ins. Each plug-in may contribute properties such as the + path to the plug-in folder, supported extensions and print transformation types.

+ The plugin.properties file is regenerated each time the plug-in + integration process is run, so it should not be edited manually as these changes would be lost the next time a + plug-in is installed or removed. +
+
+
diff --git a/reference/architecture.dita b/reference/architecture.dita new file mode 100644 index 0000000..35d1d5e --- /dev/null +++ b/reference/architecture.dita @@ -0,0 +1,27 @@ + + + + + DITA Open Toolkit Architecture + + DITA-OT architecture + + DITA Open Toolkit is an open-source implementation of the OASIS specification for the Darwin Information + Typing Architecture. The toolkit uses Ant, XSLT, and Java to transform DITA content (maps and topics) into different + deliverable formats. + + + + authoring formats + DITA + OASIS + architecture + Ant + Java + architecture + XSLT + DITA-OT architecture + + + + diff --git a/reference/books.dita b/reference/books.dita new file mode 100644 index 0000000..a332a1b --- /dev/null +++ b/reference/books.dita @@ -0,0 +1,13 @@ + + + + + + Books + Several DITA-related publications include information on configuring and customizing DITA Open Toolkit + with detailed examples on creating custom plug-ins for PDF output. + +
+
+ + diff --git a/reference/common-html-processing.dita b/reference/common-html-processing.dita new file mode 100644 index 0000000..55e6a7e --- /dev/null +++ b/reference/common-html-processing.dita @@ -0,0 +1,41 @@ + + + + + Common HTML-based processing + After the pre-processing operation runs, HTML-based builds each run a common series of Ant targets to + generate HTML file. Navigation may be created before or after this set of common routines. + + + + chunk + HTML-based processing + DITAVAL + HTML-based formats + HTML + common processing + CSS + HTML transforms + + + + +

After the pre-processing is completed, the following targets are run for all of the HTML-based builds:

+

+

    +
  • If the args.css parameter is passed to the build to add a CSS file, the + copy-css target copies the CSS file from its source location to the relative location in + the output directory.
  • +
  • If a DITAVAL file is used, the copy-revflag target copies the default start- and + end-revision flags into the output directory.
  • +
  • The DITA topics are converted to HTML files. Unless the chunk attribute was specified, each + DITA topic in the temporary directory now corresponds to one HTML file. The + dita.inner.topics.xhtml target is used to process documents that are in the map directory + (or subdirectories of the map directory). The dita.outer.topics.xhtml target is used to + process documents that are outside of the scope of the map, and thus might end up outside of the designated + output directory. Various DITA-OT parameters control how documents processed by the + dita.outer.topics.xhtml target are handled.
  • +
+

+
+
diff --git a/reference/dita-spec-support.dita b/reference/dita-spec-support.dita new file mode 100644 index 0000000..0ba838b --- /dev/null +++ b/reference/dita-spec-support.dita @@ -0,0 +1,19 @@ + + + + + DITA specification support + DITA Open Toolkit supports all versions of the OASIS DITA specification, + including 1.0, 1.1, 1.2, and 1.3. + + + + authoring formats + DITA + DITA 1.0 + DITA 1.1 + + + + + diff --git a/reference/dita-v1-2-support.dita b/reference/dita-v1-2-support.dita new file mode 100644 index 0000000..2ec9f72 --- /dev/null +++ b/reference/dita-v1-2-support.dita @@ -0,0 +1,61 @@ + + + + + DITA 1.2 support + DITA Open Toolkit supports the DITA 1.2 specification. While 1.2 is no longer + the latest version of DITA, the grammar files (DTD and XML Schema) are still included with DITA-OT and content + explicitly created for 1.2 continues to work as intended. + + + + abbreviated-form + keyref + processing-role + conref + support + filters + subject scheme + DITA + specializations + DTD + schema + DITA 1.2 + grammar files + DITA 1.2 + SCORM + + + + +

Highlights of DITA 1.2 support in the toolkit include: +

    +
  • Processing support for all new elements and attributes
  • +
  • Link redirection and text replacement using keyref
  • +
  • New processing-role attribute in maps to allow references to topics that will not produce + output artifacts
  • +
  • New content reference extensions, including the ability to reference a range of elements, to push content + into another topic, and to use keys for resolving a conref attribute.
  • +
  • The ability to filter content with controlled values and taxonomies using Subject Scheme Maps
  • +
  • Processing support for both default versions of task (original, limited task, and the general task with + fewer constraints on element order)
  • +
  • Acronym and abbreviation support with the new abbreviated-form element
  • +
  • New link grouping abilities available with headers in relationship tables
  • +
  • OASIS Subcommittee specializations from the learning and machine industry domains (note that the core + toolkit contains only basic processing support for these, but can be extended to produce related artifacts + such as SCORM modules)
  • +

+

To find detailed information about any of these features, see the specification documents at OASIS. The DITA + Adoption Technical Committee has also produced several papers to describe individual new features. In general, the + white papers are geared more towards DITA users and authors, while the specification is geared more towards tool + implementors, though both may be useful for either audience. The DITA Adoption papers can be found from that + committee’s main web page.

+
+ + + + + + + +
diff --git a/reference/dita-v1-3-support.dita b/reference/dita-v1-3-support.dita new file mode 100644 index 0000000..7222aee --- /dev/null +++ b/reference/dita-v1-3-support.dita @@ -0,0 +1,87 @@ + + + + + DITA 1.3 support + DITA Open Toolkit provides processing support for the + OASIS DITA 1.3 specification. Initial preview support for this specification was added in version 2.0 of the + toolkit; version 2.2 extended this foundation to support key scopes and branch filtering along with additional + DITA 1.3 features. + + + + ditavalref + xmlelement + xmlatt + line-through + overline + object + div + support + keyscope + deliveryTarget + orient + keyref + cascade + profiling + filters + support + branch filters + DTD + schema + DITA 1.3 + grammar files + DITA 1.3 + specification support + catalog + grammar file resolution + + + + + +

Because DITA 1.3 is fully backwards compatible with previous DITA DTDs and schemas, DITA-OT provides the + 1.3 materials as the default grammar files for processing. The XML Catalog resolution maps any references for + unversioned DITA document types to the 1.3 versions. All processing ordinarily dependent on the 1.0, 1.1, or 1.2 + definitions continues to work as usual, and any documents that make use of the newer DITA 1.3 elements or + attributes will be supported with specific new processing.

+
+ Major features of DITA 1.3 +

The following DITA 1.3 features are supported in DITA Open Toolkit.

+
    +
  • + Scoped keys supported using DITA 1.3 keyscope + attribute
  • +
  • + Branch filtering using ditavalref + elements in a map
  • +
  • Support formatting based on new XML Mention elements, such as adding angle brackets around elements tagged + with xmlelement and adding @ before attributes tagged with + xmlatt
  • +
  • New highlighting elements line-through and overline
  • +
  • Support for profiling based on deliveryTarget attribute
  • +
  • Support for the new orient attribute for rotating tables
  • +
  • Profile (filter or flag) based on + groups within profiling attributes
  • +
  • keyref and related key referencing attributes supported on + object
  • +
  • New in-topic link syntax using . in place of the topic ID: #./figure
  • +
  • Support for additional new elements, such as the div element for grouping
  • +
  • Support cascade attribute in maps (processing defaults to the value merge, + which is the + default cascade operation described by the DITA + specification)
  • +
+ For the latest status information on DITA 1.3-related features and fixes, see the + in the GitHub issues tracker. +
+
+ + + + + + + + +
diff --git a/reference/dita-v2-0-support.dita b/reference/dita-v2-0-support.dita new file mode 100644 index 0000000..f461078 --- /dev/null +++ b/reference/dita-v2-0-support.dita @@ -0,0 +1,212 @@ + + + + + DITA 2.0 preview support + + + DITA 2.0 preview + + + DITA Open Toolkit provides a preview of features for the upcoming OASIS DITA + 2.0 specification. This preliminary processing support is provided on the basis of the latest drafts of the + DITA 2.0 DTD and RELAX NG grammar files from OASIS (as of + ). + + +

DITA documents that reference the draft grammar files can be parsed, and where features + overlap with DITA 1.3, those features will work as expected.

+
+ DITA-OT 3.5 +

DITA-OT 3.5 provided an initial preview of DITA 2.0 features.

+
    +
  • +

    + The new include element can be used to reference text or XML + content from other files. In addition to the processing mandated by the specification, DITA-OT also + supports the character set definition and line range extraction options previously provided for + coderef elements (see + ). +

    +
  • +
  • +

    + The new specializations attribute, which replaces the DITA 1.x + domains attribute, can now be used as an alternative method of declaring specialized + attributes. +

    +
  • +
  • +

    + The outputclass attribute can now be specified as a flagging behavior + in DITAVAL files. This allows you to flag an element with a CSS class keyword that will be added to the + class attribute value in the generated HTML. Output classes allow you to pick up + pre-defined styles from existing web frameworks, and are more easily overridden with custom CSS files than + the inline style attributes generated by DITA 1.x flagging options such as + color and backcolor. +

    +
  • +
  • +

    + Titles can now be specified on simple tables, and + simpletable entries now support row and column spanning attributes. +

    +
  • +
  • +

    + Where DITA 1.x defined conflicting class values for + linktext, shortdesc, and + searchtitle in maps and topics, the new draft of DITA 2.0 uses the topic-based + class value in all cases. Processing is updated to recognize the updated value when + these elements are used in maps. +

    +
  • +
+
+
+ DITA-OT 3.6 +

DITA-OT 3.6 added support for additional DITA 2.0 features.

+
    +
  • Where earlier DITA versions relied on the object element to embed media in DITA + source files, DITA 2.0 provides new audio and video elements + that correspond to their HTML5 equivalents.
  • +
  • For HTML5 compatibility, the new emphasis domain adds support for the strong and + em elements in addition to the existing b and + i elements in the highlighting domain.
  • +
  • The troubleshooting domain has been updated with additional constructs that can be used to provide detailed + diagnostic information.
  • +
  • Several obsolete elements and attributes have been removed from DITA 2.0, including: +
      +
    • boolean
    • +
    • data-about
    • +
    • indextermref
    • +
    • alt on image
    • +
    • navtitle on topicref
    • +
    • query on topicref
    • +
    • refcols on simpletable
    • +
    • xtrc
    • +
    • xtrf
    • +
    +
  • +
+
+
+ DITA-OT 3.7 +

DITA-OT 3.7 added support for additional DITA 2.0 features.

+
    +
  • The new “combine” chunk action can be used to merge content into new output documents. +

    When the chunk attribute is set to combine on a map, branch, or map + reference, all source DITA documents grouped by that reference will be combined into a single document in + the output.

    +

    (Support for the DITA 2.0 “split” chunk action has not yet been + implemented.)

    + The new chunk action is only applied if the root map has a DITA 2.0 doctype, such as: +

    <!DOCTYPE map PUBLIC "-//OASIS//DTD DITA 2.0 Map//EN" "map.dtd">

    +

    If the root map uses an unversioned (or 1.x) doctype, DITA 1.3 processing will be applied, and 2.0 chunk + actions will be ignored. With a 2.0 root map, any 1.3 chunk actions are ignored.

    +
    +
  • +
  • The new keytext element can be used to define variable text referenced by + keyref. Although the DITA 2.0 grammar files in this release support the use of + keytext in authored files, DITA-OT 3.7 does not yet have processing support for the + element.
  • +
  • The new alternative titles domain and titlealt element (separate from the + titlealts element in DITA 1.3) may be used when you need to use an alternate title, + such as for a navigation title, search title, link title, subtitle, or title hint.
  • +
  • The new appid-role attribute is available on resourceid. The + default is context-sensitive-help.
  • +
  • The keyref attribute was added to all elements in the highlighting domain and the new + emphasis domain.
  • +
  • The href, format, and scope attributes are now used + consistently for linking elements.
  • +
  • Several obsolete elements and attributes have been removed from DITA 2.0, including: +
      +
    • anchor
    • +
    • anchorref
    • +
    • data-about
    • +
    • hasInstance
    • +
    • hasKind
    • +
    • hasNarrower
    • +
    • hasPart
    • +
    • hasRelated
    • +
    • longquoteref
    • +
    • relatedSubjects
    • +
    • sectiondiv
    • +
    • subjectRel
    • +
    • subjectRelHeader
    • +
    • subjectRelTable
    • +
    • subjectRole
    • +
    • anchorref from map
    • +
    • copy-to
    • +
    • href, format, type, scope, + reftitle from lq (keyref remains)
    • +
    • locktitle
    • +
    • longdescref
    • +
    • mapkeyref
    • +
    • print
    • +
    • query
    • +
    • specentry from stentry
    • +
    • spectitle
    • +
    +
  • +
+
+
+ DITA-OT 4.0 +

DITA-OT 4.0 added support for additional DITA 2.0 features.

+
    +
  • The new “split” chunk action can be used to break content into new output documents. + #3942 +

    When the chunk attribute is set to split on a map, + branch, or map reference, each topic from the referenced source document will be rendered as an individual + document.

    + The new chunk action is only applied if the root map has a DITA 2.0 doctype, such as: +

    <!DOCTYPE map PUBLIC "-//OASIS//DTD DITA 2.0 Map//EN" "map.dtd">

    +

    If the root map uses an unversioned (or 1.x) doctype, DITA 1.3 processing will be applied, and 2.0 chunk + actions will be ignored. With a 2.0 root map, any 1.3 chunk actions are ignored.

    +
    +
  • +
+
+
+ DITA-OT 4.1 +

DITA-OT 4.1 added support for additional DITA 2.0 features.

+
    +
  • +

    DITA 2.0 splits the programming and syntax domains (so you can use one without the other).

    +

    The syntax diagram elements move from the programming domain to a new syntax diagram domain, which results + in new class attribute tokens. All elements and content models remain the same.

    +

    HTML5 and PDF processing has been updated for DITA-OT 4.1 to support syntax diagram elements from DITA 2.0, + so that processing matches what those elements did in DITA 1.3. + #4082 +

  • +
  • DITA 2.0 removes the xNAL domain and classification domains. + #4177 +
  • +
+
+
+ DITA-OT 4.2 +

DITA-OT 4.2 adds support for additional DITA 2.0 features.

+
    +
  • +
+
+
+ Other new or revised features proposed for DITA 2.0 are not yet supported. Additional + features will be implemented in future versions of DITA-OT as the specification evolves. + For the latest status information on DITA 2.0-related features and fixes, see the + in the GitHub issues tracker. +
+
+ + + + + + +
diff --git a/reference/docs-dita-features.dita b/reference/docs-dita-features.dita new file mode 100644 index 0000000..dec8fbf --- /dev/null +++ b/reference/docs-dita-features.dita @@ -0,0 +1,132 @@ + + + + + DITA features in the documentation + + DITA features in docs + + DITA Open Toolkit uses various recent DITA features in the project documentation. + + + + audience + orient + profiling + branch filters + Antenna House + DITA XML mention domain + DITA 1.3 + XML mention domain + + + + +

The + source files for the DITA-OT + documentation include examples of the following DITA features (among others):

+
    +
  • subjectScheme classification for controlling available attributes
  • +
  • profiling and branch filtering (novice/expert content)
  • +
  • extending topics with conref push
  • +
  • keys and key references
  • +
  • XML mention domain
  • +
+ +
+ Subject schemes +

Various topics, sections and elements in the docs are profiled by audience:

+

+

An “audience” subject scheme controls the values that are available for the audience + attribute:

+

+

A dedicated subject scheme map defines several series of permissible values for outputclass + attributes, which apply styling to elements on the project website, enable + extended codeblock processing such as whitespace visualization and + line numbering in PDF output, or trigger + via + .

+

+
+ +
+ Branch filtering: re-using profiled content +
+
+

Installing DITA-OT pulls a subset of the build description from using the + dita command, filtered to display only content deemed suitable for novice users + under + :

+

+

The same content appears later in + with additional information on arguments, options and examples.

+

+
+ +
+ Conref push +
+
+

The docs build uses the conref push mechanism (with the pushreplace, mark, + and pushafter + conactions) to extend the parameter descriptions embedded in the + default plug-ins:

+

+

The pushed content appears in the output after the default description. (See + .)

+ You could also use the same mechanism to extend the documentation with custom information that + applies only to your company’s toolkit distribution. +
+ +
+ Keys and key references +
+
+

The key-definitions.ditamap defines keys for version references, re-usable links, etc.

+

This key definition defines the maintenance release version:

+

+

In topics, the keyword is used in place of hard-coded version references:

+ <title>DITA Open Toolkit <keyword keyref="maintenance-version"/> Release Notes</title> +
+ +
+ XML mention domain +
+
+

The docs use the + XML mention domain to mark up XML elements and attributes:

+ <li id="1777"> + DITA 1.3: Initial support has been added for the <xmlatt>orient</xmlatt> + attribute on <xmlelement>table</xmlelement> elements. These changes allow + Antenna House Formatter to render tables in landscape mode when the + <xmlatt>orient</xmlatt> attribute is set to <option>land</option>. […] +</li> +

When the toolkit generates output for the sample above:

+
    +
  • the XML element name is wrapped in angle brackets as table +
  • +
  • the attribute name is prefixed with an “at” sign as orient
  • +
+
+
+
diff --git a/reference/eclipsehelp-processing.dita b/reference/eclipsehelp-processing.dita new file mode 100644 index 0000000..db4ef09 --- /dev/null +++ b/reference/eclipsehelp-processing.dita @@ -0,0 +1,75 @@ + + + + + Eclipse help processing + The transformation generates XHTML-based output and files that are needed to + create an Eclipse Help system plug-in. Once the normal XHTML process has run, the dita.map.eclipse + target is used to create a set of control files and navigation files. + + + + HTML + Eclipse Help + dita.map.eclipse + Eclipse Help + targets + Eclipse Help + index + Eclipse Help + table of contents + Eclipse Help + + + + +
+

Eclipse uses multiple files to control the plug-in behavior. Some of these control files are generated by the + build, while others might be created manually. The following Ant targets control the Eclipse help + processing:

+

+

+ +
dita.map.eclipse.init
+
Sets up various default properties
+
+ +
dita.map.eclipse.toc
+
Creates the XML file that defines an Eclipse table of contents
+
+ +
dita.map.eclipse.index
+
Creates the sorted XML file that defines an Eclipse index
+
+ +
dita.map.eclipse.plugin
+
Creates the plugin.xml file that controls the behavior of an Eclipse plug-in
+
+ +
dita.map.eclipse.plugin.properties
+
Creates a Java properties file that sets properties for the plug-in, such as name and version + information
+
+ +
dita.map.eclipse.manifest.file
+
Creates a MANIFEST.MF file that contains additional information used by + Eclipse
+
+ +
copy-plugin-files
+
Checks for the presence of certain control files in the source directory, and copies those found to the + output directory
+
+ +
dita.map.eclipse.fragment.language.init
+
Works in conjunction with the dita.map.eclipse.fragment.language.country.init and + dita.map.eclipse.fragment.error targets to control Eclipse fragment files, which are + used for versions of a plug-in created for a new language or locale
+
+
+

+

Several of the targets listed above have matching templates for processing content that is located outside of + the scope of the map directory, such as dita.out.map.eclipse.toc.

+
+
+
diff --git a/reference/extended-functionality.dita b/reference/extended-functionality.dita new file mode 100644 index 0000000..b006d9e --- /dev/null +++ b/reference/extended-functionality.dita @@ -0,0 +1,176 @@ + + + + + + Extended codeblock processing + + + Codeblock extensions + + + DITA-OT provides additional processing support beyond that which is mandated by the DITA specification. + These extensions can be used to define character encodings or line ranges for code references, normalize + indentation, add line numbers or display whitespace characters in code blocks. + + + + coderef + codeblock + format + outputclass + encoding + DOTJ052E + character set + + + + + +
+ Character set definition +

For coderef elements, DITA-OT supports defining the code reference target file + encoding using the format attribute. The supported format is:

+ format (";" space* "charset=" charset)? +

If a character set is not defined, the system default character set will be used. If the character set is not + recognized or supported, the DOTJ052E error is thrown and the system default character set is + used as a fallback.

+ <coderef href="unicode.txt" format="txt; charset=UTF-8"/> +

As of DITA-OT 3.3, the default character set for code references can be changed by adding the + default.coderef-charset key to the + configuration.properties file:

+ default.coderef-charset = ISO-8859-1 +

The character set values are those supported by the Java + Charset class.

+ As of DITA-OT 4.0, the default character set for code references has been changed from the system default + encoding to UTF-8. +
+ +
+ Line range extraction +

Code references can be limited to extract only a specified line range by defining the + line-range pointer in the URI fragment. The format is:

+ uri ("#line-range(" start ("," end)? ")" )? +

Start and end line numbers start from 1 and are inclusive. If the end range is omitted, the range ends on the + last line of the file.

+
+ + <coderef href="Parser.scala#line-range(5,10)" format="scala"/> +

Only lines from 5 to 10 will be included in the output.

+
+
+ RFC 5147 + RFC 5147 +

DITA-OT also supports the line position and range syntax from + . The format for line range is:

+ uri ("#line=" start? "," end? )? +

Start and end line numbers start from 0 and are inclusive and exclusive, respectively. If the start range is + omitted, the range starts from the first line; if the end range is omitted, the range ends on the last line of + the file. The format for line position is:

+ uri ("#line=" position )? +

The position line number starts from 0.

+
+ + <coderef href="Parser.scala#line=4,10" format="scala"/> +

Only lines from 5 to 10 will be included in the output.

+
+
+ Line range by content +

Instead of specifying line numbers, you can also select lines to include in the code reference by specifying + keywords (or “tokens”) that appear in the referenced file.

+
+

DITA-OT supports the token pointer in the URI fragment to extract a line range based on the + file content. The format for referencing a range of lines by content is:

+ uri ("#token=" start? ("," end)? )? +

Lines identified using start and end tokens are exclusive: the lines that contain the start token and end + token will be not be included. If the start token is omitted, the range starts from the first line in the + file; if the end token is omitted, the range ends on the last line of the file.

+
+
+ +

Given a Haskell source file named fact.hs with the following content,

+ +

a range of lines can be referenced as:

+ <coderef href="fact.hs#token=START-FACT,END-FACT"/> +

to include the range of lines that follows the START-FACT token on Line 1, up to (but not + including) the line that contains the END-FACT token (Line 5). The resulting + codeblock would contain lines 2–4:

+ + This approach can be used to reference code samples that are + frequently edited. In these cases, referencing line ranges by line number can be error-prone, as the target line + range for the reference may shift if preceding lines are added or removed. Specifying ranges by line content + makes references more robust, as long as the token keywords are preserved when the referenced + resource is modified.
+ +
+ Whitespace normalization + whitespace handling +

DITA-OT can adjust the leading whitespace in code blocks to remove excess indentation and keep lines short. + Given an XML snippet in a codeblock with lines that all begin with spaces (indicated here as dots “·”),

+
+ +

··<subjectdef keys="audience"> +····<subjectdef keys="novice"/> +····<subjectdef keys="expert"/> +··</subjectdef>

+

DITA-OT can remove the leading whitespace that is common to all lines in the code block. To trim the excess + space, set the outputclass attribute on the codeblock element to + include the normalize-space keyword.

+

In this case, two spaces (“··”) would be removed from the beginning of each line, shifting content to the + left by two characters, while preserving the indentation of lines that contain additional whitespace (beyond + the common indent):

+

<subjectdef keys="audience"> +··<subjectdef keys="novice"/> +··<subjectdef keys="expert"/> +</subjectdef>

+
+
+ +
+ Whitespace visualization (PDF) +

DITA-OT can be set to display the whitespace characters in code blocks to visualize indentation in PDF + output.

+

To enable this feature, set the outputclass attribute on the + codeblock element to include the show-whitespace keyword.

+

When PDF output is generated, space characters in the code will be replaced with a middle dot or “interpunct” + character ( · ); tab characters are replaced with a rightwards arrow and three spaces + ( →    ).

+
+ + + Sample Java code with visible whitespace characters <i>(PDF only)</i> + for i in 0..10 { + println(i) + } + + +
+ +
+ Line numbering (PDF) + line numbering +

DITA-OT can be set to add line numbers to code blocks to make it easier to distinguish specific lines.

+

To enable this feature, set the outputclass attribute on the + codeblock element to include the show-line-numbers keyword.

+
+ + + Sample Java code with line numbers and visible whitespace characters <i>(PDF only)</i> + for i in 0..10 { + println(i) + } + + +
+
+
diff --git a/reference/flagging-migration.dita b/reference/flagging-migration.dita new file mode 100644 index 0000000..d5b5457 --- /dev/null +++ b/reference/flagging-migration.dita @@ -0,0 +1,208 @@ + + + + + XHTML migration for flagging updates in DITA-OT 1.7 + + Flagging updates + + This topic is primarily of interest to developers with XHTML transform overrides written prior to DITA-OT + 1.7. Due to significant changes in the flagging process with the 1.7 release, some changes may be needed to make + overrides work properly with DITAVAL-based flagging. The new design is significantly simpler than the old design; in + many cases, migration will consist of deleting old code that is no longer needed. + + + + ul + deprecated features + mode="elementname-fmt" + deprecated features + DITAVAL templates + DITAVAL + template changes in 1.7 + CSS + gen-style + flagging + + + + +
+ Which XHTML overrides need to migrate? +

If your override does not contain any code related to DITAVAL flagging, then there is nothing to migrate.

+

If your builds do not make use of DITAVAL-based flagging, but call the deprecated flagging templates, then you + should override but there is little urgency. You will not see any difference in the output, but those templates + will be removed in a future release.

+

If you do make use of DITAVAL-based flagging, try using your override with 1.7. Check the elements you + override: +

    +
  1. In some cases flags may be doubled. This will be the case if you call routines such as + start-flagit.
  2. +
  3. In some cases flags may be removed. This will be the case if you call shortcut routines such as + revtext or revblock.
  4. +
  5. In other cases, flags may still appear properly, in which case migration is less urgent.
  6. +

+

For any override that needs migration, please see the instructions that follow.

+
+ Deprecated templates in DITA-OT 1.7 +

All of the old DITAVAL-based templates are deprecated in DITA-OT 1.7. If your overrides include any of the + following templates, they should be migrated for the new release; in many cases the templates below will not + have any effect on your output, but all instances should be migrated.

+
    +
  • The gen-style template used to add CSS styling
  • +
  • The start-flagit and end-flagit templates used to generate image flags + based on property attributes like audience
  • +
  • The start-revflag and end-revflag templates, used to generate images + for active revisions
  • +
  • Shortcut templates that group these templates into a single call, such as: +
      +
    • start-flags-and-rev and end-flags-and-rev, used to combine flags + and revisions into one call
    • +
    • revblock and revtext, both used to output start revisions, element + content, and end revisions
    • +
    • The modes outputContentsWithFlags and + outputContentsWithFlagsAndStyle, both used to combine processing for + property/revision flags with content processing
    • +
  • +
  • All other templates that make use of the $flagrules variable, which is no longer used in + any of the DITA-OT 1.7 code
  • +
  • All templates within flag.xsl that were called from the templates listed above
  • +
  • Element processing handled with mode="elementname-fmt", such as mode="ul-fmt" for + processing unordered lists and mode="section-fmt" for sections.
  • +
+
+ What replaces the templates? +

The new flagging design described in the preprocess design section now adds literal copies of relevant DITAVAL + elements, along with CSS-based flagging information, into the relevant section of the topic. This allows most + flags to be processed in document order; in addition, there is never a need to read the DITAVAL, interpret CSS, + or evaluate flagging logic. The htmlflag.xsl file contains a few rules to match and process + the start/end flags; in most cases, all code to explicitly process flags can be deleted.

+

For example, the common logic for most element rules before DITA-OT 1.7 could be boiled down to the following: +

    +
  1. Match element
  2. +
  3. Create flagrules variable by reading DITAVAL for active flags
  4. +
  5. Output start tag such as div or span +
  6. +
  7. Call commonattributes and ID processing
  8. +
  9. Call gen-style with $flagrules, to create DITAVAL-based CSS
  10. +
  11. Call start-flagit with $flagrules, to create start flag images
  12. +
  13. Call start-revflag with $flagrules, to create start revision images
  14. +
  15. Output contents
  16. +
  17. Call end-revflag with $flagrules, to create end revision images
  18. +
  19. Call end-flagit with $flagrules, to create end flag images
  20. +
  21. Output end tag such as /div or /span
  22. +
+

+

In DITA-OT 1.7, style and images are typically handled with XSLT fallthrough processing. This removes virtually + all special flag coding from element rules, because flags are already part of the document and processed in + document order.

+

The sample above is reduced to: +

    +
  1. Match element
  2. +
  3. Output start tag such as div or span +
  4. +
  5. Call commonattributes and ID processing
  6. +
  7. Output contents
  8. +
  9. Output end tag such as /div or /span
  10. +
+

+
+
+ Migrating <codeph>gen-style</codeph> named template +

Calls to the gen-style template should be deleted. There is no need to replace this call for + most elements.

+

The gen-style template was designed to read a DITAVAL file, find active style-based flagging + (such as colored or bold text), and add it to the generated style attribute in HTML.

+

With DITA-OT 1.7, the style is calculated in the pre-process flagging module. The result is created as + outputclass on a ditaval-startprop sub-element. The commonattributes + template now includes a line to process that value; the result is that for every element that calls + commonattributes, DITAVAL style will be processed when needed. Because virtually every + element includes a call to this common template, there is little chance that your override needs to explicitly + process the style. The new line in commonattributes that handles the style is: + <xsl:apply-templates select="*[contains(@class,' ditaot-d/ditaval-startprop ')]/@outputclass" mode="add-ditaval-style"/>

+
+ Migrating <codeph>start-flagit</codeph>, <codeph>start-revflag</codeph>, <codeph>end-flagit</codeph>, + and <codeph>end-flagit</codeph> named templates +

Calls to these templates fall into two general groups.

+

If the flow of your element rule is to create a start tag like div, + start-flagit/start-revflag, process contents, + end-revflag/end-flagit, end tag — you just need to delete the calls to + these templates. Flags will be generated simply by processing the element contents in document order.

+

If the flow of your element rule processes flags outside of the normal document-order. There are generally two + reasons this is done. The first case is for elements like ol, where flags must appear + before the ol in order to create valid XHTML. The second is for elements like + section, where start flags are created, followed by the title or some generated text, + element contents, and finally end flags. In either of these cases, support for processing flags in document + order is disabled, so they must be explicitly processed out-of-line.

+

This is done with the following two lines (one for start flag/revision, one for end flag/revision):

+
    +
  • +

    Create starting flag and revision images:

    + <xsl:apply-templates select="*[contains(@class,' ditaot-d/ditaval-startprop ')]" mode="out-of-line"/>
  • +
  • +

    Create ending flag and revision images:

    + <xsl:apply-templates select="*[contains(@class,' ditaot-d/ditaval-endprop ')]" mode="out-of-line"/>
  • +
+

For example, the following lines are used in DITA-OT 1.7 to process the ul element + (replacing the 29 lines used in DITA-OT + 1.6):<xsl:template match="*[contains(@class,' topic/ul ')]"> + <xsl:apply-templates select="*[contains(@class,' ditaot-d/ditaval-startprop ')]" mode="out-of-line"/> + <xsl:call-template name="setaname"/> + <ul> + <xsl:call-template name="commonattributes"/> + <xsl:apply-templates select="@compact"/> + <xsl:call-template name="setid"/> + <xsl:apply-templates/> + </ul> + <xsl:apply-templates select="*[contains(@class,' ditaot-d/ditaval-endprop ')]" mode="out-of-line"/> + <xsl:value-of select="$newline"/> +</xsl:template>

+
+ Migrating <codeph>start-flags-and-rev</codeph> and <codeph>end-flags-and-rev</codeph> +
    +
  • start-flags-and-rev is equivalent to calling start-flagit followed by + start-revflag; it should be migrated as in the previous section.
  • +
  • end-flags-and-rev is equivalent to calling end-revflag followed by + end-flagit; it should be migrated as in the previous section.
  • +
+
+ Migrating <codeph>revblock</codeph> and <codeph>revtext</codeph> +

Calls to these two templates can be replaced with a simple call to + xsl:apply-templates/.

+
+ Migrating modes <codeph>outputContentsWithFlags</codeph> and + <codeph>outputContentsWithFlagsAndStyle</codeph> +

Processing an element with either of these modes can be replaced with a simple call to + xsl:apply-templates/.

+
+ Migrating <codeph>mode="elementname-fmt"</codeph> +

Prior to DITA-OT 1.7, many elements were processed with the following + logic:

Match element
+    Set variable to determine if revisions are active and $DRAFT is on
+    If active
+        create division with rev style
+            process element with mode="elementname-fmt"
+        end division
+    Else
+        process element with mode="elementname-fmt"
+
+Match element with mode="elementname-fmt"
+    Process as needed

+

Beginning with DITA-OT 1.7, styling from revisions is handled automatically with the + commonattributes template. This means there is no need for the extra testing, or the + indirection to mode="elementname-fmt". These templates are deprecated, and element processing + will move into the main element rule. Overrides that include this indirection may remove it; overrides should + also be sure to match the default rule, rather than matching with + mode="elementname-fmt".

+
+
diff --git a/reference/gloss-argument.dita b/reference/gloss-argument.dita new file mode 100644 index 0000000..0d5de36 --- /dev/null +++ b/reference/gloss-argument.dita @@ -0,0 +1,7 @@ + + + + + argument + Required parameter passed to the Ant process or dita command. + diff --git a/reference/gloss-dita-open-toolkit.dita b/reference/gloss-dita-open-toolkit.dita new file mode 100644 index 0000000..c110709 --- /dev/null +++ b/reference/gloss-dita-open-toolkit.dita @@ -0,0 +1,28 @@ + + + + + DITA Open Toolkit + The open-source publishing engine for content authored in the Darwin Information Typing + Architecture. + + + + DOST + + + + + + + DITA-OT + Treat as a proper noun; do not precede with the definite article. + + + DOST + + Deprecated acronym for “DITA Open Source + Toolkit”. Use DITA-OT instead. + + + diff --git a/reference/gloss-extension-point.dita b/reference/gloss-extension-point.dita new file mode 100644 index 0000000..a73f5df --- /dev/null +++ b/reference/gloss-extension-point.dita @@ -0,0 +1,10 @@ + + + + + extension point + Pre-defined interface that can be added to a plug-in to allow other plug-ins to extend or customize portions + of its functionality. An extendable feature is defined by declaring an extension-point + element in the plugin.xml file. Other plug-ins can then override the default behavior by + defining custom code that runs when this extension point is called. + diff --git a/reference/gloss-option.dita b/reference/gloss-option.dita new file mode 100644 index 0000000..78c1a1f --- /dev/null +++ b/reference/gloss-option.dita @@ -0,0 +1,7 @@ + + + + + option + Discretionary parameter passed to the Ant process or dita command. + diff --git a/reference/gloss-output-format.dita b/reference/gloss-output-format.dita new file mode 100644 index 0000000..e4adbf0 --- /dev/null +++ b/reference/gloss-output-format.dita @@ -0,0 +1,7 @@ + + + + + output format + Deliverable file or set of files containing all of the transformed content. + diff --git a/reference/gloss-parameter.dita b/reference/gloss-parameter.dita new file mode 100644 index 0000000..ec42062 --- /dev/null +++ b/reference/gloss-parameter.dita @@ -0,0 +1,7 @@ + + + + + parameter + Command-line argument or option passed to the Ant process or dita command. + diff --git a/reference/gloss-plug-in.dita b/reference/gloss-plug-in.dita new file mode 100644 index 0000000..79f431f --- /dev/null +++ b/reference/gloss-plug-in.dita @@ -0,0 +1,7 @@ + + + + + plug-in + Group of related files that change the default behavior of DITA-OT in some way. + diff --git a/reference/gloss-processor.dita b/reference/gloss-processor.dita new file mode 100644 index 0000000..7cdb55b --- /dev/null +++ b/reference/gloss-processor.dita @@ -0,0 +1,8 @@ + + + + + processor + Software that performs a series of operations to transform DITA content from one format to + another. + diff --git a/reference/gloss-property.dita b/reference/gloss-property.dita new file mode 100644 index 0000000..8a60609 --- /dev/null +++ b/reference/gloss-property.dita @@ -0,0 +1,7 @@ + + + + + property + Ant-specific argument or option. + diff --git a/reference/gloss-template-plugin.dita b/reference/gloss-template-plugin.dita new file mode 100644 index 0000000..99b628c --- /dev/null +++ b/reference/gloss-template-plugin.dita @@ -0,0 +1,10 @@ + + + + + template + Optional template elements can be added to plugin.xml files to + define XML or XSL files that integrate DITA-OT extensions. Template files are often named with a + _template suffix, and may be used to create custom extensions, group targets, and more. + Anything contained in the plug-in’s template files is integrated when the plug-in is installed. + diff --git a/reference/gloss-template-xslt.dita b/reference/gloss-template-xslt.dita new file mode 100644 index 0000000..8052363 --- /dev/null +++ b/reference/gloss-template-xslt.dita @@ -0,0 +1,7 @@ + + + + + XSL template + Set of rules in an XSL stylesheet that are applied to nodes that match specific XML structures. + diff --git a/reference/gloss-transformation-type.dita b/reference/gloss-transformation-type.dita new file mode 100644 index 0000000..b2bb6b1 --- /dev/null +++ b/reference/gloss-transformation-type.dita @@ -0,0 +1,16 @@ + + + + + transformation type + Component of a plug-in that defines an output format. + + + transtype + Abbreviated form of transformation type. Use only to refer to the + transtype parameter of the dita command, or to the + transtype element in a plugin.xml file that defines the output + format. + + + diff --git a/reference/gloss-transtype.dita b/reference/gloss-transtype.dita new file mode 100644 index 0000000..98f3512 --- /dev/null +++ b/reference/gloss-transtype.dita @@ -0,0 +1,7 @@ + + + + + transtype + Specific element of plugin.xml. + diff --git a/reference/gloss-variable.dita b/reference/gloss-variable.dita new file mode 100644 index 0000000..c8c3108 --- /dev/null +++ b/reference/gloss-variable.dita @@ -0,0 +1,8 @@ + + + + + variable + Language-specific piece of generated text, most often defined in the files in + org.dita.base/xsl/common. + diff --git a/reference/glossary.dita b/reference/glossary.dita new file mode 100644 index 0000000..78e2bfb --- /dev/null +++ b/reference/glossary.dita @@ -0,0 +1,7 @@ + + + + + Glossary + Certain terms have particular meaning in the context of the DITA Open Toolkit project. + diff --git a/reference/glossary.ditamap b/reference/glossary.ditamap new file mode 100644 index 0000000..5ddf318 --- /dev/null +++ b/reference/glossary.ditamap @@ -0,0 +1,21 @@ + + + + + Glossary entries + + + + + + + + + + + + + + + + diff --git a/reference/html-based-processing.dita b/reference/html-based-processing.dita new file mode 100644 index 0000000..29bc11d --- /dev/null +++ b/reference/html-based-processing.dita @@ -0,0 +1,20 @@ + + + + + HTML-based processing modules + DITA-OT ships with several varieties of HTML output, each of which follows roughly the same path through + the processing pipeline. All HTML-based transformations begin with the same call to the pre-processing module, after + which they generate HTML files and then branch to create the transformation-specific navigation files. + + + + HTML + various output types + pipelines + HTML + + + + + diff --git a/reference/html5-processing.dita b/reference/html5-processing.dita new file mode 100644 index 0000000..42548ca --- /dev/null +++ b/reference/html5-processing.dita @@ -0,0 +1,31 @@ + + + + + HTML5 processing + After the HTML5 files are generated, the transformation generates a table of + contents (ToC) file called index.html, which can be loaded as a cover page or rendered in a + navigation sidebar or menu via CSS. + + + + HTML + HTML5 + HTML5 + CSS + nav-toc + targets + HTML5 + nav-toc + CSS + HTML5 + entry file + HTML5 + + + + +

As of DITA-OT 2.2, the nav-toc parameter can be used in HTML5 transformations to embed + navigation directly in topics using native HTML5 elements without JavaScript or framesets.

+
+
diff --git a/reference/htmlhelp-processing.dita b/reference/htmlhelp-processing.dita new file mode 100644 index 0000000..6adf63e --- /dev/null +++ b/reference/htmlhelp-processing.dita @@ -0,0 +1,45 @@ + + + + + HTML Help processing + The transformation creates HTML Help control files. If the build runs on a system + that has the HTML Help compiler installed, the control files are compiled into a CHM file. + + + + HTML + CHM + dita.map.htmlhelp + targets + HTML Help + .hhp + .hhc + .hhk + HTML Help + + + + +
+

Once the pre-processing and XHTML processes are completed, most of the HTML Help processing is handled by the + following targets:

+
+ +
dita.map.htmlhelp
+
Create the HHP, HHC, and HHK files. The HHK file is sorted based on the language of the map.
+
+ +
dita.htmlhelp.convertlang
+
Ensures that the content can be processed correctly by the compiler, and that the appropriate code pages + and languages are used.
+
+ +
compile.HTML.Help
+
Attempts to detect the HTML Help compiler. If the compiler is found, the full project is compiled into a + single CHM file.
+
+
+
+
+
diff --git a/reference/images/processing-flow.graffle b/reference/images/processing-flow.graffle new file mode 100644 index 0000000000000000000000000000000000000000..ce390f351acd1edecc9c903efb580af28eee0594 GIT binary patch literal 4995 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 by OmniGraffle 7.42017-07-06 17:09:45 +0000Canvas 1Processing FlowCommon Preprocessing StageT ype?T opic MergeT ransform T opics to HTMLEclipse help navigationT ransform to XSL-FOT ransform to PDFNav?HTMLHelp navigationXHTML T oC, HTML5 <nav>Compile HTMLHelpOutputHTML-based formatsPDFMerged XMLFO fi lePDFEclipseXHTML HTML5 T ocJSXHTML / HTML5Preprocessed map & topicsDIT A Map & T opicsCopy assets (CSS, images, etc.) \ No newline at end of file diff --git a/reference/images/sample-project-filtering-scenario.svg b/reference/images/sample-project-filtering-scenario.svg new file mode 100644 index 0000000..92a638c --- /dev/null +++ b/reference/images/sample-project-filtering-scenario.svg @@ -0,0 +1 @@ +Context 1map2.ditamapproduct-A.ditavalContext 2-Amap1.ditamapmap2.ditamapproduct-B.ditavalContext 2-BContext 3map3.ditamapContext 100map100.ditamapPublication PDF-internalaudience-internal.ditavalPublication PDF-externalaudience-external.ditavalDeliverable 1-internal-pdf1-internal.pdfDeliverable 1-external-pdf1-external.pdfDeliverable 2-A-internal-pdf2-A-internal.pdfDeliverable 2-A-external-pdf2-A-external.pdfDeliverable 2-B-internal-pdf2-B-internal.pdfDeliverable 2-B-external-pdf2-B-external.pdfDeliverable 3-internal-pdf3-internal.pdfDeliverable 3-external-pdf3-external.pdfDeliverable 100-internal-pdf100-internal.pdfDeliverable 100-external-pdf100-external.pdf \ No newline at end of file diff --git a/reference/implementation-dependent-features.dita b/reference/implementation-dependent-features.dita new file mode 100644 index 0000000..bcd91ea --- /dev/null +++ b/reference/implementation-dependent-features.dita @@ -0,0 +1,124 @@ + + + + + + Implementation-dependent features + + For certain features, the DITA specification allows conforming processors to choose between different + implementation alternatives. In these cases, there may be differences in behavior when DITA content is handled by + different processors. DITA-OT supports implementation-specific features by applying one or more of the permissible + processing approaches. + + + + + + + + +
+ Chunking + chunk + supported methods + chunk + error recovery +

DITA content can be divided or merged into new output documents in different ways, depending on the value of + the chunk attribute.

+

DITA-OT supports the following chunking methods:

+
    +
  • select-topic
  • +
  • select-document
  • +
  • select-branch
  • +
  • by-topic
  • +
  • by-document
  • +
  • to-content
  • +
  • to-navigation.
  • +
+

When no chunk attribute values are given, no chunking is performed.

+ For HTML-based transformation types, this is effectively equivalent to select-document and by-document + defaults. +

Error recovery:

+
    +
  • When two tokens from the same category are used, no error or warning is thrown.This violates + DITA 1.2 spec.
  • +
  • When an unrecognized chunking method is used, no error or warning is thrown.
  • +
+
+
+ Filtering + revprop + val + filters + duplicate conditions +

Error recovery:

+
    +
  • When there are multiple revprop elements with the same val + attribute, no error or warning is thrown
  • +
  • When multiple prop elements define a duplicate attribute and value combination, attribute default, or + fall-back behavior, the DOTJ007W warning is thrown.
  • +
+
+
+ Debugging attributes + debugging + attributes + xtrf + xtrc + xtrf + xtrc +

The debug attributes are populated as follows:

+
+ +
xtrf
+
The XML trace filename is used to store the absolute system path of the original source document.
+
+ +
xtrc
+
The XML trace counter stores an element counter with the following format: + element-name ":" integer-counter ";" line-number ":" column-number
+
+
+
+
+ Image scaling + images + scaling +

If both height and width attributes are given, the image is scaled non-uniformly.

+

If the scale attribute is not an unsigned integer, no error or warning is thrown during pre-processing.

+
+
+ Map processing + topicref + map processing +

When a topicref element that references a map contains child + topicref elements, the DOTX068W error is thrown and the child + topicref elements are ignored.

+
+
+ Link processing + href + link processing +

When the value of a hyperlink reference in the href attribute is not a valid URI reference, + the DOTJ054E error is thrown. Depending on the + processing-mode setting, error + recovery may be attempted.

+
+
+ Copy-to processing + shortdesc + copy-to +

When the copy-to attribute is specified on a topicref, the content of + the shortdesc element is not used to override the short description of the topic.

+
+
+ Coderef processing + coderef + encoding +

When coderef elements are used within code blocks to reference external files with + literal code samples, the system default character set is used as the target file encoding unless a different + character set is explicitly defined via the mechanisms described under + .

+
+
+
diff --git a/reference/index.dita b/reference/index.dita new file mode 100644 index 0000000..4663499 --- /dev/null +++ b/reference/index.dita @@ -0,0 +1,8 @@ + + + + + Reference + The Reference topics provide more advanced information about the DITA-OT architecture, OASIS + specification support, and licensing. + diff --git a/reference/java-api.dita b/reference/java-api.dita new file mode 100644 index 0000000..e32867d --- /dev/null +++ b/reference/java-api.dita @@ -0,0 +1,76 @@ + + + + + Using the Java API + DITA Open Toolkit includes a Java Application Programming Interface to allow developers to embed the + toolkit more easily into other Java programs. + + + + Java + API + API + dita command + classpath + Java + classpath + classpath + Java + dita command + + + + +

When using the API, programmers don’t need to know or care that DITA-OT uses Ant, they can just use Java.

+ When running DITA-OT via the dita command, an ant shell script handles the + classpath setup, but when using the API the classpath should be set up as part of the normal classpath + configuration for the Java application. + + Example usage + // Create a reusable processor factory with DITA-OT base directory +ProcessorFactory pf = ProcessorFactory.newInstance(ditaDir); +// and set the temporary directory +pf.setBaseTempDir(tempDir); + +// Create a processor using the factory and configure the processor +Processor p = pf.newProcessor("html5") +.setInput(mapFile) +.setOutputDir(outDir) +.setProperty("nav-toc", "partial"); + +// Run conversion +p.run(); + +
+ debugging + logging +

By default, running DITA-OT via the API will write a debug log to the temporary directory. A custom SLF4J + logger can also be used to access the log via the Simple Logging Facade for Java.

+

The processor cleans the temporary directory by default, but this can be disabled to simplify debugging in + cases where the processor failed.

+ See the DITA-OT Java API documentation in the doc/api/ folder + of the DITA-OT distribution package for information on the packages, classes, interfaces and methods provided by + the Java API. +
+
+ Downloading DITA-OT from Maven Central + Maven Central +

As of version 2.5, the DITA Open Toolkit base library (dost.jar) is available via the + Maven 2 Central Repository. You can use this mechanism to download the main JAR file and include it in the build + for other Java projects.

+

To locate the latest version, + search for the org.dita-ot group ID.

+ The dost.jar file provides only the DITA Open Toolkit base library. It + does not contain the full DITA-OT distribution and cannot be used to run DITA-OT by itself. You will need + to ensure that your build installs the other files and directories required for the toolkit along with the + dependencies for your project. +
+
+
diff --git a/reference/license.dita b/reference/license.dita new file mode 100644 index 0000000..d799331 --- /dev/null +++ b/reference/license.dita @@ -0,0 +1,26 @@ + + + + + + License Information + + License + + + DITA Open Toolkit is released under the Apache License, Version 2.0. + + + + + license + Apache licence + + + + + For information on the terms and conditions for use, reproduction, and distribution of DITA Open Toolkit, + refer to the + . + + diff --git a/reference/license.ditamap b/reference/license.ditamap new file mode 100644 index 0000000..2d22707 --- /dev/null +++ b/reference/license.ditamap @@ -0,0 +1,10 @@ + + + + + + License Information + + + + diff --git a/reference/map-first-preprocessing.dita b/reference/map-first-preprocessing.dita new file mode 100644 index 0000000..e9f16ca --- /dev/null +++ b/reference/map-first-preprocessing.dita @@ -0,0 +1,130 @@ + + + + + Map-first pre-processing + + Map-first pre-processing + + DITA-OT provides a map-first pre-processing option as an alternative to the + default preprocess operation. The method, which was introduced in DITA-OT 2.5 as an experimental + feature, has since been improved and is ready for use in production scenarios. Map-first pre-processing provides + the same functionality as the default preprocess, but takes a different + approach. + + + + filters + map-first pre-processing + map-first pre-processing + pre-processing + map first + DITA 1.0 + DITA 1.2 + DITA 1.3 + effect on pre-processing + pipelines + map first + validate + maps + DITA maps + DITA maps + validate + + + + +

Whereas the default pre-processing routine handles both maps and topics at the same + time, often switching back and forth between map operations and topic operations, the map-first approach only + begins processing topics after nearly all map processing is complete. This simplifies the processing logic and + creates cleaner module responsibilities, which makes it easier to process only those topics that are actually + referenced after filtering, for example, or to only process the map to validate the map structure.

+

The current pre-processing architecture was established during the DITA 1.0 era when there were fewer DITA + features that operated on the map level. Initially, the difference between processing modes was not that great. + DITA 1.2 and 1.3 introduced many more map-level features, such as keys and key scopes, that make it difficult to + reliably work with topics before all map features have been resolved.

+

The original pre-processing operation already handles many map operations first, but this was not the original + design and requires regular refactoring to handle edge cases. The new map-first pre-processing is designed with + this model in mind, improving the overall processing flow and making it more formal about the map-first model. The + new model also takes advantage of hashed topic file names in the temporary directory, which simplifies many + processing steps, and is better able to handle topics referenced outside of the map directory (that case has + resulted in a variety of issues with the original model).

+

As of DITA-OT 4.2, the map-first pre-processing pipeline also supports additional subject scheme features.

+ The map-first pre-processing option is enabled by default in DITA-OT 3.0 for PDF + and HTML Help. These formats were chosen because they generate a compiled result file, so temporarily hashed file + names should all be invisible to the build. After further testing and feedback, the new option has been enabled + for HTML5 output as of DITA-OT 4.2. +
+ How to use map-first pre-processing +

To use (or test) map-first pre-processing, call the preprocess2 Ant target in your custom + transformation types instead of the preprocess target.

+

For example, if you have a custom HTML5 transformation type named "myhtml", then you may have a plug-in + extension that looks this:

+ <!-- Simple variant: set properties and call default HTML5 --> +<target name="dita2myhtml" depends="myhtml.init,dita2html5"/> + +

This type of extension is quite common, and is used to set default properties for your environment followed by + a normal build to use those properties. As of DITA-OT 4.2, this approach will inherit the map-first + pre-processing routine from the HTML5 transformation.

+

In earlier versions, you’d need to replace dita2html5 with the normal HTML5 steps, swapping + out preprocess for preprocess2:

+ <!-- Simple variant: set properties and call default HTML5 --> +<target name="dita2myhtml" + depends="myhtml.init, + html5.init, + build-init, + preprocess2, + html5.topic, + html5.map, + html5.css"/> + If you use this simple method for customized PDF or HTML Help builds, you will automatically be using + preprocess2. +

Some custom transformation types already require you to repeat the default dependencies, in which case you + should already call preprocess directly, as in the following:

+ <!-- More complex variant: add processing steps to default HTML5 --> +<target name="dita2myhtml" + depends="myhtml.init, + build-init, + preprocess, + local-extensions-after-preprocess, + html5.topic, + html5.map, + html5.css"/> +

In such cases, the modification is much easier – simply add a 2 to the existing + preprocess target.

+
+
+ How to test in a production environment +

In some cases, you may be responsible for maintaining transformation types that are actually run by many people + on your team or around a company. In this case, you likely need to maintain your existing transformation types + based on the backwards-compatible preprocess modules, but also want to provide your colleagues + with a way to test their own documents using preprocess2.

+

There are several ways to do this. One fairly straightforward approach would be to create a new custom + transformation type that is exactly the same, except for pre-processing. For example, if you have a local HTML + variant called myhtml as above, instead of modifying that transformation directly, you could + create a second transformation type called myhtml-beta that provides exactly the same support, + but with the new map-first pre-processing:

+ <!-- Original "myhtml" is not modified, used for production --> +<target name="dita2myhtml5" depends="myhtml.init,dita2html5"/> + +<!-- "myhtml-beta" used to test and provide feedback on preprocess2 --> +<target name="dita2myhtml-beta" + depends="myhtml.init, + html5.init, + build-init, + preprocess2, + html5.topic, + html5.map, + html5.css"/> +
+
+ Known limitations +

+

+
+
diff --git a/reference/markdown-formats.dita b/reference/markdown-formats.dita new file mode 100644 index 0000000..3808673 --- /dev/null +++ b/reference/markdown-formats.dita @@ -0,0 +1,25 @@ + + + + + Markdown formats + + The following topics show how DITA XML constructs are represented in Markdown and + MDITA, provide details on common syntax, differences between the markdown and + mdita formats, and describe additional configuration options. + + + + + format + authoring formats + Markdown + authoring formats + MDITA + Markdown + MDITA + + + + + diff --git a/reference/markdown-formats.ditamap b/reference/markdown-formats.ditamap new file mode 100644 index 0000000..371b508 --- /dev/null +++ b/reference/markdown-formats.ditamap @@ -0,0 +1,66 @@ + + + + + Markdown formats + + + + + + + + + + + + + + Source and target + + + Sourceonly: links to → + + + Targetonly + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reciprocal links + + + + + + + + + + diff --git a/reference/markdown/.gitrepo b/reference/markdown/.gitrepo new file mode 100644 index 0000000..12d7400 --- /dev/null +++ b/reference/markdown/.gitrepo @@ -0,0 +1,12 @@ +; DO NOT EDIT (unless you know what you are doing) +; +; This subdirectory is a git "subrepo", and this file is maintained by the +; git-subrepo command. See https://github.com/ingydotnet/git-subrepo#readme +; +[subrepo] + remote = https://github.com/jelovirt/org.lwdita.wiki.git + branch = master + commit = 2afab7a21c4b85c17c041c6f70fc1a86fd10b76b + parent = 0f640e8426701c877d679187cfe17d6579b68672 + method = merge + cmdver = 0.4.6 diff --git a/reference/markdown/Common-syntax.md b/reference/markdown/Common-syntax.md new file mode 100644 index 0000000..72dba64 --- /dev/null +++ b/reference/markdown/Common-syntax.md @@ -0,0 +1,238 @@ +The following common Markdown constructs are processed in the same way for both `mdita` and `markdown` topics. + +## Hard line breaks + +A line break that is preceded by two or more spaces is parsed as a hard line break. Because DITA doesn’t have a `
` element for line break, hard line breaks are converted into `` processing instructions. + +```markdown +foo·· +baz +``` + +```xml +

foobaz

+``` + +The LwDITA plug-in contains extensions for HTML5 and PDF outputs to generate line breaks. + +## Links + +The format of local link targets is detected based on file name extension. The following extensions are treated as DITA files: + +| extension | format | +| ----------- | ---------- | +| `.dita` | `dita` | +| `.xml` | `dita` | +| `.md` | `markdown` | +| `.markdown` | `markdown` | + +All other link targets detect the `format` from the file name extension and are treated as non-DITA files. Absolute link targets are treated as external scope links: + +```markdown +[Markdown](test.md) +[DITA](test.dita) +[HTML](test.html) +[External](http://www.example.com/test.html) +``` + +```xml +Markdown +DITA +HTML +External +``` + +## Images + +Images used in inline content are processed with inline placement. If a block-level image contains a title, it is treated as an image wrapped in a figure element: + +```markdown +An inline ![Alt](test.jpg). + +![Alt](test.jpg) + +![Alt](test.jpg 'Title') +``` + +```xml +

An inline Alt.

+ + Alt + + + Title + + Alt + + +``` + +## Key references + +Keys can be referenced using standard Markdown syntax for [shortcut reference links]: + +```markdown +[key] +[link text][key] +![image-key] +``` + +```xml + +link text + +``` + +## Inline + +The following inline elements are supported: + +```markdown +**bold** +_italic_ +`code` +~~strikethrough~~ +``` + +```xml +bold +italic +code +strikethrough +``` + +## Lists + +Standard Markdown syntax is used for both ordered (numbered) and unordered (bulleted) lists. + +Unordered list items can be marked up using either asterisks “`*`” or hyphens “`-`” as list markers: + + + +```markdown +* one +* two + - three + - four +``` + + +```xml +
    +
  • one
  • +
  • two +
      +
    • three
    • +
    • four
    • +
    +
  • +
+``` + +Ordered lists use either numbers or number signs “`#`”, followed by a period: + +```markdown +1. one +2. two + #. three + #. four +``` + +```xml +
    +
  1. one
  2. +
  3. two +
      +
    1. three
    2. +
    3. four
    4. +
    +
  4. +
+``` + +> **Note:** Markdown DITA supports both loose and [tight] list spacing (with no blank lines between list items). MDITA treats all lists as [loose], and wraps each list item in a paragraph (`
  • item

  • `). + +Definition lists use the [PHP Markdown Extra](https://michelf.com/projects/php-markdown/extra/#def-list) format with a single-line term followed by a colon and the definition: + +```markdown +Term +: Definition. +``` + +```xml +
    + +
    Term
    +
    Definition.
    +
    +
    +``` + +Each definition list entry must have only one term and contain only inline content. + +## Metadata + +A [YAML] metadata block as defined in the [pandoc_metadata_block] extension can be used to specify metadata elements for the DITA prolog. + +The supported elements are: + +- `author` +- `source` +- `publisher` +- `permissions` +- `audience` +- `category` +- `keyword` +- `resourceid` + +Any unrecognized keys are output using the `` element. + +```markdown +--- +author: + - Author One + - Author Two +source: Source +publisher: Publisher +permissions: Permissions +audience: Audience +category: Category +keyword: + - Keyword1 + - Keyword2 +resourceid: + - Resourceid1 + - Resourceid2 +workflow: review +--- + +# Sample with YAML header +``` + +```xml +Sample with YAML header + + Author One + Author Two + Source + Publisher + + + + Category + + Keyword1 + Keyword2 + + + + + + +``` + +[loose]: https://spec.commonmark.org/0.30/#loose +[pandoc_metadata_block]: https://pandoc.org/MANUAL.html#extension-yaml_metadata_block 'pandoc_metadata_block' +[shortcut reference links]: https://spec.commonmark.org/0.30/#shortcut-reference-link +[tight]: https://spec.commonmark.org/0.30/#tight +[YAML]: https://www.yaml.org/ 'YAML' diff --git a/reference/markdown/Custom-schemas.md b/reference/markdown/Custom-schemas.md new file mode 100644 index 0000000..c86d588 --- /dev/null +++ b/reference/markdown/Custom-schemas.md @@ -0,0 +1,114 @@ +You can create a custom plug-in to set different configuration options for Markdown parsing and conversion to DITA. Custom Markdown schema configurations can be defined using the [`Java ServiceLoader`](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/ServiceLoader.html) class. + +The service type interface [`com.elovirta.dita.markdown.SchemaProvider`](https://github.com/jelovirt/org.lwdita/blob/master/src/main/java/com/elovirta/dita/markdown/SchemaProvider.java) has two methods: + +- `isSupportedSchema(URI)` — check whether schema URI is supported by this provider. +- `createMarkdownParser(URI)` — create [`MarkdownParser`](https://github.com/jelovirt/org.lwdita/blob/master/src/main/java/com/elovirta/dita/markdown/MarkdownParser.java) instance for given schema. We suggest returning a configured [`MarkdownParserImpl`](https://github.com/jelovirt/org.lwdita/blob/master/src/main/java/com/elovirta/dita/markdown/MarkdownParserImpl.java) instance. + +## Example + +Sample customization for `urn:acme:dita:custom` schema. + +Create a `src/main/java/com/acme/AcmeSchemaProvider.java` class that extends `SchemaProvider` to define a scheme and what customization options it uses: + +```java +package com.acme; + +import com.elovirta.dita.markdown.DitaRenderer; +import com.elovirta.dita.markdown.MarkdownParser; +import com.elovirta.dita.markdown.MarkdownParserImpl; +import com.elovirta.dita.markdown.SchemaProvider; +import com.vladsch.flexmark.ext.abbreviation.AbbreviationExtension; +import com.vladsch.flexmark.ext.anchorlink.AnchorLinkExtension; +import com.vladsch.flexmark.ext.attributes.AttributesExtension; +import com.vladsch.flexmark.ext.autolink.AutolinkExtension; +import com.vladsch.flexmark.ext.definition.DefinitionExtension; +import com.vladsch.flexmark.ext.footnotes.FootnoteExtension; +import com.vladsch.flexmark.ext.gfm.strikethrough.StrikethroughSubscriptExtension; +import com.vladsch.flexmark.ext.ins.InsExtension; +import com.vladsch.flexmark.ext.jekyll.tag.JekyllTagExtension; +import com.vladsch.flexmark.ext.superscript.SuperscriptExtension; +import com.vladsch.flexmark.ext.tables.TablesExtension; +import com.vladsch.flexmark.ext.yaml.front.matter.YamlFrontMatterExtension; +import com.vladsch.flexmark.parser.Parser; +import com.vladsch.flexmark.util.data.MutableDataSet; + +import java.net.URI; + +import static java.util.Arrays.asList; + +public class AcmeSchemaProvider implements SchemaProvider { + private static final URI SCHEMA = URI.create("urn:acme:dita:custom.xsd"); + + @Override + public boolean isSupportedSchema(URI schema) { + return SCHEMA.equals(schema); + } + + @Override + public MarkdownParser createMarkdownParser(URI schema) { + return new MarkdownParserImpl(new MutableDataSet() + // See https://github.com/vsch/flexmark-java/wiki/Extensions + .set(Parser.EXTENSIONS, asList( + AbbreviationExtension.create(), + AnchorLinkExtension.create(), + AttributesExtension.create(), + FootnoteExtension.create(), + InsExtension.create(), + JekyllTagExtension.create(), + SuperscriptExtension.create(), + TablesExtension.create(), + AutolinkExtension.create(), + YamlFrontMatterExtension.create(), + DefinitionExtension.create(), + StrikethroughSubscriptExtension.create())) + .set(DefinitionExtension.TILDE_MARKER, false) + .set(TablesExtension.COLUMN_SPANS, true) + .set(TablesExtension.APPEND_MISSING_COLUMNS, false) + .set(TablesExtension.DISCARD_EXTRA_COLUMNS, true) + .set(TablesExtension.HEADER_SEPARATOR_COLUMN_MATCH, true) + // See https://github.com/jelovirt/org.lwdita/wiki/Custom-schemas + .set(DitaRenderer.FIX_ROOT_HEADING, false) + .set(DitaRenderer.SHORTDESC_PARAGRAPH, false) + .set(DitaRenderer.ID_FROM_YAML, false) + .set(DitaRenderer.LW_DITA, false) + .set(DitaRenderer.SPECIALIZATION, false) + .set(DitaRenderer.SPECIALIZATION_CONCEPT, false) + .set(DitaRenderer.SPECIALIZATION_TASK, false) + .set(DitaRenderer.SPECIALIZATION_REFERENCE, false) + .toImmutable()); + } +} +``` + +To make `AcmeSchemaProvider` discoverable, create a provider configuration file `src/test/resources/META-INF/services/com.elovirta.dita.markdown.SchemaProvider`: + +``` +com.acme.AcmeSchemaProvider +``` + +A sample project is available in the [org.lwdita-sample GitHub project](https://github.com/jelovirt/org.lwdita-sample) repository. It contains a Gradle build to compile the code and package it into a DITA-OT plug-in. + +The following configuration options can be specified in custom schemas: + +## Parsing + +| Static Field | Default | Description | +| ------------------------------- | ------- | --------------------------------------------------------------------------------------- | +| `DitaRenderer.FIX_ROOT_HEADING` | `false` | If root heading is missing, generate based on `title` key from YAML header or filename. | + +## Conversion to DITA + +| Static Field | Default | Description | +| --------------------------------------- | ------- | ------------------------------------------------------------------------------------------------ | +| `DitaRenderer.SHORTDESC_PARAGRAPH` | `false` | Convert first paragraph to shortdesc. | +| `DitaRenderer.TIGHT_LIST` | `true` | Support tight lists. | +| `DitaRenderer.ID_FROM_YAML` | `false` | Use `id` key from YAML header for topic @id. | +| `DitaRenderer.LW_DITA` | `false` | Convert to XDITA instead of DITA. Deprecated, use `DitaRenderer.MDITA_EXTENDED_PROFILE` instead. | +| `DitaRenderer.SPECIALIZATION` | `false` | Convert to concept/task/reference if root heading has matching class. | +| `DitaRenderer.SPECIALIZATION_CONCEPT` | `false` | Convert to DITA concept. | +| `DitaRenderer.SPECIALIZATION_TASK` | `false` | Convert to DITA task. | +| `DitaRenderer.SPECIALIZATION_REFERENCE` | `false` | Convert to DITA concept. | +| `DitaRenderer.MDITA_CORE_PROFILE` | `false` | Parse as MDITA core profile and convert to XDITA. | +| `DitaRenderer.MDITA_EXTENDED_PROFILE` | `false` | Parse as MDITA extended profile and convert to XDITA. | +| `DitaRenderer.MAP` | `false` | Convert to DITA map. | diff --git a/reference/markdown/Format-comparison.md b/reference/markdown/Format-comparison.md new file mode 100644 index 0000000..80e2afa --- /dev/null +++ b/reference/markdown/Format-comparison.md @@ -0,0 +1,39 @@ +Although the original [Markdown DITA](./Markdown-DITA-syntax.md) format and the [MDITA](./MDITA-syntax.md) format for _LwDITA_ share some common syntax, there are several differences to consider when choosing which format to use. + + + +- In 2015, the original _DITA-OT Markdown_ plug-in introduced a series of conventions to convert [Markdown] content to DITA, and vice-versa. This Markdown flavor was called _“Markdown DITA”_. The `markdown` format adds several complementary constructs to represent DITA content in Markdown, beyond those proposed for the [MDITA](./MDITA-syntax.md) format in the [Lightweight DITA][LwDITA] specification drafts. + +- In 2017, the Markdown plug-in was superseded by the _LwDITA_ plug-in, which was bundled with DITA-OT 3.0, and added new formats for [Lightweight DITA][LwDITA]. The `mdita` format implements the subset of Markdown features proposed in the latest specification drafts, but differs in some ways from the original [Markdown DITA](./Markdown-DITA-syntax.md) format. + +The following table provides an overview of differences between the `markdown` and `mdita` formats. + +| Features | Markdown DITA | MDITA (LwDITA) | +| ---------------------------- | ------------------------------------ | --------------------------- | +| DITA map `@format` attribute | `markdown` or `md` | `mdita` | +| LwDITA | – | ✔ | +| First ¶ | Body ¶ | Short description | +| Subheadings | Nested topics | Sections | +| Topic IDs | Special attributes or title | Generated from title | +| Output class | Special attributes block | – | +| Profiling atts | Special attributes block | – | +| Topic types | Special attributes block | – | +| Schemas | YAML frontmatter | – | +| Tables | OASIS exchange table model ^ 1^ [^1] | DITA `` | +| Cell alignment | ✔ | – | +| Sections | Defined via attributes | – | +| Examples | Defined via attributes | – | +| Notes | MkDocs Material admonitions | – | +| Markdown maps | Map schema | `.mditamap` extension | +| Maps: topic sequences | OL in Markdown map | – | +| Maps: key definitions | Link reference definition | – | +| Maps: reltables | MultiMarkdown tables with links | – | +| Key references in topics | ✔ Shortcut reference links | ✔ Shortcut reference links | +| List spacing | [loose] or [tight] (no blank lines) | [loose] only (¶ per item) | + +[Markdown]: https://daringfireball.net/projects/markdown/ +[LwDITA]: https://docs.oasis-open.org/dita/LwDITA/v1.0/cn01/ +[loose]: https://spec.commonmark.org/0.30/#loose +[tight]: https://spec.commonmark.org/0.30/#tight + +[^1]: diff --git a/reference/markdown/Home.md b/reference/markdown/Home.md new file mode 100644 index 0000000..7dbb370 --- /dev/null +++ b/reference/markdown/Home.md @@ -0,0 +1,6 @@ +DITA-OT LwDITA plug-in contains + +- a custom parser for Markdown and HTML to allow using Markdown DITA and HTML DITA, respectively, as a source document format, +- and a transtype to generate Markdown from DITA source. + +The Markdown DITA files need to use a subset of Markdown constructs for compatibility with DITA content models. diff --git a/reference/markdown/Installing.md b/reference/markdown/Installing.md new file mode 100644 index 0000000..cd80ac7 --- /dev/null +++ b/reference/markdown/Installing.md @@ -0,0 +1,11 @@ +# Requirements + +DITA-OT 2.2 or newer is required; earlier versions of DITA-OT do not have the required extension points. Some LwDITA features require a newer DITA-OT version. + +# Install + +See [DITA-OT plug-in registry](https://www.dita-ot.org/plugins#!org.lwdita) for `org.lwdita` plug-in. + +The `dita` command line tool requires no additional configuration. Running DITA-OT using Ant requires adding plug-in contributed JAR files to `CLASSPATH` with e.g. `-lib plugins/org.lwdita`. + +[DITA-OT plug-in registry]: https://www.dita-ot.org/plugins#!org.lwdita diff --git a/reference/markdown/MDITA-syntax.md b/reference/markdown/MDITA-syntax.md new file mode 100644 index 0000000..b8f729c --- /dev/null +++ b/reference/markdown/MDITA-syntax.md @@ -0,0 +1,141 @@ +In 2017, the Markdown plug-in was superseded by the _LwDITA_ plug-in, which was bundled with DITA-OT 3.0, and added new formats for [Lightweight DITA][LwDITA]. The `mdita` format implements the subset of Markdown features proposed in the latest specification drafts, but differs in some ways from the original [Markdown DITA](./Markdown-DITA-syntax.md) format. + +To apply the stricter LwDITA-specific processing to a Markdown topic, create a topic reference in your map and set the `@format` attribute to `mdita`: + +```xml + + + +``` + +In this case, the first paragraph in the topic is treated as a short description, and tables are converted to DITA `` elements. + +The _MDITA_ format uses [CommonMark] as the underlying markup language. MDITA files must be UTF-8 encoded. + +The MDITA parser processes topics according to the MDITA _“Extended profile”_ proposed for LwDITA. The _"Core profile"_ can be enabled for custom parser configurations. + +The following Markdown constructs are parsed differently when the `@format` attribute is set to `mdita`. + +## Titles and document structure + +The first heading level generates a topic and the second heading level a section: + +```markdown +# Topic title + +## Section title +``` + +```xml + + Topic title + +
    + Section title +
    + +
    +``` + +The ID is generated automatically from the title content. + +## Topic content + +The first paragraph is treated as a `` element. + +```markdown +# Topic title + +First paragraph. + +Second paragraph. +``` + +```xml + + Topic title + First paragraph. + +

    Second paragraph.

    + +
    +``` + +## Tables + +Tables use the [MultiMarkdown] table extension format: + +```markdown +| First Header | Second Header | Third Header | +| ------------ | :-----------: | -----------: | +| Content | _Cell_ | Cell | +| Content | **Cell** | Cell | +``` + +Tables in MDITA files are converted to DITA `` elements: + +```xml + + + +

    First Header

    + +

    Second Header

    + +

    Third Header

    +
    + + +

    Content

    + +

    Cell

    + +

    Cell

    +
    + + +

    Content

    + +

    Cell

    + +

    Cell

    +
    +
    +``` + +> **Note** +> Cell alignment information is not preserved, as the `@align` attribute is are not available for `` elements. + +Table cells may only contain inline content. + +## MDITA map syntax + +DITA maps can be written in MDITA using standard Markdown syntax for links and lists. + + + +> **Note:** Requires DITA-OT 4.1 or newer. + +In MDITA, maps use the file name extension `mditamap` to define the file as a map: + +```markdown +# Map title + +- [Topic title](topic.md) + - [Nested title](nested.md) +``` + +```xml + + Map Title + + + + +``` + +In MDITA, both ordered and unordered list items create `` elements. + +[LwDITA]: https://docs.oasis-open.org/dita/LwDITA/v1.0/cn01/LwDITA-v1.0-cn01.html +[CommonMark]: https://commonmark.org/ 'CommonMark' +[MultiMarkdown]: https://fletcherpenney.net/multimarkdown/ 'MultiMarkdown' diff --git a/reference/markdown/Markdown-DITA-syntax.md b/reference/markdown/Markdown-DITA-syntax.md new file mode 100644 index 0000000..6bdd826 --- /dev/null +++ b/reference/markdown/Markdown-DITA-syntax.md @@ -0,0 +1,317 @@ +In 2015, the original _DITA-OT Markdown_ plug-in introduced a series of conventions to convert [Markdown] content to DITA, and vice-versa. This Markdown flavor was called _“Markdown DITA”_. The `markdown` format adds several complementary constructs to represent DITA content in Markdown, beyond those proposed for the [MDITA](./MDITA-syntax.md) format in the [Lightweight DITA][LwDITA] specification drafts. + +To add a Markdown topic to a DITA publication, create a topic reference in your map and set the `@format` attribute to `markdown`. This allows the toolkit to recognize the source file as Markdown and convert it to DITA: + +```xml + + + +``` + +In this case, the first paragraph in the topic is treated as a body paragraph, and each heading level generates a nested topic. + +The _Markdown DITA_ format uses [CommonMark] as the underlying markup language, with several extensions as noted below. Markdown DITA files must be UTF-8 encoded. + +The following Markdown constructs are parsed differently when the `@format` attribute is set to `markdown`. + +## Titles and document structure + +Each heading level generates a topic and associated title: + +```markdown +# Topic title + +## Nested topic title +``` + +```xml + + Topic title + + Nested topic title + + +``` + +Pandoc [header attributes] or PHP Markdown Extra [special attributes] can be used to define `id` or `outputclass` attributes: + +```markdown +# Topic title {#carrot .juice audience=novice} +``` + +```xml + + Topic title +``` + +If topic ID is not defined using header attributes, the ID is generated from title contents. + +If the Markdown document doesn’t contain a level 1 heading, one is generated based on YAML metadata or from the document file name. + +## Topic content + +In Markdown DITA documents, all paragraphs appear inside the `body` element. + +```markdown +# Topic title + +First paragraph. + +Second paragraph. +``` + +```xml + + Topic title + +

    First paragraph.

    +

    Second paragraph.

    + +
    +``` + +## Specialization types + +The following class values in [header attributes] have a special meaning on level 1 headings: + +- `concept` +- `task` +- `reference` + +They can be used to change the Markdown DITA topic type to one of the built-in structural specialization types. + +```markdown +# Task {.task} + +Context + +1. Command + + Info. +``` + +```xml + + Task + + +

    Context

    +
    + + + Command + +

    Info.

    +
    +
    +
    +
    +
    +``` + +The other way to use specialization types is by defining a [schema] for the document. + +## Sections + +The following class values in [header attributes] have a special meaning on heading levels other than 1: + +- `section` +- `example` + +They are used to generate [`section`](https://docs.oasis-open.org/dita/v1.2/os/spec/langref/section.html) and [`example`](https://docs.oasis-open.org/dita/v1.2/os/spec/langref/example.html) elements: + +```markdown +# Topic title + +## Section title {.section} + +## Example title {.example} +``` + +```xml + + Topic title + +
    + Section title +
    + + Example title + + +
    +``` + +## Tables + +Tables use the [MultiMarkdown] table extension format: + + + +```markdown +| First Header | Second Header | Third Header | +| ------------ | :-----------: | -----------: | +| Content | _Long Cell_ || +| Content | **Cell** | Cell | +``` + + +Tables in Markdown DITA files are converted to the [OASIS exchange table model](https://www.oasis-open.org/specs/tm9901.html): + +```xml + + + + + + + + First Header + Second Header + Third Header + + + + + Content + Long Cell + + + Content + Cell + Cell + + + +
    +``` + +Table cells may only contain inline content and column spans; block content and row spans are not supported in Markdown DITA. + +## Notes + +Notes can be written using the syntax defined in the Material for MkDocs [admonition extension](https://squidfunk.github.io/mkdocs-material/reference/admonitions/). + + + +> **Note:** Requires DITA-OT 4.1 or newer. + +```markdown +!!! note + + Note content. +``` + +```xml + +

    Note Content.

    +
    +``` + +Different note types can be defined by changing the type qualifier keyword. + +```markdown +!!! info + + Info content. +``` + +```xml + +

    Info Content.

    +
    +``` + +## Markdown DITA map syntax + +DITA maps can be written in Markdown using standard Markdown syntax for links and lists. + + + +> **Note:** Requires DITA-OT 4.1 or newer. + +In Markdown DITA, maps use the [schema] key in the YAML front matter block to define the file as a map: + +```markdown +--- +$schema: urn:oasis:names:tc:dita:xsd:map.xsd +--- + +# Map title + +- [Topic title](topic.md) + - [Nested title](nested.md) +``` + +```xml + + Map Title + + + + +``` + +Unordered list items create `` elements, and ordered list items create `` elements with `collection-type="sequence"`. + +## Key definitions + +Keys can be defined using standard Markdown syntax for [link reference definitions]. + +```markdown +--- +$schema: urn:oasis:names:tc:dita:xsd:map.xsd +--- + +[key-name]: topic.md +``` + +```xml + + + +``` + +## Relationship tables + +Relationship tables are tables with links inside cells. + +```markdown +--- +$schema: urn:oasis:names:tc:dita:xsd:map.xsd +--- + +| [Help](topic.md) | | +| ----------------- | ------------------------- | +| [Topic](topic.md) | [Reference](reference.md) | +``` + +```xml + + + + + + + + + + + + + + + + + + +``` + +[Markdown]: https://daringfireball.net/projects/markdown/ +[CommonMark]: https://commonmark.org/ 'CommonMark' +[LwDITA]: https://docs.oasis-open.org/dita/LwDITA/v1.0/cn01/LwDITA-v1.0-cn01.html +[header attributes]: https://pandoc.org/MANUAL.html#extension-header_attributes +[special attributes]: https://michelf.ca/projects/php-markdown/extra/#spe-attr +[MultiMarkdown]: https://fletcherpenney.net/multimarkdown/ 'MultiMarkdown' +[link reference definitions]: https://spec.commonmark.org/0.30/#link-reference-definition +[schema]: Markdown-schemas.md diff --git a/reference/markdown/Markdown-schemas.md b/reference/markdown/Markdown-schemas.md new file mode 100644 index 0000000..02f0226 --- /dev/null +++ b/reference/markdown/Markdown-schemas.md @@ -0,0 +1,61 @@ +Starting with version 5.0 of the _LwDITA_ plug-in, the `MarkdownReader` class supports a new `$schema` key in the YAML front matter block. This key can be used to define parsing options in topic files for more control over how Markdown content is converted to DITA. + +> **Note:** Requires DITA-OT 4.1 or newer. + +```markdown +--- +$schema: urn:oasis:names:tc:dita:xsd:concept.xsd +--- + +# Concept title + +Shortdesc content. + +Body content. +``` + +The `$schema` value is a URI that is mapped to a parser configuration. This defines how the document should be parsed, i.e. which Markdown flavor it uses. The Markdown schema definition is similar to an XML document type declaration or `` processing instruction where the document defines how it should be optionally validated. + +> **Note:** +> The schema URI resembles a reference to an XML Schema Definition or RELAX NG schema, but no validation is currently performed. + +The `$schema` key must be the first key in the YAML header. + +The following schemas are built in to the `org.lwdita` plug-in. + +## DITA topic + +- `urn:oasis:names:tc:dita:xsd:topic.xsd` +- `urn:oasis:names:tc:dita:xsd:topic.rng` + +## DITA concept + +- `urn:oasis:names:tc:dita:xsd:concept.xsd` +- `urn:oasis:names:tc:dita:xsd:concept.rng` + +## DITA task + +- `urn:oasis:names:tc:dita:xsd:task.xsd` +- `urn:oasis:names:tc:dita:xsd:task.rng` + +## DITA reference + +- `urn:oasis:names:tc:dita:xsd:reference.xsd` +- `urn:oasis:names:tc:dita:xsd:reference.rng` + +## DITA map + +- `urn:oasis:names:tc:dita:xsd:map.xsd` +- `urn:oasis:names:tc:dita:xsd:map.rng` + +## Lightweight DITA topic extended profile + +- `urn:oasis:names:tc:mdita:xsd:topic.xsd` +- `urn:oasis:names:tc:mdita:rng:topic.rng` +- `urn:oasis:names:tc:mdita:extended:xsd:topic.xsd` +- `urn:oasis:names:tc:mdita:extended:rng:topic.rng` + +## Lightweight DITA topic core profile + +- `urn:oasis:names:tc:mdita:core:xsd:topic.xsd` +- `urn:oasis:names:tc:mdita:core:rng:topic.rng` diff --git a/reference/markdown/Usage.md b/reference/markdown/Usage.md new file mode 100644 index 0000000..339d5e2 --- /dev/null +++ b/reference/markdown/Usage.md @@ -0,0 +1,35 @@ +# Using Markdown and HTML files as input + +Markdown DITA and HTML DITA topics can only be used by linking to them in map files. The LwDITA compatible documents should use `@format` value `mdita` and `hdita`. + +```xml + + + + +``` + +A more lenient document parsing should use `@format` value `markdown` or `md`. + +```xml + + + +``` + +The `@format` attribute value must be set to `markdown` or `md` to recognize files as Markdown DITA. For LwDITA-compatible documents, set the `@format` attribute value to `mdita` to process files as MDITA, or `hdita` for HTML DITA. + +See [Markdown DITA syntax](Markdown-DITA-syntax) for XML and Markdown DITA correspondence. + +# Generating Markdown output + +The DITA-OT Markdown plug-in extends the DITA Open Toolkit with additional output formats _(transformation types)_ that can be used to publish DITA content as Markdown. + +- To publish Markdown DITA files, use the `markdown` transtype. + +- To generate [GitHub Flavored Markdown] files, use the `markdown_github` transtype. + +- To publish GitHub Flavored Markdown and generate a `SUMMARY.md` table of contents file for publication via [GitBook], use the `markdown_gitbook` transtype. + +[GitHub Flavored Markdown]: https://help.github.com/categories/writing-on-github/ +[GitBook]: https://www.gitbook.com diff --git a/reference/pdf-transform.dita b/reference/pdf-transform.dita new file mode 100644 index 0000000..e03784e --- /dev/null +++ b/reference/pdf-transform.dita @@ -0,0 +1,107 @@ + + + + + PDF processing modules + The (formerly known as ) transformation process runs the + pre-processing routine and follows it by a series of additional targets. These steps work together to create a + merged set of content, convert the merged content to XSL-FO, and then format the XSL-FO file to PDF. + + + + DITAVAL + PDF + Antenna House + transform.fo2pdf + topic.fo + Apache FOP + transform.fo2pdf + topic.fo + PDF + pre-processing + targets + PDF + XSLT + PDF + RenderX + transform.fo2pdf + topic.fo + XEP + RenderX + index + PDF + stage1.xml + pipelines + PDF + topic.fo + stage1a.xml + stage2.fo + stage3.fo + topic.fo + + + + +
    +

    The PDF process includes many Ant targets. During a typical conversion from map to PDF, the following targets + are most significant.

    +
    + +
    map2pdf2
    +
    Creates a merged file by calling a common Java merge module. It then calls the + publish.map.pdf target to do the remainder of the work.
    +
    + +
    publish.map.pdf
    +
    Performs some initialization and then calls the transform.topic2pdf target to do the + remainder of processing.
    +
    + +
    transform.topic2pdf
    +
    Converts the merged file to XSL-FO, generates the PDF, and deletes the topic.fo file, + unless instructed to keep it.
    +
    +
    +

    The transform.topic2pdf target uses the following targets to perform those tasks:

    +
    + +
    transform.topic2fo
    +
    Convert the merged file to an XSL-FO file. This process is composed of several sub-targets.
    +
    + + +
    transform.topic2fo.index
    +
    Runs a Java process to set up index processing, based on the document language. This step generates the + file stage1.xml in the temporary processing directory.
    +
    + +
    transform.topic2fo.flagging
    +
    Sets up pre-processing for flagging based on a DITAVAL file. This step generates the file + stage1a.xml in the temporary processing directory.
    +
    + +
    transform.topic2fo.main
    +
    Does the bulk of the conversion from DITA to XSL-FO. It runs the XSLT-based process that creates + stage2.fo in the temporary processing directory
    +
    + +
    transform.topic2fo.i18n
    +
    Does additional localization processing on the FO file; it runs a Java process that converts + stage2.fo into stage3.fo, followed by an XSLT process that + converts stage3.fo into topic.fo.
    +
    + + +
    transform.fo2pdf
    +
    Converts the topic.fo file into PDF using the specified FO processor (Antenna House, + XEP, or Apache FOP).
    +
    + +
    delete.fo2pdf.topic.fo
    +
    Deletes the topic.fo file, unless otherwise specified by setting an Ant property or + command-line option.
    +
    +
    +
    +
    +
    diff --git a/reference/pdf-transformation-history.dita b/reference/pdf-transformation-history.dita new file mode 100644 index 0000000..ca9ec9a --- /dev/null +++ b/reference/pdf-transformation-history.dita @@ -0,0 +1,59 @@ + + + + + History of the PDF transformation + The DITA Open Toolkit PDF transformation was originally based on a third-party contribution by Idiom + Technologies, and is commonly known as the “pdf2” plug-in. + + + + info + legacypdf + PDF2 + PDF + plug-in, history of + languages + auto-generated strings + PDF + plug-in, history of + HTML formatting differences + Idiom Technologies + HTML + PDF formatting differences + DITA 1.1 + index + indexing domain + Customization directory + org.dita.pdf2 + + + + +

    When IBM developed the code that later became DITA-OT, it included only a proof-of-concept PDF transformation. + IBM had their own processing chain for producing PDFs from SGML, which they had developed over several decades, so + resources were focused primarily on XHTML output and pre-processing.

    +

    Since the initial proof-of-concept transformation was not robust enough for production-grade output, companies + began to develop their own PDF transformations. One company, Idiom Technologies, made their transformation (known + as the “pdf2” transformation) available as open source on 23 February 2006. The Idiom plug-in was initially + available as a separately-downloadable plug-in that could be installed into DITA-OT.

    +

    Later the DITA-OT project formally incorporated the Idiom plug-in as a demonstration in the + demo/fo directory. Beginning with DITA-OT version 1.5, released 18 December 2009, the + “pdf2” code served as the main, supported PDF transformation. (The original PDF transformation was deprecated and + renamed “legacypdf”.) In DITA-OT version 1.6, the “pdf2” plug-in was moved to + plugins/org.dita.pdf2.

    +

    The fact that the current PDF transformation was not originally developed in parallel with the other core DITA-OT + transformations led to anomalies that often confuse users:

    +
      +
    • Elements are often (by default) styled differently in the XHTML and PDF transformations. For example, consider + the info element in a task topic. In HTML output, this is an inline element; in PDF + output, it is a block-level element.
    • +
    • The auto-generated strings used for localization are different, and so languages that are supported by DITA-OT + differ based on whether the XHTML or PDF transformation is used.
    • +
    • The Idiom plug-in used its own extension mechanism (the Customization folder) to provide + overrides to the PDF transformation.
    • +
    • Before the release of DITA 1.1 (which added support for the indexing domain), Idiom developed an index + extension that used a FrameMaker-inspired syntax.
    • +
    +
    +
    diff --git a/reference/preprocess-branch-filter.dita b/reference/preprocess-branch-filter.dita new file mode 100644 index 0000000..71a3898 --- /dev/null +++ b/reference/preprocess-branch-filter.dita @@ -0,0 +1,24 @@ + + + + + Branch filtering (<codeph>branch-filter</codeph>) + The branch-filter step filters topics using DITAVAL files defined in the map. + + + + DITAVAL + branch-filter preprocess step + filters + branch filters + DITAVAL + profiling + DITAVAL + branch filters + pre-processing + branch-filter + branch-filter + + + + diff --git a/reference/preprocess-chunk.dita b/reference/preprocess-chunk.dita new file mode 100644 index 0000000..bac9135 --- /dev/null +++ b/reference/preprocess-chunk.dita @@ -0,0 +1,35 @@ + + + + + Chunk topics (<codeph>chunk</codeph>) + The chunk step breaks apart and assembles referenced DITA content based on the + chunk attribute in maps. This step is implemented in Java. + + + + chunk + supported methods + pre-processing + chunk + chunk + Java + + chunk + + + + +

    DITA-OT has implemented processing for the following values of the chunk attribute: +

      +
    • select-topic
    • +
    • select-document
    • +
    • select-branch
    • +
    • by-topic
    • +
    • by-document
    • +
    • to-content
    • +
    • to-navigation
    • +
    +

    +
    +
    diff --git a/reference/preprocess-clean-map.dita b/reference/preprocess-clean-map.dita new file mode 100644 index 0000000..7863a53 --- /dev/null +++ b/reference/preprocess-clean-map.dita @@ -0,0 +1,17 @@ + + + + + Map cleanup (<codeph>clean-map</codeph>) + The clean-map step removes any elements and attributes that were added to files to support + pre-processing. + + + + pre-processing + clean-map + clean-map + + + + diff --git a/reference/preprocess-conref.dita b/reference/preprocess-conref.dita new file mode 100644 index 0000000..56f8c59 --- /dev/null +++ b/reference/preprocess-conref.dita @@ -0,0 +1,74 @@ + + + + + Resolve content references (<codeph>conref</codeph>) + The conref step resolves content references, processing only the DITA maps or topics that + use the conref attribute. This step is implemented in XSLT. + + + + fig + xref + section + conref + resolving + id + conref resolution + xref + pre-processing + conref + conref + XSLT + conref step + + + + +
    +

    The values of the id attribute on referenced content are changed as the elements are pulled + into the new locations. This ensures that the values of the id attribute within the referencing + topic remain unique.

    +

    If an element is pulled into a new context along with a cross reference that references the target, both the + values of the id and xref attributes are updated so that they remain valid in + the new location. For example, a referenced topic might include a section as in the following example: + Referenced topic that contains a section and cross reference + <topic id="referenced_topic"> + <title>...</title> + <body> + <section id="sect"> + <title>Sample section</title> + <p>Figure <xref href="#referenced_topic/fig"/> + contains a code sample that demonstrates ... .</p> + <fig id="fig"> + <title>Code sample</title> + <codeblock>....</codeblock> + </fig> + </section> + </body> +</topic> +

    +

    When the section is referenced using a conref attribute, the value of the id + attribute on the fig element is modified to ensure that it remains unique in the new + context. At the same time, the xref element is also modified so that it remains valid + as a local reference. For example, if the referencing topic has an id set to "new_topic", then + the conrefed element may look like this in the intermediate document section. + Resolved conrefed <xmlelement>section</xmlelement> element after the conref step + <section id="sect"> + <title>Sample section</title> + <p>Figure <xref href="#new_topic/d1e25"/> contains a code sample + that demonstrates ... .</p> + <fig id="d1e25"> + <title>Code sample</title> + <codeblock>....</codeblock> + </fig> +</section> +

    +

    In this case, the value of the id attribute on the fig element has + been changed to a generated value of "d1e25". At the same time, the xref element has + been updated to use that new generated ID, so that the cross reference remains valid.

    +
    +
    +
    diff --git a/reference/preprocess-conrefpush.dita b/reference/preprocess-conrefpush.dita new file mode 100644 index 0000000..be8be50 --- /dev/null +++ b/reference/preprocess-conrefpush.dita @@ -0,0 +1,20 @@ + + + + + Conref push (<codeph>conrefpush</codeph>) + The conrefpush step resolves “conref push” references to render the content of the + referencing element before, after, or in place of the referenced element. This step only processes documents that + use conref push or that are updated due to the push action. This step is implemented in Java. + + + + pre-processing + conrefpush + conrefpush + Java + conrefpush + + + + diff --git a/reference/preprocess-copy-to.dita b/reference/preprocess-copy-to.dita new file mode 100644 index 0000000..b722451 --- /dev/null +++ b/reference/preprocess-copy-to.dita @@ -0,0 +1,18 @@ + + + + + Copy topics (<codeph>copy-to</codeph>) + The copy-to step makes a copy of original topic resources to new resources defined by the + copy-to attribute. + + + + copy-to + pre-processing + copy-to + copy-to + + + + diff --git a/reference/preprocess-copyfiles.dita b/reference/preprocess-copyfiles.dita new file mode 100644 index 0000000..992f57a --- /dev/null +++ b/reference/preprocess-copyfiles.dita @@ -0,0 +1,22 @@ + + + + + Copy related files (<codeph>copy-files</codeph>) + The copy-files step copies non-DITA resources to the output directory, such as HTML files + that are referenced in a map or images that are referenced by a DITAVAL file. Which files are copied depends on the + transformation type. + + + + DITAVAL + copy-files preprocess step + pre-processing + copy-files + copy-files + images + copying + + + + diff --git a/reference/preprocess-debugfilter.dita b/reference/preprocess-debugfilter.dita new file mode 100644 index 0000000..57785bf --- /dev/null +++ b/reference/preprocess-debugfilter.dita @@ -0,0 +1,44 @@ + + + + + Debug and filter (<codeph>debug-filter</codeph>) + The debug-filter step processes all referenced DITA content and creates copies in a + temporary directory. As the DITA content is copied, filtering is performed, debugging information is inserted, and + table column names are adjusted. This step is implemented in Java. + + + + ph + xtrf + xtrc + DITAVAL + debug-filter preprocess step + pre-processing + debug-filter + debug-filter + debugging + debug-filter preprocess step + tables + DITAVAL + + + + +
    +

    The following modifications are made to the DITA source:

    +
      +
    • If a DITAVAL file is specified, the DITA source is filtered according to the entries in the DITAVAL + file.
    • +
    • Debug information is inserted into each element using the xtrf and xtrc + attributes. The values of these attributes enable messages later in the build to reliably indicate the + original source of the error. For example, a message might trace back to the fifth ph + element in a specific DITA topic. Without these attributes, that count might no longer be available due to + filtering and other processing.
    • +
    • The table column names are adjusted to use a common naming scheme. This is done only to simplify later + conref processing. For example, if a table row is pulled into another table, this ensures that a reference to + "column 5 properties" will continue to work in the fifth column of the new table.
    • +
    +
    +
    +
    diff --git a/reference/preprocess-flagging.dita b/reference/preprocess-flagging.dita new file mode 100644 index 0000000..896eec9 --- /dev/null +++ b/reference/preprocess-flagging.dita @@ -0,0 +1,269 @@ + + + + + Flagging (<codeph>flag-module</codeph>) + Beginning with DITA-OT 1.7, flagging support is implemented as a common flag-module + pre-processing step. The module evaluates the DITAVAL against all flagging attributes, and adds DITA-OT–specific + hints to the topic when flags are active. Any extended transformation type may use these hints to support flagging + without adding logic to interpret the DITAVAL. + + + + foreign + ditaval-startprop + prop + revprop + startflag + endflag + ditaval-endprop + ditaval-prop + p + ol + li + outputclass + xtrf + xtrc + outputclass + rev + DITAVAL + flag-module preprocess step + DITA + specializations + pre-processing + flag-module + flag-module + flagging + XSLT + flag-module preprocess step + CSS + outputclass + images + flagging + + + + +
    + Evaluating the DITAVAL flags +

    Flagging is implemented as a reusable module during the preprocess stage. If a DITAVAL file is not used with a + build, this step is skipped with no change to the file.

    +

    When a flag is active, relevant sections of the DITAVAL itself are copied into the topic as a sub-element of + the current topic. The active flags are enclosed in a pseudo-specialization of the + foreign element (referred to as a pseudo-specialization because it is used only under + the covers, with all topic types; it is not integrated into any shipped document types).

    + + + ditaval-startprop + +

    When any flag is active on an element, a ditaval-startprop element will be + created as the first child of the flagged element:

    + <ditaval-startprop class="+ topic/foreign ditaot-d/ditaval-startprop "> +

    The ditaval-startprop element will contain the following: +

      +
    • If the active flags should create a new style, that style is included using standard CSS markup on + the outputclass attribute. Output types that make use of CSS, such as XHTML, can use + this value as-is.
    • +
    • If styles conflict, and a style-conflict element exists in the DITAVAL, it + will be copied as a child of ditaval-startprop.
    • +
    • Any prop or revprop elements that define active + flags will be copied in as children of the ditaval-startprop element. Any + startflag children of the properties will be included, but + endflag children will not.
    • +
    +

    +
    +
    + + ditaval-endprop + +

    When any flag is active on an element, a ditaval-endprop element will be created + as the last child of the flagged element:

    + <ditaval-endprop class="+ topic/foreign ditaot-d/ditaval-endprop "> +

    CSS values and style-conflict elements are not included on this element.

    +

    Any prop or revprop elements that define active flags + will be copied in as children of ditaval-prop. Any + startflag children of the properties will be included, but + endflag children will not.

    +
    +
    +
    +
    +
    + Supporting flags in overrides or custom transformation types +

    For most transformation types, the foreign element should be ignored by default, + because arbitrary non-DITA content may not mix well unless coded for ahead of time. If the + foreign element is ignored by default, or if a rule is added to specifically ignore + ditaval-startprop and ditaval-endprop, then the added + elements will have no impact on a transform. If desired, flagging support may be integrated at any time in the + future.

    +

    The processing described above runs as part of the common preprocess, so any transform that uses the default + preprocess will get the topic updates. To support generating flags as images, XSLT-based transforms can use + default fallthrough processing in most cases. For example, if a paragraph is flagged, the first child of + p will contain the start flag information; adding a rule to handle images in + ditaval-startprop will cause the image to appear at the start of the paragraph + content.

    +

    In some cases fallthrough processing will not result in valid output; for those cases, the flags must be + explicitly processed. This is done in the XHTML transform for elements like ol, because + fallthrough processing would place images in between ol and + li. To handle this, the code processes ditaval-startprop + before starting the element, and ditaval-endprop at the end. Fallthrough processing is + then disabled for those elements as children of ol.

    + + Example DITAVAL +

    Assume the following DITAVAL file is in use during a build. This DITAVAL will be used for each of the following + content examples.

    + <?xml version="1.0" encoding="UTF-8"?> +<val> + <!-- Define what happens in the case of conflicting styles --> + <style-conflict background-conflict-color="red"/> + + <!-- Define two flagging properties that give styles (no image) --> + <prop action="flag" att="audience" style="underline" val="user" + backcolor="green"/> + <prop action="flag" att="platform" style="overline" val="win" + backcolor="blue"/> + + <!-- Define a property that includes start and end image flags --> + <prop action="flag" att="platform" val="linux" style="overline" + backcolor="blue"> + <startflag imageref="startlin.png"> + <alt-text>Start linux</alt-text></startflag> + <endflag imageref="endlin.png"> + <alt-text>End linux</alt-text></endflag> + </prop> + + <!-- Define a revision that includes start and end image flags --> + <revprop action="flag" style="double-underline" val="rev2"> + <startflag imageref="start_rev.gif"> + <alt-text>START</alt-text></startflag> + <endflag imageref="end_rev.gif"><alt-text>END</alt-text></endflag> + </revprop> +</val> +
    + + Content example 1: Adding style +

    Now assume the following paragraph exists in a topic. Class attributes are included, as they would normally be + in the middle of the preprocess routine; xtrf and xtrc are left off for + clarity.

    + <p audience="user">Simple user; includes style but no images</p> +

    Based on the DITAVAL above, audience="user" results in a style with underlining and with a green background. + The interpreted CSS value is added to outputclass on + ditaval-startprop, and the actual property definition is included at the start and end + of the element. The output from the flagging step looks like this (with newlines added for clarity, and class + attributes added as they would appear in the temporary file):

    +

    The resulting file after the flagging step looks like this; for clarity, newlines are added, while + xtrf and xtrc are removed:

    + <p audience="user" class="- topic/p "> + <ditaval-startprop + class="+ topic/foreign ditaot-d/ditaval-startprop " + outputclass="background-color:green;text-decoration:underline;"> + <prop action="flag" att="audience" style="underline" val="user" + backcolor="green"/> + </ditaval-startprop> + Simple user; includes style but no images + <ditaval-endprop + class="+ topic/foreign ditaot-d/ditaval-endprop "> + <prop action="flag" att="audience" style="underline" val="user" + backcolor="green"/> + </ditaval-endprop> +</p> +
    + + Content example 2: Conflicting styles +

    This example includes a paragraph with conflicting styles. When the audience and platform attributes are both + evaluated, the DITAVAL indicates that the background color is both green and blue. In this situation, the + style-conflict element is evaluated to determine how to style the content.

    + <p audience="user" platform="win">Conflicting styles (still no images)</p> +

    The style-conflict element results in a background color of red, so this value is + added to outputclass on ditaval-startprop. As above, active properties + are copied into the generated elements; the style-conflict element itself is also + copied into the generated ditaval-startprop element.

    +

    The resulting file after the flagging step looks like this; for clarity, newlines are added, while + xtrf and xtrc are removed:

    + <p audience="user" platform="win" class="- topic/p "> + <ditaval-startprop + class="+ topic/foreign ditaot-d/ditaval-startprop " + outputclass="background-color:red;"> + <style-conflict background-conflict-color="red"/> + <prop action="flag" att="audience" style="underline" val="user" + backcolor="green"/> + <prop action="flag" att="platform" style="overline" val="win" + backcolor="blue"/> + </ditaval-startprop> + + Conflicting styles (still no images) + + <ditaval-endprop + class="+ topic/foreign ditaot-d/ditaval-endprop "> + <prop action="flag" att="platform" style="overline" val="win" + backcolor="blue"/> + <prop action="flag" att="audience" style="underline" val="user" + backcolor="green"/> + </ditaval-endprop> +</p> +
    + + Content example 3: Adding image flags +

    This example includes image flags for both platform and rev, which are + defined in DITAVAL prop and revprop elements.

    + <ol platform="linux" rev="rev2"> + <li>Generate images for platform="linux" and rev="2"</li> +</ol> +

    As above, the ditaval-startprop and ditaval-endprop nest the + active property definitions, with the calculated CSS value on outputclass. The + ditaval-startprop drops the ending image, and + ditaval-endprop drops the starting image. To make document-order processing more + consistent, property flags are always included before revisions in ditaval-startprop, + and the order is reversed for ditaval-endprop.

    +

    The resulting file after the flagging step looks like this; for clarity, newlines are added, while + xtrf and xtrc are removed:

    + <ol platform="linux" rev="rev2" class="- topic/ol "> + <ditaval-startprop + class="+ topic/foreign ditaot-d/ditaval-startprop " + outputclass="background-color:blue; + text-decoration:underline; + text-decoration:overline;"> + <prop action="flag" att="platform" val="linux" style="overline" + backcolor="blue"> + <startflag imageref="startlin.png"> + <alt-text>Start linux</alt-text></startflag></prop> + <revprop action="flag" style="double-underline" val="rev2"> + <startflag imageref="start_rev.gif"> + <alt-text> </alt-text></startflag></revprop> + </ditaval-startprop> + <li class="- topic/li "> + Generate images for platform="linux" and rev="2" + </li> + <ditaval-endprop + class="+ topic/foreign ditaot-d/ditaval-endprop "> + <revprop action="flag" style="double-underline" val="rev2"> + <endflag imageref="end_rev.gif"> + <alt-text>END</alt-text></endflag></revprop> + <prop action="flag" att="platform" val="linux" style="overline" + backcolor="blue"> + <endflag imageref="endlin.png"> + <alt-text>End linux</alt-text></endflag></prop> + </ditaval-endprop> +</ol> +
    +
    +
    diff --git a/reference/preprocess-genlist.dita b/reference/preprocess-genlist.dita new file mode 100644 index 0000000..6aff4f4 --- /dev/null +++ b/reference/preprocess-genlist.dita @@ -0,0 +1,180 @@ + + + + + Generate lists (<codeph>gen-list</codeph>) + The gen-list step examines the input files and creates lists of topics, images, document + properties, or other content. These lists are used by later steps in the pipeline. This step is implemented in + Java. + + + + deprecated features + htmlfile + deprecated features + html.file + deprecated features + imagefile + deprecated features + image.file + pre-processing + gen-list + gen-list + conref + dita.list + dita.xml.properties + + + + +
    +

    For example, one list includes all topics that make use of the conref attribute; only those files are processed + during the conref stage of the build. The list file name name is derived from the list file property. For + example, the conref.list file is generated for “conreffile” and a corresponding list property + is provided for each generated list, in this case “conreflist”.

    +

    The result of this step is a set of several list files in the temporary directory, including + dita.list and dita.xml.properties.

    + + + + + + + + List file property + List file + Usage + + + + + canditopicsfile + canditopics.list + canditopics.list + + + + conreffile + conref.list + conref.list + Documents that contain conref attributes that need to be resolved in preprocess. + + + conreftargetsfile + conreftargets.list + conreftargets.list + + + + copytosourcefile + copytosource.list + copytosource.list + + + + flagimagefile + flagimage.list + flagimage.list + + + + fullditamapandtopicfile + fullditamapandtopic.list + fullditamapandtopic.list + All of the ditamap and topic files that are referenced during the transformation. These may be + referenced by href or conref attributes. + + + fullditamapfile + fullditamap.list + fullditamap.list + All of the ditamap files in dita.list + + + fullditatopicfile + fullditatopic.list + fullditatopic.list + All of the topic files in dita.list + + + hrefditatopicfile + hrefditatopic.list + hrefditatopic.list + All of the topic files that are referenced with an href attribute + + + hreftargetsfile + hreftargets.list + hreftargets.list + Link targets + + + htmlfile + html.list + html.list + Resource files + + + imagefile + image.list + image.list + Image files that are referenced in the content + + + outditafilesfile + outditafiles.list + outditafiles.list + + + + resourceonlyfile + resourceonly.list + resourceonly.list + + + + subjectschemefile + subjectscheme.list + subjectscheme.list + + + + subtargetsfile + subtargets.list + subtargets.list + + + + tempdirToinputmapdir.relative.value + + + + + uplevels + + + + + user.input.dir + user.input.dir + + Absolute input directory path + + + user.input.file.listfile + user.input.file.listfile + + Input file list file + + + user.input.file + user.input.file + + Input file path, relative to the input directory + + + +
    +
    +
    +
    diff --git a/reference/preprocess-keyref.dita b/reference/preprocess-keyref.dita new file mode 100644 index 0000000..903f698 --- /dev/null +++ b/reference/preprocess-keyref.dita @@ -0,0 +1,19 @@ + + + + + Resolve key references (<codeph>keyref</codeph>) + The keyref step examines all the keys that are defined in the DITA source and resolves the + key references. Links that make use of keys are updated so that any href value is replaced by the + appropriate target; key-based text replacement is also performed. This step is implemented in Java. + + + + href + pre-processing + keyref + keyref + + + + diff --git a/reference/preprocess-maplink.dita b/reference/preprocess-maplink.dita new file mode 100644 index 0000000..a2f13d3 --- /dev/null +++ b/reference/preprocess-maplink.dita @@ -0,0 +1,33 @@ + + + + + Map-based linking (<codeph>maplink</codeph>) + This step collects links based on a map and moves those links into the referenced topics. The links are + created based on hierarchy in the DITA map, the collection-type attribute, and relationship tables. + This step is implemented in XSLT and Java. + + + + collection-type + pre-processing + maplink + maplink + Java + maplink + XSLT + maplink pre-processing step + relationship tables + maplink pre-processing step + memory + + + + +
    +

    The maplink module runs an XSLT stylesheet that evaluates the map; it places all the generated + links into a single file in memory. The module then runs a Java program that pushes the generated links into the + applicable topics.

    +
    +
    +
    diff --git a/reference/preprocess-mapref.dita b/reference/preprocess-mapref.dita new file mode 100644 index 0000000..218bc1e --- /dev/null +++ b/reference/preprocess-mapref.dita @@ -0,0 +1,33 @@ + + + + + Resolve map references (<codeph>mapref</codeph>) + The mapref step resolves references from one DITA map to another. This step is implemented + in XSLT. + + + + map + pre-processing + mapref + mapref + XSLT + mapref pre-processing step + relationship tables + mapref pre-processing step + + + + +
    +

    Maps reference other maps by using the following sorts of markup: + <topicref href="other.ditamap" format="ditamap"/> +... +<mapref href="other.ditamap"/>

    +

    As a result of the mapref step, the element that references another map is replaced by the topic references + from the other map. Relationship tables are pulled into the referencing map as a child of the root element + (map or a specialization of map).

    +
    +
    +
    diff --git a/reference/preprocess-metadata.dita b/reference/preprocess-metadata.dita new file mode 100644 index 0000000..d474f13 --- /dev/null +++ b/reference/preprocess-metadata.dita @@ -0,0 +1,63 @@ + + + + + Move metadata (<codeph>move-meta-entries</codeph>) and pull content into maps + (<codeph>mappull</codeph>) + The move-meta-entries step pushes metadata back and forth between maps and topics. For + example, index entries and copyrights in the map are pushed into affected topics, so that the topics can be + processed later in isolation while retaining all relevant metadata. This step is implemented in Java. + + + + topicref + linktext + shortdesc + locktitle + type + toc + print + pre-processing + move-meta-entries + move-meta-entries + Java + move-meta-entries + metadata + moving + XSLT + move-meta-entries + index + entries in map file + TOC + table of contents + + + + + + As of DITA-OT 2.2, the move-meta-entries and mappull steps have been merged. + The mappull step has been moved into move-meta-entries. +
    +

    The mappull step pulls content from referenced topics into maps, and then cascades data within + maps. This step is implemented in XSLT.

    +

    The mappull step makes the following changes to the DITA map: +

      +
    • Titles are pulled from referenced DITA topics. Unless the locktitle attribute is set to + "yes", the pulled titles replace the navigation titles specified on the topicref + elements.
    • +
    • The linktext element is set based on the title of the referenced topic, unless it + is already specified locally.
    • +
    • The shortdesc element is set based on the short description of the referenced + topic, unless it is already specified locally.
    • +
    • The type attribute is set on topicref elements that reference + local DITA topics. The value of the type attribute is set to value of the root element of + the topic; for example, a topicref element that references a task topic is given a + type attribute set to "task"".
    • +
    • Attributes that cascade, such as toc and print, are made explicit on any + child topicref elements. This allows future steps to work with the attributes + directly, without reevaluating the cascading behavior.
    • +
    +

    +
    +
    +
    diff --git a/reference/preprocess-profile.dita b/reference/preprocess-profile.dita new file mode 100644 index 0000000..e362676 --- /dev/null +++ b/reference/preprocess-profile.dita @@ -0,0 +1,21 @@ + + + + + Filter conditional content (<codeph>profile</codeph>) + The profile step removes content from topics and maps based on the rules in DITAVAL files + or the print attribute setting. Output can differ based on when filtering is done. + + + + print + DITAVAL + profile preprocess step + profiling + pre-processing + profile + profile + + + + diff --git a/reference/preprocess-topic-fragment.dita b/reference/preprocess-topic-fragment.dita new file mode 100644 index 0000000..2fd6c8e --- /dev/null +++ b/reference/preprocess-topic-fragment.dita @@ -0,0 +1,31 @@ + + + + + Resolve topic fragments and code references (<codeph>topic-fragment</codeph>) + The topic-fragment step expands content references to elements in the same topic and + resolves references made with the coderef element. This step is implemented in SAX + pipes. + + + + coderef + codeblock + pre-processing + topic-fragment + topic-fragment + Saxon + conref + + + + +
    +

    Content references to elements in the same topic are defined via same-topic fragments such as + #./ID in URIs.

    +

    The coderef element is used to reference code stored externally in non-XML documents. + During the pre-processing step, the referenced content is pulled into the containing + codeblock element.

    +
    +
    +
    diff --git a/reference/preprocess-topicpull.dita b/reference/preprocess-topicpull.dita new file mode 100644 index 0000000..da1b2ec --- /dev/null +++ b/reference/preprocess-topicpull.dita @@ -0,0 +1,37 @@ + + + + + Pull content into topics (<codeph>topicpull</codeph>) + The topicpull step pulls content into xref and + link elements. This step is implemented in XSLT. + + + + xref + link + desc + linktext + pre-processing + topicpull + topicpull + XSLT + topicpull + + + + +
    +

    If an xref element does not contain link text, the target is examined and the link + text is pulled. For example, a reference to a topic pulls the title of the topic; a reference to a list item + pulls the number of the item. If the xref element references a topic that has a short + description, and the xref element does not already contain a child + desc element, a desc element is created that contains the + text from the topic short description.

    +

    The process is similar for link elements. If the link element + does not have a child linktext element, one is created with the appropriate link text. + Similarly, if the link element does not have a child desc + element, and the short description of the target can be determined, a desc element is + created that contains the text from the topic short description.

    +
    +
    diff --git a/reference/preprocessing.dita b/reference/preprocessing.dita new file mode 100644 index 0000000..e5977d4 --- /dev/null +++ b/reference/preprocessing.dita @@ -0,0 +1,17 @@ + + + + + Pre-processing modules + The pre-processing operation is a set of steps that typically runs at the beginning of every DITA-OT + transformation. Each step or stage corresponds to an Ant target in the build pipeline; the + preprocess target calls the entire set of steps. + + + + pre-processing + modules + + + + diff --git a/reference/processing-order.dita b/reference/processing-order.dita new file mode 100644 index 0000000..fec76fe --- /dev/null +++ b/reference/processing-order.dita @@ -0,0 +1,62 @@ + + + + + Processing order + The order of processing is often significant when evaluating DITA content. Although the DITA specification + does not mandate a specific order for processing, DITA-OT has determined that performing filtering before conref + resolution best meets user expectations. Switching the order of processing, while legal, may give different + results. + + + + note + product + conref + resolving + filters + processing order + processing + pipelines + processing order + + + + +
    +

    The DITA-OT project has found that filtering first provides several benefits. Consider the following sample + that contains a note element that both uses conref and contains a + product + attribute:<note conref="documentA.dita#doc/note" product="MyProd"/>

    +

    If the conref attribute is evaluated first, then documentA must be parsed in order to retrieve + the note content. That content is then stored in the current document (or in a representation of that document + in memory). However, if all content with product="MyProd" is filtered out, then that work is all discarded later + in the build.

    +

    If the filtering is done first (as in DITA-OT), this element is discarded immediately, and documentA is never + examined. This provides several important benefits: +

      +
    • Time is saved by discarding unused content as early as possible; all future steps can load the document + without this extra content.
    • +
    • Additional time is saved case by not evaluating the conref attribute; in fact, documentA + does not even need to be parsed.
    • +
    • Any user reproducing this build does not need documentA. If the content is sent to a translation team, + that team can reproduce an error-free build without documentA; this means documentA can be kept back from + translation, preventing accidental translation and increased costs.
    • +

    +

    If the order of these two steps is reversed, so that conref is evaluated first, it is possible that results + will differ. For example, in the code sample above, the product attribute on the reference + target will override the product setting on the referencing note. Assume that the referenced + note element in documentA is defined as follows: + <note id="note" product="SomeOtherProduct">This is an important note!</note>

    +

    A process that filters out product="SomeOtherProduct" will remove the target of the original conref before that + conref is ever evaluated, which will result in a broken reference. Evaluating conref first would resolve the + reference, and only later filter out the target of the conref. While some use cases can be found where this is + the desired behavior, benefits such as those described above resulted in the current processing order used by + DITA-OT.

    +
    +
    +
    diff --git a/reference/processing-pipeline-modules.dita b/reference/processing-pipeline-modules.dita new file mode 100644 index 0000000..96ed44b --- /dev/null +++ b/reference/processing-pipeline-modules.dita @@ -0,0 +1,62 @@ + + + + + Processing modules + The DITA-OT processing pipeline is implemented using Ant. Individual modules within the Ant script are + implemented in either Java or XSLT, depending on such factors as performance or requirements for customization. + Virtually all Ant and XSLT modules can be extended by adding a plug-in to the toolkit; new Ant targets may be + inserted before or after common processing, and new rules may be imported into common XSLT modules to override + default processing. + + + + specializations + DITA + specializations + DITA + specializations + processing + Ant + extending + Java + extending + processing modules + XSLT + processing modules + pre-processing + extension points (overview) + index + sorting + pipelines + Ant module + pipelines + Java module + locale + + + + +
    + XSLT modules +

    The XSLT modules use shell files. Typically, each shell file begins by importing common rules that apply to all + topics. This set of common processing rules may in turn import additional common modules, such as those used for + reporting errors or determining the document locale. After the common rules are imported, additional imports can + be included in order to support processing for DITA specializations.

    +

    For example, XHTML processing is controlled by the xsl/dita2xhtml.xsl file. The shell + begins by importing common rules that are applicable to all general topics: + xslhtml/dita2htmlImpl.xsl. After that, additional XSLT overrides are imported for + specializations that require modified processing. For example, an override for reference topics is imported in + order to add default headers to property tables. Additional modules are imported for tasks, for the highlighting + domain, and for several other standard specializations. After the standard XSLT overrides occur, plug-ins may + add in additional processing rules for local styles or for additional specializations.

    +
    +
    + Java modules +

    Java modules are typically used when XSLT is a poor fit, such as for processes that make use of standard Java + libraries (like those used for index sorting). Java modules are also used in many cases where a step involves + copying files, such as the initial process where source files are parsed and copied to a temporary processing + directory.

    +
    +
    +
    diff --git a/reference/processing-structure.dita b/reference/processing-structure.dita new file mode 100644 index 0000000..212d0b6 --- /dev/null +++ b/reference/processing-structure.dita @@ -0,0 +1,43 @@ + + + + + Processing structure + DITA-OT implements a multi-stage, map-driven architecture to process DITA content. Each stage in the + process examines some or all of the content; some stages result in temporary files that are used by later steps, + while others stages result in updated copies of the DITA content. Most of the processing takes place in a temporary + working directory; the source files themselves are never modified. + + + + architecture + pre-processing + Eclipse Help + HTML Help + XHTML + PDF + HTML5 + preprocessing + pipelines + description of + pipelines + pre-processing + + + + +

    DITA-OT is designed as a pipeline. Most of the pipeline is common to all output formats; it is known as the + pre-processing stage. In general, any DITA process begins with this common set of pre-processing + routines.

    +

    Once the pre-processing is completed, the pipeline diverges based on the requested output format. Some processing + is still common to multiple output formats; for example, Eclipse Help and HTML Help both use the same routines to + generate XHTML topics, after which the two pipelines branch to create different sets of navigation files.

    +

    The following image illustrates how the pipeline works for several common output formats: PDF, Eclipse Help, HTML + Help, XHTML, and HTML5.

    + Other output formats may implement additional processing steps. + + Diagram of some possible paths through the transformation pipeline + + +
    +
    diff --git a/reference/reference.ditamap b/reference/reference.ditamap new file mode 100644 index 0000000..290981f --- /dev/null +++ b/reference/reference.ditamap @@ -0,0 +1,100 @@ + + + + + Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Chunking definition in the DITA 1.2 specification + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/reference/store-api.dita b/reference/store-api.dita new file mode 100644 index 0000000..c63c684 --- /dev/null +++ b/reference/store-api.dita @@ -0,0 +1,78 @@ + + + + + Store API – Processing in memory + + Store API + + DITA-OT originally assumed resources would be available on disk and available from file paths. Recent + versions added URI input, so HTTPS resources could be used, but temporary and output resources were still + file-based. DITA-OT 3.6 introduces a new Store API that can process temporary resources in memory instead of writing + them to disk. + + + + Store API + in-memory processing + + + + +

    The Store API (org.dita.dost.store.Store) is a Java abstraction over temporary file operations. + So for example instead of reading resources directly with FileInputStream, the Store API provides + operations for this. This abstraction allows implementations of the Store API to choose how they handle resources, + enables optimizations or non–file-based storage. Since DITA-OT processes a lot of XML data, the Store API offers + operations for XML processing directly. For example, a read method to directly get a DOM + Document, instead of opening a file stream manually, parsing it with an XML parser, and getting + the Document instance from the parser.

    +

    The Store API is extendable using Java’s + Resource Loader with the org.dita.dost.store.StoreBuilder service. This is a builder + interface to get named Store instances (“a Store”).

    +
    + Stream Store for file-based processing +

    This Store could also be a File Store, since it uses disk and local files for temporary resources. This is the + traditional DITA-OT implementation, where temporary XML files are stored under the + dita.temp.dir path.

    +

    The Stream Store is activated by setting the store-type parameter to + .

    + To ensure backwards compatibility, the Store is the default setting in DITA-OT + 3.6. +
    +
    + Cache Store for in-memory processing +

    This Store is an in-memory Store, that keeps all temporary resources in memory. The name comes from the feature + of the Store, that it caches the parsed XML after reading. That is, instead of storing XML as a byte array, it + keeps it as a DOM Document or S9api XdmNode. When the same + resource is re-read later, it doesn't have to parse it again, only return the parsed document. Resources that + are not available in the temporary directory are handled with the Stream Store.

    +

    While the Store doesn't write anything to the temporary directory, it will still use URIs where the resources + are under the temporary directory. The URIs are simply used for addressing, similarly to URNs. Future releases + of DITA-OT may use some other method of addressing, such as a tmp URI scheme.

    + As of DITA-OT 3.6, the Cache Store can be activated by setting the + store-type parameter to . +
    +
    + Benefits +

    The initial implementation of the Cache Store is provided in DITA-OT 3.6 as a preview to allow integration + partners to test this new feature.

    +

    +

    +

    The Store API also makes the Saxon S9api easier to use. It offers an XML document model that + is in most cases easier to work with than DOM. The abstraction Store makes it easier to work with XML, so + various modules don’t need to repeat the same type of XML processing code.

    +
    + Caveats +

    Not all custom plug-ins will work with the Cache Store, because they may assume files are used and expect direct file + access for resource operations.

    + To take advantage of the Store API, custom plug-ins must use DITA-OT XSLT modules in custom + pipeline elements instead of Ant’s built-in xslt tasks as + recommended in . +
    + +
    diff --git a/reference/third-party-software.dita b/reference/third-party-software.dita new file mode 100644 index 0000000..3a2ad3a --- /dev/null +++ b/reference/third-party-software.dita @@ -0,0 +1,184 @@ + + + + + Third-party software + DITA Open Toolkit uses third-party software components to provide certain features in the core toolkit, + Java API, and bundled plug-ins. + + + + PDF + plug-in, required software + third-party software + + + + +
    + DITA-OT <keyword keyref="release"/> +

    DITA-OT core processing uses the following third-party software:

    + + + + + + + + Software + Version + License + + + + + Ant + Ant + + + + + + + Apache Commons Codec + Apache Commons Codec + + + + + + Apache Commons IO + Apache Commons IO + + + + + + Apache XML Commons Resolver + Apache XML Commons Resolver + + + + + + Guava + Guava + + + + + + ICU for Java (ICU4J) + ICU for Java (ICU4J) + + + + + + Jackson data binding library + Jackson data binding library + + + + + + Logback Classic Module + Logback Classic Module + + + , + + + + + + Saxon + + + + + + Simple Logging Facade for Java (SLF4J) + Simple Logging Facade for Java + + + + + + Xerces + Xerces + + + + + + XML APIs + XML APIs + + + , + + + + XML Resolver + XML Resolver + + + + + + +
    + The XML APIs library contains source code for SAX and DOM APIs, which each have their own licenses. +
    +
    + PDF plug-in +

    The org.dita.pdf2 plug-in relies on additional third-party software to generate PDF + output:

    + + + + + + + + Software + Version + License + + + + + Apache Commons Logging + Apache Commons Logging + 1.0.4 + + + + + Apache XML Graphics + Apache XML Graphics + + + + + + Batik + Batik + 1.13 + + + + + FOP + Apache FOP + + + + + + +
    +
    +
    +
    diff --git a/reference/xhtml-processing.dita b/reference/xhtml-processing.dita new file mode 100644 index 0000000..64f2566 --- /dev/null +++ b/reference/xhtml-processing.dita @@ -0,0 +1,22 @@ + + + + + XHTML processing + After the XHTML files are generated by the common routine, the dita.map.xhtml target is + called by the transformation. This target generates a TOC file called + index.html, which can be loaded into a frameset. + + + + HTML + XHTML + dita.map.xhtml + targets + XHTML + entry file + XHTML + + + + diff --git a/release-notes/changes.ditamap b/release-notes/changes.ditamap new file mode 100644 index 0000000..7ce6368 --- /dev/null +++ b/release-notes/changes.ditamap @@ -0,0 +1,31 @@ + + + + DITA-OT release history + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/release-notes/history.dita b/release-notes/history.dita new file mode 100644 index 0000000..84a4bc8 --- /dev/null +++ b/release-notes/history.dita @@ -0,0 +1,8 @@ + + +DITA history on developerWorks (pre-Open Source)
    +

    Versions of the toolkit prior to Open Source are in the developerWorks XML Zone at this + address: DITA Downloads Change logs for those versions are within the Readme files in + each distribution.

    +
    \ No newline at end of file diff --git a/release-notes/index.dita b/release-notes/index.dita new file mode 100644 index 0000000..562389f --- /dev/null +++ b/release-notes/index.dita @@ -0,0 +1,517 @@ + + + + + DITA Open Toolkit <keyword keyref="release"/> Release Notes + + Release Notes + + + + DITA Open Toolkit is a maintenance release that fixes issues + reported in DITA-OT , which . +

    + + + + + Requirements: Java 17 + +

    + Add info on new minimum Java version or any other requirements that have changed + since previous release. +

    +

    +

    + +
    + + + DITA-OT <keyword keyref="maintenance-version"/> + <ph outputclass="small text-muted">released May 5, 2024</ph> + + +
    +

    DITA Open Toolkit is a maintenance release that includes the + following bug fixes.

    + +
      +
    • DITA-OT 4.2.2 included a regression bug that caused the map-first pre-processing routine to fail + with a NullPointerException when maps referred to topics that didn’t exist and other topics contained key + references. Processing now proceeds and warns of missing files as in previous versions. + #4449, + #4454 +
    • +
    +
    +
    +
    + + + DITA-OT 4.2.2 + <ph outputclass="small text-muted">released March 24, 2024</ph> + + +
    +

    DITA Open Toolkit 4.2.2 is a maintenance release that includes the following bug fixes.

    + +
      +
    • In earlier versions, the map-first pre-processing routine created extra HTML files in the output + folder when branch filtering topic references that include fragments. Duplicate branches are now handled + correctly and links are resolved as expected. + #4380 + #4427 +
    • +
    • Earlier versions of map-first pre-processing would sometimes attempt to access topics that were + excluded in DITAVAL files, which resulted in spurious errors. XLST transformations and SAX filter pipes are + now skipped for any source files that don’t exist. + #4383 + #4435 +
    • +
    • In earlier versions, passing a URL as an input file on the Windows command line resulted in an + InvalidPathException error. URI input is now handled correctly on Windows. + #4419 + #4425 +
    • +
    • In debug logging mode, DITA-OT 4.2 no longer passed exceptions to the CLI output. Logging has + been corrected to ensure that errors from Ant tasks once again include the stack trace as expected. + #4430 + #4436 +
    • +
    • When missing translations for the PDF “on page” variable were added in DITA-OT 4.2, + the Montenegrin translation “na stranici” was accidentally copied to the Swedish language file. + The Swedish translation has been updated to use “på sidan” as expected. + #4431 + #4433 +
    • +
    • When project files contained input map names with URI-escaped characters like spaces, earlier + versions of DITA-OT used the escape character sequences like %20 in the output file name. + The map-first pre-processing routine has been updated to construct the output base file name using the + unescaped equivalents. + #4412 + #4440 +
    • +
    +
    +
    +
    + + + DITA-OT 4.2.1 + <ph outputclass="small text-muted"> released March 1, 2024</ph> + + +
    +

    DITA Open Toolkit 4.2.1 is a maintenance release that includes the following bug fixes.

    + +
      +
    • When using the in-memory store, earlier versions of the map-first pre-processing pipeline failed + to initialize the temporary directory. The directory is now created to ensure that files are processed + correctly. + #4401 +
    • +
    • A NullPointerException that occured when using the in-memory store with map-first + pre-processing has also been fixed. + #4402 +
    • +
    • In DITA-OT 4.2, the HTML5 transformation was updated to include map-level + keywords metadata in the table-of-contents file index.html. + However, this inadvertently also included variable definition keywords from nested topic references. + Processing has been updated to only include top-level map keyword metadata. + #4405, + #4418 +
    • +
    • The command-line interface in DITA-OT 4.2 prints colored messages in several additional cases, + but these changes accidentally removed the logging level prefixes in terminal environments that don’t + support color. These message prefixes now appear in all environments, regardless of color support. + #4406 + #4409 +
    • +
    • DITA-OT 4.2 pruned logging level prefixes from messages by removing anything that appeared + between square brackets ][ and ], but this also dropped custom prefixes. + Logging has been updated to only remove prefixes that match the default level names like + INFO or WARN. + #4416 +
    • +
    +
    +
    +
    + + + DITA-OT <keyword keyref="release"/> + <ph outputclass="small text-muted"> released February 11, 2024</ph> + + + + + files + .ditaotrc + .ditaotrc file + + + + +
    +

    DITA Open Toolkit Release + uses map-first pre-processing for HTML5 output and includes a new local configuration file, + better CLI messages with support for overrides, a new version of the Lightweight DITA plug-in with + enhancements to Markdown processing, and updates for the latest DITA 2.0 draft standard.

    +
    + + + +
    + Map-first HTML5 +

    The HTML5 transformation has been updated to use the map-first pre-processing pipeline that was + previously enabled for PDF and HTML Help in DITA-OT 3.0. For details, see + . + #4225 +

    +
    + +
    + New configuration file +

    A new .ditaotrc configuration file can be used to store DITA-OT runtime configurations + in multiple places.

    +

    DITA-OT now looks for this file in the current directory or any ancestor directory first, then in the user’s + home directory, and finally in the root directory of the DITA-OT installation. These files are read in order + and combined with the contents of the local.properties file in the toolkit directory. The + first occurrence of a property takes precedence. This approach can be used to define multiple layers of + configuration, so personal defaults that apply to multiple projects can be stored in the home folder, with + local overrides in project folders. + #4217, + #4391 +

    +
    + +
    + CLI message improvements +

    The log messages that appear in the command line interface have been revised to use more consistent + language, better explain the cause, and how the issue can be resolved. + #3973, + #4287, + #4376, + #4387 +

    +

    The code that generates CLI error messages has been refactored to make it easier to override and + extend messages. The generated messages file is now sorted by ID to make it easier to locate individual + messages, and any duplicates are removed during the integration process. + #4199 +

    +

    Log messages can now be partially overridden or completely replaced. Custom plug-ins can supply new + messages via the dita.xsl.messages extension point as in previous versions, but now this same + approach can also be used to override the contents or change the severity level of any of the default + messages. + #4362 +

    +
      +
    • The only required information is the id attribute, which is used to identify the message + you are overriding.
    • +
    • To change the message content, specify a new reason or + response.
    • +
    • To change the severity level, set a new value for the type attribute + (INFO, WARN, ERROR, FATAL, or + DEBUG).
    • +
    • You can omit type, reason or response, + in which case the previous declaration of the message will provide that value.
    • +
    +
    + +
    + Lightweight DITA and Markdown updates +

    The org.lwdita plug-in has been updated to version , + which includes a series of bug fixes and support for additional DITA constructs in Markdown output, + including:

    +
      +
    • list parsing performance improvement
    • +
    • admonition blocks in list items
    • +
    • HDITA note elements
    • +
    • multimedia element types
    • +
    • tight task lists
    • +
    • footnotes
    • +
    • block content in tables
    • +
    +

    The XDITA plug-in has been updated to version , which includes recent + changes to the grammar files from OASIS (as of ). This version + removes deprecated catalog entries, and resolves + #4233. + #4366 +

    +
    + +
    + Updated DITA 2.0 preview +

    In addition to the + provided in DITA-OT 3.5 – 4.1, this release includes updated processing for + the latest draft versions of the DITA 2.0 grammar files from OASIS (as of ). + #4359 +

    + +
    + +
    + Enhancements and changes + +

    DITA Open Toolkit Release includes the following enhancements and changes to + existing features:

    + +
      +
    • +
    • Unreferenced XSLT variables in xsl:template blocks have been removed. + #4093 +
    • +
    • Earlier versions of DITA-OT preserved metadata in submaps, but dropped any + topicmeta content defined within mapref elements. Submap + metadata in mapref elements is now preserved in a temporary + mapref-topicmeta-container, which is removed when pre-processing is complete. + #4115 +
    • +
    • Several pre-processing stylesheets have been extended with additional comments to better explain + how processing works, and to mark cases where named templates can be replaced with template modes. + #4151, + #4176, + #4209 +
    • +
    • Subject scheme processing has been refactored to support multiple keys in a single + keys attribute on the subjectdef element. It now uses the S9API + (Saxon’s preferred Java API for XSLT, XQuery, XPath, and XML Schema processing) instead of the Document + Object Model (DOM). A new unit test has been added to verify changes in the subject scheme reader code, and + the map-first pre-processing pipeline now supports additional subject scheme features. + #4296, + #4297, + #4300, + #4302, + #4306 +
    • +
    • The test coverage for the onlytopic.in.map parameter has been improved + using unit tests instead of integration tests. + #4310 +
    • +
    • The tasks that run after the map-first pre-processing pipeline have been refactored to a + dedicated preprocess2.post target to make it easier to add custom steps in between the + built-in steps. + #4313 +
    • +
    • The plug-in integration code has been refactored to remove the redundant Ant layer from the + install and uninstall processes. + #4329 +
    • +
    • For HTML-based output formats, a new dita2html:is-heading-level template mode + allows plug-ins to declare their own elements that contribute to heading levels (h1 through + h6). For example, a specialization of bodydiv could declare + itself as a heading level and create its own HTML heading (by calling + dita2html:section-heading with the defaulttitle parameter), and any + section or example elements inside will adjust their + heading levels accordingly. As part of this change, the parameter interface of the template for + (section|example)/title elements has changed — the headLevel parameter + is now an integer (1 through 6) instead of a string (h1 through h6). + Existing custom code that uses this interface must be modified. + #4330, + #4368 +
    • +
    • XSLT stylesheet headers have been updated from XSLT version 1.0 and 2.0 to version 3.0 to make + way for the use of XSLT3 features in future toolkit versions. This is a backwards-compatible change, as + there are no changes to the actual code; only the stylesheet headers have been modified for now. To ensure + plug-ins remain compatible with future versions of DITA-OT and Saxon-HE, the DITA Open Toolkit project + recommends upgrading all stylesheets to XSLT 3.0. + #4338 +
    • +
    • The CLI no longer uses colors when it's connected to a pipe or output is redirected to a file. + #4393 +
    • +
    • +
    • The following bundled plug-ins have been upgraded to the latest versions:

      +
        +
      • The Normalized DITA plug-in version 2.0 now uses map-first pre-processing for normalization. + #4382 +
      • +
      • The Lightweight DITA plug-in version 5.7 includes the + described above. + #4388 +
      • +
      • The PDF Theme plug-in version 0.7.2 applies the body line-height attribute + to block elements and provides basic styling support for table entries and cover page subtitles or + alternative titles. + #4389 +
      • +
      +
    • +
    • Several bundled dependencies have been upgraded to the latest versions:

      +
        +
      • The bundled Apache FOP version has been updated to + . + #4272, + #4288 +

        (For details on recent changes, see the + .)

        +
      • +
      • The logback libraries have been updated to to + resolve a serialization vulnerability in the logback receiver component reported as CVE-2023-6378. + #4346 + #4361 +
      • +
      +
    • +
    • Several Java dependencies have been upgraded to include the latest utility versions and fix security issues in + bundled libraries. + #4390 +
        +
      • Ant 1.10.14
      • +
      • ICU4J 74.2
      • +
      • Jackson 2.16.1
      • +
      • Jing 20220510
      • +
      • JUnit 5.10.2
      • +
      • Saxon 12.4
      • +
      • SLF4J 2.0.12
      • +
      • XML Resolver 5.2.3
      • +
      +
    • +
    +
    + +
    + Bug fixes + +

    DITA Open Toolkit Release provides fixes for the following bugs:

    + +
      +
    • For cross-references to a topic, the target topic’s short description is processed to create a + link description. When that shortdesc element contained another cross-reference to + a file in a different directory, the second link’s description would contain *** instead of + the expected link text. Processing has been corrected to ensure that link text is generated as expected. + #4244, + #4266 +
    • +
    • +
    • In earlier versions, builds failed with a NullPointerException under certain conditions in + map-first pre-processing. The issues have been resolved and integration tests have been updated to catch + related errors in the future. + #4305 +
    • +
    • The map-first pre-processing pipeline in earlier versions treated href attribute + values set to -dita-use-conref-target as resources during the initial parse and rewrote + the attribute values. Processing has been corrected to pass these values through unchanged. + #4307 +
    • +
    • Earlier versions of the map-first pre-processing pipeline failed to update the + usr.input.file.list with temporary file names. The list is now generated correctly. + #4311 +
    • +
    • Missing translations for the PDF “on page” variable have been added to the Bosnian, + Finnish, Montenegrin, Romanian, Russian, Swedish, and Simplified Chinese PDF localizations. + #4315, + #4320 +
    • +
    • The classpaths for the install and uninstall subcommands + have been separated to allow plug-ins to be removed even if plug-in JAR files have been opened. Earlier + versions would fail to delete plug-ins in this case. + #4328 +
    • +
    • In earlier versions, the HTML5 transformation published metadata to + meta elements in topic-level HTML files, but not in the table of contents file + index.html. Now, it also adds metadata from the root map’s + topicmeta to the ToC file. + #4351, + #4352 +
    • +
    • Earlier versions did not support non-DITA map references. Processing has been extended to allow + mapref elements to refer to non-DITA maps, such as Markdown maps that are parsed + as DITA. + #4353 +
    • +
    • The docsrc folder in the DITA-OT 4.1.1 and 4.1.2 release packages contained + several unnecessary files. The build scripts have been updated to ensure that these files are no longer + included. + #4357 +
    • +
    • In cases where key definitions were branch-filtered with + dvrResourcePrefix, earlier versions of the map-first pre-processing pipeline + failed to apply the resource prefix to the target file names. Key resolution code has been corrected to use + the filter-copy-to attribute instead of the href attribute. Once applied, + this temporary pre-processing attribute is removed during the map clean step. + #4369, + #4381 +
    • +
    • The missing --deliverable option has been added to the CLI + help output. This option can be used to publish a single deliverable in the specified + project. + #4386 +
    • +
    +
    + +
    + Contributors +

    DITA Open Toolkit Release includes + by the following people:

    + + NOTE: This lists contributions to the core toolkit, not docs. +
      +
    1. Jarno Elovirta
    2. +
    3. Roger Sheen
    4. +
    5. Chris Papademetrious
    6. +
    7. Robert D Anderson
    8. +
    9. Radu Coravu
    10. +
    11. Andrei Pomacu
    12. +
    +

    For the complete list of changes since the previous release, see the + changelog on GitHub.

    +
    + +
    + Documentation updates +

    The documentation for DITA Open Toolkit Release provides corrections and + improvements to existing topics, along with new information in the following topics:

    +
      +
    • +
    • +
    • +
    • +
    +

    For additional information on documentation issues resolved in DITA Open Toolkit Release , see the + milestone in the documentation repository.

    +

    DITA Open Toolkit Release includes + by the following people:

    + NOTE: This lists contributions to docs, not to the core toolkit. +
      +
    1. Roger Sheen
    2. +
    3. Jarno Elovirta
    4. +
    5. Edit Koselak
    6. +
    7. Stefan Jung
    8. +
    +

    For the complete list of documentation changes since the previous release, see the + changelog.

    +
    +
    +
    + diff --git a/release-notes/rel1.0.1.dita b/release-notes/rel1.0.1.dita new file mode 100644 index 0000000..8d76d0b --- /dev/null +++ b/release-notes/rel1.0.1.dita @@ -0,0 +1,9 @@ + + +DITA OT release 1.0.1Release 1.0.1 is a maintenance release to fix defects and adds some minor + enhancements in release 1.0.
    + Changes +
    1. Committer: maplink.xsl doesn't generate related links for second level referred + topic
    2. Committer: avoid infinite loop of conref
    3. SF Bug 1160964: Can't point above the directory which contains the map file
    4. SF Bug 1163523: Broken XPath expression in mappull.xsl
    5. SF Bug 1168974: useless DRAFT param in FO transformation
    6. SF Bug 1173162: generate null internal link destination in fo transformation
    7. SF Bug 1173164: Not correctly use document() in dita2fo-links.xsl
    8. SF Bug 1173663: All base directories are DITA-OT 1.0
    9. SF Patch 1163561: XLST match patterns test for element names
    10. SF Patch 1165068: FO hyperlinks and FOP-generated PDF bookmarks
    11. SF Patch 1174012: Modification to sequence.ditamap
    +
    \ No newline at end of file diff --git a/release-notes/rel1.0.2.dita b/release-notes/rel1.0.2.dita new file mode 100644 index 0000000..99e3df5 --- /dev/null +++ b/release-notes/rel1.0.2.dita @@ -0,0 +1,8 @@ + + +DITA OT release 1.0.2Release 1.0.2 is a maintenance release to fix defects and adds some minor + enhancements in release 1.0.1.
    + Changes +
    1. SF Bug 1181950: format attribute should be set to 'dita' for dita topic
    2. SF RFE 1183487: Document the usage of footer property
    3. SF RFE 1198847: command line interface support
    4. SF RFE 1198850: architecture document update
    5. SF RFE 1200410: need explanation for dita.list
    6. SF RFE 1201175: XML catalog support
    7. SF Patch 1176909: Add template for getting image URI
    +
    \ No newline at end of file diff --git a/release-notes/rel1.0.dita b/release-notes/rel1.0.dita new file mode 100644 index 0000000..d82f80b --- /dev/null +++ b/release-notes/rel1.0.dita @@ -0,0 +1,18 @@ + + +DITA OT release 1.0The initial release of the Open Sourced DITA Toolkit introduces major architectural + changes from the previous, developerWorks version of the Toolkit.
    + New features +
    1. A new, Java-based processing architecture that supports single-threaded execution + throughout.
    2. Ant-based orchestration of the processing environment, from preprocessing to + transformation to any required post-processing.
    3. A pre-processor core that supports conditional processing and conref resolution.
    4. Map-driven processing that generates links for transformed topics.
    5. A new DITA to HTML transform that replaces the previous topic2html_Impl.xsl core + transform. This new core is based on requirements for high-volume usage within IBM for + the past several years.
    +

    Ant-driven processing means that you can + integrate the DITA processing tools into a seamless pipeline within + supportive environments such as Eclipse.

    The DTDs and + Schemas in this version are based on those in the previous dita132 + package with bug fixes. The DITA OS Toolkit will later support the + OASIS 1.0 specification in its public review form.

    +
    \ No newline at end of file diff --git a/release-notes/rel1.1.1.dita b/release-notes/rel1.1.1.dita new file mode 100644 index 0000000..946ee1c --- /dev/null +++ b/release-notes/rel1.1.1.dita @@ -0,0 +1,11 @@ + + +DITA OT release 1.1.1Release 1.1.1 is a maintenance release to fix defects and make patches based on + release 1.1.
    +

    For patch 1284023, we are changing the name of the jar lib file from dost1.0.jar back to + dost.jar because we believe we need to keep the jar file name consistent through various + releases.

    +
    + Changes +
    1. SF Bug 1196409: HTMLHelp output does not reference CSS
    2. SF Bug 1272687: extra "../" link generated by topicgroup
    3. SF Bug 1273751: revision flag using unavailable pictures
    4. SF Bug 1273816: Index generation doesn't cope with multilevel well
    5. SF Bug 1281900: Unnecessary comment and href typo
    6. SF Bug 1283600: unecessary space in document cause invalid parameter of Ant
    7. SF Bug 1283644: multipul document($FILTERFILE,/) doesn't work (XALAN)
    8. SF Patch 1251609: pretargets xsl directory needs to use ${dita.script.dir}
    9. SF Patch 1252441: Files in temp directory not deleted before build
    10. SF Patch 1253785: Inline images in dita2fo-elems
    11. SF Patch 1284023: change the name of jar file and remove the version name
    \ No newline at end of file diff --git a/release-notes/rel1.1.2.1.dita b/release-notes/rel1.1.2.1.dita new file mode 100644 index 0000000..62185c6 --- /dev/null +++ b/release-notes/rel1.1.2.1.dita @@ -0,0 +1,24 @@ + + +DITA OT release 1.1.2.1Release 1.1.2.1 is a full build to provide an urgent fix to fix the following + critical problem which users found in release 1.1.2.
    +

    +

    • SF Bug 1345600 The build process failed when run "Ant all" in release + 1.1.2
    +

    +

    For this fix, we have restored all the source DITA files in 'doc' and + directories in the binary packages.

    +

    Note that the original parameter "args.eclipse.toc" in "Ant tasks and + script" was separated to "args.eclipsehelp.toc" for DITA-to-Eclipse help + transformation, and "args.eclipsecontent.toc" for DITA-to-dynamic Eclipse + content transformation.

    +

    Another issue is that we found there is a mismatch in the document and the toolkit + behavior when you are trying to use the following command + ant -f conductor.xml -propertyfile ${dita.temp.dir}/property.temp. + Now we have updated the documentation. Please refer to the topic 'Building DITA + output with Java command line' on our website for more details.

    +

    These updates do not affect standard operation of the toolkit. The main goal of this + minor release to enable new users of the toolkit to run the installation verification + tests without failure.

    +
    \ No newline at end of file diff --git a/release-notes/rel1.1.2.dita b/release-notes/rel1.1.2.dita new file mode 100644 index 0000000..c4ae2cb --- /dev/null +++ b/release-notes/rel1.1.2.dita @@ -0,0 +1,23 @@ + + +DITA OT release 1.1.2Release 1.1.2 is a maintenance release to fix defects and make patches based on + release 1.1.1.
    +

    But there are certain limitations and unfixed bugs in this release, such as,

    • Bug 1343963 Blank index.html generated for ditamap contains only reltabe
    • Bug 1344486 java.io.EOFException thrown out when reading ditaval file
    Please check the current 'open' bugs on the SourceForge bugs tracker.

    +
    + Changes +
    1. SF Bug 1297355: Multilevel HTML Help popup shows filenames
    2. SF Bug 1297657: Update for Supported Parameters page
    3. SF Bug 1304859: Toolkit disallows repetition of topic ID within map
    4. SF Bug 1306361: Fatal error in published ditamap example
    5. SF Bug 1306363: common.css not compiled with htmlhelp
    6. SF Bug 1311788: DTD references not resolved
    7. SF Bug 1314081: Fix catalog entries in catalag-ant.xml for OASIS DTDs
    8. SF Bug 1323435: wrong system id for html output used in validation
    9. SF Bug 1323486: HTML Help subterm indexes not sorted
    10. SF Bug 1325290: JavaHelp output does not work for Russian
    11. SF Bug 1325277: File missing from the map causes abend
    12. SF Patch 1253783: dita2fo-links relative hrefs
    13. SF Patch 1324387: In xslfo, groupchoice var prints extra | delimiter
    14. SF RFE 1324990: Installation Guide
    +
    + Parameter Changes +

    +

    1. The original parameter "args.eclipse.toc" in "Ant tasks and + script" was separated to "args.eclipsehelp.toc" for dita2eclipsehelp + transformation, and "args.eclipsecontent.toc" for dita2eclipsecontent + transformation.
    2. Several parameters were added to the java command line interface, including + "/javahelptoc","/javahelpmap","/eclipsehelptoc","/eclipsecontenttoc","/xhtmltoc".
    +

    +
    + Other Changes +

    Change to the "doc" directory, except "doc\langref" directory:

    1. The source dita files and the generated HTML, CHM, and PDF files were separated into + separate downloads.
    2. The source package contains the source dita files.
    3. The binary package contains the generated HTML, CHM, and PDF files.

    +
    \ No newline at end of file diff --git a/release-notes/rel1.1.dita b/release-notes/rel1.1.dita new file mode 100644 index 0000000..4f49d56 --- /dev/null +++ b/release-notes/rel1.1.dita @@ -0,0 +1,77 @@ + + +DITA OT release 1.1Release 1.1 is a major release to add new functions, fulfill new requirements, make + some function enhancements and fix bugs over release 1.0.2.
    +
    1. + Adaptation to the new OASIS DITA standard +

      Release 1.1 implements the new OASIS DITA 1.0 standard for DITA DTDs and Schemas.

      +

      DTDs of the previous release locate in the directory dtd/dita132 and schemas + of the previous release locate in the directory schema/dita132.

      +
    2. + Transformation to troff +

      Release 1.1 supports new troff output. Troff output looks like Linux man page + output.

      +
    3. + XML catalog support +

      An XML catalog, which can consist of several catalog entry files, is a logical + structure that describes mapping information between public IDs and URLs of DTD files. + A catalog entry file is an XML file that includes a group of catalog entries. If you + want to know more about XML catalog, please referXML + Catalog.

      +

      A catalog entry can be used to locate a unified resource identifier (URI) reference + for a certain resource such as a DTD file. An external entity's public identifier + is used for mapping to the URI reference. The URI of any system identifier can be + ignored.

      +
    4. + Topicref referring to a nested topic +

      The href attribute of the topicref is extended to quote a nested topic in a dita + file.

      +

      For example, in previous releases, href attribute is set like: href = + "xxx.dita"; in release 1.1, href attribute can be set like: href = + "xxx.dita#abc.dita".

      +
    5. + Globalization support +

      Release 1.1 supports over 20 popular languages within the content of dita files. And + it also provides translation function for DITA keywords to over 20 languages. + Currently this globalization support fully applies to Eclipse Help and XHTML + transformations, and partially applies to other transformations.

      +
    6. + Accessibility support +

      Accessibility support is now partially applies to PDF and XHTML transformations.

      +
    7. + Eclipse Content Provider Support +

      Please refer to Eclipse Content Provider for + detail information.

      +
    8. + Index information in output +

      The output of HTML Help and Java Help transformations contain index information + now.

      +
    9. + Mapref function +

      Mapref refers to a special usage of the <topicref> element as a + reference to another ditamap file. This allows you to manage the overall ditamap file + more easily. A large ditamap file can thus be broken down into several ditamap files, + making it easier for the user to manage the overall logical structure. On the other + hand, this mechanism also increases the reusability of those ditamap files. If you + want to know more about mapref, please refer Mapref.

      +
    10. + TOC generation for Eclipse Help transformation +

      TOC generation now supported in transformation to Eclipse Help. Eclipse.

      +
    11. + Helpset generation for Java Help transformation +

      Helpset generation now supported in transformation to Java Help.

      +
    12. + New parameters supported in Java commands +

      In Java commands: /indexshow, /outext, /copycss, /xsl, /tempdir.

      +
    13. + New parameters supported in Ant scripts +

      In Ant scripts: args.indexshow, args.outext, args.copycss, args.xsl, + dita.temp.dir

      +
    +
    +

    + Other Changes +

    1. SF bug 1220569: Add XML Schema processing to DITA-OT
    2. SF bug 1220644: Prompted ant--image does not link for single topic to PDF
    3. SF bug 1229058: Add schema validation loading file for processing
    4. SF RFE 1176855: Ant must be run from toolkit directory
    5. SF RFE 1183482: Copy pre-existing html to output dir
    6. SF RFE 1183490: Provide argument to specify the location of temp dir
    7. SF RFE 1201242: override capability
    +

    +
    diff --git a/release-notes/rel1.2.1.dita b/release-notes/rel1.2.1.dita new file mode 100644 index 0000000..1aca1c7 --- /dev/null +++ b/release-notes/rel1.2.1.dita @@ -0,0 +1,11 @@ + + +DITA OT release 1.2.1Release 1.2.1 is a maintenance release to fix defects and make patches based on + release 1.2.
    + Improvements +
    1. Corrupt table generated in WORD RTF is fixed
    2. Pictures are merged into the WORD RTF instead of creating links to them
    3. lq element is supported in WORD RTF
    4. Generated text can be translated to different languages in WORD RTF
    5. In WORD RTF, if no <choptionhd> given, head will be generated in table
    +
    + SourceForge Changes +
    1. SF Bug 1460451 Spaces preserving methods are different among tags.
    2. SF Bug 1460449 Nested list can not be well supported.
    3. SF Bug 1460445 h2d stylesheet cannot handle HTML files within namespace.
    4. SF Bug 1431229 hardcoded path in MessageUtils.java
    5. SF Bug 1408477 <desc> element is not handled inside xref for XHTML
    6. SF Bug 1398867 ampersands in hrefs (on xref and link) cause build to fail
    7. SF Bug 1326439 filtered-out indexterms leak into index through dita.list
    8. SF Bug 1408487 Short description is not retrieved for <xref> element
    9. SF Bug 1407454 XHTML processing for <alt> is incomplete
    10. SF Bug 1405221 Some table frames ignored in dita->xhtml
    11. SF Bug 1414398 Cannot set provider for Eclipse help transformation
    12. SF RFE 1448712 add support for /plugins directory in plug-in architecture
    +
    \ No newline at end of file diff --git a/release-notes/rel1.2.2.dita b/release-notes/rel1.2.2.dita new file mode 100644 index 0000000..799bf70 --- /dev/null +++ b/release-notes/rel1.2.2.dita @@ -0,0 +1,12 @@ + + +DITA OT release 1.2.2Release + 1.2.2 is a maintenance release to fix defects and make patches based + on release 1.2.1.
    + Improvements +
    1. Chinese support in WORD RTF
    2. Improve plug-in architecture in plug-in dependency handling
    +
    + SourceForge Changes +
    1. SF Bug 1461642 Relative paths in toolkit.
    2. SF Bug 1463756 TROFF output is not usable
    3. SF Bug 1459527 Properties elements should generate default headings
    4. SF Bug 1457552 FO gen-toc does not work right for ditamaps and bookmaps
    5. SF Bug 1430983 Specialized indexterm does not generate entries in index
    6. SF Bug 1363055 Shortdesc disappears when optional body is removed
    7. SF Bug 1368403 The dita2docbook transformation lacks support for args.xsl
    8. SF Bug 1405184 Note template for XHTML should be easier to override
    9. SF Bug 1407646 Map titles are not used in print outputs
    10. SF Bug 1409960 No page numbers in PDF toc
    11. SF Bug 1459790 Related Links omitted when map references file#topicid
    12. SF Bug 1428015 Topicmerge.xsl should leave indentation alone
    13. SF Bug 1429400 FO output should allow more external links
    14. SF Bug 1405169 Space inside XHTML note title affects CSS presentation
    15. SF Bug 1402377 Updated translations for Icelandic
    16. SF Bug 1366845 XRefs do not generate page numbers
    17. SF Patch 1326450 Make ${basedir} mine
    18. SF Patch 1328264 FOP task userconfig file
    19. SF Patch 1385636 Tweaks to docbook/topic2db.xsl
    20. SF Patch 1435584 Recognize more image extensions
    21. SF Patch 1444900 Add template for getting input file URI
    22. SF Patch 1460419 Add a new parameter /cssroot:{args.cssroot}
    23. SF Patch 1460441 map2hhp [FILES] include
    24. SF RFE 1400140 Add a new parameter /cssroot:{args.cssroot}
    +
    \ No newline at end of file diff --git a/release-notes/rel1.2.dita b/release-notes/rel1.2.dita new file mode 100644 index 0000000..f7df259 --- /dev/null +++ b/release-notes/rel1.2.dita @@ -0,0 +1,56 @@ + + +DITA OT release 1.2DITA open toolkit Release 1.2 is a major release to add new functions, fulfill new + requirements, make some function enhancements and fix bugs over release 1.1.2.1.
    + Important Change +

    DITA-OT 1.2 offers new error handling and logging system. If you invoke your + transformation by using java command line where new error handling and logging system is + mandatory, you need to set the CLASSPATH Environment Variable for + dost.jar. If you invoke your transformation by using an ant script, you + need to do one more step after the setting above. That is adding a parameter in your + command to invoke an ant script. For example, use ant -f ant\sample_xhtml.xml + -logger org.dita.dost.log.DITAOTBuildLogger instead of ant -f + ant\sample_xhtml.xml to start a transformation defined in ant script file + ant\sample_xhtml.xml.

    +
    + New Functions +
    1. + New plugin archiecture +

      DITA Open Toolkit 1.2 provides a new function to help users to download, install and + use plug-ins and help developers create new plug-ins for DITA Open Toolkit.

      +
    2. + Transformation to wordrtf +

      DITA Open Toolkit 1.2 provides DITA to Word transforming function to transform DITA + source files to output in Microsoft Word RTF file.

      +
    3. + HTML to DITA migration tool +

      DITA Open Toolkit 1.2 provides a HTML to DITA migration tool, which migrates HTML + files to DITA files. This migration tool originally comes from the developerWorks + publication of Robert D. Anderson's how-to articles with the original h2d + code.

      +
    4. + Problem determination and log analysis +

      In DITA Open Toolkit 1.2, a new logging method is supported to log messages both on + the screen and into the log file. The messages on the screen present user with the + status information, warning, error, and fatal error messages. The messages in the log + file present user with more detailed information about the transformation process. By + analyzing these messages, user can know what cause the problem and how to solve + it.

      +
    5. + Open DITA User Guide for conditional processing +

      In DITA Open Toolkit 1.2, a new user guide which can help users to use conditional + processing is added to toolkit document.

      +
    6. + Include the OASIS version langref +

      In DITA Open Toolkit 1.2, a new OASIS version of language reference for DITA standard + is added to toolkit document.

      +
    7. + Document adapt to OASIS DITA 1.0.1 DTDs +

      DITA DTD files are updated to 1.0.1 version in DITA Open Toolkit 1.2.

      +
    +
    + Other Changes +
    1. SF Bug 1304545 Some folders were copied to DITA-OT's root directory
    2. SF Bug 1328689 Stylesheet links in HTML emitted with local filesystem paths
    3. SF Bug 1333481 Mapref function does not work for maps in another directory
    4. SF Bug 1343963 Blank index.html generated for ditamap contains only reltabe
    5. SF Bug 1344486 java.io.EOFException thrown out when reading ditaval file
    6. SF Bug 1347669 Path Spec. in nested DITA maps
    7. SF Bug 1357139 filtering behavior doesn't conform to spec
    8. SF Bug 1358619 The property.temp file gets cleaned out by default
    9. SF Bug 1366843 XRefs do not generate proper links in FO/PDF
    10. SF Bug 1367636 dita2fo-elems.xsl has strange line breaks
    11. SF RFE 1296133 Enable related-links in PDF output
    12. SF RFE 1326377 Add a /dbg or /debug flag for diagnostic info
    13. SF RFE 1331727 Toolkit need to run on JDK 1.5.x(only support to run under Sun JDK 1.5 + with saxon in normal case)
    14. SF RFE 1357054 Be more friendly towards relative directories
    15. SF RFE 1357906 Provide a default output directory
    16. SF RFE 1368073 Enable plugins for DITA open toolkit
    17. SF RFE 1379518 Clearer error messages and improved exception handling
    18. SF RFE 1379523 DITA to Rich Text Format (.rtf) file
    19. SF RFE 1382482 plugin architecture of DITA-OT
    +
    \ No newline at end of file diff --git a/release-notes/rel1.3.1.dita b/release-notes/rel1.3.1.dita new file mode 100644 index 0000000..4e07664 --- /dev/null +++ b/release-notes/rel1.3.1.dita @@ -0,0 +1,9 @@ + + +DITA OT release 1.3.1Release 1.3.1 is a maintenance release to fix defects and make patches based on + release 1.3.
    + 15 SF Bugs Fixed +
    1. SF Bug 1385642 docbook/topic2db.xsl - shortdesc
    2. SF Bug 1528638 wordrtf does not correctly number steps
    3. SF Bug 1562518 Flag is confusing when a list is mixed with text
    4. SF Bug 1563665 Should use CSS to honor rowsep and colsep in table entries
    5. SF Bug 1567117 Xref to footnote is not resolved correctly
    6. SF Bug 1569671 <reltable> in nested map creates bogus TOC entries
    7. SF Bug 1573996 Plugins do not work in plugins directory
    8. SF Bug 1574011 Spaces in a file name prevent XHTML output
    9. SF Bug 1584186 Bookmap 1.1: <title> element duplicated in mappull
    10. SF Bug 1588039 Conref domain checking is sub-par
    11. SF Bug 1588624 OT v1.3 map2hhc.xsl error
    12. SF Bug 1597444 Java topicmerge breaks when text contains less-than
    13. SF Bug 1597473 Nothing references common.css
    14. SF Bug 1598109 Java topicmerge does not rewrite image/@href
    15. SF Bug 1598230 jhindexer of JavaHelp breaks Search Index for DITAOT content
    +
    SourceForge bugs, patches, and RFEs listed above can be found in SourceForge Bugs, + Patches, and RFE tracker pagesBugs trackerPatches trackerRFE tracker
    \ No newline at end of file diff --git a/release-notes/rel1.3.dita b/release-notes/rel1.3.dita new file mode 100644 index 0000000..2d135b6 --- /dev/null +++ b/release-notes/rel1.3.dita @@ -0,0 +1,86 @@ + + +DITA OT release 1.3
    + OASIS DITA 1.1 support +

    Things to know about OASIS DITA 1.1 support in this release:

    +
    1. DITA-OT 1.3 provides preliminary processing support for the upcoming OASIS DITA 1.1 + specification (see http://wiki.oasis-open.org/dita/Roadmap_for_DITA_development). Because the + proposed OASIS DITA 1.1 DTDs and Schemas are fully backwards compatible with the latest + DITA 1.0.1 DTDs and Schemas, the 1.3 Toolkit provides the proposed 1.1 materials as the + default DTDs for processing. The XML Catalog resolution maps any references for DITA 1.0 + doctypes to the 1.1 DTDs, for example. All processing ordinarily dependent on the 1.0 + definition continues to work as usual, and any documents that make use of the newer + 1.1-based elements or attributes will be supported with specific new processing function + (such as base support for the new <data> element). Documents created with the + proposed OASIS DITA 1.1 DTDs are the only ones ever likely to have features that + invoke the specific new 1.1-based processing support.Because this support is based on a yet-to-be-approved version of the proposed OASIS + DITA 1.1 specification, if you choose to investigate any1.1-based function, be aware + that the 1.1 implementation in this version of the Toolkit is preliminary and very + much forward-looking. Upon final approval of the DITA 1.1 standard, Toolkit developers + will, of course, review our implementation to make certain that it conforms to the + defined level of reference implementation.
    2. Related to the DITA 1.1 preliminary implementation, the much-discussed bookmap updates + for DITA 1.1 will be provided as override capabilities for the FO plugin (Idiom's + donation). Note that:
      • The FO demo transform code at the 1.2.2 level is still included in the DITA 1.3 + package, but is now deprecated.
      • To get the FO updates for 1.3, grab the FO plug-in at its next update, which + should be shortly after the 1.3 core Toolkit code is released.
      • The updated FO plug-in will be usable with FOP as well as with XEP.
    +
    + Changes +

    The DITA Open Toolkit team understands the need for stability in essential APIs in the + Toolit. This verson of the toolkit provides some strategic updates that correct some + long-overdue faults in the original implementation. Necessarily, there are some changes to + note:

    +
    1. Change to build.xml: To make the DITA processing environment more like other + Ant-driven build environments, the original build.xml has been renamed as + build_demo.xml. The current build.xml in this release is now the normal ANT script + entrance for starting a transformation. If you have created Ant tasks that tried to work + around the former build.xml architecture, those might need to be revised to take + advantage of the separated function.
    2. Change to command line invocations: The "Ant refactoring" exercise + for this release has changed some previously documented Ant calls for running demos. + This change enables better use of the Ant modules for power users who need to integrate + the Toolkit into programming build environments such as Eclipse, but the change affects + some documentation. This is a permanent change that should remain stable from now on. + Wherever you see an older instruction like "c:\dita-ot>ant all", you now + need to indicate the component that contains the demos, so you would type + "c:\dita-ot>ant all -f build_demo.xml".
    3. Separation of demo targets from formal component targets: Another effect of the + Ant refactoring is that the internal programming targets will now be displayed when you + type "ant -p". To see both those programmings targets and the demos that are + part of this component, type "c:\dita-ot>ant -p -f build_demo.xml". To run + just one of the demos that you see in the resulting list, dita.faq for example, type + "c:\dita-ot>ant dita.faq -f build_demo.xml".
    4. Classpath update to enable catalog resolver: This release now includes the + Apache catalog resolver for improved lookup of DTDs by any of the Toolkit components. + The fullpackage version of the Toolkit sets up these variables for each session. For the + regular (smaller) version of the Toolkit, you need to include lib and + lib\resource\resolver.jar into your classpath. For example if your CLASSPATH is like: +
      c:\dita-ot\lib\dost.jar

      you need to change it to: +

      c:\dita-ot\lib;c:\dita-ot\lib\dost.jar;c:\dita-ot\lib\resolver.jar

      At + any time, the full version can be used like a normal installation as long as you + update the system variables either in the evironment settings or in a batch file that + sets up the shell environment.

    5. License bundling: To reduce the duplication of builds on Sourceforge in which + the only difference was the license provided in each, both the Apache and CPL licenses + are included in root directory of the Toolkit. Use the one that applies to your + situation.
    6. Two install options: Two download versions are now offered. The smaller one is + for updating existing installations or for reuse in embedded applications that already + provide the other processing components--business as usual. A new package with + "fullpackage" in the name now incorporates the essential processing modules to + create a processing environment for new users and evaluators that requires nothing more + than to unzip the file into an appropriate directory and then click on a + "start" batch file. A new document in its root directory (an output of + doc/EvaluateOT.dita, Evaluating the DITA Open Toolkit (fullpackage version)) + informs new users how to install and use the Toolkit for the first time.
    7. Other enhancements: The public design discussions that fed into the final + selection and architectures for this release are documented at the DITA Focus Area in a + topic called DITA OT 1.3 Issues tracking (http://dita.xml.org/node/1282).
    +
    + 7 Improvements +
    1. Preliminary support for OASIS DITA 1.1
    2. Support ICU in index sorting
    3. Integrate with Eclipse
    4. Refactor Ant script for easy override
    5. Topicmerge reimplementation in JAVA
    6. Enable XML Catalog Resolver
    7. Full package distribution (was GUI/usability)
    +
    + 21 SourceForge Bugs Fixed +
    1. SF Bug 1582506 Docbook cannot handle <author>
    2. SF Bug 1548189 Sections should not jump to <h4> for Accessibility reasons
    3. SF Bug 1548180 Spaces dropped from index terms
    4. SF Bug 1548154 XHTML index links should go to the topic
    5. SF Bug 1545038 CommandLineInvoker is unfriendly towards spaces
    6. SF Bug 1541055 topicref @id incorrectly uses NMTOKEN type
    7. SF Bug 1530443 dost.jar relies on the incorrect behavior of Xerces
    8. SF Bug 1473029 Syntax code makes overrides difficult
    9. SF Bug 1470101 Metadata in topics is left out of XHTML headers
    10. SF Bug 1470077 Choicetable headers create attribute inside attribute
    11. SF Bug 1470057 Step template creates attributes after creating tags
    12. SF Bug 1465947 <topichead> without children the whole branch to disappear
    13. SF Bug 1465941 Keywords defined in map are ignored if <topicref> contains t
    14. SF Bug 1465866 Problems in catalog-dita.txt
    15. SF Bug 1460447 <morerows> not well supported in pdf tranformation.
    16. SF Bug 1457187 'copy-to' doesn't actually copy files
    17. SF Bug 1454835 OT renders files referenced via conref only
    18. SF Bug 1427808 Should be easier to modify link attributes in XHTML
    19. SF Bug 1422182 @colname renaming needs to apply to @namest and @nameend
    20. SF Bug 1417820 fo and docbook outputs can\'t handle deep topic dirs
    21. SF Bug 1368997 PDF Vertical list of author redundancy
    +
    + 1 SourceForge Patch Added +
    1. SF Patch 1503296 Refactor of HTMLHelp inifiles creation
    +
    + 1 SourceForge RFE Added +
    1. SF RFE 1160960 Enh: Toolkit should work with both both *.dita and *.xml
    +
    SourceForge bugs, patches, and RFEs listed above can be found in SourceForge Bugs, + Patches, and RFE tracker pagesBugs trackerPatches trackerRFE tracker
    \ No newline at end of file diff --git a/release-notes/rel1.4.1.dita b/release-notes/rel1.4.1.dita new file mode 100644 index 0000000..8cc0f67 --- /dev/null +++ b/release-notes/rel1.4.1.dita @@ -0,0 +1,15 @@ + + +DITA OT release 1.4.1Release 1.4.1 is a maintenance release to fix defects and make patches based on + release 1.4.
    + 23 SF Bugs Fixed +
    1. 1833801 Infinite loop in MapMetaReader
    2. 1833796 move-meta-entries creates invalid XML
    3. 1827055 Dita 1.4 move metadata method failing
    4. 1819663 XHTML processing add &nbsp; in output files.
    5. 1815155 Using xref moves output directory
    6. 1807808 Java TopicMerge calling XSLT transformer with URL not file
    7. 1806728 Merge doesn't normalize filenames
    8. 1806130 chunk module wraps long lines
    9. 1806081 <dita> without class attribute triggers warning
    10. 1803190 XHTML: processing <xref> to <a title="">
    11. 1803183 XHTML: <b> and <xref> within <pre>
    12. 1796207 topicmeta in ditamap causes build failure
    13. 1782109 Title input to Help Compiler invalid for taskbook example
    14. 1779066 [DOTX031E] Errors
    15. 1770571 Chunk "to-content" on map not implemented
    16. 1732678 Map without DOCTYPE declaration produces odd error
    17. 1675195 No Error Location for Titleless Topic
    18. 1639672 The Toolkit does not properly support valid xml:lang values.
    19. 1639344 Xref : topicpull : the spectitle not used as linktext
    20. 1628937 Rename supportingboth.ditaand.xmlinaditamap.dita
    21. 1584187 Bookmap 1.1: <title> element breaks topicmerge
    22. 1563093 Difficult to find location of error
    23. 1505172 foimgext Considered Harmful
    +
    + 5 SF Patches Added +
    1. 1741302 Prevent indexterm crash with two-letter language codes
    2. 1630214 HTML Help HHP generator: Language tag
    3. 1498936 Failure when moving links with embedded mathml
    4. 1481586 CSS for ditamap-to-HTML TOC
    5. 1457541 xref to elements fails within topics in PDF
    +
    + 5 SF RFE Added +
    1. 1764910 Allow greater control over the output directory
    2. 1764905 Allow option to build only topics listed in the map
    3. 1725280 Improve error reporting in general
    4. 1686939 Make dita.list into an XML file
    5. 1676947 Integration points for passing params to XSL
    +
    SourceForge bugs, patches, and RFEs listed above can be found in SourceForge Bugs, + Patches, and RFE tracker pagesBugs trackerPatches trackerRFE tracker
    \ No newline at end of file diff --git a/release-notes/rel1.4.2.1.dita b/release-notes/rel1.4.2.1.dita new file mode 100644 index 0000000..66201e4 --- /dev/null +++ b/release-notes/rel1.4.2.1.dita @@ -0,0 +1,10 @@ + + +DITA OT release 1.4.2.1Release 1.4.2.1 is a full build to provide an urgent fix to fix the following + critical problem which users found in release 1.4.2.
    + SF Bugs Fixed +
    1. SF Bug 1956231 OSGI Manifest for eclipsehelp transtype contains spaces.
    +

    For this fix, we have updated xsl/map2pluginImpl.xsl to prevent generating extra spaces + at the head of every line in OSGI manifest file of eclipse help output.

    +
    \ No newline at end of file diff --git a/release-notes/rel1.4.2.dita b/release-notes/rel1.4.2.dita new file mode 100644 index 0000000..da12d3a --- /dev/null +++ b/release-notes/rel1.4.2.dita @@ -0,0 +1,22 @@ + + +DITA OT release 1.4.2Release 1.4.2 is a maintenance release to fix defects and make patches based on + release 1.4.1.
    +

    Release 1.4.2 comes in three versions:

    +
    1. Minimal package contains only the core processing code.
    2. Standard package contains the core processing code, plus demos, documentation, and + samples.
    3. Full "easy install" package contains the standard package plus external libraries + useful for many toolkit processes (such as Xalan and ANT), plus a batch file to setup a + local environment.
    +
    + 39 SF Bugs Fixed +
    1. 1945824 Index-see works for "ru-ru" but not for "ru"
    2. 1944245 Null pointer error with complex filename
    3. 1923519 Conrefs in nested, conreffed topics don't work
    4. 1911285 files.txt is not up-to-date
    5. 1906954 Constants.ANT_INVOKER_EXT_PARAM_OUTPUTDIR resulted in null ...
    6. 1903830 Error when collection-type=sequence in map
    7. 1903626 Topicref to Glossentry With Topicmeta Throws Null Pointer
    8. 1900907 Documentation of generateouter command-line param is incorrect
    9. 1900427 TIFF file format not a supported type
    10. 1898810 Problem running ant with DITA-OT in path with Latin char
    11. 1897358 Compiling CHM's in sequence results in errant index entries
    12. 1894561 wordrtf not correctly handling p inside li
    13. 1893234 Java TopicMerge removes processing instruction
    14. 1868423 Null pointer exception when a PI is at the end of the file
    15. 1857405 chunk processing fails when no section element
    16. 1855047 startup.sh fails under OS X
    17. 1849346 FO file generated from DITA MAP not valid
    18. 1843652 Image referenced in map is not found, topicmerge breaks
    19. 1843583 Extra bullet in TOC for topicref with no href or navtitle
    20. 1839765 index-sort-as not used, content appears in index
    21. 1908306 Index entry for external resource is ignored
    22. 1908293 HTML Help index contains extra anchor
    23. 1900916 Pointer to CSS is Incorrect in index.html
    24. 1898451 HTML titles should be space-normalized for CHM consumption
    25. 1898228 Table desc not being processed
    26. 1897551 maplink is unawareof chunk to-content
    27. 1893461 map file href handling
    28. 1889918 Index link goes with wrong entry
    29. 1883907 IndexTermReader class doesn't handle specialized titles
    30. 1873401 XHTML: colsep in last column when @frame=none
    31. 1872434 _merge.xml missing metadata
    32. 1868047 htmlhelp path in demo ant script is fixed
    33. 1864247 PIs missing from ditamaps in temp dir
    34. 1857282 path to css output is not correct
    35. 1848355 gen-list wants class on <foreign> descendants
    36. 1843693 Bad XREF syntax gives confusing message about unique_193
    37. 1841175 Need to clean up doc/ directory (remove invalid items)
    38. 1832800 Empty end-range indexterm causes eclipse error
    39. 1606387 Shortdesc & Abstract formatting is incorrect for XHTML
    +
    + 3 SF Patches Added +
    1. 1930220 Simplify flag templates
    2. 1876118 Add plug-in support for string resource-files
    3. 1818318 Path to HTML Help compiler on x64 Windows
    +
    + 6 SF Enhancements Added +
    1. 1855523 Pass dost.class.path to XSLT tasks
    2. 1827322 Let plugins add their own template files
    3. 1825843 Let plugins add dependencies to Ant targets
    4. 1824466 Subclass ImportAction
    5. 1782256 Let plugins not have to choose to go in "demo" or "plugins"
    6. 1859421 Add plug-in support for string resource-files
    + +
    SourceForge bugs, patches, and RFEs listed above can be found in SourceForge Bugs, + Patches, and RFE tracker pagesBugs trackerPatches trackerRFE tracker
    \ No newline at end of file diff --git a/release-notes/rel1.4.3.dita b/release-notes/rel1.4.3.dita new file mode 100644 index 0000000..fb71aa7 --- /dev/null +++ b/release-notes/rel1.4.3.dita @@ -0,0 +1,27 @@ + + +DITA OT release 1.4.3Release 1.4.3 is a maintenance release and is intended to be the last released based + fully on DITA 1.1.
    +

    It contains a significant amount of preview function for the upcoming DITA 1.2 standard, + but the DITA 1.2 document types must be specifically referenced in order to use this + capability.

    +
    + Major Updates +
    1. The PDF codebase switched from the older deprecated code to the plugin previously + known as PDF2. Running a build with the transform type PDF or PDF2 will now run the new + code. To continue using the older code, set your transform type to "legacypdf".
    2. The PDF plugin now runs with FOP, as well as with the latest version of Saxon.
    3. The Full Easy Install package now ships with Saxon 9B instead of with Xalan, and code + in the DITA-OT package has been updated to work with Saxon 9B.
    4. The Full Easy Install package updates the versions of many open source libraries + (including Ant and FOP)
    5. RFE 1982567 Allow spaces in DITA file names
    6. Preview function for the majority of the upcoming OASIS DITA 1.2 standard, including + everything from milestone builds one through twelve of DITA-OT 1.5
    +
    + 10 SF Enhancements Added +
    1. 1982567 Allow spaces in DITA file names
    2. 2631145 dita2htmlImpl.xsl should not define doctype
    3. 2562718 Rename the ant directory to avoid naming collisions with ant
    4. 2314086 Let maplink generate <linklist> elements
    5. 2258659 Extend integrator to allow addition of messages.
    6. 2117337 Customize Integrator to integrate custom directories
    7. 2074933 Make index output for new transtypes more extensible
    8. 1995667 Add plugin extension points to preprocess pipeline
    9. 1972537 Let users specify reloadstylesheet on xslt tasks
    10. 1803199 Allow ability to include class ancestry in XHTML class attribute
    +
    + 4 SourceForge Patches Added +
    1. 1996733 Structure Ant <pipeline> better
    2. 1796007 Refactor of related links HTML for specialized processing
    3. 1947566 pdf2: allow XEP to be installed elsewhere
    4. 2477370 Refactor of conrefImpl.xsl
    +
    + 31 SF Bugs Fixed +
    1. 2008294 End flag does not work in ditaval
    2. 2078563 Keyref not working for external links
    3. 2027170 maprefImpl.xsl removes part of class attr from topichead
    4. 2027058 Topichead element stops map processing in ChunkMapReader
    5. 2001268 DITA-OT documentation wants JDK 1.4
    6. 2008317 Chunking one topic from a large file hogs memory
    7. 2219479 <prodinfo> subelement associations are lost in HTML output
    8. 2340727 No link in TOC to topics in ditabase
    9. 2317627 Chunking map to create one file should use map file name
    10. 2143078 Relcolwidth not respected in choicetable
    11. 1995223 bookmap: bookmeta->bookrights information is not generated
    12. 1990167 reltable doesn't generate external links correctly
    13. 1953553 FO 1.4.2 plugin: Inconsistent display of "on page" in xref
    14. 1951879 Link generation is disabled for bookmaps
    15. 1997171 topic body suppressed in chapter topics
    16. 2417980 Toolkit should support both versions of Serbian lang code
    17. 1947817 Extra topics appear in PDF output when using reltables
    18. 2004588 Image alt text needs space normalized
    19. 1954463 Conditional processing multiple PDFs in the same JVM
    20. 2061301 Useless import of xslt4j stops dost.jar being built
    21. 2317659 Chunking "by-topic" does not work
    22. 1955211 Footnotes-by-reference rendered naively
    23. 2010062 Spaces dropped in indexterm that has keyword
    24. 2607496 USEINDEX=no breaks HTML Help HHP
    25. 2570118 <xref> without href drops content
    26. 2414891 Map contains wrong reference after chunking
    27. 2010092 example or section title can be orphaned in PDF2
    28. 1999117 Ubuntu 8.04 | startcmd.sh doesn't work
    29. 2020317 Many duplicated id in xxx_MERGED.xml in PDF2 output.
    30. 2614006 Conref processing ignores -dita-use-conref-target
    31. 1727863 <groupchoice> has an extra "|" character
    +
    SourceForge bugs, patches, and RFEs listed above can be found in SourceForge Bugs, + Patches, and RFE tracker pagesBugs trackerPatches trackerRFE tracker
    \ No newline at end of file diff --git a/release-notes/rel1.4.dita b/release-notes/rel1.4.dita new file mode 100644 index 0000000..6ba2eff --- /dev/null +++ b/release-notes/rel1.4.dita @@ -0,0 +1,43 @@ + + +DITA OT release 1.4Release 1.4 is a major release to add new functions, fulfill new + requirements, make some function enhancements and fix bugs over release 1.3.1. + Available since August 1, 2007
    +

    The DITA-OT Release 1.4 contains full support for the OASIS DITA 1.1 standard. This + completes the preliminary support added in the 1.3 and 1.3.1 versions of the toolkit. New + and improved items for 1.1 are listed under [Improvements] below. Support for the new + bookmap standard is available in the latest version of the FO plug-in, which uses the + "pdf2" transform type; it will be released together with or soon after the release of + DITA-OT 1.4. The deprecated "pdf" transform type has not been updated for the new bookmap. + Together with DITA 1.1 support, the toolkit development team has improved error reporting + so that build failures are more accurately reported at the end of the build. Error + handling will continue to improve in future releases. Release 1.4 comes in two versions. + The full version contains several external packages that are useful or critical to running + the toolkit, such as Xalan and the XML Catalog resolver. The smaller package contains only + core toolkit code. NOTE ABOUT DEPRECATED CODE: changes for the new DITAVAL standard + required a change to code in dita2htmlImpl.xsl. The "flagit" named template is deprecated + and will not work with the new ditaval format. Overrides to this step should be updated to + use "start-flagit" and "end-flagit". The flagit template will continue to work with the + old ditaval but will generate a warning for each call.

    +
    + Changes +
    1. +

      Release 1.4 improves the processing of DITA documents using XML Schemas. One was able + to process these type of documents in Release 1.3.1 but it meant that the schema + location had to have the ablsolute location of the schema in order for the Toolkit + properly.

      +

      DITA 1.1 introduces the use of URNs to normatively identify the schemas used for + validation. The URNs have the following desing pattern + "urn:oasis:names:tc:dita:xsd:<schemaDocument>:1.1". You should use these in as + the value for the attribute xsi:noNamespaceSchemaLocation.

      +
    +
    + 13 Improvements +
    1. Support <title> in map
    2. Ignore Index-base in default processing
    3. Retrieve the link text from abstract element.
    4. Format shortdesc in abstract appropriately
    5. Add standard code to allow overrides to easily process generalized version of unknown + and foreign element
    6. Support @dir on every element
    7. Refactor mapref resolution
    8. Support generalization and re-specialization of unknown/foreign elements
    9. Replace Move Index module with new Move Metadata module
    10. New DITAVAL standard support
    11. New chunk attribute support
    12. Support XML Schema validated instance document processing using XML Catalogs
    +
    + 17 SF Bugs Fixed +
    1. 1700561 Null Pointer Exception on Missing domain= Attribute
    2. 1733264 pretty.xsl is broken
    3. 1619074 table in step screws up following steps for HTML generation
    4. 1728700 GenMapAndTopicList keeps filtering when called a second time
    5. 1732562 DitaWriter.java can duplicate @xtrf and @xtrc
    6. 1733108 Update Bookmap sample files to DITA 1.1
    7. 1706263 Conrefing from a map to topic is not working properly
    8. 1677620 Non-DITA file is treated as DITA in pre-process
    9. 1717471 Links show up more than once
    10. 1712543 gen-list-without-flagging : NullPointerException
    11. 1652892 Invalid hdr/ftr arg value causes build failure
    12. 1647950 PIs in DITA source are dropped in the processing pipeline
    13. 1644559 Force Toolkit to use private catalog to allow schemas to work properly
    14. 1642138 Move javamerge target out of build_template.xml
    15. 1643155 Map TOC is HTML even for transtype="xhtml"
    16. 1637564 topicpull breaks specializations of xref
    17. 1676968 Plugins adding to classpath break when basedir != dita.dir
    +
    SourceForge bugs, patches, and RFEs listed above can be found in SourceForge Bugs, + Patches, and RFE tracker pagesBugs trackerPatches trackerRFE tracker
    \ No newline at end of file diff --git a/release-notes/rel1.5.1.dita b/release-notes/rel1.5.1.dita new file mode 100644 index 0000000..fb9bcf7 --- /dev/null +++ b/release-notes/rel1.5.1.dita @@ -0,0 +1,43 @@ + + +DITA OT Release 1.5.1Release 1.5.1 is a maintenance release based on Committee Draft 01 of the DITA 1.2 + standard.
    +
    • Release date: June 18, 2010
    • Supports: DITA 1.0 through 1.2 (Committee Draft 02 level)
    • Download at: DITA-OT Latest Stable Build
    • Which package is for me? See DITA-OT + Packages.
    +

    This is the same version of the standard used for the DITA 1.2 Public Review. Release + 1.5.1 contains many fixes and minor enhancements. It also includes a preview of a new + output transform to the Open Document Format; this transform will be completed in a later + release.

    +

    Release 1.5.1 was developed using a series of test builds released to the community every + three weeks. Each item in the list below indicates which test build first contained the + update. There were seven total test builds.

    +
    + General Enhancements +
    1. Update to latest copy of DITA 1.2 Draft DTDs and Schemas (last update in Milestone + 5)
    +
    + 14 SourceForge Enhancements Added +
    1. 2797337 Support for ODF output transform (first prototype available in Milestone 2, + further updates in each milestone)
    2. 2703335 Reduce duplicated code in XHTML <note> processing (Milestone 3)
    3. 2976463 Provide finer grained control of links in PDF (include reltable and in-topic + links, without parent/child links) (Milestone 4)
    4. 2971536 New Java options for existing Ant parameters (Milestone 4)
    5. 2979084 Obey the "args.draft" parameter (Milestone 5)
    6. 2990783 allow caller-provided IndexTermCollection (Milestone 6 contains the core code + updates; M7 contains the full enhancement)
    7. 3001750 Shortdesc from map should override link description in PDF (Milestone 7)
    8. 3004305 Notes with type="warning" need styling / localization in XHTML (Milestone + 7)
    9. 3004859 "eclipsecontent" transform should drop debug info (Milestone 7)
    10. 2892706 Don't delete the FO file (new option to preserve topic.fo) (Milestone 7)
    11. 2928584 Add general model for end-of-topic processing in PDF (Milestone 7)
    12. 3006675 Support new DITA 1.2 <stepsection> element in PDF (Milestone 7)
    13. 3006847 Add generated task headers to PDF (using the option that works for XHTML in + DITA-OT 1.5) (Milestone 7)
    14. 2987769 Add support for Eclipse Help index redirects (Milestone 7)
    +
    + 2 SourceForge Patches Added +
    1. 2914475 Use Xerces Grammar Pool to Improve Performance (Milestone 1)
    2. 2991688 Refine package build Ant (Milestone 6)
    +
    + 46 SourceForge Bugs Fixed +
    1. 2916469 @locktitle not respected by preprocessor (Milestone 1)
    2. 2917809 need empty lib/saxon directory for minimum and standard pkg. (Milestone + 1)
    3. 2925636 Build fails when excluded section contains a table (Milestone 1)
    4. 2926417 Absolute file: URLs are not resolved. (Milestone 1)
    5. 2930109 Move meta module pushes content into peer topic. (Milestone 1)
    6. 1852808 args.css requires dummy file. (Milestone 1)
    7. 2952956 Imagemap processing drops outputclass from image (Milestone 3)
    8. 2953706 Minor improvements to "garage" samples (Milestone 3)
    9. 2961909 /onlytopicinmap does not respect conref (Milestone 3)
    10. 2957456 conkeyref breaks when topic is in subdir (Milestone 3)
    11. 2962813 stepsection throws off numbering in links to steps (Milestone 3)
    12. 2959588 Template Processor Doesn't handle XSLT atts that require ' (Milestone 3)
    13. 2914574 plus-htmlhelp-alias-map: using same extension point twice (Milestone 3)
    14. 2957938 coderef not working everytime (Milestone 3)
    15. 2962781 html documentation out of date (Milestone 3)
    16. 2952956 refactored XSL code in ut-d.xsl (Milestone 3)
    17. 2954819 NullPointer while processing simple BookMap (Milestone 3)
    18. 2954154 Updated default version from 1.0 to 1.0.0 (Milestone 3)
    19. 2970471 XSLFO test for @compact wrong (Milestone 4 for PDF, Milestone 5 for + LegacyPDF)
    20. 2972043 Setting onlytopicinmap causes a blank imagelist (Milestone 4)
    21. 2974667 Integrator adds spaces into XML Catalog entries (Milestone 4)
    22. 2986492 Duplicate parameter in XHTML code (Milestone 5)
    23. 2982485 Cannot read a document that was written during the same transform (Milestone + 5)
    24. 2981216 <tm> @tmclass requires IBM-specific values (Milestone 5)
    25. 2979361 Java stack traces in OT log (Milestone 5)
    26. 2979328 Output parameters info at INFO level (Milestone 5)
    27. 2978858 keyref processing doesn't respect basedir (Milestone 5)
    28. 2990162 Conref to elements in same DITA file throw parsing errors (Milestone 6)
    29. 3000677 msgph and systemoutput should use <samp> instead of <tt> (Milestone + 7)
    30. 3004220 <tm> elements dropped when keyref text resolved (Milestone 7)
    31. 2987322 Navtitle attribute of glossarylist breaks PDF (Milestone 7)
    32. 2916474 Inappropriate match on mapgroup/topichead in PDF code (Milestone 7)
    33. 2916408 Topichead with <navtitle> not processed same as @navtitle in PDF (Milestone + 7)
    34. 3006443 CSS for prereq links indents prereq element (Milestone 7)
    35. 2607892 (Plus Plug-in) plus-allhtml-encoding: map x-windows-950 to Big5 (Milestone + 7)
    36. 2385466 Handle @font-family="inherit" (Milestone 7)
    37. 2928540 Shortdesc should align with body in PDF (use topic__shortdesc) (Milestone + 7)
    38. 1839827 PDF does not properly process <xref> to <li> elements (Milestone 7)
    39. 2521819 PDF topic title widowed due to fo:marker placed in separate block (Milestone + 7)
    40. 1385654 docbook/topic2db.xsl - better linking support (Milestone 7)
    41. 3004550 Conkeyref does not work if key referenced is not in same folder (Milestone + 7)
    42. 3004060 keyref/id not producing link in PDF output (Milestone 7)
    43. 3001705 conkeyref doesn't work across ditamaps (Milestone 7)
    44. 3000604 Legacy PDF: empty @column-number causes errors (Milestone 7)
    45. 3013079 Keyref handling does not respect scope="external" (Final build)
    46. 3005748 XHTML: Topics w/ @print set to "printonly" are included (Final build)
    +
    SourceForge bugs, patches, and RFEs listed above can be found in SourceForge Bugs, + Patches, and RFE tracker pagesBugs trackerPatches trackerRFE tracker
    \ No newline at end of file diff --git a/release-notes/rel1.5.2.dita b/release-notes/rel1.5.2.dita new file mode 100644 index 0000000..8e43ded --- /dev/null +++ b/release-notes/rel1.5.2.dita @@ -0,0 +1,34 @@ + + +DITA Open Toolkit Release 1.5.2Release 1.5.2 is a maintenance release based on the final version of the DITA 1.2 + standard.DITA Open Toolkit
    +
    • Release date: December 10, 2010
    • Supports: DITA 1.0 through 1.2
    • Download at: DITA-OT Latest Stable Build
    • Which package is for me? See DITA-OT + Packages.
    +

    In addition to tweaks to match late changes in the standard, version 1.5.2 contains many + enhancements, user patches, bug fixes, and significant updates to the documentation.

    +

    Release 1.5.2 was developed using a series of test builds released to the community every + three weeks. Each item in the list below indicates which test build first contained the + update. The eighth build was the final build, released as the DITA-OT 1.5.2 final stable + build.

    +
    + General Enhancements +
    1. Include final version of DITA 1.2 schemas and DTDs
    2. Minor updates to DITA 1.2 support added in earlier releases, to ensure compliance with + the final standard
    3. Overhaul of documentation to remove outdated material
    4. Reorganization of doc directory to highlight new and important info
    +
    + 11 SourceForge Enhancements Added + +
    1. 2797337 Support for ODF output transform (Prototype added in version 1.5.1, updates in + each 1.5.2 Milestone, transform complete in Milestone 7)
    2. 3021544 Preserve DITA elements in XHTML class by default (Milestone 1)
    3. 3019853 Create new "textonly" output method for use by any transform (Milestone 1)
    4. 3012392 PDF transformation should allow args.xsl style override (Milestone 1)
    5. 2882123 Add Ant Quick Start Guide to DITA-OT (Updated in each Milestone after 3)
    6. 3086936 Add extension points for TOC output (Eclipse TOC, HTML Help TOC and Project, + HTML TOC) (Milestone 6)
    7. 3079610 Add current OT version to log (Milestone 6)
    8. 1520909 HTML Help requires appropriate codepage (Milestone 6)
    9. 3125994 Allow PDF index conf. to be overridden in Customization (Milestone 7)
    10. 3125983 Create a basic glossary implementation for PDF (Milestone 7)
    11. 3109395 Add parameter for Eclipse symbolic name (Milestone 8)
    +
    + SourceForge Patches Added +
    1. 3058008 Refactor chunk module for cleaner code (Milestone 4)
    2. 3067681 Add class to ordered child links (Milestone 5)
    3. 3064412 Integrator fails to escape XML correctly (Milestone 5)
    4. 3062765 Fix unit test file paths to be platform dependent (Milestone 5)
    5. 2949860 PDF build.xml with args for JVM memory and architecture (Milestone 6)
    6. 3077935 Plug-in ignore in Integrator (Milestone 6)
    7. 3065050 Common logging interface (Milestone 6)
    8. 3063318 ChunkModule refactoring (Milestone 6)
    9. 3061100 Define AbstractPipelineInput's function (Milestone 6)
    10. 3102905 Move supported image extensions to configuration file (Milestone 7)
    11. 3097518 Show effective property values (Milestone 8)
    12. 3101335 apiMap.mod missing from catalog (Milestone 8)
    +
    + SourceForge Bugs Fixed +
    1. 2928582 commonTopicProcessing template prolog processing out of order (Milestone 1)
    2. 2823221 version of Xalan-J inconsistent (Milestone 1)
    3. 3023642 Invalid @colname generated in nested table (Milestone 1)
    4. 3016739 Chunking mixes up <link> to topic in reltable (Milestone 1)
    5. 3020314 Chunk output includes index terms in navtitles (Milestone 1)
    6. 3020313 Chunk processor adds <topicref> before <topicmeta> (Milestone 1)
    7. 3031513 Nested table processing in pdf2 (Milestone 2)
    8. 3030317 Filtering doesn't work on @rev or @props attributes (Milestone 2)
    9. 3028650 Replace xs:float with xs:double in Plus plugins (Milestone 2)
    10. 3022847 PDF transform gives Java exceptions for spaces in dir name (Milestone 2)
    11. 3032950 Scale is not correctly computed in XHTML transforms (Milestone 2)
    12. 3033141 dita.xml.properties file not closed after generating (Milestone 2)
    13. 3034445 "CURRENDIR" typo in plus-plugins ( Checked in to CVS during Milestone 3)
    14. 3034489 Remove all occurrences of <xmlcatalog> from plus-plugins ( Checked in to + CVS during Milestone 3)
    15. 3035816 When creating .chm, .hhp-file is missing a line-break (Milestone 3)
    16. 3036222 RTF transform not editable with Word 2007 (Milestone 3)
    17. 3036985 Infinite recursivity in replaceString template (Milestone 3)
    18. 3038941 Link with &amp; breaks in abstract (Milestone 3)
    19. 3039017 Comments in PDF plugin files are confusing (Milestone 3)
    20. 3058124 Toolkit Allows Unescaped URLs, doesn't handle escaped ones (Milestone 4)
    21. 3056939 Conref of keyref-based xref results in xref with no href (Milestone 4)
    22. 3052913 Multiple levels of keyref in map not resolved (Milestone 4)
    23. 3052904 Keydef with no href causes hard failure (Milestone 4)
    24. 3052156 Object with data that starts with slash breaks image copying (Milestone 4)
    25. 3044861 Inappropriate warning for resource-only topic to graphic (Milestone 4)
    26. 3042978 @copy-to and @chunk on topichead gives file not found (Milestone 4)
    27. 3016994 The included-domains entity cannot be used in document (Milestone 4)
    28. 2994593 Transformation breaks when DITA Topics contain entity refs (Milestone 4)
    29. 3028894 no support for title in plugin.xml file (Milestone 4)
    30. 3065853 Indent from <title> gets displayed in TOC (PDF) (Milestone 5)
    31. 3065486 CURRENTFILE not aware of DITAEXT (Milestone 5)
    32. 3065422 Wrong filename and filedir parameters for eclipse xsl (Milestone 5)
    33. 3063533 Adjacent words get glued together using DITA to RTF (Milestone 5)
    34. 3062912 Messages extension damages custom message formatting (Milestone 5)
    35. 3059256 Peer links break with missing format or wrong extension (Milestone 5)
    36. 2972393 Need to parameterize maxmemory and VM args for forked JVMs (Milestone 6)
    37. 3060269 Problem displaying French content TOC in CHM output (Milestone 6)
    38. 3038412 zh-CN file for PDF puts English strings in output (partial fix) (Milestone 6)
    39. 3079676 <navtitle> contents included in PDF output (Updated so that <navtitle> + in a topic will only appear when the draft parameter is set to 'yes') (Milestone 6)
    40. 3004895 XHTML output for <draft-comment> should use class attribute (Milestone 6)
    41. 2794487 No Easy Way to Override/Extend HTML TOC Navtitle Generation (Milestone 6)
    42. 3088314 Need to clarify many error messages (Milestone 6)
    43. 3095233 Shortdesc metadata missing when using abstract (Milestone 6)
    44. 3081597 conkeyref accepts values in conref style (Milestone 6)
    45. 3081459 fragment generation without plugin fails (Milestone 6)
    46. 3073262 missing terminating quote in bundle version (Milestone 6)
    47. 2832863 <group> elements in catalogs don't work for all editors (Milestone 6)
    48. 3038933 Troff output drops prereq links (Milestone 7)
    49. 3098975 Disable Output Escaping Should Not Be Used (Milestone 7)
    50. 3102827 Allow a way to specify recognized image extensions (Milestone 7)
    51. 3102219 Unexpected character code in Japanese string definition (Milestone 7)
    52. 3101964 Unnecessary XML declaration in HHP and HHC (Milestone 7)
    53. 3095233 Shortdesc metadata missing when using abstract (Milestone 7)
    54. 3097409 PDF should skip empty columns in property tables (Milestone 7)
    55. 3090803 PDF fails when chunk specified and topic appears twice (Milestone 7)
    56. 3102845 Japanese character-set definition (Milestone 7)
    57. 3103488 Update Saxon command line args for IDIOM PDF build.xml (Milestone 7)
    58. 3026627 side-col-width variable has no effect (Milestone 7)
    59. 3126007 TOC entries not properly indented in PDF (Milestone 7)
    60. 3109616 Update PDF plug-in to check for latest Antenna House dirs (Milestone 8)
    61. 3056040 problematic Bundle-Version test in eclipseMap (Milestone 8)
    62. 3029074 Index file not generated by default for Eclipse Help (Milestone 8)
    63. 3086552 XMLReader.parse does not correctly receive the XML system ID (Milestone + 8)
    64. 3110418 Duplicate @colname generated for entry (Milestone 8)
    65. 3114353 Java sun.* packages should not be used (Milestone 8)
    +
    SourceForge bugs, patches, and RFEs listed above can be found in SourceForge Bugs, + Patches, and RFE tracker pagesBugs trackerPatches trackerRFE tracker
    \ No newline at end of file diff --git a/release-notes/rel1.5.3.dita b/release-notes/rel1.5.3.dita new file mode 100644 index 0000000..d3269c1 --- /dev/null +++ b/release-notes/rel1.5.3.dita @@ -0,0 +1,76 @@ + + +DITA Open Toolkit Release 1.5.3Release 1.5.3 is a maintenance release based on the final version of the DITA 1.2 + standard.
    +

    Version 1.5.3 contains many enhancements, user patches, bug fixes, and significant + updates to the documentation.

    + +

    Release 1.5.3 was developed using a series of test builds + released to the community every three weeks. Each item in the list + below indicates which test build first contained the update. The + eighth public build was the final build, released as the + DITA-OT 1.5.3 final stable build.

    +
    + General Enhancements and Changes +
    Base plug-ins

    In earlier releases of OT, configuration parameters were hardcoded into Ant files and + Java code. Starting from version 1.5.3 OT has externalized base configurations into base + plug-ins in plugins folder. Base plug-in identifiers and folder names start with + org.dita:

    +
    • org.dita.base
    • org.dita.docbook
    • org.dita.eclipsecontent
    • org.dita.eclipsehelp
    • org.dita.htmlhelp
    • org.dita.javahelp
    • org.dita.odt
    • org.dita.pdf
    • org.dita.troff
    • org.dita.wordrtf
    • org.dita.xhtml
    +

    For backwards compatibility, only configuration files were moved to plug-in folders, + the actual code and resource files were left in original locations.

    +

    Installations of OT may remove base plug-ins in order to remove funtionality, but the + org.dita.base plug-in must be retained as it contains + configuration for base functionality such as catalog files and preprocessing.

    Plug-ing configuration changes
    +

    The plug-in configuration file plugin.xml has support for new + syntax, where the old

    + <feature extension="foo" value="bar.xml" type="file"/> +

    can be written as

    + <feature extension="foo" file="bar.xml"/> +

    The new file attribute only supports a single file, not a comma + separated list like the value attribute.

    In previous releases multiple feature elements with the same + extension ID were not supported. In release 1.5.3 multiple definitions are combined, + thus

    + <feature extension="foo" value="bar,baz"/> +

    can also be written as

    + <feature extension="foo" value="bar"/> +<feature extension="foo" value="baz"/> +

    Plug-in extension points can be added with

    + <extension-point id="extension-id" name="human readable name"/> +

    Plug-ins should declare all extension points they support. In version 1.5.3 + undeclared extension points are supported, but a warning is thrown when running + integration in verbose mode. Support for undeclared extension points may be + removed in future releases.

    +
    PDF2 changes
    +

    Support for the format attribute in PDF2 variable files has been remove as + redundant. The same functionality as

    + <variable id="foo" format="bar">baz</variable> +

    can be implemented with e.g.

    + <variable id="foo.bar">baz</variable> +

    PDF2 no longer logs a warning about PDF2 plug-in replacing the legacy PDF + transformation type.

    +

    Support for flagging has been added.

    +

    Version of FOP that comes with Full Easy Install has been updated from 0.95 to + 1.0.

    +
    Filtering configuration

    List of transtypes which are considered to be print types has been moved to + integrator.properties with the property name + print_transtypes. In previous releases this list was hardcoded + into Java code. Configuring print transtypes is currently not possible in plug-in + configuration files.

    Java API changes
    +

    Multiple Java classes have been changed from public non-final into package-private + final. This enables clearer distinction between public and internal API, and forbits + subclassing classes which have not been designed and documented for + extensibility.

    +
    +
    + SourceForge Enhancements Added +
    1. 3177971 Improve plugin configuration file (Milestone 2)
    2. 3178275 Add xsl:import extension point to PDF2 topic merge XSL (Milestone 3)
    3. 3182113 Add common attribute processing to PDF2 plugin (Milestone 3)
    4. 3185914 Improve integration loggin (Milestone 3)
    5. 3189073 Plugin location should be available as Ant property (Milestone 3)
    6. 3126848 Repository cleanup (Milestone 3)
    7. 3204188 Support for defining extension point (Milestone 4)
    8. 3213163 Clean PDF2 build and integration scripts (Milestone 4)
    9. 3227387 Need extension to pass user param to dita.map.xhtml.toc targ (Milestone 4)
    10. 3231695 Use an XML serializer object for writing XML (Milestone 4)
    11. 3256796 Remove lecagy PDF code from xsl (Milestone 4)
    12. 3283638 Remove format attribute support from PDF2 vars (Milestone 5)
    13. 3285716 Clean up PDF2 build files (Milestone 5)
    14. 3286085 Add output and temp dir params to PDF2 (Milestone 5)
    15. 3293738 Use extensible pipeline task implementation (Milestone 6)
    16. 3271552 ${args.xsl.pdf} as an absolut path not supported (Milestone 6)
    17. 3033000 update to Apache FOP 1.0 release (Milestone 6)
    18. 3213324 Separate FOP/XEP/AXF stylesheets in PDF2 (Milestone 6)
    19. 3302779 Dependency extension points for PDF2 formatting (Milestone 7)
    20. 3304945 Allow setting local overrides with properties file (Milestone 7)
    21. 3190356 Pluginize DITA-OT base configuration files (Milestone 8)
    22. 3167087 Reduce static variable usage in Java code (Milestone 8)
    23. 3158929 Java clean-up (Milestone 8)
    24. 3194917 Change Java API to be more final and non-public (Milestone 8)
    25. 3197328 Refactor writers for cleaner XML serialization (Milestone 8)
    26. 3199755 Improve log integration (Milestone 8)
    27. 3296040 Refactor PDF2 build files (Milestone 8)
    28. 3306146 PDF2 stylesheet refactoring (Milestone 8)
    29. 3304447 Add support for selecting output format in PDF2 (Milestone 8)
    30. 3310476 Add plug-in ID and version syntax check (Milestone 8)
    31. 3309275 Warning reported by Apache FOP on any topic (Milestone 8)
    32. 3305843 Support list of tables/figures in PDF2 (Milestone 8)
    +
    + SourceForge Patches Added +
    1. 3123507 String concat in map2plugin (Milestone 1)
    2. 3110513 HTML XSLT uses complex casts (Milestone 1)
    3. 3097677 Add property to reload XHTML stylesheets (Milestone 1)
    4. 3106659 Added topicgroup elements to tocjs (Milestone 1)
    5. 3109051 RestoreEntity duplicates functionality (Milestone 1)
    6. 3107755 Configure templates with integrator properties (Milestone 1)
    7. 3142967 IndexTermReader leaves tab characters in terms (Milestone 1)
    8. 3140543 Add missing Commons Codec JAR into compile classpath for buildPackage.xml + (Milestone 1)
    9. 3087664 Clean plugin configuration parser (Milestone 1)
    10. 3145258 Plug-in integrator code clean-up (Milestone 2)
    11. 3147226 Use common directory layout for Junit (Milestone 2)
    12. 3062765 Fix unit test file paths to be platform dependent (Milestone 2)
    13. 3164523 Refactor platform Java code (Milestone 2)
    14. 3160801 Improve unit test coverage (Milestone 8)
    15. 3189026 Avoid strings where other types are more appropriate (Milestone 8)
    +
    + SourceForge Bugs Fixed +
    1. 3114411 keyref links don't work for HTML Help (Milestone 1)
    2. 3126578 Chunking Issues in DITA 1.5.1 (Milestone 1)
    3. 3109616 More Antenna House Path Problems (Milestone 1)
    4. 3155375 Incorrect way to specify recognized image extensions(Milestone 2)
    5. 3157890 Navtitle Construction Does not Preserve Markup (Milestone 2)
    6. 3155848 xml decl in ditaval file not closed properly (Milestone 2)
    7. 3162808 Chunking remaps in-file <xref> to invalid value (Milestone 2)
    8. 3164866 Upper letter estensions (Milestone 2)
    9. 3165307 Add boilerplate to Java files (Milestone 2)
    10. 2793836 CHM Index terms come out with extra spaces (Milestone 2)
    11. 3165762 Initializer XMLReader without modifying system variables (Milestone 2)
    12. 3175328 Imagemap alt text gets extra text (Milestone 2)
    13. 3085106 FO: topicmerge drops id on map/topicref without href. (Milestone 2)
    14. 3147328 Error in commons.xsl: getTopicrefShortdesc (Milestone 2)
    15. 3130724 Error in tables.xsl: fix-relcolwidth (Milestone 2)
    16. 3174906 Normalize Map and Bookmap titles for JavaHelp output (Milestone 3)
    17. 3178361 Conkeyref push fails when equivalent conref push succeeds (Milestone 3)
    18. 3180681 PDF2: Inconsistent template import / include. (Milestone 3)
    19. 3191701 Conref Push to Same File Fails (Milestone 3)
    20. 3191704 Push Replace Results in Pushed element Being removed (Milestone 3)
    21. 3189883 MapLinksReader should not be namespace aware (Milestone 3)
    22. 3164587 Warnings issued by Saxon 9.3.0.4 when publishing to PDF (Milestone 3)
    23. 3159001 Clean unit tests (Milestone 4)
    24. 3199985 @chunk : xrefs and links break (Milestone 4)
    25. 3206158 Inconsistent message DOTJ038W (Milestone 4)
    26. 3206373 Better handling of referenced SVG images (Milestone 4)
    27. 3279539 Out of memory error from move-meta module (Milestone 5)
    28. 3281108 Fallback to $locale when xml:lang value is wrong format (Milestone 5)
    29. 3286679 ODT output transform deletes too many files (Milestone 6)
    30. 3287609 Chunking rewrites image based on map directory (Milestone 6)
    31. 3288639 Conref code improperly generalizes map domain elements (Milestone 6)
    32. 3294295 PDF2 indexing and I18N fails with missing languages (Milestone 6)
    33. 3294864 tocjs-demo: tocjs.ditamap is referencing a missing file (Milestone 6)
    34. 3297930 PDF2: axf specific templates can't be overridden. (Milestone 7)
    35. 2001271 DITA-OT documentation wants Ant 1.6.5 (Milestone 8)
    36. 3136773 Incorrect version reported in log file (Milestone 8)
    37. 3260746 Topichead not processed the same as title-only topic (Milestone 8)
    38. 3315029 Garbled character problem in Japanese HTMLHelp (Milestone 8)
    39. 3308775 Keyref map in grandparent folder fails (Milestone 8)
    +
    \ No newline at end of file diff --git a/release-notes/rel1.5.4.dita b/release-notes/rel1.5.4.dita new file mode 100644 index 0000000..4099d10 --- /dev/null +++ b/release-notes/rel1.5.4.dita @@ -0,0 +1,203 @@ + + +DITA Open Toolkit Release 1.5.4General Enhancements and Changes
    + Configuration file for defaults +

    In previous versions, lib/configuration.properties was generated + by integration process. Integration has been changed to generate + lib/org.dita.dost.platform/plugin.properties and the role of the + old lib/configuration.properties has been changed to contain + defaults and configuration options, such as default language.

    +
    + Plug-in extension point for file extension configuration +

    New plug-in extension points have been added allow configuring DITA-OT behaviour based + on file extensions.

    + Extension pointDescriptionDefault valuesdita.topic.extensionDITA topic.dita, .xmldita.map.extensionsDITA map.ditamapdita.html.extensionsHTML file.html, .htmdita.resource.extensionsResource file.pdf, .swf

    Both HTML and resource file extensions are used to determine if a + file in source is copied to output.

    +

    New plug-in extension point has been added to allow declaring transtypes as print types.

    + Extension pointDescriptiondita.transtype.printDeclare transtype as a print type. +
    + Strict integration mode +

    Two modes have been added to integration process: lax and strict. In strict mode the + processing will fail if any errors are encountered. In lax mode an error message may be + thrown for an error and the integration process will try to run to the end, even if + there are errors that were unrecoverable. The default mode is lax.

    + In lax mode, even if the process runs to the end and reports a successful result, + DITA-OT may not be able to function correctly because of e.g. corrupted plug-in files or + unprocessed template files. +
    + Code reference charset support +

    Encoding of the code reference target file can be set using the format + attribute, for example

    + <coderef href="unicode.txt" format="txt; charset=UTF-8"/> +
    + Plugin URI scheme +

    Support for plugin URI scheme has been added to XSLT stylesheets. + Plug-ins can refer to files in other plug-ins without hard coding relative paths, for + example

    + <xsl:import href="plugin:org.dita.pdf2:xsl/fo/topic2fo_1.0.xsl"/> +
    + PDF +

    Support for mirrored page layout has been added. The default is the unmirrored + layout.

    +

    The args.bookmap-order property has been added to control how front + and back matter are processed in bookmaps. The default is to reorder the frontmatter + content as in previous releases.

    +

    A new extension point has been added to add mappings to the PDF configuration catalog + file.

    + Extension pointDescriptionorg.dita.pdf2.catalog.relativeConfiguration catalog includes. +

    Support for the following languages has been added:

    +
    • Finnish
    • Hebrew
    • Romanian
    • Russian
    • Swedish
    +

    PDF processing no longer copies images or generates XSL FO to output directory. + Instead, the temporary directory is used for all temporary files and source images are + read directly from source directory. The legacy processing model can be enabled by setting + org.dita.pdf2.use-out-temp to true in configuration + properties; support for the legacy processing model may be removed in future releases.

    +

    Support for FrameMaker index syntax has been disabled by default. To enable FrameMaker + index syntax, set org.dita.pdf2.index.frame-markup to true in + configuration properties.

    +

    A configuration option has been added to disable I18N font processing and use + stylesheet defined fonts. To disable I18N font processing, set + org.dita.pdf2.i18n.enabled to false in configuration + properties

    +
    + XHTML +

    Support for the following languages has been added:

    +
    • Indonesian
    • Kazakh
    • Malay
    +
    Migration from previous releases
    +

    To allow access to configuration files, the lib directory needs to + be added to Java classpath.

    +

    The print_transtypes property in integrator.properties has been deprecated in favor of dita.transtype.print plug-in extension point.

    +

    The dita.plugin.org.dita.*.dir properties have been changed to point + to DITA-OT base directory.

    +
    PDF

    Support for mirrored page layout was added and the following + XSLT configuration variables have been + deprecated:

    • page-margin-left
    • page-margin-right
    +

    The following variables should be used instead to control page margins:

    +
    • page-margin-outside
    • page-margin-inside
    +

    XSLT Parameters customizationDir and + fileProfilePrefix have been removed in favor of + customizationDir.url parameter.

    +

    A new shell stylesheet has been added for FOP and other shell stylesheets have also + been revised. Plug-ins which have their own shell stylesheets for PDF processing should + make sure all required stylesheets are imported.

    +

    Font family definitions in stylesheets have been changed from Sans, Serif, and + Monospaced to sans-serif, serif, and monospace, respectively. The I18N font processing + still uses the old logical names and aliases are used to map the new names to old ones.

    + + SourceForge trackers + +
    + Feature requests +
      +
    • 3333697 Add strict mode processing (Milestone 1)
    • +
    • 3336630 Add resource file extension configuration (Milestone 1)
    • +
    • 3323776 Base HTML stylesheets (Milestone 1)
    • +
    • 3355860 Enable defining code ref target encoding (Milestone 1)
    • +
    • 3393969 Make default TocJS output more usable (Milestone 3)
    • +
    • 3394708 cfg/catalog.xml should be an extension point (Milestone 4)
    • +
    • 3411030 Add args.fo.userconfig to PDF2 (Milestone 5)
    • +
    • 3411961 Change margin-* to space-* property (Milestone 5)
    • +
    • 3412144 Add FOP specific shell to PDF2 (Milestone 5)
    • +
    • 3413215 Add schemas for PDF2 configuration files (Milestone 5)
    • +
    • 3414416 Support bookmap order in PDF2 front and back matter (Milestone 5)
    • +
    • 3413933 Fix inconsistencies in PDF2 page headers (Milestone 5)
    • +
    • 3418877 Mechanism to refer to other plug-ins in XSLT (Milestone 5)
    • +
    • 3411476 Add extension point for print type declaration (Milestone 6)
    • +
    • 3392891 Copy the graphic files to the temporary folder (Milestone 6)
    • +
    • 3429290 Remove unused Apache Commons Logging JAR (Milestone 6)
    • +
    • 3434640 Add XHTML NLS support for Indonesian, Malay, Kazakh (Milestone 6)
    • +
    • 3435528 Add base configuration file (Milestone 7)
    • +
    • 3432219 Refector dita.list read and write (Milestone 7)
    • +
    • 3401849 PDF2: runtime switch for localization post-processing (Milestone 7)
    • +
    • 3438361 Add "tocjs" transform to demo script (Milestone 7)
    • +
    • 3341648 Clean HTML and XHTML stylesheets (Milestone 8)
    • +
    • 3343562 Java clean-up (Milestone 8)
    • +
    • 3346094 Improve test coverage (Milestone 8)
    • +
    • 3372147 Improve logging (Milestone 8)
    • +
    • 3373416 Refactor PDF attribute sets (Milestone 8)
    • +
    • 3376114 Improve PDF page layout configuration (Milestone 8)
    • +
    • 3415269 Support for more languages in the PDF transform (Milestone 8)
    • +
    • 3412211 Refactor PDF index stylesheet for XSL 1.1 support (Milestone 8)
    • +
    • 3425838 General PDF2 improvements (Milestone 8)
    • +
    • 3428152 General I18N improvements (Milestone 8)
    • +
    • 3429390 General XHTML improvements (Milestone 8)
    • +
    • 3438790 Clean up build_demo script (Milestone 8)
    • +
    • 3440826 Dutch patch for feature request 3415269 (Milestone 8)
    • +
    • 1785391 Make Java code thread-safe (in progress)
    • +
    +
    +
    + Patches +
      +
    • 2963037 PDF changes to fix index rendering of colon (bug 2879196) (Milestone 7)
    • +
    +
    +
    + Bugs +
      +
    • 2714699 FO plug-in doesn't support specialized index elements (Milestone 1)
    • +
    • 2848636 Duplicate key definitions should produce info messages (Milestone 1)
    • +
    • 3353955 Frontmatter child order is not retained in PDF2 (Milestone 1)
    • +
    • 3354301 XRef with conreffed phrases not properly generate HTML link (Milestone 1)
    • +
    • 3281074 Bad attribute being applied to fo:bookmark-title element (Milestone 2)
    • +
    • 3344142 Conref Push order of validation (Milestone 2)
    • +
    • 3358377 Cryptic error message when DITA Map has "bookmap" extension (Milestone 3)
    • +
    • 3384673 ODF transtype no longer embeds images in output (OT 1.5.3) (Milestone 3)
    • +
    • 3394000 TocJS needs cleanup for several minor bugs (Milestone 3)
    • +
    • 3392718 TOCJS sample should not require ant target (Milestone 3)
    • +
    • 3389277 DocBook transform redundantly nests Related Links (Milestone 3)
    • +
    • 3105339 '<' and '>' characters in a title cause tocjs trouble (Milestone 3)
    • +
    • 3104497 tocjs JavaScripts don't work in Japanese environment (Milestone 3)
    • +
    • 3394130 Remove outdated developer documentation (Milestone 3)
    • +
    • 3397165 chunk on topichead not honored (Milestone 4)
    • +
    • 3397501 Custom reltable column headers are reversed (Milestone 4)
    • +
    • 3397495 Relcolspec with <title> does not generate link group headers (Milestone 4)
    • +
    • 3399030 <ph> Elements not flagged with alt-text in HTML output (Milestone 4)
    • +
    • 3396884 NPE in EclipseIndexWriter.java<Merges,setLogger for AbstractIndexWriters (Milestone 4)
    • +
    • 3398004 -d64 flag to JVM not allowed for Windows JVMs (Milestone 4)
    • +
    • 3401323 Fix PDF nested variable handling (Milestone 4)
    • +
    • 3401721 Processing broken for <topicsetref> elements (Milestone 4)
    • +
    • 3404049 Setting of clean_temp is backwards (Milestone 4)
    • +
    • 3386590 Product name repeated hundreds of times in PDF (Milestone 4)
    • +
    • 3405417 Shortdesc output twice when using abstract (Milestone 4)
    • +
    • 3402165 wrong image output dir if using generate.copy.outer=2 (Milestone 4)
    • +
    • 2837095 Positions of index and TOC in bookmaps are ignored (Milestone 5)
    • +
    • 3414826 DITA OT not handling image path with chunking turned on (Milestone 5)
    • +
    • 3411767 Not so meaningful messages given by ImgUtils (Milestone 5)
    • +
    • 3405851 Incorrect entry@colname in merged XML with row and colspan (Milestone 5)
    • +
    • 3406357 Custom profiling issue (Milestone 5)
    • +
    • 3413203 Remove references to OpenTopic in PDF2 (Milestone 5)
    • +
    • 3414270 @props specialization not used in map (Milestone 5)
    • +
    • 3383618 Attribute 'link-back' cannot occur at element 'fo:index-key (Milestone 5)
    • +
    • 3418953 Scale computation for XHTML uncorrectly looks up images (Milestone 6)
    • +
    • 3413229 onlytopic.in.map & symlink (Milestone 6)
    • +
    • 3423537 Additional line breaks in <menucascade> should be ignored (Milestone 6)
    • +
    • 3423672 Problems with refs to images outside the DITA Map directory (Milestone 6)
    • +
    • 2879663 indexterm/keyword causees NullPointerException (Milestone 7)
    • +
    • 2879196 Colon character in <indexterm> causes nesting in output (Milestone 7)
    • +
    • 3179018 Indexterm with only nested subelement results in NPE (Milestone 7)
    • +
    • 3432267 Task example title processing incorrect for PDF (Milestone 7)
    • +
    • 3430302 Unitless images sizes in throw errors (Milestone 7)
    • +
    • 3429845 No variables for Warning (Milestone 7)
    • +
    • 3428871 topicmerge gives incomplete topicref when reference or topic (Milestone 7)
    • +
    • 3132976 Duplicate index text in index page (Milestone 7)
    • +
    • 2795649 Java topicmerge ignores xml:lang (Milestone 7)
    • +
    • 3431798 Relative CSS paths incorrectly computed for @copy-of (Milestone 7)
    • +
    • 3438421 Remove transtype default (Milestone 7)
    • +
    • 2866342 Nested see also is ignored (Milestone 8)
    • +
    • 1844429 PDF2: Non-DITA link broken unless marked external (Milestone 8)
    • +
    • 3270616 "lcTime" not displayed in PDF output (Milestone 8)
    • +
    • 3388668 Data in figure captions not suppressed in xrefs (Milestone 8)
    • +
    • 3429824 topicmerge gives wrong topicref with nested topics (Milestone 8)
    • +
    • 3414332 PDF2 variable string translations missing (Milestone 8)
    • +
    • 3323806 Improve Java logging and exception handling (Milestone 8)
    • +
    • 3426920 Image files not copied or referenced correctly for eclipse (Milestone 8)
    • +
    • 3445159 entry/@colname has been removed! (Milestone 8)
    • +
    • 3447732 Bug in handling of longdescref (Milestone 8)
    • +
    • 3452510 Ant parameter customization.dir not documented anywhere (Milestone 8)
    • +
    • 3451621 Revisions on <plentry> use wrong image for nested <pd> (Milestone 8)
    • +
    +
    +
    +
    diff --git a/release-notes/rel1.5.dita b/release-notes/rel1.5.dita new file mode 100644 index 0000000..5095b3a --- /dev/null +++ b/release-notes/rel1.5.dita @@ -0,0 +1,26 @@ + + +DITA OT release 1.5Release 1.5 is a major release based on the new DITA 1.2 draft standard.
    +

    It contains full support for DITA 1.2 draft as defined in the fall of 2009 (prior to + public review).

    +

    In addition to DITA 1.2 support, release 1.5 contains the following updates, which are + available in Milestone 21 or earlier of the DITA-OT test builds:

    +
    + General Enhancements +
    1. New parameter to generate output for only the topics referenced in a map
    2. Use fileparameter in Ant 1.7 to replace processing instruction in intermediate dita + files
    3. Determine the version of DITA-OT via the class org.dita.dost.util.Version
    4. Remove duplicate ids in PDF topicmerge
    5. Move Notices before the TOC, suppress in the TOC and suppress the second copy after + the TOC
    6. Include @scope="peer" condition when creating rel-links.
    +
    + SourceForge Enhancements Added +
    1. 2859612 Add support for Serbian (Latin)
    2. 2845278 Add Ant parameters for XSLT parameters
    3. 2824371 Support Hindi and Urdu for XHTML output
    4. 2790755 Process in unique temp directories (Designed to allow multiple builds to take + place at once)
    5. 2780998 startcmd.sh: Run the user's shell, not sh
    6. 2698921 Add a way to set attributes on <body>
    7. 2120219 Add PDF to the supported image
    8. 2002857 homeID in javahelp .hs file is not set
    9. 1725284 add support for headings for sections within task (XHTML only)
    10. 1623246 Support RFC4646 language tags in Index modules
    11. 1367897 Xref content generation enforces formatting choices
    12. 2882109 Convert named PDF templates to mode template
    13. 2883406 Add extension point for modifying PDF link text
    14. 2882870 Add parameter to control PDF Chapter style
    15. 2882103 Provide hook for specializations to add custom headers
    16. 2882072 Add parameter to control PDF bookmarks (default collapsed)
    +
    + 93 SourceForge Bugs Fixed +
    1. 2860433 Keyref on <image> fails to resolve
    2. 2860199 Chunk to-content in submap resulting in missing output
    3. 2860168 Suppress data and data-about in PDF output
    4. 2857167 conrefImpl.xsl 1.6.4.13 has duplicate variable decls
    5. 2856742 Problem of keys attribute in nested topicref elements
    6. 2854546 Peer xref leads to invalid destination error in PDF
    7. 2849200 Style on ditaval prop or revprop is ignored
    8. 2846111 Unnecessary text generated for external xref
    9. 2845598 1.5-M18-demo/fo/Customization pdf.formatter
    10. 2842753 catalog-dita.xml has invalid entries
    11. 2839035 Chunk code cannot parse xref with &
    12. 2832696 Move meta module pushes content into non-DITA file
    13. 2829350 Build_demo.xml places files in incorrect directory
    14. 2826143 Move meta module discards link text
    15. 2824907 1.5 M17 Bug - FileNotFoundException export.xml eclipsehelp
    16. 2819853 missing nested indexterm after 3rd
    17. 2815492 PDF: keep-with-next on shortdesc
    18. 2815485 Prolog indexterm not processed properly for PDF
    19. 2813082 Eclipse help MANIFEST.MF filename wrong case, needs CRLF
    20. 2811980 pdf2: japanese translate for generated page number of a ref
    21. 2811358 Incorrect entry@colname in middle file at PDF generation
    22. 2804442 Bad param name in prereq-fmt template's call to sect-heading
    23. 2799543 Child links in HTML Help output are wrong
    24. 2797030 Chunking fails with bookmap
    25. 2796614 Leading slash breaks PLUGINS_ROOT usage for Eclipse help
    26. 2791696 reltable DITA 1.2 (#12048)
    27. 2791345 Topicmeta searchtitles in map not used in topic
    28. 2791278 Keyref Resolution Fails for Non-Descendant Topics
    29. 2790807 Demo code should use new PDF output
    30. 2788069 Topicmerge does not handle copy-to properly
    31. 2788069 Topicmerge does not handle copy-to properly
    32. 2782503 Extra space before bullet list in xhtml output DITA-OT 1.4.3
    33. 2774128 startcmd.sh is encoded with DOS line endings in v1.5 M13
    34. 2759964 HTML outputs filters conditional topics poorly
    35. 2759964 HTML outputs filters conditional topics poorly
    36. 2748371 Revision + ID gives XSL error
    37. 2739236 plus-allhtml-svgobject handles <alt> badly
    38. 2724090 XHTML: conreffed by-reference footnotes break w/ chunking
    39. 2723928 gen-toc template not matching properly
    40. 2723715 Itemgroup sets @id when element is not open
    41. 2712074 XHTML: chunk=to-content on map breaks by-reference footnotes
    42. 2706725 Single quote inserted in empty table cells in FO
    43. 2696229 FO plugin code incompatible with Saxon 9 (OT1.4.3 default)
    44. 2696191 Java libraries missing from 1.4.3 distributions
    45. 2647292 HTML stylesheets should style <wintitle> and <filepath>
    46. 2629271 maplink: should not modify href if scope=external
    47. 2629256 mapref: should not modify href if scope=external
    48. 2573681 Move link module does extra processing
    49. 2547437 zh_TW.properties and zh_CN.properties contents are mixed up
    50. 2418932 toc attribute does not work for references to ditamaps
    51. 2317681 Extra files generated when many topics are chunked to one
    52. 2317581 inline formatting in shortdesc
    53. 1931457 Need to identify transtype during XHTML output step
    54. 1629094 docbook creates empty simplelists
    55. 1628936 transtype=docbook does not handle publisher and copyright element
    56. 2849078 Problems using keyrefs with DITA OT 1.5 M19 - ID: 2849078
    57. 2875373 tm in linktext is dropped
    58. 2870935 keyref within topics ignore @copy-to attributes
    59. 2873560 SWF flash not defined as resources to be copied
    60. 2872954 Conref push not working at map level
    61. 2871009 Temp directory leaves behind single directory and file
    62. 2866322 Generated links have bad URLs
    63. 2873654 PDF missing rules for new DITA 1.2 content elements
    64. 2872988 Bad relcolwidth crashes PDF output
    65. 2866204 Topicref with keyref fails to produce output
    66. 2878446 Issue with ampersand in xrefs in attributes
    67. 1629096 docbook creates invalid varlistentry
    68. 2871326 Cannot use different TOC titles for same topic in PDF
    69. 1880097 PDF2 ingnores contents of <xref> elements
    70. 1815571 Invalid property in fo:table-body
    71. 2879171 Shortdesc & Abstract formatting is incorrect for PDF
    72. 2882085 Obsolete code in PDF plug-in should be removed
    73. 2661418 make the TOC in pdf2 output link to topics in pdf
    74. 2871017 eclipsehelp plugin.xml invalid in 1.5M20
    75. 2887331 chunk="to-content" on a sub-map causes path error
    76. 2891736 indexterm in topicref level are copied into topic/prolog
    77. 2893316 This is a bug in the integrator.xml
    78. 2893493 ${clean.temp} is not set to true per documentation
    79. 2893664 ampersand entity with conref actions causes build to fail
    80. 2893924 htmlhelp transtype requires video plugin
    81. 1628937 Rename supportingboth.ditaand.xmlinaditamap.dita
    82. 1771123 Inappropriate Message 018 On type= value
    83. 1819660 Eclipse Help issue producing toc file.
    84. 1848313 ditaval file sent to XSLT not URL
    85. 1897542 Chunk to-content may need to rewrite topic IDs
    86. 2875946 PDF: table @pgwide semantics not implemented
    87. 2893745 missing fop's file/directory in standard package
    88. 2900047 map2htmtoc.xsl doesn't allow for extension of root template
    89. 2900417 html transform does not use image/@scale properly
    90. 2906957 Update Eclipse plugin DTDs and packaging
    91. 2796964 Use xml:lang for generated text in PDF
    92. 2860596 PullPrologIndexTerms selection too wide, Removed spurious pullPrologIndexTerms + in section/title
    93. 1852733 Image "scale" attribute is ignored
    +
    + 4 SourceForge Patches Added +
    1. 2790337 Add extension points to related-links code
    2. 2778178 Flagging code duplicates XSL
    3. 2715750 plus-transtype-htmlhelp: support alternate compilers
    4. 2804311 Feature value trim test bug
    +
    SourceForge bugs, patches, and RFEs listed above can be found in SourceForge Bugs, + Patches, and RFE tracker pagesBugs trackerPatches trackerRFE tracker
    \ No newline at end of file diff --git a/release-notes/rel1.6.dita b/release-notes/rel1.6.dita new file mode 100644 index 0000000..a41b1a0 --- /dev/null +++ b/release-notes/rel1.6.dita @@ -0,0 +1,383 @@ + + + + DITA Open Toolkit Release 1.6 + + Release highlights + +
    Performance improvements
    DITA-OT 1.6 contains + several updates that combine for significant performance improvements + for large documents. For example, building the DITA 1.2 Language Specification + to XHTML takes just over 1/3 of the time as with the previous release + (tests show an improvement of 288%).
    +
    Error message overhaul
    In the recent DITA-OT + usage survey, we asked for specific problems encountered when running + the DITA-OT. The most frequent response was difficulty understanding + and responding to error messages. The latest release addresses this + in two ways:
      +
    1. Every message has been reviewed, and nearly every message has + been revised for clarification.
    2. +
    3. Messages are now documented in the DITA-OT User Guide. The new + documentation contains additional details about nearly every message, + including potential remedies and links to helpful information.
    4. +
    +
    Code cleanup
    Of particular interest to developers, + much of the deprecated code in the toolkit (some of it unused for + 5+ years) has been removed. As a result, much of the code is cleaner, + faster, and easier to customize. For example, the cleanup of PDF code + allowed us to remove the alternate *_1.0.xsl stylesheets.
    +
    +
    + + General Enhancements and Changes + +
    +

    New arguments have been added:

    +
      +
    • args.rellinks controls which related links will be output.
    • +
    • args.filter defines the filter file to be used.
    • +
    +

    New configuration options have been added:

    +
      +
    • generate-debug-attributes controls debug attribute generation and can + be used to reduce memory consumption.
    • +
    • processing-mode controls error recovery behavior.
    • +
    +

    Support for the old DITAVAL format (used before OASIS +added DITAVAL to the standard in 2007) has been removed.

    +

    Source distribution package has been removed in favor or Git and GitHub source + downloads.

    +

    The demo folder has been deprecated and the following plug-ins have + been moved to plugins folder:

    + + + old path + new path + + + demo/dita11 + plugins/org.dita.specialization.dita11 + + + demo/dita132 + plugins/org.dita.specialization.dita132 + + + demo/eclipsemap + plugins/org.dita.specialization.eclipsemap + + + demo/fo + plugins/org.dita.pdf2 + + + demo/tocjs + plugins/com.sophos.tocjs + + + + demo/h2d + plugins/h2d + + + demo/legacypdf + plugins/legacypdf + + +

    The following plug-ins in the demo folder have been moved to a separate plug-ins + Git repository:

    +
      +
    • FrameMaker_adapter
    • +
    • apiref
    • +
    • authorinfo
    • +
    • book
    • +
    • elementref
    • +
    • enote
    • +
    • faq
    • + + +
    • java
    • +
    • javaapiref
    • + +
    • music
    • +
    • thesaurus
    • +
    • tutorial
    • +
    • video
    • +
    +
    +
    +

    The following bundled libraries have been updated:

    +
      +
    • Ant
    • +
    • ICU4J
    • +
    • Apache Xerces
    • +
    +
    +
    PDF2

    The following deprecated items are no longer supported in the PDF transform:

      +
    • Support for the beta version of DITA, available from IBM before the OASIS standard was created in 2005.
    • +
    • Support for the "bkinfo" demo plug-in, used to support book metadata before OASIS created the BookMap format in 2007.
    • +
    • Support for layout-masters.xml configuration.
    • +
    +

    The following extension-points have been added:

    +
      +
    • dita.conductor.pdf2.param to add XSLT parameters to XSL FO + transformation.
    • +
    +
    +
    +
    + + Migration from previous releases + +
    +

    The deprecated property dita.input.valfile should be replaced with the + new argument property args.filter.

    +

    Target dita-preprocess has been removed and dependencies should be + replaced with a target sequence build-init, preprocess.

    +

    Support for argument args.message.file has been removed as message + configuration has become static configuration.

    +

    Processing instruction workdir has been deprecated in favor of + processing instruction workdir-uri. The only difference between the two processing instructions is that workdir-uri contains + a URI instead of a system path.

    +
    +
    + Preprocessing +

    The following deprecated templates and modes have been removed in topic pull + stylesheets:

    +
      +
    • inherit
    • +
    • get-stuff
    • +
    • verify-type-attribute
    • +
    • classval
    • +
    • getshortdesc
    • +
    • getlinktext
    • +
    • blocktext
    • +
    • figtext
    • +
    • tabletext
    • +
    • litext
    • +
    • fntext
    • +
    • dlentrytext
    • +
    • firstclass
    • +
    • invalid-list-item
    • +
    • xref
    • +
    +
    +
    + XHTML +

    The following named templates have been deprecated:

    +
      +
    • make-index-ref
    • +
    +

    The following deprecated templates have been removed:

    +
      +
    • revblock-deprecated
    • +
    • revstyle-deprecated
    • +
    • start-revision-flag-deprecated
    • +
    • end-revision-flag-deprecated
    • +
    • concept-links
    • +
    • task-links
    • +
    • reference-links
    • +
    • relinfo-links
    • +
    • sort-links-by-role
    • +
    • create-links
    • +
    • add-linking-attributes
    • +
    • add-link-target-attribute
    • +
    • add-user-link-attributes
    • +
    +

    The removed templates have been replaced by other templates in earlier releases and + plug-ins should be changed to use the new templates.

    +
    +
    + ODT +

    The following deprecated templates have been removed:

    +
      +
    • revblock-deprecated
    • +
    • revstyle-deprecated
    • +
    • start-revision-flag-deprecated
    • +
    • end-revision-flag-deprecated
    • +
    +

    The removed templates have been replaced by other templates in earlier releases and + plug-ins should be changed to use the new templates.

    +
    +
    PDF2

    Custom PDF2 shell stylesheets need to + be revised to not include separate IBM and OASIS DITA stylesheets. The + *_1.0.xsl stylesheets have been removed and + their imports must be removed from shell stylesheets.

    The following template modes + have been deprecated:

      +
    • toc-prefix-text
    • +
    • toc-topic-text
    • +

    The following named templates have been removed:

    +
      +
    • processTopic
    • +
    • createMiniToc
    • +
    • processTopicTitle
    • +
    • createTopicAttrsName
    • +
    • processConcept
    • +
    • processReference
    • +
    • getTitle
    • +
    • placeNoteContent
    • +
    • placeImage
    • +
    • processUnknowType
    • +
    • insertReferenceTitle
    • +
    • buildRelationships
    • +
    • processTask
    • +
    +

    Main + FO generation now relies on merging process to rewrite duplicate IDs. The default merging + has done this already in previous releses, but now also custom merging needs to fulfill + the duplicate ID rewrite requirement.

    +

    Support for layout-masters.xml configuration has been removed, + plug-ins should use createDefaultLayoutMasters template instead.

    +
    +
    + + Issues + The following items are included in DITA Open Toolkit Release +1.6. Issue numbers correspond to the tracking number in the GitHub issues tracker. + +
    + Feature requests +
      +
    • #1057 Deprecate logException and add logError(String, Throwable) (milestone 1)
    • +
    • #1059 PDF2 should fully support core default language (milestone 1)
    • +
    • #1058 Add switch to ignore links in XHTML (milestone 1)
    • +
    • #1158 Refactor log messages and tasks (milestone 1)
    • +
    • #1060 Reduce topic merge memory consumption (milestone 1)
    • +
    • #1062 Remove IBM DITA and BookMap demo support from PDF2 (milestone 1)
    • +
    • #1063 Move OT version number to configuration (milestone 2)
    • +
    • #1061 Remove obsolete dita-preprocess target (milestone 2)
    • +
    • #1065 Add index file to PDF2 variables (milestone 3)
    • +
    • #1067 Move Ant scripts to plug-in folders (milestone 3)
    • +
    • #1066 Run XSLT with Ant task in PDF2 (milestone 3)
    • +
    • #762 bookmap.dtd and map.dtd are out of sync with OASIS (milestone 3)
    • +
    • #1068 Add XSLT param extension point to PDF2 (milestone 4)
    • +
    • #948 For PDF output, xml:lang does not work at the element level (milestone 4)
    • +
    • #1064 Support localization of quotation marks in quote (milestone 4)
    • +
    • #1070 Remove support for args.message.file (milestone 4)
    • +
    • #1071 Add automatic font detection to PDF2 (milestone 4)
    • +
    • #1182 Need extension for determining topic level (milestone 4)
    • +
    • #1236 <span> tags added around step when DRAFT on (milestone 4)
    • +
    • #1262 css support for codeph in HTML output (milestone 4)
    • +
    • #1198 Generate PDF metadata from bookmeta (milestone 5)
    • +
    • #1273 Remove source distribution builds (milestone 5)
    • +
    • #1203 ditaval flag action screws strow rendering (milestone 5)
    • +
    • #1104 DitaWriter workdir PI not a URL (milestone 5)
    • +
    • #1252 Document error messages in user guide (milestone 5)
    • +
    • #1278 Separate core and extra plug-ins (milestone 5)
    • +
    • #1249 Add Files from Distribution Packages to Git Repo (milestone 5)
    • +
    • #1283 xref with desc and no href not handled in XHTML (milestone 5)
    • +
    • #1137 Consistent coding conventions for Java code (final release)
    • +
    • #1153 Remove deprecated Ant files (final release)
    • +
    • #1300 Add a hook to set @summary on table in XHTML (final release)
    • +
    • #1302 Add a way for cross-references to pick up generated text for sections (final + release)
    • +
    • #1266 Honor the map top level processing instruction (final release)
    • +
    • #1156 Refactor preprocessing to use SAX filters (final release)
    • +
    • #1159 Remove Content object (final release)
    • +
    • #1155 Use Job to read/write job configuration files (final release)
    • +
    • #1160 Improve filtering (final release)
    • +
    • #1124 Make Java code thread-safe (final release)
    • +
    • #1157 Clean Ant scripts (final release)
    • +
    • #1149 Consistent Ant property names (final release)
    • +
    • #1161 Remove deprecated code (final release)
    • +
    • #1162 Improve title numbering in PDF2 (final release)
    • +
    • #1163 Clean PDF2 ID processing (final release)
    • +
    • #1165 Improve PDF2 table customization (final release)
    • +
    • #1166 Improve pipeline module processing (final release)
    • +
    • #1164 Avoid strings where other types are more appropriate (final release)
    • +
    • #1168 Add ability to disable debug attribute generation (final release)
    • +
    • #1249 Add Files from Distribution Packages to Git Repo (final release)
    • +
    • #1243 Support for some kind of die_on_error property (final release)
    • +
    • #1257 Simplify common XHTML code for flag/revision (final release)
    • +
    +
    +
    + Patches +
      +
    • #849 Map references with root fragment are not processed (milestone 1)
    • +
    • #743 Key-based mapref results in preprocessing error (milestone 1)
    • +
    +
    +
    + Bugs +
      +
    • #732 Temp dir with non-ASCII character crashes (milestone 1)
    • +
    • #729 v 1.5.4 fails to create PDF with external topic ref (milestone 1)
    • +
    • #747 [1.5.4]Glosslist no longer visible in Bookmarks (PDF output) (milestone 1)
    • +
    • #733 Incorrect image reference does not checked (milestone 1)
    • +
    • #725 Deprecated property breaks Plus plugins (milestone 1)
    • +
    • #740 Info message about inline flagging not displayed (milestone 1)
    • +
    • #738 NullPointerException when absolute path to image (milestone 1)
    • +
    • #739 PDF2 image references broken with uplevels (milestone 1)
    • +
    • #734 1.5.4 looks for lib dir at current dir instead a ${dita.dir} (milestone 1)
    • +
    • #735 Apache FOP: TOCs with uneven right margin (milestone 1)
    • +
    • #744 Possible collision in File Extension detection mechanism (milestone 1)
    • +
    • #743 Key-based mapref results in preprocessing error (milestone 1)
    • +
    • #753 Choicetable headings not localized in PDF (milestone 2)
    • +
    • #754 Check all places where output streams are used in dost.jar (milestone 2)
    • +
    • #755 Property noCoderef not declared (milestone 2)
    • +
    • #745 HTML handling of *div does not generate @outputclass (milestone 2)
    • +
    • #750 Stylesheet imported multiple times in the hierarchy (milestone 2)
    • +
    • #752 Warning when using @copy-to in reltable (milestone 2)
    • +
    • #722 Revisions on <plentry> use wrong image for nested <pd> (milestone 2)
    • +
    • #721 Bug in handling of longdescref (milestone 2)
    • +
    • #709 Image files not copied or referenced correctly for eclipse (milestone 2)
    • +
    • #758 Keydefs in non-base folder fails (milestone 3)
    • +
    • #757 Deprecated metadata PICS-Label in XHTML output (milestone 3)
    • +
    • #719 Glossentry makes FO file invalid in PDF output (milestone 3)
    • +
    • #677 Warning given by Saxon EE when processing flag-rules.xsl (milestone 3)
    • +
    • #759 PDF2: preface titles does not pull indexterms. (milestone 3)
    • +
    • #760 startcmd.bat adds dost.jar twice to the CLASSPATH (milestone 3)
    • +
    • #765 XSL for Warning uses wrong attribute set (milestone 4)
    • +
    • #764 steps-unordered doesn't generate heading (milestone 4)
    • +
    • #763 choicetable/@product value output in fo:table (milestone 4)
    • +
    • #1229 Typos in domains_(un)classed.css (in progress)
    • +
    • #1284 Fix broken references in catalog file for PDF publishing (milestone 5)
    • +
    • #1216 Customizing PDF layout-masters in 1.5.3 (milestone 5)
    • +
    • #1177 Extension Point @behavior Not Documented (milestone 5)
    • +
    • #1207 Table colwidth attribute always treated as proportional (milestone 5)
    • +
    • #1101 zh-CN file for PDF puts English strings in output (final release)
    • +
    • #1289 Improve error messages (final release)
    • +
    • #1295 Various errors when using term with keyref in XHTML (final release)
    • +
    • #1294 Use dita.ext instead of dita.extname (final release)
    • +
    • #1297 Mappull doesn't recognize <navtitle> when checking for navtitle for non-DITA + resources (final release)
    • +
    • #1191 Text only mode outputs desc content in links (final release)
    • +
    • #1303 Add Java properties file DTD to catalog (final release)
    • +
    • #1308 XHTML flag support missing for linklist, linkinfo, linklist/desc (final + release)
    • +
    • #1307 M5 reports "illegal character" for xref that uses space in directory name (final + release)
    • +
    • #1152 UNC paths are not supported in input argument (final release)
    • +
    • #1072 URLs not decoded by dost.jar (final release)
    • +
    • #1306 Typo in XSLT mode results in extra fallthrough text for step (final + release)
    • +
    • #1321 Fix path2project separator clean-up (maintenance 1)
    • +
    • #1322 Xref to table cell does not properly navigate to it (maintenance 1)
    • +
    • #1323 @relcolwidth attribute not taken into account when transforming <choicetable> + to PDF using Apache FOP (maintenance 1)
    • +
    • #1325 Variable "Index See Also String" missing from Hebrew (maintenance 1)
    • +
    • #1329 PDF2 indexing fails for ranges (maintenance 1)
    • +
    • #1330 Spaces in Filenames in 1.6 (maintenance 1)
    • +
    • #1335 Link to see/see also in index is broken (maintenance 2)
    • +
    • #1340 The "DitaWriter" class does not properly resolve entities when catalogs are referenced with <nextCatalog> in the catalog-dita.xml (maintenance 2)
    • +
    • #1343 Topics with spaces in file name appear twice (maintenance 2)
    • +
    • #1346 Cannot determine the title of a xreffed topic (maintenance 2)
    • +
    • #1348 Topics copied using "copy-to" become not wellformed (DITA OT 1.6.1) (maintenance 2)
    • +
    • #1351 'Unexpected Text' root-processing_axf.xsl bug (maintenance 2)
    • +
    • #1353 dita2htmlImpl.xsl/add-br-for-empty-cmd ... content match (maintenance 2)
    • +
    • #1354 xml comment not being stripped correctly in preprocessing (maintenance 2)
    • +
    • #1357 NPE when image is incorrectly referenced when publishing to HTML (maintenance 2)
    • +
    • #1358 Cannot cross reference definition list items (dlentry, dt, dd) in PDF (maintenance 2)
    • +
    • #1365 pdf duplicate see-also entries in Index (maintenance 3)
    • +
    • #1369 prodinfo seems to lead to "(file) does not exist", where file has spaces in name (maintenance 3)
    • +
    • #1370 Links to files with spaces in name broken (maintenance 3)
    • +
    • #1371 build_demo uses deprecated Ant property (maintenance 3)
    • +
    • #1377 htmlhelp ampersand (&amp;) entity in indexterm does not convert (maintenance 3)
    • +
    • #1378 dita.out.map.htmlhelp.hhk: target doesn't allow topic with empty indexterm (maintenance 3)
    • +
    • #1382 Merging uses system path separator when rewriting URIs (maintenance 3)
    • +
    +
    +
    +
    +
    diff --git a/release-notes/rel1.7.dita b/release-notes/rel1.7.dita new file mode 100644 index 0000000..fa2e8a8 --- /dev/null +++ b/release-notes/rel1.7.dita @@ -0,0 +1,251 @@ + + + +DITA Open Toolkit Release 1.7 + + +General Enhancements and Changes + +

    The minimum Java version has changed from 5.0 +to 6.

    Added support for abbreviated-form processing in PDF.

    X/HTML +processing code has been streamlined to make it faster and easier +to read.

    Ant proprocessing dependencies have been cleaned up +to make tasks easier to use independently.

    Numerous internal +improvements not directly visible to most end users; see feature and +patch list for details.

    +
    Preprocessing

    By default, +DITA-OT no longer normalizes file extensions to .xml. +Temporary files will retain the original file extensions, +unless dita.ext parameter is used to force file +extension normalization to a given value.

    Key name +validation has been added. If an invalid key name is found, DOTJ055E error +is thrown.

    +
    +
    + +Migration from previous releases + +

    A new job status file .job.xml has +been introduced and replaces dita.list and + dita.xml.properties as the normative +source for job status. If you have custom processing which modifies + the job properties, you should change your code to modify .job.xml instead.

    +

    Support for the following deprecated properties have been +removed:

      +
    • dita.input
    • +
    • dita.input.dirname
    • +
    • dita.extname
    • +

    Stylesheets for the following transtypes have moved +to plug-in specific folders:

      +
    • docbook
    • +
    • eclipsecontent
    • +
    • troff
    • +
    • wordrtf
    • +

    If custom plug-ins have hard coded paths to these +stylesheets, update references to use either plugin + URIs in xsl:import instructions or use dita.plugin.* Ant +properties.

    The integration process has been changed +to use strict mode by default. For old plug-ins which are not valid, + lax processing mode can still be used.

    +

    Plug-ins that use the MessageUtils Java +class must use getInstance method to access +the MessageUtils instance, as getMessage methods +have been changed to instance methods.

    +
    Preprocessing

    The preprocessing +Ant dependency chain has been cleaned up. Tasks no longer depend on +the previous task in the default chain, but rather the whole +preprocess dependency chain is defined by the preprocess task.

    +
    +
    HTML

    Core TOC generation +has been moved to a separate XSLT stylesheet xsl/map2htmtoc/map2htmlImpl.xsl + and the new templates use the mode toc. +Plug-ins which override HTML TOC processing should change + the map processing templates to toc mode.

    +
    +
    HTML and extended transform types +

    Flagging logic has been pulled out of the core X/HTML code +and moved to a preprocess step. This significantly simplifies + and optimizes the X/HTML code, while making flagging logic available +to any other transform type. The new preprocess step implements +all flagging logic; for each active flag, it adds a DITA-OT specific +hint into the intermediate topics (implemented as a specialization +of the DITA <foreign> element). As part of this change, all +flagging related templates in the XHTML code (such as start-flagit +and gen-style) are deprecated.

    If you override the +X/HTML transforms, you may need to update your overrides to use the +new flagging logic. In most cases this just means deleting +calls to the deprecated templates; in some cases, the calls can be +replaced with 2 lines to process flags in new places. You +should compare your override to the updated XHTML code and update + as needed. See "XHTML migration for flagging updates in +DITA-OT 1.7" in the section +for details.

    Plug-ins that provide support for new +transforms need to ensure that they properly support the DITA <foreign> + element, which should be ignored by default; if so, this +change will have no immediate impact. Support for flagging + new transform types may be more easily added based on this update, +because there is no need to re-implement flagging logic, + but this is not required. See "Flagging in the toolkit" in the section for details +on how to add flagging support.

    +
    PDF

    The following deprecated +XSLT variables have been removed:

      +
    • page-margin-left
    • +
    • page-margin-right
    • +

    XSLT stylesheets have been split to separate specialization +topic code and new xsl:import instructions have been + added to topic2fo.xsl. Plug-ins which +define their own shell stylesheet should be revised to import all +the required stylesheet modules.

    PDF processing +used to replace topic shortdesc with map shortdesc, +but this behaviour was incorrect and was removed to comply +with the DITA specification.

    The following variable +strings have been added:

      +
    • #note-separator
    • +
    +
    +
    + +Issues +The following items are included in DITA Open Toolkit Release +1.7. Issue numbers correspond to the tracking number in the GitHub issues tracker. + +
    Feature requests
      +
    • #1144 Produce HTML5 output (milestone 1)
    • +
    • #1319 Remove deprecated code (milestone 1)
    • +
    • #1339 PDF, flagged image : change use-attribute-sets="image" (milestone +1)
    • +
    • #1141 XHTML: ability to include TOC in every topic (milestone +2)
    • +
    • #1331 Possibility to customize <stepresult> in HTML output +(milestone 2)
    • +
    • #1366 pdf index entries have too many keep-with-previous (milestone +2)
    • +
    • #1379 Use format attribute to identity DITA topics (milestone +2)
    • +
    • #1384 Validate key names (milestone 2)
    • +
    • #1388 Remove temporary file file-extension normalization (milestone +2)
    • +
    • #1288 Use strict integration by default (milestone 3)
    • +
    • #1327 Change minimum Java version to 6 (milestone 3)
    • +
    • #1391 Add new job status file format (milestone 3)
    • +
    • #1398 Allow defining source input base directory (milestone 3)
    • +
    • #1403 Refactor XEP index processing to extend base index processing +(milestone 4)
    • +
    • #1405 Provide catalog URL rewrite for common XSL files (milestone +4)
    • +
    • #1313 Separate flagging logic from XHTML code (milestone 4)
    • +
    • #1312 Refactor preprocessing to use SAX filters (release candidate)
    • +
    • #1317 General XHTML improvements (release candidate)
    • +
    • #1324 Avoid strings where other types are more appropriate (release +candidate)
    • +
    • #1338 Add named error messages (release candidate)
    • +
    • #1345 Add source location to error messages (release candidate)
    • +
    • #1389 Move stylesheets and resource files to plug-in folder (release +candidate)
    • +
    +
    Patches
      +
    • #1350 Move table specializations into separate stylesheets (milestone +1)
    • +
    • #1359 Fix text overflow issue in PDF ToC entries with long titles. +(milestone 1)
    • +
    • #1352 Wrap itemgroup task elements into <div> elements #1331 +(milestone 2)
    • +
    • #1400 Updates on the build instructions plus a fix in one of the +dost classes that made the build fail (milestone 4)
    • +
    • #1401 Disable XSD Grammar caching (milestone 4)
    • +
    +
    Bugs
      +
    • #1316 Conref error message missing the @conref value (milestone +1)
    • +
    • #1321 Fix path2project separator clean-up (milestone 1)
    • +
    • #1322 Xref to table cell does not properly navigate to it (milestone +1)
    • +
    • #1323 @relcolwidth attribute not taken into account when transforming <choicetable> + to PDF using Apache FOP (milestone 1)
    • +
    • #1325 Variable "Index See Also String" missing from Hebrew (milestone +1)
    • +
    • #1329 PDF2 indexing fails for ranges (milestone 1)
    • +
    • #1330 Spaces in Filenames in 1.6 (milestone 1)
    • +
    • #1332 output-deprecated-msg deleted; still referenced (milestone +1)
    • +
    • #1335 Link to see/see also in index is broken (milestone 1)
    • +
    • #1340 The "DitaWriter" class does not properly resolve entities +when catalogs are referenced with <nextCatalog> in +the catalog-dita.xml (milestone 1)
    • +
    • #1343 Topics with spaces in file name appear twice (milestone +1)
    • +
    • #1346 Cannot determine the title of a xreffed topic (milestone +1)
    • +
    • #1348 Topics copied using "copy-to" become not wellformed (DITA +OT 1.6.1) (milestone 1)
    • +
    • #1349 "Ambiguous rule match" in PDF processing XSLT when <choicetable> +is used in topic (milestone 1)
    • +
    • #1351 'Unexpected Text' root-processing_axf.xsl bug (milestone +1)
    • +
    • #1353 dita2htmlImpl.xsl/add-br-for-empty-cmd ... content match +(milestone 1)
    • +
    • #1354 xml comment not being stripped correctly in preprocessing +(milestone 1)
    • +
    • #1357 NPE when image is incorrectly referenced when publishing +to HTML (milestone 1)
    • +
    • #1358 Cannot cross reference definition list items (dlentry, dt, +dd) in PDF (milestone 1)
    • +
    • #1365 pdf duplicate see-also entries in Index (milestone 2)
    • +
    • #1369 prodinfo seems to lead to "(file) does not exist", where +file has spaces in name (milestone 2)
    • +
    • #1370 Links to files with spaces in name broken (milestone 2)
    • +
    • #1371 build_demo uses deprecated Ant property (milestone 2)
    • +
    • #1377 htmlhelp ampersand (&amp;) entity in indexterm does +not convert (milestone 2)
    • +
    • #1378 dita.out.map.htmlhelp.hhk: target doesn't allow topic with +empty indexterm (milestone 2)
    • +
    • #1382 Merging uses system path separator when rewriting URIs (milestone +2)
    • +
    • #1393 shortdesc in map overrides topic shortdesc (milestone 5)
    • +
    • #1398 Genlist processes file multiple times (milestone 3)
    • +
    • #1402 Foreign and Unknown elements not ignored in PDF (milestone +4)
    • +
    • #1404 buildsample file in TocJS plug-in hard codes old demo path +(milestone 4)
    • +
    • #1237 abbreviated-form is not rendered as link to glossentry (milestone +4)
    • +
    • #1193 abbreviated-form not handled at all in PDF output (release +candidate)
    • +
    • #1409 Stylesheet imported multiple times in the hierarchy (reloaded) +(release candidate)
    • +
    • #1413 Mapref resolution cascades role (release candidate)
    • +
    • #1416 German translation update (release candidate)
    • +
    • #1197 Handling of @href on a <glossarylist> (final release)
    • +
    • #1362 href attribute in appendices element breaks PDF conversion +(final release)
    • +
    • #1411 Files with ".orig" extension missing from distribution (final +release)
    • +
    • #1418 PDF2 transtype breaks when bookmap has parts (final release)
    • +
    • #1425 XHTML flagging included before imports (maintenance 1)
    • +
    • #1428 Topic level calculated incorrectly for appendices (maintenance 1)
    • +
    • #1427 Fix text overflow issue in lot/lof entries with long titles (maintenance 1)
    • +
    • #1430 PDF transformation: Problems with index in OT 1.7 (maintenance 1)
    • +
    • #1432 startcmd.sh broken in 1.7 (maintenance 1)
    • +
    • #1433 Profiling filter included multiple times (maintenance 1)
    • +
    • #1437 Fatal UTF-8 error in .job.xml (maintenance 2)
    • +
    • #1456 XHTML Build failed when referencing subject scheme in different file path (maintenance 3)
    • +
    • #1423 Formatting glitch in PDF index (maintenance 4)
    • +
    • #1468 Reference to remote image does not appear in PDF (maintenance 4)
    • +
    • #1469 @outputclass and @class values not passed from <chhead> to <tr> in XHTML output (maintenance 4)
    • +
    • #1472 PDF output: whitespace not preserved in msgblock element (maintenance 4)
    • +
    • #1475 Error received in console does not point correctly to location of published DITA Map (maintenance 4)
    • +
    • #1477 Tables: using percentage in colwidth values [PDF2 plugin] (maintenance 4)
    • +
    • #1484 Enable default revision markers using active xml:lang value (maintenance 5)
    • +
    • #1489 External keys are lost if using onlytopic.in.map (maintenance 5)
    • +
    • #1491 TopicMerge generates invalid xref/@href if it contains Ideographic character (maintenance 5)
    • +
    +
    +
    +
    diff --git a/release-notes/rel1.8.dita b/release-notes/rel1.8.dita new file mode 100644 index 0000000..bfe6adc --- /dev/null +++ b/release-notes/rel1.8.dita @@ -0,0 +1,181 @@ + + + + DITA Open Toolkit Release 1.8 + + + General Enhancements and Changes + +
    + Preprocessing +

    Additional validation has been added to check e.g. element ID uniqueness, and xml:lang and URI syntax.

    +
    +
    + PDF +

    Bundled FOP has been updated from 1.0 to 1.1.

    +
    +
    +
    + + Migration from previous releases + +
    +

    Stylesheets for the following transtypes have moved + to plug-in specific folders:

    +
      +
    • eclipsehelp
    • +
    • htmlhelp
    • +
    • javahelp
    • +
    • odt
    • +
    • xhtml
    • +
    +
    +
    + Preprocessing +

    The following deprecated Ant properties have been removed:

    +
      +
    • dita.script.dir, use ${dita.plugin.id.dir} + instead
    • +
    • dita.resource.dir, use ${dita.plugin.org.dita.base.dir}/resource instead
    • +
    • dita.empty
    • +
    • args.message.file
    • +
    +
    +
    + XHTML +

    XSLT Java extension ImgUtils has been removed from stylesheets and been replaced with preprocessing module ImageMetadataModule. + The old ImgUtils Java classes are still included in the build.

    +
    +
    + PDF +

    The following deprecated XSLT stylesheets have been removed:

    +
      +
    • artwork-preprocessor.xsl
    • +
    • otdita2fo_frontend.xsl
    • +
    +

    The following deprecated XSLT templates have been removed:

    +
      +
    • insertVariable.old
    • +
    +

    The following deprecated XSLT modes have been removed:

    +
      +
    • layout-masters-processing
    • +
    • toc-prefix-text, use tocPrefix mode instead
    • +
    • toc-topic-text, use tocText mode instead
    • +
    +

    Link generation has been simplified by removing deprecated arguments in favour of args.rellinks. + The following deprecated Ant properties have been removed:

    +
      +
    • args.fo.include.rellinks
    • +
    +

    The following XSLT parameters have been removed:

    +
      +
    • antArgsIncludeRelatedLinks
    • +
    • disableRelatedLinks
    • +
    +

    A call to a named template pullPrologIndexTerms.end-range has been added to processTopic* templates to handle topic wide index ranges.

    +
    +
    + Legacy PDF +

    The following deprecated XSLT stylesheets have been removed:

    +
      +
    • dita2fo-shell_template.xsl
    • +
    • topic2fo-shell.xsl
    • +
    +
    +
    + ODT +

    Link generation has been simplified by removing deprecated arguments in favour of args.rellinks. + The following deprecated Ant properties have been removed:

    +
      +
    • args.odt.include.rellinks
    • +
    +

    The following XSLT parameters have been added:

    +
      +
    • include.rellinks
    • +
    +

    The following XSLT parameters have been removed:

    +
      +
    • disableRelatedLinks
    • +
    +
    +
    +
    + + Issues + The following items are included in DITA Open Toolkit Release 1.8. Issue numbers + correspond to the tracking number in the GitHub issues tracker. + +
    + Feature requests +
      +
    • #1406 Bundle FOP 1.1 (milestone 1)
    • +
    • #1447 Move stylesheets and resource files to plug-in folder (milestone 1)
    • +
    • #1449 Add support for Slovenian (milestone 1)
    • +
    • #1453 Add image metadata filter (milestone 1)
    • +
    • #1435 Add validation filter to debug-filter step
    • +
    • #1455 Remove deprecated features
    • +
    • #1460 "Get String" template should use parameter instead of variable
    • +
    • #1461 Move file list generation to Ant
    • +
    • #1465 New doc topic listing non-standard tweaks to preprocessed files
    • +
    • #1480 Correcting values for the @relcolwidth attribute
    • +
    • #1492 Line range extension to coderef processing
    • +
    • #1494 Move integrator configuration to lib/configuration.properties
    • +
    • #1495 Remove ancient doc directories
    • +
    +
    +
    + Bugs +
      +
    • #1425 XHTML flagging included before imports (milestone 1)
    • +
    • #1428 Topic level calculated incorrectly for appendices (milestone 1)
    • +
    • #1427 Fix text overflow issue in lot/lof entries with long titles (milestone 1)
    • +
    • #1430 PDF transformation: Problems with index in OT 1.7 (milestone 1)
    • +
    • #1432 startcmd.sh broken in 1.7 (milestone 1)
    • +
    • #1433 Profiling filter included multiple times (milestone 1)
    • +
    • #1437 Fatal UTF-8 error in .job.xml (milestone 1)
    • +
    • #1456 XHTML Build failed when referencing subject scheme in different file path (milestone 1)
    • +
    • #1080 Index page range issues (milestone 2)
    • +
    • #1423 Formatting glitch in PDF index (milestone 2)
    • +
    • #1468 Reference to remote image does not appear in PDF (milestone 2)
    • +
    • #1469 @outputclass and @class values not passed from <chhead> to <tr> in XHTML output (milestone 2)
    • +
    • #1472 PDF output: whitespace not preserved in msgblock element (milestone 2)
    • +
    • #1475 Error received in console does not point correctly to location of published DITA Map (milestone 2)
    • +
    • #1477 Tables: using percentage in colwidth values [PDF2 plugin] (milestone 2)
    • +
    • #1464 Flagging a simpletable row throws off @keycol counting bug (milestone 2)
    • +
    • #1459 Link not created in the XHTML output for a xref/@keyref element
    • +
    • #1473 Troff output not working in latest build bug troff
    • +
    • #1498 White space will break tocjs
    • +
    • #1519 Latest code in develop branch fails to build PDF
    • +
    • #1528 PDF fails when topic referenced with and without topic ID (maintenance 1)
    • +
    • #1529 NPE when topichead has @copy-to and @chunk="to-content" (maintenance 1)
    • +
    • #1535 Specialized class cannot be handled during XML parsing (maintenance 1)
    • +
    • #1537 Whitespace issue when @conref is preceded by a linefeed in map <title> (maintenance 1)
    • +
    • #1538 Incorrect handling of topics outside of map path (maintenance 1)
    • +
    • #1531 CSS link generated with backslash on Windows (maintenance 2)
    • +
    • #1532 Keyref link generated with backslash and %5C on Windows (maintenance 2)
    • +
    • #1540 Add missing @class attribute to <navref> in chunking phase (maintenance 2)
    • +
    • #1547 startPageNumbering missing from some page sequence (maintenance 2)
    • +
    • #1073 Some elements are not handled correctly in troff transform (maintenance 3)
    • +
    • #1175 pdf2 plugin: PDF transform produces invalid FO doc with DITAVAL (flag on simpletable) (maintenance 3)
    • +
    • #1234 pdf2 plugin: Note image path broken for "other" note type (maintenance 3)
    • +
    • #1373 Cells of a Properties table misaligned in PDF output if Value column is missing (maintenance 3)
    • +
    • #1563 path2project generated PI is invalid in copy-to file (maintenance 3)
    • +
    • #1570 pdf2 plugin: 'Body first header' variable does not support 'prodname' parameter (maintenance 3)
    • +
    • #1571 pdf2 plugin: top level topic titles styled as normal text (maintenance 3)
    • +
    • #1581 pdf2 plugin: Change bars from DITAVAL crash FOP (maintenance 3)
    • +
    • #1584 Add basic table support to troff #1073 (maintenance 3)
    • +
    • #1585 Properties table cell misalligned if no value column #1373 (maintenance 3)
    • +
    • #1603 XSD schema for Machinery Task does not allow attributes in prelreqs element (maintenance 3)
    • +
    +
    +
    +
    +
    diff --git a/release-notes/rel2.0.dita b/release-notes/rel2.0.dita new file mode 100644 index 0000000..67d4b15 --- /dev/null +++ b/release-notes/rel2.0.dita @@ -0,0 +1,591 @@ + + + + + + DITA Open Toolkit 2.0 Release Notes + + Release Highlights + +
    +

    DITA Open Toolkit Release 2.0 includes the following significant enhancements:

      +
    • New dita command line tool provides a simple command interface
    • +
    • XSLT stylesheets have been converted to XSLT 2.0
    • +
    • Processing order of keys and conrefs has been changed to optimize processing speed for many + documents
    • +
    • Initial preview support for many features from the upcoming DITA 1.3 standard
    • +
    • Major refactoring to remove unused, out of date, or deprecated code in Java and XSLT
    • +
    • Faster PDF output generation
    • +
    +

    +

    For details on these and all other enhancements, see the sections below.

    +
    +
    +
    + + + Requirements + +
    + Add info on new minimum Java version or any other requirements that have + changed since previous release. +

    DITA Open Toolkit Release 2.0 requires the Java Runtime Environment (JRE) or Java Development Kit (JDK), + version 7 or later.

    +
    +
    +
    + + Resolved Issues + The following items are included in DITA Open Toolkit Release 2.0. Issue numbers correspond to the + tracking number in the GitHub issues + tracker. + +
    + Initial Preview Support for DITA 1.3 +
      +
    • + #1649 + Support DITA 1.3 link syntax (milestone 2)
    • +
    • + #1636 + Support DITA 1.3 cascade attribute (milestone 2)
    • +
    • + #1635 + Implement DITA 1.3 profiling (milestone 2)
    • +
    • + #1651 Add + new DITA 1.3 highlighting elements (milestone 4)
    • +
    • + #1652 Add + DITA 1.3 markup and xml domain support (milestone 4)
    • +
    • + #1654 Add + DITA 1.3 div element (milestone 4)
    • +
    +
    +
    + Feature Requests +
      +
    • +

      The filtering logic has been extended to catch cases which could cause PDF rendering to fail when + "exclude" actions in ditaval filtering result in empty elements.

        +
      • + #1192 Empty <ul></ul> kills FOP (milestone 1)
      • +
      • + #1610 Filtered content leads to total fail of PDF rendering duplicate (milestone 1)
      • +

    • +
    • +

      The format of figure and table references in PDF output can now be defined using the same parameters that + govern HTML output.

      +

      The args.figurelink.style and args.tablelink.style Ant + parameters are now also considered when generating PDF output. The and + options previously available for HTML-based output formats can now also be + applied to PDF output. By default PDF uses the new value to include both the + number and title of the referenced figure or table as in previous toolkit versions. The + value is not supported for other transform types.

        +
      • + #1267 PDF support for figurelink/tablelink.style (milestone 1)
      • +

    • +
    • +

      The XSLT processing has been updated to use the XHTML output method for XHTML 1.0 and assign the + mandatory xhtml namespace to the the generated HTML root element: + <html xmlns="http://www.w3.org/1999/xhtml">

      +

      This ensures the XSL processor formats elements in the output with XHTML syntax (self-closing elements + include an additional space for browser compatibility).

        +
      • + #1347 Issue with "xsl/dita2xhtml.xsl"? (milestone 1)
      • +

    • +
    • + TODO: Add extended description to Release Highlights +

      A new dita command line tool wraps Ant processing into a single command. The CLI sets + all required environment variables and allows you to run DITA-OT without setting up anything beforehand. + Instead of calling java or ant, you can now run + dita -f format -i input [options] + The command line tool is a wrapper around the Ant interface; it takes the simplified parameters as input, + converts them to Ant parameters, and then runs an Ant build. The command-line tool supports a subset of + the parameters that are available to the Ant builds. For example, use the option + instead of to set the output format, and use insted of + to set the input file.

        +
      • + #1506 New command line tool (milestone 1)
      • +

    • +
    • + TODO: Add to Release Highlights / Migration sections +

      The XSLT stylesheets for preprocessing and transformation types have been converted to version 2.0 and + EXSLT extensions like node-set have been removed. If you have customized versions of these stylesheets in + your own plugins, you may need to adjust them for compatibility with XSLT 2.0.

        +
      • + #1507 Convert XSLT to version 2.0 (milestone 1)
      • +

    • +
    • +

      Apache Ivy is now used to resolve project dependencies. A new ivy.xml file lists the + resources necessary to build the project. Ivy uses this list to resolve and download the necessary + resources from an artifact repository, so the corresponding libraries were removed from the Git + repository. (They are still included in the /lib/ folder of the appropriate client + distribution packages.)

        +
      • + #1511 Use Ivy for dependency management (milestone 1)
      • +

    • +
    • +

      A new transformation type is now available to produce output compatible with the + HTML5 + recommendation recently published by the W3C. This uses the dita2html5 shell to + extend the existing transform for HTML5-compatible output. The resulting HTML files + use the !DOCTYPE html document type declaration instead of the XHTML 1.0 Transitional output + generated by the transformation. To support legacy browsers that don't recognize + the preferred short doctype, the SYSTEM keyword is included in the declaration with the + "about:legacy-compat" value.

        +
      • + #1522 Add HTML5 transtype (milestone 1)
      • +

    • +
    • +

      The Ant scripts and stylesheets in the HTML and XHTML transformation types have been refactored to reduce + code duplication. If you have customized versions of these files in your own + plugins, you may need to adjust them for compatibility with DITA-OT 2.0.

        +
      • + #1523 Reduce HTML/XHTML code duplication (milestone 1)
      • +

    • +
    • +

      The custom print filtering code has been replaced with a generated DITAVAL filter file that is applied to + all print-oriented transformation types. The dita.transtype.print plug-in extension point + introduced in DITA-OT 1.5.4 is used to declare a transtype as a print type. When output is generated via + plugins that include this property, the following DITAVAL filter is applied:<val> + <prop att="print" val="yes" action="include"/> + <prop att="print" val="printonly" action="include"/> + <prop att="print" val="no" action="exclude"/> + <prop att="print" action="include"/> +</val>

        +
      • + #1524 Use DITAVAL for print filtering (milestone 1)
      • +

    • +
    • +

      The coderef element now supports fragment identifiers as specified in along with the custom line-range fragment function previously added in DITA-OT + 1.8.

      +

      You can use fragment identifiers to refer to specific parts of a file by line position or range. For + example, the following coderef includes a range of lines from an external file in a + codeblock.

      +

      <coderef href="Parser.scala#line=4,10" format="scala"/> +

        +
      • + #1548 Support RFC 5147 in coderef (milestone 1)
      • +

    • +
    • +

      The list of chunked topics is now included in the full list of DITA topics, rather than generating a + separate list for topics that were created as a result of chunking. All chunk-generated content is now + treated as if it was part of the original input set.

        +
      • + #1561 Combine chunkedtopic lists into fullditatopic list (milestone 1)
      • +

    • +
    • +

      An Index is now created when generating PDF output via Apache Formatting Objects Processor (FOP).

        +
      • + #1569 Index capability with FOP (milestone 1)
      • +

    • +
    • +

      Single-topic PDFs now include only the topic content, rather than generating a cover page and table of + contents as in previous versions of DITA-OT.

        +
      • + #1601 Change output for rendering a single topic to PDF (milestone 1)
      • +

    • +
    • +

      Plugins can now be installed and removed via the new dita command line tool.

      +

      $ dita -install <plugin-zip-path> +$ dita -uninstall <plugin-id>

      +

      Plugins provided as ZIP or JAR files are extracted to the plugins folder on + installation. A new plugin folder is created based on the plugin ID in the plugin.xml + file. If the plugin.xml is located in a subfolder inside the archive, that subfolder + is treated as the plugin folder. After the plugin is extracted, the integration process is run. The + uninstall operation removes the subfolder with the specified ID from the plugins + folder and runs the integration process to update the list of registered plugins.

        +
      • + #1602 Add plug-in installation operation to integration (milestone 1)
      • +

    • +
    • +

      HTML output now wraps scalable vector graphics (SVG) images in an img element like all + other image types, rather than in an embed element. This ensures that SVG images in + cross-references are correctly rendered as hyperlinks in HTML-based output formats.

        +
      • + #1608 img should be used instead of embed in XHTML output for all image types (milestone + 1)
      • +

    • +
    • +

      The bundled distribution of Apache Ant has been updated from version 1.8.4 to 1.9.2. For details on the + changes in recent Ant versions, see Ant Project News.

        +
      • + #1612 Update Ant to 1.9.2 (milestone 1)
      • +

    • +
    • +

      PDF builds no longer require Apache FOP to be present in the fop/lib folder of the + PDF plugin. Previous versions of DITA-OT expected to find Apache FOP in the default location and issued an + error if the path was not present (even if FOP was available in an alternate location).

        +
      • + #1614 ant build should not bail out when fop directory has no lib folder (milestone 1)
      • +

    • +
    • +

      The deprecated legacy PDF transformation is no longer included in the default distribution packages.

        +
      • + #1616 Remove legacy PDF from default distributions (milestone 1)
      • +

    • +
    • +

      The deprecated integrator.properties file has been removed. The integration-related + properties and are now specified along with + other configuration properties in the lib/configuration.properties file.

        +
      • + #1509 Remove deprecated code (in progress)
      • +

    • +
    • +

      Additional HTML entities have been added to the entities.properties file that is + used in the HTMLHelp transformation to provide support for Greek characters and other commonly used + special characters in Windows help files (CHM).

        +
      • + #1644 Add more HTML entities to file entities.properties in dost.jar (milestone 2)
      • +

    • +
    • +

      The @location attributes in integration-generated Ant properties now use the forward slash character (/) + as directory separator to ensure that generated pathnames are compatible with both UNIX and Windows.

        +
      • + #1643 Integrator task constructs property constructs with platform-dependent path separators + (milestone 2)
      • +

    • +
    • +

      The order of preprocessing stages has been optimized to move keyref processing before conref processing. + This provides significant performance gains for source that uses multiple key references within reusable content.

        +
      • + #1631 Process keyrefs before conref (milestone 2)
      • +

    • +
    • +

      Removed support for the rarely used generate.copy.outer= option + that generated output for content located outside the DITA map directory. If output must be generated for + content that is not located in or beneath the directory containing the DITA map file, option + should be used instead to shift the output directory so that it contains all output + for the publication.

        +
      • + #1673 Remove support for generate.copy.outer=2 (milestone 3)
      • +

    • +
    • +

      New templates and variables have been added to make it easier to include a back cover in PDF output. A + new generate-back-cover option is now provided in the + basic-settings.xsl file in the cfg/fo/attrs/ folder of the PDF + plugin. This option is disabled by default. An empty XSL template named + createBackCoverContents has been added to xsl/fo/front-matter.xsl. + Custom PDF plugins can enable back cover generation and adjust the template to include images or text on + the last page of PDF files.

        +
      • + #1671 Add support for generating back cover on PDF (milestone 3)
      • +

    • +
    • +

      The redundant code that supported legacy FrameMaker syntax for indexterm elements has + been removed. The same functionality is available with a preprocessing step.

        +
      • + #1667 Remove FrameMaker index syntax support (milestone 3)
      • +

    • +
    • +

      When generating PDF output for bookmaps, the notices element in + frontmatter now uses the preface static contents template to ensure that page numbering + is consistent with the numbering scheme used for other frontmatter content.

        +
      • + #1186 PDF2: update processTopicNotices staticcontents (milestone 4)
      • +

    • +
    • +

      Localization strings for all transformation types can now be configured in one place by specifying the + variable.file.url parameter.

        +
      • + #1188 Localization should be independent of transtype. (milestone 4)
      • +

    • +
    • +

      An error message has been added to alert users if the root ditamap contains a topicref + element that refers to a submap without setting the format attribute to . In + processing mode, the debug filter will add the missing attribute for links to maps, + but it will not fix any existing incorrect format values.

        +
      • + #1310 Improve error message during topicmerge step in case format attribute is incorrect + (milestone 4)
      • +

    • +
    • +

      The DTDs and XML Schemas included with the toolkit have been bundled as plugins to facilitate maintenance + and customization.

        +
      • + #1508 Move DTDs and XML Schemas to plug-ins (milestone 4)
      • +

    • +
    • +

      PDF output is now generated faster as a result of performance optimizations in the XSLT stylesheets of + the PDF2 plugin.

        +
      • + #1672 Performance optimizations for the PDF2 plugin (milestone 4)
      • +

    • +
    • +

      The default map processing for HTML now generates a cover page with a table of contents in an HTML5 + nav element rather than generating a separate ToC file for use in a frameset.

        +
      • + #1674 Change HTML default TOC to cover with TOC (milestone 4)
      • +

    • +
    • +

      Figure descriptions in HTML output now appear in the same paragraph as the figure title.

        +
      • + #1695 In XHTML output the figure title and figure description should be in the same + paragraph (milestone 4)
      • +

    • +
    • +

      The interdependent maplink and move-links preprocessing steps have been merged into a single step.

        +
      • + #1714 Merge maplink and move-links preprocessing steps (milestone 4)
      • +

    • +
    • +

      Topic references inside glossarylist elements are now supported in PDF output. They are + treated like regular nested topics.

        +
      • + #1719 Restore glossarylist check introduced in #1659 (milestone 4)
      • +

    • +
    • +

      If the lines of program listing are too long to fit into one line, they can now be marked with the + ► character (&#x25BA;) to indicate that code continues on the next line. Lines + will be automatically wrapped at this character.

        +
      • + #1735 Support marking wrapped lines in codeblock (milestone 4)
      • +

    • +
    • +

      Profiling attributes set on DITA content are now mapped to their equivalent HTML5 data- + attributes. This allows you to use Javascript or CSS rules to show/hide parts of the output based on user roles.

        +
      • + #1739 Map profiling attributes set on DITA elements to equivalent HTML5 "data-" attributes + (milestone 4)
      • +

    • +
    • +

      A new root-chunk-override parameter has been added to support overrides to the root + map chunk value.

        +
      • + #1742 Add override for map chunk (milestone 4)
      • +

    • +
    • +

      The Java code has been refactored to use URI and File objects instead of Strings to permit automatic + validation of values.

        +
      • + #1544 Use URI and File instead of String (in progress)
      • +

    • +
    +
    +
    + Bugs +
      +
    • + #1095 + Empty tags result in invalid HTML (milestone 1)
    • +
    • + #1239 + Essentially needs XercesImpl (milestone 1)
    • +
    • + #1247 + Enable specifying MathML file as image/@href (milestone 1)
    • +
    • + #1272 + chapter numbering confused when chapters and parts in bookmap (milestone 1)
    • +
    • + #1407 + "Ambiguous rule match" in PDF processing XSLT when <imagemap> is used in topic (milestone 1)
    • +
    • + #1421 + Warnings when converting to PDF with XEP (milestone 1)
    • +
    • + #1462 + Support for <table> rowheader in PDF output (milestone 1)
    • +
    • + #1486 PDF + transform does not apply @rowsep correctly (milestone 1)
    • +
    • + #1607 + Keyref not processed for pushed conrefs (milestone 1)
    • +
    • + #1620 ODT + plugin fails due to missing getMax() (milestone 2)
    • +
    • + #1619 Add + validation for attribute generalization (milestone 2)
    • +
    • + #1103 + DITA-OT doesn't rewrite lq/@href (milestone 2)
    • +
    • + #1668 Fix + table cell @id and @headers attributes #1596 (milestone 3)
    • +
    • + #1634 XML + Catalog which has a DOCTYPE declaration is not properly parsed by Integrator task (milestone 3)
    • +
    • + #1596 xref + to table cell of DITA simple table does not result in correct target in <a> element (XHTML output) + (milestone 3)
    • +
    • + #1539 + TopicMerge generates multiple topic entries in the merged middle file. (milestone 3)
    • +
    • + #1231 + <screen> and <codebock> do not support all frame attributes (milestone 3)
    • +
    • + #1086 + metadata in ancestor map not inherited by topics in childmap (milestone 3)
    • +
    • + #1183 + PDF2: image/@placement='break' breaks keeps. (milestone 4)
    • +
    • + #1209 + border-after-width.conditionality mismatches border-bottom (milestone 4)
    • +
    • + #1344 + <related-links> element breaks child links (milestone 4)
    • +
    • + #1488 Doc + gives wrong value for onlytopic.in.map, or code uses wrong value (milestone 4)
    • +
    • + #1678 + Potential memory leaks in DITA OT 1.8 (probably also 1.7) (milestone 4)
    • +
    • + #1679 + DITA-OT 2.0 M 3: maprefImpl.xsl: XPTY0004: A sequence of more than one item is not allowed as the first + argument of contains() (milestone 4)
    • +
    • + #1682 + DITA-OT 2.0 M 3: nested topicref elements cause false warnings on wrong topic type (DOTX019W) (milestone + 4)
    • +
    • + #1684 + Internal links in conreffed topic are not properly re-written (milestone 4)
    • +
    • + #1693 + Preserve @class and @outputclass values for DITA Map topicrefs in XHTML output (milestone 4)
    • +
    • + #1700 + VERSION_PATTERN typo (milestone 4)
    • +
    • + #1701 + Frame attribute not supported for fig element (milestone 4)
    • +
    • + #1711 The + "path2project-uri" is not output in chunked topics [DITA OT 1.8] (milestone 4)
    • +
    • + #1712 PDF2 + pipeline throws MalformedURLException (milestone 4)
    • +
    • + #1727 Obey + @scalefit attribute on an image (milestone 4)
    • +
    • + #1728 + Conref push into codeblock causes angle brackets in output (milestone 4)
    • +
    • + #1732 + xrefs to <preface> topics fail in PDF2 output in 1.8.4 (milestone 4)
    • +
    +
    +
    + Maintenance Release 2.0.1 +
      +
    • + #1744 + copy-to attribute not processed correctly (error DOTX008E) in XHTML transtype on a topicref included in a + child map
    • +
    • + #1790 FO: + Xref processing does not handle case of key with no remote resource or link text
    • +
    • + #1806 IDs + are not preserved on <bodydiv> element
    • +
    • + #1808 + DITA-OT 2.0: PDF bookmarks (TOC, index) not in language indicated in source files
    • +
    • + #1810 + DITA-OT 2.0: typo in PDF-plugin, xsl/fo/toc.xsl ("boookmap")
    • +
    • + #1811 + Filtering doesn't support @deliveryTarget
    • +
    • + #1813 + Mappull step fails with nested concept
    • +
    • + #1814 Task + with links and nested task fails in XHTML
    • +
    • + #1815 + Convert String to double Error message when we try to generate pdf
    • +
    • + #1826 OT + 2.0: Map with subject scheme and non-below map fails
    • +
    +
    +
    +
    + +
    diff --git a/release-notes/rel2.1.dita b/release-notes/rel2.1.dita new file mode 100644 index 0000000..6b25b55 --- /dev/null +++ b/release-notes/rel2.1.dita @@ -0,0 +1,387 @@ + + + + + + DITA Open Toolkit 2.1.2 Release Notes + + DITA Open Toolkit 2.1.2 is a maintenance release that includes fixes for reported + issues. + + + + + Requirements + +
    + Add info on new minimum Java version or any other requirements that have + changed since previous release. +

    DITA Open Toolkit Release 2.1 requires the Java Runtime Environment (JRE) or Java + Development Kit (JDK), version or later.

    +
    +
    +
    + + + Resolved issues + The following items are included in DITA Open Toolkit Release 2.1. Issue numbers + correspond to the tracking number in the GitHub issues + tracker. + + +
    + Maintenance Release 2.1.2 +

    DITA Open Toolkit Release 2.1.2 includes the following bug fixes:

    +
      +
    • +

      Index terms starting with “Ñ” are no longer dropped from Spanish PDF indexes. They are now handled with + the correct Spanish sort order and placed in a group between “N” and “O”, under the “Ñ” heading.

        +
      • + #2068 Add support for n-tilde in Spanish index
      • +
      +

      +
    • +
    • +

      References to external code samples are now resolved properly when @coderef attributes + target non-XML resources and the output directory is shifted by setting the + generate.copy.outer parameter to .

        +
      • + #2044 Non-XML coderef fails on outer context
      • +
      +

      +
    • +
    • +

      Warnings for deprecated templates are now displayed with the correct message prefix: + DOTX.

        +
      • + #2043 Warning for deprecated templates fails
      • +
      +

      +
    • +
    +
    +
    + Maintenance Release 2.1.1 +

    DITA Open Toolkit Release 2.1.1 includes the following bug fixes:

    +
      +
    • +

      Whitespace in <image> elements is now ignored in PDF output to prevent errors when + rendering XSL:FO.

        +
      • + #1985 XEP error: Element 'fo:external-graphic' must be empty
      • +
      +

      +
    • +
    • +

      Any proportional table column widths expressed in the CALS table model as "*" are now normalized to the + equivalent "1*" value to prevent errors while generating XHTML output.

        +
      • + #1978 colwidth="*" causes Fatal Error! Cannot convert string "" to a double
      • +
      +

      +
    • +
    • +

      In DITA Open Toolkit 2.0.1, the line ending characters in shell files were inadvertently changed to + Windows (CRLF) line endings. The correct UNIX (LF) line endings have now been restored.

        +
      • + #1954 bin/ant throws errors when executed in Ubuntu shell
      • +
      +

      +
    • +
    +
    +
    + Feature requests and changes +

    DITA Open Toolkit Release 2.1 includes the following new features and changes:

    +
      +
    • +

      In PDF output, inline <codeph> elements in topic titles now inherit the font size + from the surrounding title text.

        +
      • + 1874 + Codephrase used in topic title has very small font
      • +
      +

      +
    • +
    • +

      Image metadata processing has been refactored to improve the processing speed by determining width and + height without reading the entire image into memory.

        +
      • + 1883 + Faster implementation for ImgUtils.getWidth/getHeight
      • +
      +

      +
    • +
    • +

      Obsolete CHM configuration files have been removed from the PDF2 plugin.

        +
      • + 1897 + DITA OT 2.1.dev chm properties folder in org.dita.pdf2
      • +
      +

      +
    • +
    • +

      The code for the transformation has been refactored into two separate steps to + enable re-use in other plain-text—based transformation types. The first step generates an abstract syntax + tree with div/span syntax, and the second takes that intermediate format and creates troff output. Two new + extension points are available to override the processing performed in each step:

      + +
      dita.xsl.troff-ast
      +
      Overrides the intermediate block-and-phrase format generated as input to troff processing.
      +
      + +
      dita.xsl.troff
      +
      Overrides the XSL that converts block-and-phrase intermediate markup into troff.
      +
      +
      +
        +
      • + 1910 + Refactor troff code to be usable for other text-like transform types
      • +
      +

      +
    • +
    +

    Milestone 1 included the following new features and changes:

    +
      +
    • +

      The chapterBody XSL template mode has been refactored to create additional HTML5 groups + in the generated HTML <body> element.

      +

      DITA topics are now mapped to the HTML5 <article> element, DITA + <section> to <section>, and DITA <fig> to + <figure>.

      +

      HTML5 @aria-labelledby accessibility attributes are also generated to associate each + article with its heading. This helps to improve the accessibility and interoperability of HTML output by + providing structural information to assistive technologies such as screen readers.

        +
      • + 1179 + Added HTML generation extension for body content
      • +
      +

      +
    • +
    • +

      Additional file formats referenced from <image> elements are now copied to output. + Any references that are not DITA, DITA map, or image, are now treated as resources and also copied, so you + no longer need extra <copy> operations in your project build scripts to include such + assets in output.

        +
      • + 1687 + More recognized default resource extensions in the plugins base
      • +
      +

      +
    • +
    • +

      DITA-OT now fails with a fatal error (DOTA013F) if a specified .ditaval filter file is not available. + This ensures that unexpected output is not generated if the filter file is missing or invalid.

        +
      • + 1703 + Link to missing DITAVAL file should show a relevant error code in the console
      • +
      +

      +
    • +
    • +

      The generate-debug-attributes and processing-mode configuration + options have been moved to runtime properties, so you can now pass these parameters at build time to + specify whether the @xtrf and @xtrc debugging attributes should be + generated, and how the DITA-OT handles errors and error recovery. For more information, see common parameters.

        +
      • + 1799 + Move configuration options to runtime properties
      • +

      +
    • +
    • +

      The deprecated Java command line tool has been removed in favor of the dita command + introduced in DITA-OT 2.0.

      +

      If you previously generated output via a Java command sequence such as + java -jar lib/dost.jar /i:input-file /transtype:transformation-type /parameter-name:value + you should now use the following syntax instead: dita -f transformation-type -i input-file -o output-dir +

        +
      • + 1800 + Remove old Java command line tool
      • +
      +

      +
    • +
    • +

      The custom FileUtils code used to handle input and output in earlier versions of DITA-OT + has been replaced with the Apache Commons IO utilities library.

        +
      • + 1803 + Use Commons IO
      • +
      +

      +
    • +
    • +

      Support for the args.odt.img.embed parameter has been removed from OpenDocument + format transformations.

      +

      The previous default behavior was to embed images as Base64-encoded text, but editors do not use this as + a default. Instead, office packages such as LibreOffice will convert embedded images into linked images on + opening and saving an ODT file.

        +
      • + 1832 + Remove support for args.odt.img.embed
      • +
      +

      +
    • +
    • +

      Keydef processing has been removed from the XHTML rendering code

      +

      Keys are now resolved in one preprocessing step, whereas in earlier versions of DITA-OT, the XHTML code + returned to the keydef.xml file to look up targets for phrase elements and pull in + text when needed. This change affects non-linking elements that can't take @href + attributes, such as <ph>, <keyword>, <cite>, + <dt>, <term>, and <indexterm> (when + $INDEXSHOW is active).

        +
      • + 1837 + Remove keydef processing from XHTML rendering code
      • +
      +

      +
    • +
    • +

      A new dita.parser extension point has been added to allow plug-ins to contribute a + custom parser for DITA files.

      +

      If a custom DITA parser is defined, the preprocessing routines will use it during the gen-list and + debug-filter stages to output DITA XML.

        +
      • + 1847 + Extension-point for custom DITA parsers
      • +
      +

      +
    • +
    +
    +
    + Bugs +

    DITA Open Toolkit Release 2.1 provides fixes for the following bugs:

    +
      +
    • 1513 + Suspected memory leak in OT bug preprocess
    • +
    • 1694 + Cannot convert string to double
    • +
    • 1854 + integrator.xml should also load the necessary "commons-io.jar"
    • +
    • 1870 + PDF2 output plugin fails rendering tables
    • +
    • 1872 + Link to index term repeats itself
    • +
    • 1877 + Searchtitle Incorrectly Used for HTML Title
    • +
    • 1888 + build.xml help target documentation is incorrect ant interface
    • +
    • 1889 + @class missing from choicetable XHTML output
    • +
    • 1890 + properties table XHTML output
    • +
    • 1894 Fix + unitless length-to-pixels
    • +
    • 1921 + Error reported during flagging
    • +
    • 1922 + Index continued markers don't work if both primary and its secondary entries continue
    • +
    • 1927 In + the key() function, the node supplied in the third argument (or the context node if absent) must be in a + tree whose root is a document node
    • +
    • 1932 + when running ./dita, console shows "No such file or directory" when directory contains spaces
    • +
    +

    Milestone 1 provided fixes for the following bugs:

    +
      +
    • + 1415 + Filtering doesn't support default for rev flagging
    • +
    • + 1840 + Keyref processing doesn't use only first keyword or term
    • +
    • + 1849 Some + XSLT XPaths do not properly use the @class attribute to select elems
    • +
    +
    +
    + Maintenance Release 2.0.1 + DITA Open Toolkit Release 2.1 also included the following bug fixes that were + released earlier this year with maintenance version 2.0.1. +
      +
    • + #1744 + copy-to attribute not processed correctly (error DOTX008E) in XHTML transtype on a topicref included in a + child map
    • +
    • + #1790 FO: + Xref processing does not handle case of key with no remote resource or link text
    • +
    • + #1806 IDs + are not preserved on <bodydiv> element
    • +
    • + #1808 + DITA-OT 2.0: PDF bookmarks (TOC, index) not in language indicated in source files
    • +
    • + #1810 + DITA-OT 2.0: typo in PDF-plugin, xsl/fo/toc.xsl ("boookmap")
    • +
    • + #1811 + Filtering doesn't support @deliveryTarget
    • +
    • + #1813 + Mappull step fails with nested concept
    • +
    • + #1814 Task + with links and nested task fails in XHTML
    • +
    • + #1815 + Convert String to double Error message when we try to generate pdf
    • +
    • + #1826 OT + 2.0: Map with subject scheme and non-below map fails
    • +
    +
    +
    +
    + +
    diff --git a/release-notes/rel2.2.dita b/release-notes/rel2.2.dita new file mode 100644 index 0000000..aadaf0b --- /dev/null +++ b/release-notes/rel2.2.dita @@ -0,0 +1,761 @@ + + + + + + DITA Open Toolkit 2.2.5 Release Notes + + + DITA Open Toolkit 2.2.5 is a maintenance release that fixes issues + reported in DITA-OT 2.2, which includes new features and enhancements and additional + support for the OASIS DITA 1.3 specification. +

    Issue numbers correspond to the tracking number in the + GitHub issues tracker.

    +
    + + + Maintenance Release 2.2.5 + +
    +

    DITA Open Toolkit Release 2.2.5 includes the following bug fixes.

    +
      +
    • In earlier toolkit versions, the Word RTF transformation produced invalid RTF output when source + files contained tables with absolute column widths. Processing has been modified to treat all widths as + proportional, including units given in inches, centimeters, millimeters, or points. Absolute units are not + respected, but the toolkit now generates valid RTF output rather than crashing. + #1190, + #2333 +
    • +
    • References to empty ditamap files threw the DOTX031E error message during the + mapref processing stage. The toolkit no longer checks for subelements in the map and will now continue + processing as long as a root node is available. + #1549, + #2336 +
    • +
    • Several error messages generated during index processing for PDF output have been clarified to + better explain the cause of the error and provide more helpful information on how to resolve the issue. + #1709, + #2327 +
    • +
    • Links to dlentry elements were broken in PDFs generated via Apache FOP, + as FOP does not support the id attribute on table rows. To work around this issue, DITA-OT + now moves the ID from the dlentry to an fo:inline element + in the first term when rendering PDF output via FOP. + #1764, + #2198 +
    • +
    • The DITA-OT 2.0 HTML5 transformation declared several XSL extension points that were not fully + implemented: +
        +
      • dita.xsl.html5
      • +
      • dita.xsl.html5.toc
      • +
      • dita.xsl.html5.cover
      • +
      Three new templates now provide the necessary dita:extension elements to add + custom XSLT processing to the HTML5 transformation. + #1876, + #2313, + #2342 +
    • +
    • The OASIS catalogs for DITA 1.3 pointed to a series of non-existent resources. The catalog files + have been updated to remove spurious file references and errata have been submitted to OASIS for inclusion + in the original source catalogs. + #2266, + #2320 +
    • +
    • Performance of previous toolkit versions suffered substantially if a single warehouse topic was + used to store a large number of blocks for reference instead of multiple smaller warehouse topics with the + same total number of blocks. An expensive XPath expression in the content reference processing phase was + replaced with an optimized expression that dramatically reduces publication time in cases with thousands of + following siblings. + #2307, + + #2309 +
    • +
    • In JavaHelp output, the copy-css task was called too early, before the + user.csspath parameter was evaluated, so CSS files were copied to a folder named + ${user.csspath} rather than to the intended location. JavaHelp processing has been + corrected to avoid the duplicate dependency on the copy-css task and ensure that CSS files are handled + correctly. + #2311 +
    • +
    • Two unimplemented parameter extension points were removed from the HTML5 plug-in: +
        +
      • dita.conductor.html5.param
      • +
      • dita.conductor.html5.toc.param
      • +
      Implementers who want to add parameters to the HTML5 transformation can instead require the base HTML + plug-in as well as the HTML5 plug-in and extend the base HTML plug-in's parameter extension points + #2312, + #2314 +
    • +
    • Content reference range processing has been modified to use before << and + after >> expressions rather than following-sibling and check that the conref end + target actually exists. + #2315 +
    • +
    • When a topicsetref element is used to refer to a + topicset, previous toolkit versions threw DOTX019W errors, + suggesting that every reference in the original topicset also specified + type="topicset". Map reference processing has been modified to drop the + type attribute as part of the resolution. This prevents such unintended side effects by + ensuring that the type no longer cascades further down the resolved branch. + #2321, + #2338 +
    • +
    • Support for flagging in HTML output has been imported (rather than included) and moved before + the extension point to allow custom plug-ins to override flagging behavior. + + + #2329 +
    • +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    +
    +
    + + + Maintenance Release 2.2.4 + +
    +

    DITA Open Toolkit Release 2.2.4 included the following bug fixes.

    +
      +
    • The title is now used as link text when links are specified using a + title element (or specialized variant) as link target. This approach allows the + toolkit to be more lenient when authors link to a glossterm rather than to the + parent glossentry element, or to figure or table titles instead of the + fig or table element structure + recommended by the + . + #2283 +
    • +
    • The default value for the args.copycss parameter has been explicitly set to + . Previous toolkit versions never initialized a default value, and only copied the + custom .css file if the parameter was set to . + #2278 +
    • +
    • Hyperlink reference processing has been modified to guard against error conditions caused by + Windows-style path separators in href attribute values. Any backslashes are converted to + forward slash (“/”) characters to ensure that the attribute values are valid URI references according to + . + #2274 +
    • +
    • A typo was fixed in the common string logic for the PDF plug-in to retrieve the proper localized + string for the task “Results” label that appears when args.gen.task.lbl is set to + . + #2270, + #2216, + #2203 +
    • +
    • DITA-OT 2.2 introduced a regression in which topics referenced via keys in submaps were not + included in the table of contents. The keyref resolution mechanism has been corrected to ensure that key + references in submaps are correctly resolved. + #2264 +
    • +
    • A new DOTJ068E error message was added to report cases when a conref "mark" + action is used to mark a target element without a corresponding content reference target (for example, when + the order of the "mark" element and the pushed element is reversed). + #1293 +
    • +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    +
    +
    + + + Maintenance Release 2.2.3 + +
    +

    DITA Open Toolkit Release 2.2.3 included the following bug fixes.

    +
      +
    • Specifying the source of a long quote with a keyref attribute on a + longquoteref element caused a Null Pointer Exception. The keyref parser has been + modified to ensure that key references on long quote references are correctly resolved. + #2246 +
    • +
    • The keyscope cascading mechanisms for branch filtering have been modified to comply with the + . In cases where no keyscope attribute is specified on a + filtered branch, the prefix and/or suffix values specified in dvrKeyscopePrefix / + dvrKeyscopeSuffix are now used as the effective key scope names. Key scope + prefixes and suffixes are no longer propagated to descendant key scopes, but only applied to the branch + parent. + #2240 +
    • +
    • PDF: In DITA-OT 2.2.2, if a link element contained both + linktext and a description in the desc element, the + hyperlink was rendered with the contents of the desc element appended to the + contents of the linktext element. Link processing has been modified to ensure that + link elements with descriptions are rendered correctly. + #2236 +
    • +
    • PDF: Index term processing has been revised to ensure that indexes in PDF output generated with + Apache FOP correctly include page ranges when start and end attributes are + defined on indexterm elements and the terms of the index range appear on different + pages. A single page reference is generated in cases where both occurrences of the index term appear on the + same page. + #2214 +
    • +
    • ODT: The OpenDocument Text transformation has been revised to support SVG images for which image + dimensions are not specified via height and width attributes. + #2211 +
    • +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    +
    +
    + + + Maintenance Release 2.2.2 + +
    +

    DITA Open Toolkit Release 2.2.2 included the following bug fixes.

    +
      +
    • PDF: In earlier DITA-OT 2.x releases, short description content was not rendered when publishing + from a bookmap with the args.chapter.layout parameter set to . + Short descriptions are now rendered properly. + #2023 +
    • +
    • Windows: The name of the JAR file for Apache Ant has been corrected to fix the + ANT_HOME is set incorrectly or ant could not be located error that appeared when running + the bundled Ant version on Windows in DITA-OT 2.2. + #2172 +
    • +
    • The order in which plug-ins are integrated has been revised to guarantee that the base DITA-OT + plug-ins always come first. This ensures that base target code cannot be overridden. + #2180 +
    • + +
    • Content references with relative paths were not properly resolved to the target document in some + cases. The conref base URI resolution mechanism was fixed to ensure that relative references are now + resolved correctly. + #2192 +
    • +
    • The documentation has been updated with links to the final + .
    • +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    +
    +
    + + + Maintenance Release 2.2.1 + +
    +

    DITA Open Toolkit Release 2.2.1 included the following bug fixes.

    +
      +
    • PDF: Several templates in the pr-domain.xsl file used + value-of rather than apply-templates to output the element contents. + This prevented flagging from working as intended in PDF output. This has been corrected to ensure that + elements in the programming domain are properly flagged. + #2170 +
    • +
    • The name of the JAR file for the Apache Commons library that provides reusable Java components + has been corrected in the integrator Ant script to fix the NoClassDefFoundError error that + appeared when the integrator ran in DITA-OT 2.2. + #2163 +
    • +
    • PDF title metadata is now generated correctly for DITA maps that set the + xml:lang attribute. In certain cases, previous versions of DITA-OT displayed the + XMP structure: 1 label in the Document Properties dialog instead of the map title. + #2154 +
    • +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    +
    +
    + + + Requirements + +
    + Add info on new minimum Java version or any other requirements that have + changed since previous release. +

    DITA Open Toolkit Release 2.2 requires the Java Runtime Environment (JRE) version + or later.

    +
    +
    +
    + + + Release Highlights + +
    + DITA 1.3 support +

    +

    +

    DITA Open Toolkit Release 2.2 extends DITA 1.3 support with the following + enhancements: +

      +
    • Initial implementation of DITA 1.3 branch filtering + #1969, + #1637 +
    • +
    • +
    • +
    • +
    +

    + +
    +
    + New HTML5 output +
      +
    • The transformation has been moved to a separate plug-in to facilitate + customization of modern HTML5-based output. The default CSS has been refactored in + as a foundation for further extensions with CSS frameworks, custom plug-ins and + future toolkit versions. (The original XHTML plug-in remains available to support existing legacy HTML-based + output formats such as TocJS, HTML Help and JavaHelp.) + #2099 +
    • +
    • The transformation has been extended with a new + nav-toc parameter that can be used to generate a table of contents in the HTML5 + nav element of each page. The navigation can then be rendered in a sidebar or + menu via CSS. This parameter is disabled by default (), but can be enabled by setting + the value to (which includes the current topic in the ToC along with its parents, + siblings and children), or (which generates a ToC for the entire map). + #2103 +
    • +
    +
    +
    + PDF supports new languages +

    The transformation has been extended to support additional languages with localized + strings files and index collation. + #2085, + #2089 +

      +
    • Arabic
    • +
    • Catalan
    • +
    • Croatian
    • +
    • Czech
    • +
    • Danish
    • +
    • Hungarian
    • +
    • Icelandic
    • +
    • Latvian
    • +
    • Norwegian
    • +
    • Polish
    • +
    • Portuguese
    • +
    • Portuguese (Brazil)
    • +
    • Slovak
    • +
    • Turkish
    • +
    +

    +
    +
    + + + + +
    + + + Resolved issues + In addition to the highlights mentioned above, DITA Open Toolkit Release 2.2 + includes the following changes. + +
    + Features +

    DITA Open Toolkit Release 2.2 includes the following new features:

    +
      + +
    • The args.artlbl parameter previously provided in HTML-based transformations + to show the source file name along with referenced images has been added to the PDF transformation. For + inline images, the label appears immediately after the image; for standalone images, it appears on a line + following the image. + #2072, + #2062 +
    • +
    • In PDF output, any index entries that begin with special characters are now moved to a dedicated + section of the index. (Previous toolkit versions issued a warning and dropped any unexpected index terms.) + #2073, + #2071 +
    • +
    • The plug-in configuration file resources/plugins.xml generated by the + integration process now adds the xml:base attribute to each plug-in configuration element + so that file paths in the plug-in configuration can be resolved relative to the plug-in folder. This makes + it easier to share a DITA-OT distribution with others via a version control system or bundle it with an + application without re-running the integration process in each installation location. + #2018 +
    • + +
    • The move-meta-entries and mappull steps have been merged. The + mappull step has been moved into move-meta-entries and an empty target + for mappull is retained for backwards compatibility. + #1995 +
    • +
    • The generation of page masters and page sequence masters in the PDF plug-in has been modularized + to make it easier to extend or override the default set of masters. + #1984 +
    • + +
    • The PDF plug-in has been extended with two new extension points for + flagging-preprocess and i18n-postprocess to alllow plug-ins to customize + these steps of the flagging process. + #1976 +
    • + +
    • The key definition reading process has been moved from the gen-list + preprocessing module to the keyref module to further modularize the code and support + additional DITA 1.3 use cases for keys, such as a map that includes a map that then includes another map + with a key definition. + #1962 +
    • +
    • The mapref processing stage has been moved to the beginning of the preprocessing pipeline to + simplify keyref processing and support DITA 1.3 branch filtering by allowing all processing to be performed + on a single map. + #1961 +
    • +
    • The dita + option can now be used to integrate multiple plug-ins at once. If no + file or url argument is provided, the integration process reloads + plug-ins from the plugins directory, so you can unzip multiple plug-ins to the + plugins directory and run dita + to integrate them all at once. + #1957 +
    • +
    • The PDF transformation has been extended with XML catalog support for RenderX XEP. The main + DITA-OT catalog file is now used to ensure that doctypes such as SVG graphics pass validation when + generating PDF output using XEP. + #1955 +
    • +
    • The Java code has been refactored to use URI-based processing (rather than File objects or + Strings) wherever possible to permit automatic validation of values and support the use of external URIs. + This allows non-file resources to be processed with commands such as dita + . + #1544, + #1953 +
    • +
    • Plug-in folders are now sorted before the integration process runs to ensure predictable results + and consistent order each time plug-ins are reloaded. + #1905 +
    • +
    • The metadata format in the plugin.xml file for the + org.dita.xhtml plug-in has been refactored with abstract transtypes that group common + parameters used in multiple transformation types. This approach allows common parameters to be defined in + one place and re-used for multiple output formats as necessary. + #1866 +
    • +
    • The dita command options have been extended to add as a + synonym for the option used to specify the location of the temporary directory. + #1836, + #2039 +
    • +
    • The validation of the table group cols attribute has been relaxed to support + use cases in which tables containing auto-generated cols values are reused via content + references. + #1835 +
    • +
    • The format of the plugin.xml file has been extended to allow plug-ins to + specify the list of public parameters added for each transformation type and announce extensions to a list + of arguments defined in another transtype. + #1757 +
    • +
    +
    + +
    + Enhancements +

    DITA Open Toolkit Release 2.2 includes the following enhancements and changes to + existing features:

    +
      +
    • PDF: Table body rows now use the attribute to prevent + page breaks within rows. + #2118 +
    • +
    • PDF: List item numbers are now aligned with the baseline to prevent issues when list items + include icons or other inline elements that affect line spacing. + #2117 +
    • +
    • PDF: Step section bodies within task topics now honor the $side-col-width value + from basic-settings.xsl, which defines a uniform indent relative to the page margin and + aligns with other body text. (Earlier toolkit versions used a hard-coded 9-mm + setting.) + #2116 +
    • +
    • PDF: The index generation process has been rewritten using XSL keys for better performance. The + optimizations yield significantly faster PDF builds when using Apache FOP. + #2098, + #2086 +
    • +
    • HTML5 and XHTML table border processing has been optimized to match the expected output based on + the table width, column separation, row separation and frame settings in the source files, permit easier + integration of CSS frameworks, and output valid documents. + #2097 +
    • + + +
    • The task headings (About this task, Procedure, etc.) and flags for Optional and Required steps + in the transformation have been synchronized with those available in the common string + files, and transformations. Source files that make use of these + options should now yield more more consistent results when generating output in multiple formats. + #2088 +
    • + +
    • PDF: The index groups for Numerics and Special Characters have been aligned for greater + consistency across languages. + #2080, + #2074 +
    • +
    • PDF: The “pointing finger” image hand.gif is no longer used to highlight + note elements, as it may be considered offensive in some cultures. The image file + is still available for backwards compatibility with any customization that references it, and the "Note + Image Path" variables are still present to permit the use of custom image files, but they are now empty by + default. Text-only note labels appear instead, and the default indentation is reduced by the width of the + empty note image column. + #2076, + #1577 + The warning.gif file is still used for Attention, Caution, Danger and Warning + admonitions. +
    • + + +
    • The outer.control parameter description was corrected to clarify how the + DITA-OT handles content files that are not located in or below the directory containing the master DITA map. + #1707 + #2066 +
    • +
    • Formatter-specific code for XSL-FO rendering engines has been removed from the PDF plug-in and + split into separate plug-ins for Apache FOP, Antenna House Formatter and RenderX XEP. + #2058 +
    • + +
    • The classpath order is now retained when generating the env.sh and + env.bat environment files to ensure predictable results when a plug-in that uses Java + libraries presupposes a certain classpath order. + #2053 +
    • +
    • The PDF2 flagging step that converted stage1.xml to + stage1a.xml in the PDF process has been refactored to take advantage of the flagging + information added during the common preprocessing stage. + #2049, + #2047 +
    • +
    • The dita.bat Windows batch file for the dita command now + sets the DITA_HOME variable to point to the correct location of the DITA-OT. + #2046 +
    • +
    • PDF: A new axf.opt parameter has been added to specify the user + configuration file for Antenna House Formatter. + #2041 +
    • +
    • Processing mode coverage has been improved to treat error messages as fatal errors, so the + DITA-OT will now stop processing if any source files are missing when the + processing-mode parameter is set to . + #1986 +
    • +
    • Table columns for which no width is defined in a colspec element are no + longer set to 1* per the CALS Table Model. Instead, empty colwidth + attributes are generated to allow formatter-specific auto-layout. The FO processor can then set the width of + the columns based on the column content. + #1970 +
    • + +
    +
    + +
    + Bugs +

    DITA Open Toolkit Release 2.2 provides fixes for the following bugs:

    +
      +
    • Inconsistency in naming of flow name, region definition + #2128 +
    • + +
    • Third relcolspec title on a reltable no longer taken into account for publishing + #2119 +
    • +
    • Topic in temp folder is not wellformed + #2109 +
    • +
    • gradle build fails with ‘Could not load FFI Provider ..’ on Windows + #2108 +
    • +
    • Behavior of the force-unique flag + #2105 +
    • +
    • Site builds fail after html5 changes + #2101 +
    • +
    • Generated HTML table is invalid according to HTML5 specs + #2095 +
    • +
    • Fix table and figure list to include number, title + #2093 +
    • +
    • Remove obsolete info from codepage list + #2091 +
    • +
    • Add axf.jar into log-processor taskdef classpath + #2090 +
    • +
    • Add PFD2 index groups for a-breve, a-circ in Romanian + #2081 +
    • +
    • Ambiguous message for example with two titles + #2078 +
    • + +
    • Table not localized in French translation org.dita.pdf2 - fr.xml + #2061 +
    • +
    • French translation of Table of contents is incorrect + #2060 +
    • +
    • Fix ODT title generation + #2059, + #2034 +
    • +
    • Catch null FileInfo object being referenced in move-meta. + #2051 +
    • +
    • Flagging preprocess grabs too much with check for defaults + #2050, + #2048 +
    • + +
    • Error message not properly formatted + #2027 +
    • +
    • Can no longer publish to XHTML image with data protocol + #2012 +
    • +
    • Ensuring @chunk inside topicgroups functions as expected. + #2009, + #1991 +
    • +
    • Copy-to usage with URI support does not properly work + #2006 +
    • +
    • Cannot publish remote HTTP DITA Map to XHTML + #2003 +
    • +
    • Branch filtering does not seem to work with entire DITA Maps + #1992 +
    • + +
    • Add proper mappings for topicrefs with copy-to attributes in JavaHelp + #1989 +
    • +
    • Use the fragment part of KeyDef @href attribute when building @conref + #1974 +
    • + +
    • Remove unwanted $PATH2PROJ remnant from $entry-file definition (glossary entry file resolution + fails from term and abbreviated-form DOTX058W) + #1967, + #1966 +
    • +
    • DITA-OT 2.0 - Build Error (Windows) - Illegal character - keyref target + #1823 +
    • +
    • abbreviated-form and term keyref links are not resolved when chunk="to-content" + #1816 +
    • +
    • Two levels of map ref causes good key ref to fail + #1605 +
    • +
    +
    +
    + Contributors +

    DITA Open Toolkit Release 2.2 includes + by the following people:

    + +
      +
    1. Jarno Elovirta
    2. +
    3. Robert D. Anderson
    4. +
    5. Roger Sheen
    6. +
    7. Eero Helenius
    8. +
    9. Radu Coravu
    10. +
    11. Tom Glastonbury
    12. +
    13. Kendall Shaw
    14. +
    15. Eliot Kimber
    16. +
    17. Chris Nitchie
    18. +
    19. Stefan Eike
    20. +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    +
    +
    + + +
    diff --git a/release-notes/rel2.3.dita b/release-notes/rel2.3.dita new file mode 100644 index 0000000..c5f9bd1 --- /dev/null +++ b/release-notes/rel2.3.dita @@ -0,0 +1,655 @@ + + + + + + DITA Open Toolkit 2.3.3 Release Notes + + + DITA Open Toolkit 2.3.3 is a maintenance release that fixes issues reported in DITA-OT 2.3, which + includes . +

    Issue numbers correspond to the tracking number in the + GitHub issues tracker.

    +
    + + + Maintenance Release 2.3.3 + +
    +

    DITA Open Toolkit Release 2.3.3 includes the following bug fixes.

    +
      +
    • Lax processing now tolerates hyperlink references with leading or trailing whitespace in the + href attribute value, such as: + <xref href=" http://www.example.com" format="html"> Earlier versions of DITA-OT + would convert the space to its URL-encoded equivalent %20 and fail with an error. The URI + validation routines have been modified to issue a warning and continue processing in lax mode, but still + fail in strict mode. + #2440, + #2488 +
    • +
    • In certain cases, earlier versions of DITA-OT resolved relative paths to related links from the + temporary directory rather than from the input DITA map file. Processing has been modified to ensure that + links are generated correctly regardless of the target file location. + #2017, + #2444 +
    • +
    • Several errors in the DITA 1.3 subjectScheme catalog file were corrected to + ensure that the module files and entities for the DITA Map Subject Classification Domain are properly + resolved. Corresponding errata have been submitted to OASIS to ensure the fixes are applied to the official + catalogs. + #2458 +
    • +
    • Related link processing has been adjusted to handle cases that generate empty related links + groups. + #2464 +
    • +
    • The mappull preprocessing step that pulls content from referenced topics into + maps has been updated to use the XML catalog to resolve external entity references to their locally cached + equivalents. + #2470 +
    • +
    • In PDF output generated by earlier versions of DITA-OT, roman numerals were used to number pages + in the Notices section, assuming notices are most commonly located in the front matter, which uses roman + numbering by default. The toolkit now checks whether the notices element is inside + backmatter, and uses arabic numbering as appropriate. + #2474 +
    • +
    • When processing topics with unsupported languages, DITA-OT erroneously claimed it couldn't find + the language en_us rather than mentioning the unsupported language. The + DOTX001W message now includes the original, most complete value of the ancestor language + to assist in troubleshooting. + #2477 +
    • +
    • In DITA-OT 2.3.2, reference targets for link-like elements such as + abbreviated-form in short descriptions were incorrectly calculated in some cases. + Processing has been updated to ensure that links are correctly resolved by adjusting references as necessary + to match the path to the target document. + #2482 +
    • +
    • The copy-to processing routine failed to update image paths, resulting in invalid references in + topics copied to locations other than the original or peer directories. Processing has been updated to + ensure that image references are adjusted as necessary to reflect the location of the referencing document. + #2486 +
    • +
    • PDF: Definitions for several missing localization variables have been added to the Finnish, + Romanian, Russian, and Swedish strings files. + #2487 +
    • +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    +
    +
    + + + Maintenance Release 2.3.2 + +
    +

    DITA Open Toolkit Release 2.3.2 included the following bug fixes.

    +
      +
    • In earlier versions of DITA-OT, relative paths to cross-references from short descriptions were + sometimes interpreted incorrectly if the source and target topics were located in different directories. New + XSL functions now ensure that these references are correctly resolved. + #1599 +
    • +
    • In DITA-OT 2.3, the HTML5 transtype failed on topics with tables when the + args.xhtml.classattr parameter was set to . Processing has been + updated to handle these cases and correctly exclude the DITA class ancestry information when publishing + HTML5 output. + #2413, + #2424 +
    • +
    • In DITA-OT 2.3, the PDF2 build target dependency list contained redundant entries. The + integration process has been corrected to remove the duplicates. + #2439, + #2451 +
    • +
    • The script that checks for Antenna House installations has been updated to include installation + paths with spaces as used by recent versions of Antenna House for Windows – + C:\Program Files\Antenna House and the (x86) equivalent. + #2441 +
    • +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    +
    +
    + + + Maintenance Release 2.3.1 + +
    +

    DITA Open Toolkit Release 2.3.1 included the following bug fixes.

    +
      +
    • The distribution package for the 2.3 release included several unnecessary subfolders and + appended the Git commit ID to the version number in the lib/configuration.properties + file. The extra directories have been removed and the otversion in the properties file has + been corrected. + #2395 +
    • +
    • In DITA-OT 2.3, temporary file folders specified via the dita.temp.dir + parameter were interpreted as relative to the folder where the Java process started. This regression has + been fixed to ensure that temporary folders are once again interpreted as relative to the base directory of + the Ant process as in previous toolkit versions. + #2398 +
    • +
    • On Windows, the dita command would not run correctly if the name of a folder + in the path to the DITA-OT 2.3 installation directory included spaces. The dita.bat + script has been modified to support installation paths with spaces. + #2400 +
    • +
    • The DITA 1.3 DTD, Schema, and RNG files have been updated to the final "OASIS Standard" copy; + this change updates the OASIS link and date in many header files, but does not affect how the grammar files + work. In addition, the catalog has been updated to restore two entries that will eventually be shipped in + the DITA 1.3 Errata from OASIS. + #2401 +
    • +
    • Fixed an issue where some front-matter sections, such as draftintro and + bookabstract, caused page numbering to switch back and forth between Roman + numerals and body-style Arabic numerals. + #2408 +
    • + +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    +
    +
    + + + Requirements + +
    + Add info on new minimum Java version or any other requirements that have changed + since previous release. +

    DITA Open Toolkit Release 2.3 requires the Java Runtime Environment (JRE) version or later.

    +
    +
    +
    + + + Release Highlights + DITA-OT 2.3 includes enhanced HTML5 output, new language support and additional + internationalization improvements. + +
    + Single .zip distribution package +

    DITA Open Toolkit now ships as a single distribution package in a .zip + archive, as modern versions of Linux and OS X no longer have the file permission issues that originally + required the additional .tar.gz distribution package. + #2269 +

    +
    +
    + Enhanced HTML5 output +

    The table processing has been refactored to use valid HTML5 markup, HTML5 + best practices, and better CSS properties for styling. + BEM-style CSS classes are + now generated with the name of the containing element, the name of the attribute, and the value of the + attribute. + #2239 +

    +

    Common CSS files are now generated using separate modules for each DITA domain, implemented as + partials to better support extensions with CSS frameworks, custom plug-ins and + future toolkit versions. + #2195, + #2196, + #2218, + #2369 +

    +
    +
    + New language support +

    The transformation has been extended to support additional languages with + localized strings files and index collation. + #2137, + #2344 +

      +
    • Belarusian
    • +
    • Bulgarian
    • +
    • Chinese (traditional), with limited support for index sorting
    • +
    • Estonian
    • +
    • Greek
    • +
    • Hindi
    • +
    • Indonesian
    • +
    • Kazakh
    • +
    • Korean
    • +
    • Lithuanian
    • +
    • Macedonian
    • +
    • Malay
    • +
    • Serbian (Cyrillic script)
    • +
    • Serbian (Latin script)
    • +
    • Thai
    • +
    • Ukrainian
    • +
    • Urdu
    • +
    +

    +

    , , and transformation types have been + updated to support Bosnian, Montenegrin, and Vietnamese, including localized string files and (for + ) index collation. + #2150, + #2360 +

    +
    +
    + Internationalization improvements +

    Along with the new languages supported by the and transformations, + DITA Open Toolkit Release 2.3 provides additional internationalization improvements, including: +

      +
    • When testing for bi-directional content, more languages are now recognized as right-to-left. + No additional support is added (for example, generated strings for new languages will appear using the + DITA-OT default language), but otherwise content will use the proper direction by default. Arabic, Urdu, + and Hebrew are already recognized by default; this change recognizes an additional 14 languages. + #1710, + #2267 +
    • +
    • PDF: Additional fallback fonts have been specified in the + font-mappings.xml file to provide better out-of-the-box support for Asian + characters. + #2279, + #2280, + #2296 +
    • +
    • HTML: Earlier releases of DITA-OT 2.x generated a style attribute with + text-align:left on table cells, regardless of whether the align + attribute was set in the source. This caused problems with right-to-left languages. The default entry + alignment has been removed, so the values of the xml:lang and dir + attributes on the root of the topic will be respected. (This allows the browser to infer the value for the + text-align property from the parent elements/styles.) + #2302, + #2368 +
    • +
    • PDF: The Dutch variable file now includes translations for Glossary, List of tables, and List + of figures. In addition, German, Italian, French, and Spanish have been updated to define missing + variables, including one that previously resulted in a build error ("Table of Contents Notices"). + #2131, + #2343 +
    • +
    • The DITA-OT configuration value default.language is now used as the default + language in all output formats. The value ships as en, but can be changed in + configuration.properties or specified as a parameter to the build. For HTML output, + the default is now the closest specified language; if a document does not specify + xml:lang, default.language is used. For PDF output, the default is the + closest specified language; if a document does not specify xml:lang, the root map is + used; if the root map does not specify xml:lang, default.language is + used. + #1476, + #2201, + #2356, + #2357 +
    • +
    +

    +
    +
    +
    + + + Resolved issues + In addition to the highlights mentioned above, DITA Open Toolkit Release 2.3 includes the following + changes. + +
    + Features +

    DITA Open Toolkit Release 2.3 includes the following new features:

    +
      +
    • The args.eclipsehelp.toc parameter for Eclipse Help, which has not worked + properly for several releases after it was made obsolete in DITA-OT 1.3, has been removed. + #1116, + #2354 +
    • +
    • DITA 1.3: Initial support has been added for the orient attribute on + table elements. These changes allow Antenna House Formatter to render tables in + landscape mode when the orient attribute is set to . A future release + will provide extended support for multi-page landscape tables with additional rendering engines. + #1777, + #2387 +
    • +
    • To permit automated building and testing on any platform, the HTMLHelp version of the + documentation is no longer included in the distribution package. An HTMLHelp version of the documentation + can still be built on Windows using the downloaded distribution package. + #2130 +
    • +
    • SAX pipes can now be configured in Ant pipeline tasks. This allows new + tasks to take advantage of in-memory processing without the need to write out files to disk. + #2144 +
    • +
    • The process for generating topic headers in the transformation type has + been simplified to use a single template with mode="insertTopicHeaderMarker". This reduces + the amount of work needed to format titles differently in the header and body. + #2155 +
    • +
    • The transformation type supports two new extension points + dita.conductor.html5.param and dita.conductor.html5.toc.param, allowing + plugins to provide new parameters for HTML5 processing. + #2185 +
    • +
    • Processing for copy-to has been moved out of the gen-list + preprocessing module and into a separate step. This improves processing for + topicref elements that use copy-to and keyref. + #2210 +
    • +
    • The DITA-OT preprocessing step that reads images for information about height and width now + supports reading dimension metadata from SVG images. + #2230 +
    • +
    • The transformation type has been updated to support the + expanse value "page" for elements that use the attribute. In addition, the + msgblock element has been updated to support frame and + scale, which generally appear on the same elements that use expanse. + #2317, + #2352 +
    • +
    • Cross-references to footnotes now generate hyperlinks in PDF output. + #2359, + #2364 +
    • +
    +
    + +
    + Enhancements +

    DITA Open Toolkit Release 2.3 includes the following enhancements and changes to existing features:

    +
      +
    • PDF: Information from the README.txt files in the + org.dita.pdf2 plugin have been moved to the “PDF plug-in structure” topic in the DITA + Open Toolkit Developer Reference. Now that all useful information is available in the + documentation, the README.txt files have been removed. + #1860 +
    • +
    • PDF: In earlier versions of DITA-OT, filtering out all rows from a + simpletable element resulted in invalid XSL-FO. When all rows are filtered out, + the XSL-FO file now contains an empty (but valid) table so that processing can continue. + #1924, + #1950 +
    • +
    • Guava libraries are now used to simplify access to collections in Java code (among other + things). + #2122 +
    • +
    • HTML: The documentation for the and options + now clarifies that header and footer files must be specified using an absolute path. The options have always + required an absolute path, but the documentation for earlier releases did not include this requirement. + #2133 +
    • +
    • The dita command will now run using Java headless mode by default. This + optimizes the use of system resources during a build and prevents the build process from stealing focus from + other applications. + #2140 +
    • +
    • HTML: Static text for XHTML tables and figures (such as "Table 5") is now surrounded with a + span element, making it easier to style or hide the static text using CSS. In + addition, HTML5 output is updated to use semantic elements for figure and table captions. + #2160 +
    • +
    • Two members of the AbstractPipelineModuleImpl class have been marked as + protected, to allow plugins to access them from derived classes. + #2177 +
    • +
    • PDF: The I18N Java and XSLT processing code has been merged into single task. This is not + visible to most users of the PDF code, apart from a reduction in processing time. It also eliminates the + need for a stage3.fo file in the temporary directory; instead, + topic.fo is generated directly from stage2.fo. + #2179 +
    • +
    • In a previous release, the HTML5 extension point dita.conductor.html5.param was + declared but not implemented. The improper declaration was removed and the extension was properly + implemented. + #2181 +
    • +
    • HTML: In previous releases, short descriptions in abstract elements + were rendered as division elements (div), rather than paragraphs + (p). Processing has been revised to ensure that short descriptions are + consistently rendered as paragraphs, regardless of whether they appear in abstract + elements. + #2191 +
    • +
    • The order of the chunk and move-meta-entries pre-processing + stages has been switched so that chunk comes first. This ensures that metadata is properly + pulled or pushed into the chunked version of DITA topics. + #2207 +
    • +
    • HTML: The process for handling othertype on a note + element in HTML has been updated to use XSLT 2.0 best practices. + #2217 +
    • +
    • PDF: Earlier versions used an fo:inline element as a link target within + topic titles, which can result in extra white space for certain common customizations. The process now + places an ID on fo:wrapper, which removes the extra element and extra white space. + #2229 +
    • +
    • XSLT processing now uses a single parameter for message IDs rather than combining one parameter + for the error number with another parameter for severity. This simplifies message processing and allows a + greater range of message IDs in the future. In addition, the DOTX071W message will display + a warning for customizations that use the older, deprecated parameters. + #2231 +
    • +
    • Common XSLT utility templates have been rewritten as functions. In addition, XSpec tests have + been created so that the functions are now covered by automated DITA-OT testing. + #2233 +
    • +
    • The distribution integration and docs stages of the build process are now run in a forked JVM . + #2241 +
    • +
    • PDF: A reference to the PDF2 catalog has been added to catalog-dita.xml. In + previous releases, running topic2fo_shell.xsl directly would fail because the XSLT + processor couldn't resolve paths that use the cfg: scheme. + #2249 +
    • +
    • The distribution package is now built via a fully automated Continuous Integration process. + #2268 +
    • +
    • HTML5: A new stable ID generation process has been implemented, instead of relying on the + generate-id() function. By removing reliance on a dynamic value, this change enables + automated testing of id and headers (generated for table accessibility). + This also speeds up regression testing when comparing HTML output with previous versions. + #2276 +
    • +
    • A new ditaFileset function has been implemented to replace list files. This has no visible + impact for builds, but improves the processing model overall and allows the older way of working with + individual list files to be deprecated in a future release. + #2277 +
    • +
    • The build script for HTMLHelp, build_dita2htmlhelp.xml, now uses an + environment variable to locate the HTMLHelp compiler. This allows the process to build a CHM file when the + HTML Help Workshop is not installed on the C: drive. + #2288 +
    • + +
    • HTML5: new extension points allow for customization of HTML5 output, HTML5 TOC processing, and + HTML5 cover processing. These extension points were declared (but not implemented) in DITA-OT 2.2; this was + addressed in 2.2.5 by removing the declarations. In DITA-OT 2.3, the declarations are restored and properly + implemented. + #2305 +
    • +
    • The startcmd scripts are now generated by the DITA-OT integration process. + This ensures that the CLASSPATH setting in the scripts is updated with any new or required + Java libraries referenced by custom plug-ins. + #2341 + Users who still run DITA-OT using a custom start script based on a copy of + startcmd may need to update their script after installing custom plug-ins. The + CLASSPATH declarations are stored in alphabetical order, so they should only change + when new plug-in libraries are added. To avoid these issues, run DITA-OT using the dita + command instead of the deprecated startcmd scripts.
    • +
    • PDF: Index group headings now appear in the PDF bookmarks. The new bookmarks will always appear + in collapsed form under the Index heading. For example, a large index that covers every heading in English + will now have bookmarks for "Special characters", "Numerics", and every letter from "A" to "Z". + #2350 +
    • +
    • PDF: The antiquewhite background color has been removed from table heads and + key column contents in simpletable and properties tables + to synchronize presentation with choicetable and provide a more uniform + customization baseline between PDF output and HTML-based formats. + #2382, + #2386 +
    • +
    • Localization variables that are no longer used in PDF processing have been deprecated and will + be removed in an upcoming release. + #2383 +
    • +
    +
    + +
    + Bugs +

    DITA Open Toolkit Release 2.3 provides fixes for the following bugs:

    +
      +
    • PDF: The message "No topicTitleNumber mode template" has been removed. This removes extraneous + messages that appeared when processing a bookmap with notices or + bookabstract, or which refers to a subject scheme map. + #1931 +
    • +
    • HTML: trademark symbols previously only appeared for tm elements in + English and a select few languages. This was a legacy of processing carried over from beta processing before + DITA-OT 1.0; HTML trademark processing will now work the same regardless of document language. + #2065 +
    • +
    • Processing for coderef elements could be broken when the + coderef was part of a larger section reused by conref. This is fixed by resolving + coderef during the topic-fragment step of preprocessing. + #2141 +
    • +
    • The AXF document-info attribute title is deprecated; XSL-FO output for Antenna + House output should use the document-title attribute instead. + #2161, + #2162 +
    • +
    • When using keys, referencing a file outside of the current directory causes processing to fail. + Previously, the target file URI was resolved against the root of the temp directory. This has been updated + to resolve the URI against the source file URI, which should always yield the correct result. + #2190, + #2223 +
    • +
    • In previous releases, specializations of the link element did not work + as intended. The corresponding XSLT template mode related-links:link has been modified to + properly handle new elements that are based on the link element. + #2197, + #2199 +
    • +
    • Circular key definitions, when an element used keyref to refer to a key on the + same element, resulted in a stack overflow in KeydefReader. This construct is now reported as an error with + message DOTJ069E. + #2227 +
    • + +
    • Publishing failed when using term with keyref and chunking, as the + chunking module created file references with backslashes. Processing has been updated to convert any + backslashes to slashes before using the resolve-uri function in XSLT. This ensures that the + attribute values are valid URI references according to + . + #2243 +
    • +
    • PDF: In the simplified Chinese variables file (zh-CN), additional translations have been + provided for some static strings that previously appeared in English. + #2294, + #2353 +
    • +
    • Resource-only topic references were considered duplicates by key processing, resulting in + renamed output files in some cases. The resource-only instances are now ignored when determining whether to + rename output files. + #2304 +
    • +
    • PDF code was cleaned up to remove a broken message that could not be triggered + #2326, + #2351 +
    • +
    • In previous releases, specifying a keyscope attribute on the root + map element would cause builds to fail. Processing has been modified to handle + this situation correctly. + #2339 +
    • +
    +
    + +
    + Contributors +

    DITA Open Toolkit Release 2.3 includes + by the following people:

    + +
      +
    1. Jarno Elovirta
    2. +
    3. Robert D. Anderson
    4. +
    5. Eero Helenius
    6. +
    7. Roger Sheen
    8. +
    9. Eliot Kimber
    10. +
    11. Radu Coravu
    12. +
    13. Shane Taylor
    14. +
    15. Stefan Eike
    16. +
    17. George Bina
    18. +
    19. Kristen James Eberlein
    20. +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    + +
    + Documentation updates +

    The documentation for DITA Open Toolkit Release 2.3 includes corrections and improvements to existing topics, + along with several notable enhancements, including:

    +
      +
    • The DITA Open Toolkit User Guide includes new topics on additional methods of publishing via + the dita command: +
        +
      • + +
      • +
      • + +
      • +
      +
    • +
    • The DITA Open Toolkit Developer Reference includes several new sections dedicated to + customization: +
        +
      • + provides an overview of approaches commonly used to customize the + default PDF output and includes recommendations on best practices and additional resources.
      • +
      • + highlights customization-related changes in recent releases to assist plug-in + developers in updating overrides to work with the latest toolkit versions.
      • +
      +
    • +
    • +

      + Travis CI continuous integration + is used to automatically publish the latest development version of the documentation on the project + website at + dita-ot.org/dev whenever + changes are pushed to the develop branch of the + dita-ot/docs repository + on GitHub.

    • +
    • +

      In the latest + development version of the + documentation, page footers now include Edit this page links that open the DITA + source file for the topic in + oXygen XML Web + Author.

      +

      The web-based authoring workflow prompts users to log in to GitHub and fork the + dita-ot/docs repository + if necessary. Changes saved in the authoring environment are committed to a new branch, and a pull request + is created to submit changes for review by the DITA-OT documentation team.

      +
    • +
    +

    For additional information on documentation issues resolved in DITA Open Toolkit Release 2.3, see the + 2.3 milestone in the documentation repository.

    +

    For the complete list of documentation changes since the previous release, see the + + changelog.

    +
    +
    +
    +
    diff --git a/release-notes/rel2.4.dita b/release-notes/rel2.4.dita new file mode 100644 index 0000000..7371202 --- /dev/null +++ b/release-notes/rel2.4.dita @@ -0,0 +1,594 @@ + + + + + + DITA Open Toolkit 2.4.6 Release Notes + + + DITA Open Toolkit 2.4.6 is a maintenance release that fixes issues reported in DITA-OT 2.4, which + includes . +

    Issue numbers correspond to the tracking number in the + GitHub issues tracker.

    +
    + + + Maintenance Release 2.4.6 + +
    +

    DITA Open Toolkit Release 2.4.6 includes the following bug fixes.

    +
      +
    • +

      Earlier versions of DITA-OT would fail with XSLT errors when processing invalid table markup.

      +

      The toolkit is now more lenient when handling column settings that do not match the table contents, + including: +

        +
      • table elements that contain incorrect colspec + entries
      • +
      • tgroup elements with incorrect cols attribute values
      • +
      • simpletable elements with invalid relcolwidth + attributes
      • +
      • sthead header rows with the wrong number of cells
      • +

      +

      Processing will now continue in these cases, though output may not be generated entirely as expected. + #2212, + #2651 +

      +
    • +
    • DITA-OT 2.4 failed to process maps with multiple references to a single topic file that contains + key references. Processing has been revised to properly handle duplicate topics within key scopes. + #2549 +
    • +
    • Several XSL stylesheets used incorrect extension-element-prefixes attributes, + which have been replaced with exclude-result-prefixes to ensure no unnecessary namespace + nodes are copied to the result tree. + #2650 +
    • +
    • +

      The documentation includes minor + + changes with + corrections and improvements to existing topics.

      +
    • +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    +
    +
    + + + Maintenance Release 2.4.5 + +
    +

    DITA Open Toolkit Release 2.4.5 includes the following bug fixes.

    +
      +
    • DITA-OT 2.4 reported errors when filtering HTML5 output with a DITAVAL file and failed to + preserve attributes that were set to via the action attribute. + The order in which properties are initialized has been corrected and profiling conditions are now propagated + to corresponding data- attributes in HTML5 output to support filtering. + #2559, + #2598, + #2627 +
    • +
    • Remaining XHTML property references in the HTML5 transformation have been corrected to point to + their HTML5 equivalents. + #2567 +
    • +
    • In DITA-OT 2.4, the HTML5 transformation failed to process topics with tables when the + args.html5.classattr parameter was set to . Processing has been + updated to ensure that tables are handled correctly when the DITA class ancestry is not passed to output. + #2570 +
    • +
    • The HTML5 transformation has been updated to preserve the class attribute on + ordered lists when steps contain a stepsection element. + #2622, + #2631 +
    • +
    • Earlier versions of DITA-OT ignored any navref and + anchor elements that were declared as direct children of referenced submaps. The + map reference implementation has been updated to preserve these elements as-is when resolving nested maps. + #2623 +
    • +
    • HTML5 processing has been corrected to respect the args.outext setting. + #2628 +
    • +
    • The Finnish translations for attention and warning notes have been corrected to “Huomio” and + “Varoitus”, respectively. + #2629 +
    • +
    • DITA-OT 2.4.4 introduced a regression that prevented table cells from spanning multiple columns. + Table processing has been corrected to produce the proper table structure. + #2636 +
    • +
    • +

      The documentation includes minor + + changes with + corrections and improvements to existing topics.

      +
    • +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    +
    +
    + + + Maintenance Release 2.4.4 + +
    +

    DITA Open Toolkit Release 2.4.4 includes the following bug fixes.

    +
      +
    • DITA-OT 2.4 threw errors if non-XML DITA topics (such as Markdown files) were referenced in DITA + maps. The source format information is now retained to ensure these topics are processed correctly when the + DITA-OT Markdown + plug-in is installed. + #2564 +
    • +
    • In HTML5 transformations, DITA-OT 2.4 threw XSLT warnings if a topic included copyright metadata + in the prolog. The redundant templates have been removed to ensure that copyright metadata is correctly + processed. + #2573, + #2574, + #2610 +
    • +
    • In earlier versions of DITA-OT, the HTML5 transformation generated an empty + nav element for table-of-contents navigation when the + nav-toc parameter was set to and the chunk + attribute for a topic reference was set . Processing has been updated to produce + valid navigation links with to-content chunks. + #2577 + #2578 +
    • +
    • If an index term was defined in a map, a redundant empty citation was created in the index when + generating PDF output with Apache FOP. Index processing has been revised to ensure that links to index terms + defined in maps work properly for FOP. + #2584, + #2589 +
    • +
    • When reading the local.properties file, the Ant basedir + property is set to the root directory of the DITA-OT installation. This change ensures that the + local.properties file in the installation directory can be read consistently, even in + cases when custom build scripts override the basedir property beforehand. + #2586 +
    • +
    • When generating PDF output, earlier versions of DITA-OT applied the + keep-with-next.within-line attribute to list item labels, which is not valid on + fo:list-item-label formatting objects. The list label attribute sets have been + revised to generate valid XSL:FO output. + #2602 +
    • +
    • Parameter processing in variable resolution has been adjusted to ensure that nested + param elements are taken into account when parameters are passed as a document + node. + #2603 +
    • +
    • The command-line help and documentation for the dita command mistakenly + included the equals sign in the descriptions of the and + options. The correct syntax separates these options from their values with a + space instead. To install a single plug-in from a local ZIP file, for example, use + dita --install filename. + #2605 +
    • +
    • +

      The documentation includes minor + + changes with + corrections and improvements to existing topics.

      +
    • +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    +
    +
    + + + Maintenance Release 2.4.3 + +
    +

    DITA Open Toolkit Release 2.4.3 includes the following bug fixes.

    +
      +
    • In PDF output generated with earlier versions of DITA-OT and RenderX XEP, the + indexterm hierarchy for multilevel entries in the PDF index was not properly + indented. Index term indentation has been corrected to properly reflect the entry hierarchy as authored in + DITA source files. + #1525 +
    • +
    • In earlier versions of DITA-OT, specifying a relative path for the temporary directory on the + command line would cause PDF processing to fail. DITA-OT now checks whether the + dita.temp.dir property is set to an absolute path and responds with an error message + otherwise. + #2038 +
    • +
    • In certain cases, DITA-OT 2.4 generated broken links in PDF output for related topics and + reported “unresolved internal destination” warnings in the console when processing topic references with the + collection-type attribute set to . Link rewrite processing has + been corrected to ensure that links are generated properly. + #2522 +
    • +
    • Default settings for several parameters have been removed from the + configuration.properties file. + #2555 +

      Values for these parameters can be passed as usual to the dita command or included in + build scripts: +

        +
      • default.language
      • +
      • generate-debug-attributes
      • +
      • processing-mode
      • +

      +
    • +
    • In previous versions of DITA-OT, the HTML5 transformation generated + simpletable output with column widths specified in col + elements as direct children of the table element. A + colgroup wrapper element has been added for compatibility with the HTML5 + standard. + #2563 +
    • +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    +
    + Documentation updates +

    The DITA-OT 2.4.3 documentation includes corrections and improvements to existing topics, along with new + content on + .

    +
    +
    +
    + + + Maintenance Release 2.4.2 + +
    +

    DITA Open Toolkit Release 2.4.2 includes the following bug fixes.

    +
      +
    • DITA-OT 2.0 threw a null pointer exception when producing Eclipse Help output from a bookmap + with a glossarylist that referenced a composite dita + topic. Processing has been updated to properly handle root dita elements or any + other elements without class attributes. + #1885 +
    • +
    • HTML5 output generated with DITA-OT 2.4.1 included spurious namespace attributes for + taskbody and simpletable elements. The extra result + prefixes (ditamsg, dita2html and + related-links) have been excluded to ensure they no longer appear in output files. + #2542 +
    • +
    • Earlier versions of DITA-OT failed to ignore empty props specialization attributes during the + filtering process. Processing has been updated to treat any empty attributes specialized from + props like empty default profiling attributes such as + audience="", which are ignored. + #2547 +
    • +
    • The xml-apis-ext library that FOP depends on to render SVG images was missing + in DITA-OT 2.4. The distribution package has been updated to provide support for SVG images in PDF output. + #2548 +
    • +
    • If an input map contained topic references with duplicate copy-to attribute + values, earlier versions of DITA-OT failed to generate additional output topics. Processing now applies the + force-unique parameter to ensure that unique output files are created for each + instance of a resource when a map contains multiple references to a single topic. + #2551 +
    • +
    • Support for the args.breadcrumbs parameter provided in earlier versions of + DITA-OT was never fully implemented and has been removed. HTML customizations that rely on the XSLT + BREADCRUMBS parameter will need to re-implement this functionality in custom plug-in + code. + #2554 +
    • +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    +
    +
    + + + Maintenance Release 2.4.1 + +
    +

    DITA Open Toolkit Release 2.4.1 includes the following bug fixes.

    +
      +
    • In DITA-OT 2.3 and 2.4, setting the force-unique parameter to + had no effect. Processing has been corrected to properly generate the copy-to + attributes that ensure unique file names for each instance of a resource when a map contains multiple + references to a single topic. + #2520 +
    • +
    • HTML5: In DITA-OT 2.4, the text content of table cells was partially propagated to the CSS + class attribute. Table processing has been updated to remove the legacy XHTML CSS class + mode and ensure that class attribute values are generated correctly. + #2524 +
    • +
    • Saxon 9.7.0.11 reported an error when producing output from DITA content: The context + item for axis step ./@class is absent. This was resolved by modifying the + $localclass variable in the output-message template to use the + $ctx context variable as a parent. + #2526, + #2535 +
    • +
    • Earlier versions of DITA-OT did not correctly override the default scope and + format attribute values for topic references with values from the key definition. Keyref + processing has been updated to properly handle scope and format definition for non-local non-DITA targets. + #2529 +
    • +
    • In earlier versions of DITA-OT, the dita.xsl.html5.cover extension point did + not respond to overrides declared in custom plug-ins. The extension point has now been moved to the template + file to ensure that it can be overridden as intended. + #2537 +
    • +
    • In cases where a single topic is used in multiple key scopes (and copies of the topic are + created), earlier versions of DITA-OT used the same target for key references to both key scopes. Key + targets are now rewritten to point to the new resource to ensure that duplicate link targets in key scopes + are correctly resolved. + #2539 +
    • +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    +
    + Documentation updates +

    The DITA-OT 2.4.1 documentation includes corrections and improvements to existing topics, along with new + content.

    +
      +
    • + provides examples that illustrate various approaches for customizing + HTML-based output, including: +
        +
      • +
      • +
      • +
      • +
      +
    • +
    • + provides a common overview of languages supported for PDF and HTML-based output + formats.
    • +
    • + lists bundled software components with version and license information + for each library.
    • +
    +
    +
    +
    + + + Requirements + +
    + Add info on new minimum Java version or any other requirements that have changed + since previous release. +

    DITA Open Toolkit Release 2.4 requires the Java Runtime Environment (JRE) version or later.

    +
    +
    +
    + + + Release Highlights + DITA-OT 2.4 includes Apache FOP , a new long-form syntax + for dita command options, and additional code referencing extensions. + +
    + Apache FOP <ph keyref="tool.fop.version"/> +

    DITA-OT 2.4 bundles the latest version of Apache FOP (Formatting + Objects Processor). + #1958, + #2399

    +

    FOP builds on the OpenType CFF font support added in FOP 2.0, with additional + font support and enhancements for PDF accessibility, including PDF/UA (PDF/Universal Accessibility) and + PDF/A-3.

    +

    For details on recent changes in FOP, see the Release Notes for versions + 2.0 and + 2.1.

    + +

    To conserve memory, accessible PDF output is disabled by default in FOP 2.1. To generate accessible PDFs + from DITA-OT, set the args.fo.userconfig parameter and include the + option in your custom FOP configuration + file.

    +

    For more information, see + .

    +
    +
    +
    + New long-form syntax for <cmdname>dita</cmdname> command options +

    All dita command options can now be specified with a GNU-style option keyword preceded by + two hyphens. For example:

    +

    + dita --input=userguide.ditamap --format= +

    +

    DITA-OT parameters can now be passed to the dita command with this same syntax: + --parameter=value.

    +

    When set with this method, properties are validated against the toolkit’s plug-in configuration. An error + message appears if a property is not recognized or if an enumerated property value is invalid. + #2422, + #2492 + Unix-style single-letter options (preceded by a single hyphen) are also available in + some cases for backwards compatibility. The X-Toolkit–style single-hyphen keyword variants supported by + previous releases (such as -input) have been deprecated and may be removed in an + upcoming release.

    +
    +
    + Extended code reference processing +

    DITA-OT 2.4 provides additional support for extracting a range of lines from code references based on the + content of the target file. Instead of specifying line numbers, you can now also select lines to include in + the code reference by specifying keywords (or “tokens”) that appear in the referenced file. + #2469 +

    +
    + +

    For more information, see + .

    +
    +
    + Standalone <option>HTML5</option> plug-in +
    +

    + #2405, + #2511 +

    +
    + +
    +
    +

    + #1542

    +
    + + + + + Resolved issues + In addition to the highlights mentioned above, DITA Open Toolkit Release 2.4 includes the following + changes. + + + + +
    + Enhancements and changes +

    DITA Open Toolkit Release 2.4 includes the following enhancements and changes to existing features:

    +
      +
    • Move to Java 8 + #2026 +
    • +
    • TM output + #1245, + #2404 +
    • +
    • Bug in "dita-utilities.xsl" getVariable when called from string context + #2512, + #2513 +
    • +
    • HTML5 generates duplicate class attributes + #2503 +
    • +
    • Use Sass // comment syntax for partials copyrights + #2502 +
    • +
    • Change HTML5 to use libsass instead of Compass + #2499 +
    • +
    • Add sign-off requirement to contribution + #2471 +
    • +
    • Add copyright based on Git history + #2467 +
    • +
    • Run dita command with only properties file + #2465, + #2468 +
    • +
    • Map temporary files to source/result files using job configuration + #2462 +
    • +
    • Use job mapper when transforming topics to final output + #2453 +
    • +
    • Move chunk target detection to chunk module + #2437 +
    • + +
    • Replace named template with mode for easy override of static content + #2412 +
    • +
    • Remove lax integration process + #2151 +
    • +
    +
    + +
    + Bugs +

    DITA Open Toolkit Release 2.4 provides fixes for the following bugs:

    +
      +
    • Fix error when linktext contains tm #2303 + #2394 +
    • +
    • Build fails when navtitle in relcell has child + elements + #2347, + #2390 +
    • +
    +
    + +
    + Contributors +

    DITA Open Toolkit Release 2.4 includes + by the following people:

    + + NOTE: This lists contributions to the core toolkit, not docs. +
      +
    1. Jarno Elovirta
    2. +
    3. Robert D. Anderson
    4. +
    5. Eliot Kimber
    6. +
    7. Eero Helenius
    8. +
    9. Roger Sheen
    10. +
    11. Radu Coravu
    12. +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    + +
    + Documentation updates +

    The documentation for DITA Open Toolkit Release 2.4 includes corrections and improvements to existing topics, + along with new content.

    +
      +
    • Like the generated + and + topics, a new + section is now generated from the installed DITA-OT plug-ins to + provide an overview of the extension points supported by each plug-in.
    • +
    • A new + topic provides examples of how the project documentation uses various + recent DITA features.
    • +
    • A new topic provides information on + Migrating to release 2.4.
    • +
    +

    For additional information on documentation issues resolved in DITA Open Toolkit Release 2.4, see the + 2.4 milestone in the documentation repository.

    +

    DITA Open Toolkit Release 2.4 includes + by the following people:

    + NOTE: This lists contributions to docs, not to the core toolkit. +
      +
    1. Roger Sheen
    2. +
    3. Jarno Elovirta
    4. +
    5. Mark Giffin
    6. +
    +

    For the complete list of documentation changes since the previous release, see the + + changelog.

    +
    +
    +
    + diff --git a/release-notes/rel2.5.dita b/release-notes/rel2.5.dita new file mode 100644 index 0000000..b03e98b --- /dev/null +++ b/release-notes/rel2.5.dita @@ -0,0 +1,619 @@ + + + + + + DITA Open Toolkit 2.5.4 Release Notes + + + DITA Open Toolkit 2.5.4 is a maintenance release that fixes issues + reported in DITA-OT 2.5, which includes . + + + + + Maintenance Release 2.5.4 + +
    +

    DITA Open Toolkit Release 2.5.4 includes the following bug fixes.

    +
      +
    • In earlier releases, plugins that contributed variables (or strings) did not work when the + variables were contributed with mixed case (such as pt-BR instead of + pt-pt). This has been fixed, so that the case of xml:lang is ignored when + contributing variables. + #2226, + #2790, + #2803 +
    • +
    • In DITA-OT 2.5, external cross references to DITA topics, such as <xref + href="http://example.com/onlineTopic.dita" scope="external">, resulted in build failures due + to an improperly set XSLT variable. This setting has been corrected to ensure external references are + resolved as expected. + #2772 +
    • +
    • External links in related-links collections were dropped from PDF + output in DITA-OT 2.4 and 2.5. These links now appear using the href attribute value as + link text, as in earlier releases. + #2795, + #2802 +
    • +
    • In DITA-OT 2.5, cross references to targets within the same document, such as <xref + href="#topicid/sampleFigure"/>, caused build errors when the + onlytopic.in.map parameter was set to . Processing has been + corrected to ensure these links are generated correctly. + #2800 +
    • +
    • In DITA-OT 2.4 and 2.5, the property element in reference topics + resulted in an "Ambiguous rule match" message from Saxon when building HTML5. This message has been removed. + #2801 +
    • +
    • In earlier releases, when chunk="by-topic" was specified on a + topicref element that did not specify the href attribute, the + build would end in a null pointer exception. This error has been removed and the build will continue. + #2805 +
    • +
    • In earlier releases, when a map reference (such as mapref) referred to + a map in a subdirectory, and that referenced map included elements with conref attributes, + the step that resolved map references did not properly adjust paths in conref, resulting in + unresolvable content references. This has been fixed, and conref attributes in nested maps + in subdirectories now resolve properly. + #2806 +
    • +
    • +

      The documentation includes minor + + changes with + corrections and improvements to existing topics.

      +
    • +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    +
    +
    + + + Maintenance Release 2.5.3 + +
    +

    DITA Open Toolkit Release 2.5.3 includes the following bug fixes.

    +
      +
    • In DITA-OT 2.5, the gen-list pre-processing step listed resource-only + references with scope="peer" as local files when the + onlytopic.in.map parameter was set to . This caused later + processing steps to generate errors as they tried to read the peer files (even when they were not DITA). + Pre-processing has been updated to avoid reading these files, which also removes the build errors. + #2759, + #2761 +
    • +
    • In previous versions of DITA-OT, the copy-files pre-processing step would stop + the build with an error if the destination directory for copied files did not (yet) exist. The copy process + has been adjusted to create the destination directory if necessary and allow the build to continue. + #2768 +
    • +
    • DITA-OT 2.5 would crash when publishing maps that contained ditavalref + elements without valid hyperlink references in the href attribute. Pre-processing has been + updated to be more tolerant in these cases. The branch-filter step will now proceed as if + the ditavalref were not specified, which allows the build to finish. + #2769 +
    • +
    • +

      The documentation includes minor + + changes with + corrections and improvements to existing topics.

      +
    • +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    +
    +
    + + + Maintenance Release 2.5.2 + +
    +

    DITA Open Toolkit Release 2.5.2 includes the following bug fixes.

    +
      +
    • In DITA-OT 2.5.1, the mappull step could fail when a map referenced a DITA document where the + root element was filtered out. The filtered document is now processed correctly. + #2743 +
    • +
    • In the original 2.5 release, setting a revision property to "flag" in the DITAVAL resulted in + build errors if the DITAVAL did not also specify a start and end image for that flag. The build errors no + longer appear. + #2749 +
    • +
    • +

      The documentation includes minor + + changes with + corrections and improvements to existing topics.

      +
    • +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    +
    +
    + + + Maintenance Release 2.5.1 + +
    +

    DITA Open Toolkit Release 2.5.1 includes the following bug fixes.

    +
      +
    • +

      In DITA-OT 2.5 and earlier, key resolution did not comply with the DITA specification’s requirement to + use linktext from a key definition as valid replacement text for all uses of that + key. + #1590, + #2014, + #2719

      +

      In addition, several less common cases are fixed: +

        +
      • Previously, a keyword anywhere within the key definition was used as the + first choice for link text, even if that keyword was located within linktext. + As defined by the DITA specification, the replacement keyword is taken only from within + keywords.
      • +
      • Previously, the navtitle attribute was used as fallback text in some cases, while + navtitle was ignored. The navtitle element is now + used before checking the deprecated navtitle value for all cases.
      • +
      • Previously, navtitle was used as link text even for local DITA topics where that + value was ignored in favor of a navigation title in the topic. Now navtitle and + navtitle are only used when locked or when the topic is not local + DITA.
      • +
      +

      +
    • +
    • In some cases, invalid DITA content resulted in build crashes from PDF, XHTML, or HTML5 + processing modules that expect required elements to be present. For example, this could happen when an + element such as ol (which requires at least one list item) used DITAVAL filtering + to exclude all items from the list. The code has been updated to more gracefully handle elements that are + missing required children. + #2701, + #2712 +
    • +
    • One DITA 1.3 RNG module in the grammar files for the + contained a typo in a default attribute value. The typo will be corrected in + the next DITA 1.3 errata, and is now fixed in the DITA-OT copy. + #2705 +
    • +
    • On Windows only, chunking a DITA document using the "by-topic" method would lose the root chunk + and result in processing errors. The chunking process has been updated to handle Windows file paths + correctly; the chunking process now produces the same results on all systems. + #2706, + #2728 +
    • +
    • HTML5 output restores support for the spectitle attribute on + simpletable elements and for the specentry attribute on + stentry elements. Support for those attributes was missing after the HTML5 and + XHTML code bases split in release 2.4. + #2714 +
    • +
    • In the original 2.5 release, a topicref that included a reference to a + local topic ID (such as href="file.dita#root") could cause build failures when another + element in the document used the same ID. The reference is now handled properly. + #2716 +
    • +
    • +

      The documentation includes minor + + changes with + corrections and improvements to existing topics.

      +
    • +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    +
    +
    + + + Requirements + +
    + Add info on new minimum Java version or any other requirements that have changed + since previous release. +

    DITA Open Toolkit Release 2.5 requires the Java Runtime Environment (JRE) version + or later.

    +
    +
    +
    + + + Release Highlights + DITA-OT 2.5 includes a basic Java API, an experimental map-first + preprocessing option, better support for DITA composite documents, publishing with multiple DITAVAL files, and + more consistent styling for default PDF output. + + +
    + Java Application Programming Interface +

    DITA-OT 2.5 includes a new + to allow developers to embed DITA-OT more easily into other Java programs. + #2604

    + See the DITA-OT Java API documentation in the doc/api/ folder + of the DITA-OT distribution package for information on the packages, classes, interfaces and methods provided + by the Java API. +
    + +
    + Map-first preprocessing +

    +

    + +

    See + , + #2497

    +
    + +
    + Improved PDF support for DITA composite documents +

    When publishing PDF output from a DITA composite document (a DITA document with a root + dita element), earlier versions of DITA-OT included only the first topic, and links + to topics within dita elements were broken. The PDF output now includes the full + content of the referenced document, and links to any element within the document are correct. + #1077, + #1904, + #2679

    +

    Attributes from the dita element are now preserved when merging topics. In + previous releases, attributes like xml:lang set on the dita element + were lost during the PDF "topic merge" process. + #1298, + #2698

    +
    + +
    + Publishing with multiple DITAVAL filter files +

    The args.filter parameter, which previously allowed you to specify a single DITAVAL file for + filtering or flagging, now accepts a list of URIs. The system path separator character is used to delimit + individual file paths in the list of values (semicolon ‘;’ on Windows, and colon + ‘:’ on macOS and Linux). DITAVAL files are evaluated in the order specified, so conditions + specified in the first file take precedence over matching conditions specified in later files, just as + conditions at the start of a DITAVAL document take precedence over matching conditions later in the same + document. + #2637

    +

    This feature allows you to manage your conditions independently or combine conditions from multiple sources. + For example, you can now manage your filter conditions (that might change rarely) separately from revisions, + or easily combine flagging conditions from different products when those products are published together.

    +

    You can then pass the filenames to the dita command as follows:

    +

    + dita --input=userguide.ditamap --format= --filter=filters.ditaval:flags.ditaval +

    +

    DITAVAL properties are now more flexible so that plug-ins can provide a common set of DITAVAL + conditions and override the args.filter parameter. Initialization code has been cleaned + up so that it does not set unnecessary properties. + #2681

    +
    + +
    +
    +

    A separate org.dita.pdf2.legacy plug-in can be used to restore the original settings. See + Migrating to release 2.5, + #2519.

    +
    + + + + + + Resolved issues + In addition to the highlights mentioned above, DITA Open Toolkit Release 2.5 + includes the following changes. + +
    + Features +

    DITA Open Toolkit Release 2.5 includes the following new features:

    +
      +
    • The PDF transformation now uses variables to control ordered list numbering and unordered list + bullets. This allows list styles to be more easily configured in overrides or by locale. + #1134 +
    • +
    • In PDF output, monospaced elements now inherit the font size from their parent elements. In + earlier versions, the base-font attribute-set caused monospaced elements to reset font + sizes unnecessarily. Removing these extra calls to base-font allows monospace elements to + retain the current font size. + #1230 +
    • +
    • A new property named remove-broken-links is available to automatically remove + any unresolved links. Setting the parameter to true will remove map-based links that do not + resolve, as well as links coded within related-links. The default value is + false. + #1431 +
    • +
    • The copy-html step in the pre-processing stage has been updated to work like + copy-image, with a parameter for the destination directory. This allows more flexibility + for extended transformation types that use these targets. + #1964 +
    • +
    • DITA-OT now processes DITA elements nested within foreign and + unknown elements. Previously these elements were ignored and treated as part of + the foreign or unknown content, so that (for example) + conref targets were not retrieved and links were not properly handled. + #2569 +
    • +
    • A new internal parameter named temp.output.dir.name allows plugin developers to + direct output to a location within the existing temporary directory, which allows for additional + post-processing before files are placed in the output directory. + #2670 +
    • +
    • Eclipse Help output can now be created as a JAR file. When the + args.eclipsehelp.jar.name property is specified for an Eclipse build, the generated + content will all be zipped in a JAR file with the name taken from that property. + #2684 +
    • +
    • A new path2rootmap processing instruction is now added to topics in the + temporary directory that includes a relative path to the root map. This helps to preserve links when + generating output for content that is not located in or beneath the directory containing the DITA map file. + #2707 +
    • +
    +
    + +
    + Enhancements and changes +

    DITA Open Toolkit Release 2.5 includes the following enhancements and changes to + existing features:

    +
      +
    • DITA-OT now works with Saxon-HE (home edition) 9.4.0.3. Some XSLT modules in earlier versions + relied on Java extensions that are not available in Saxon-HE; those dependencies have all been removed. + #1238, + #2668 +
    • +
    • Product name processing has been revised to better support overrides in PDF customizations. The + existing text-only mode is now used to enable customizations to support elements that add + text (such as trademark symbols). + #2293, + #2693 +
    • +
    • Earlier versions of DITA-OT created empty and unnecessary fo:inline + elements for some elements when generating PDF output; those empty elements have been removed. + #2419 +
    • +
    • An abbr abbreviation wrapper has been added to + menucascade output for improved HTML5 and XHTML accessibility. This allows screen + readers to detect and read the right angle bracket > submenu separator that appears between + menu items as accessible text. In English, for example, this will be read as “and then”. + #2446, + #2516 +
    • +
    • PDF output did not properly evaluate DITAVAL flagging conditions for + step and choice elements within tasks, or for root topic + elements. In addition, topics in sub-directories did not render image flags properly for any elements. These + issues are all resolved. + #2459, + #2674 +
    • +
    • Error messages in dita command output now appear in red on terminals that + support + ANSI escape + codes, such as on Linux or macOS. The new property cli.color can be set to + false to disable the color. (Colored output is not supported on Windows consoles such as + cmd.exe or PowerShell). + #2552 +
    • +
    • The args.logdir and args.debug properties have been + deprecated. To write the log to a file, use dita + --logfile=file or ant + -l + file to set the path to the log. + #2579 +
    • +
    • Plug-in configuration has been extended to support configuration of parser features. For + example, you can now toggle XInclude processing or change error recovery options. + #2594 +
    • +
    • The file info filter configuration has been generalized to allow all modules to be configured + via Ant. + #2601 +
    • +
    • In earlier versions, invalid IDs in a topic could break the build with a Null Pointer Exception + if the topic was used twice in a map. Processing for topics that appear more than once has been improved to + avoid this condition. + #2657 +
    • +
    • DITA-OT now uses Saxon functionality to write XSLT messages to a logger instead of to standard + output. This provides a more consistent approach to logging messages across all modules. + #2664 +
    • +
    • Earlier processing for branch filtering could place ditavalref elements + ahead of topicmeta, which would not be valid in a source map. Pre-processing has + been revised to ensure the map remains valid after the branch filtering process. + #2672 +
    • +
    • The bundled Ant version has been updated to 1.10.1. + #2677 +
    • +
    • A common set of string variables is now used for the localized quotation marks that are used to + wrap quotations in q elements; previous versions had one set of variables for PDF + and another for other transformation types. + #2703 +
    • +
    +
    + +
    + Bugs +

    DITA Open Toolkit Release 2.5 provides fixes for the following bugs:

    +
      +
    • In previous releases, when a child map specified the chunk attribute on the + map element, the resulting generated map in the temp directory no longer had the + chunk attribute. The attribute is now preserved. + #1210 +
    • +
    • In earlier releases, resource-only topics would generate HTML5 and XHTML topics when they were + used as the target of a content reference; topics referenced from resource-only topics also generated output + even when the parameter onlytopic.in.map was set to override this behavior. Processing + has been modified to ensure these extra files are no longer generated. + #1734, + #2077, + #2694 +
    • +
    • In previous releases, root level containers in a bookmap were dropped from PDF if they did not + have a title or reference a topic. This occurred with preface, + chapter, appendices, appendix, + and any grouping element in the front or back matter. In addition, PDF builds would fail if a grouping + element without title or href was the only child of a map. These are all fixed by letting + processing fall through to topics within the group. + #1848, + #2092, + #2614, + #2648, + #2683 +
    • +
    • Links directly to nested topics in HTML5 were broken; HTML5 output now generates the correct + links. + #2443, + #2685, + #2686, + #2702 +
    • +
    • When a copy-to attribute is used to copy a topic to a new directory, earlier + versions generated CSS paths based on the original location. CSS paths are now generated based on the new + location. + #2491 +
    • +
    • Using the same name in two different key scopes is now supported as defined in the + . + #2541 +
    • +
    • In earlier releases, when maps referenced content outside of the map directory and + generate.copy.outer= was used, HTML5 or XHTML output would copy + images to the wrong location outside of the output directory. The images are now copied to the proper + location. + #2550, + #2682 +
    • +
    • The DOTX010E error included extra spacing around the conref + attribute value. The extra spaces have been removed. + #2646 +
    • +
    • In earlier releases, key definitions for some images were marked as + format="html" in the .job.xml file, limiting their use with later + image processing. These now use format="image" as intended. + #2653 +
    • +
    • In DITA-OT 2.4, when new topics were generated by the Branch Filtering process, the generated + topics were not added to the .job.xml configuration file. They are now added properly. + #2659 +
    • +
    • When setting link text, some link targets caused topicpullImpl.xsl to + generate the following message XPTY0004: A sequence of more than one item is not allowed as the first + argument of normalize-space(). The XSLT data type has been corrected to prevent this. + #2665 +
    • +
    • When key definitions reference files outside the map scope, key references to images could be + resolved with the wrong path. The key definitions are now processed correctly. + #2568, + #2667 +
    • +
    • If maps contained ditavalref elements and key definitions pointing to + non-DITA files (such as images), earlier versions attempted to filter the non-DITA files and returned + errors. The branch filtering process has been corrected to apply only to DITA files. + #2669 +
    • +
    • In previous releases, HTML5 builds failed when processing table + elements that contained multiple tgroup elements. This is resolved by retrieving + column definitions from the tgroup element. + #2676 +
    • +
    • When chunking a document, earlier releases dropped the xml:lang attribute from + the root topic. The correct xml:lang attribute is now preserved on any chunked topics. + #2022, + #2678 +
    • +
    • In HTML5 tables, some required table classes were missing when + args.html5.classattr=no was specified for the build. + #2688, + #2689 +
    • +
    • When a DITA topic that is used in the map is referenced using coderef, + code references would embed the normalized file from the temporary directory. The original copy is now read + from the source URI so that the original source appears in the code block. + #2690 +
    • +
    • In earlier releases, keys that referred to nested topics were not properly resolved. Key + references to nested topics are now correctly resolved as a reference to the nested topic. + #2691 +
    • +
    • In PDF output from previous releases, the table of contents inserted a generated “Chapter + :” prefix in front of the navigation title for the appendices element. + This prefix has been removed. + #2695 +
    • +
    +
    + +
    + Contributors +

    DITA Open Toolkit Release 2.5 includes + by the following people:

    + + NOTE: This lists contributions to the core toolkit, not docs. +
      +
    1. Jarno Elovirta
    2. +
    3. Robert D. Anderson
    4. +
    5. Alexey Mironov
    6. +
    7. Roger Sheen
    8. +
    9. Shane Taylor
    10. +
    11. Bob Thomas
    12. +
    13. Vitaliy Danylyuk
    14. +
    15. Lionel Moizeau
    16. +
    17. Eliot Kimber
    18. +
    19. Holger Voormann
    20. +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    + +
    + Documentation updates +

    The documentation for DITA Open Toolkit Release 2.5 provides corrections and + improvements to existing topics, along with new information:

    +
      +
    • + New Java API +
    • +
    • +
    • +
    • + Migrating to release 2.5 +
    • +
    +

    For additional information on documentation issues resolved in DITA Open Toolkit Release , see the + + 2.5 milestone in the documentation repository.

    +

    DITA Open Toolkit Release 2.5 includes + by the following people:

    + NOTE: This lists contributions to docs, not to the core toolkit. +
      +
    1. Roger Sheen
    2. +
    3. Robert D. Anderson
    4. +
    5. Jarno Elovirta
    6. +
    7. Shane Taylor
    8. +
    9. Ed Porter
    10. +
    11. Eero Helenius
    12. +
    13. Lionel Moizeau
    14. +
    15. George Bina
    16. +
    17. Rene Mjartan
    18. +
    +

    For the complete list of documentation changes since the previous release, see the + + changelog.

    +
    +
    +
    + diff --git a/release-notes/rel3.0.dita b/release-notes/rel3.0.dita new file mode 100644 index 0000000..09335eb --- /dev/null +++ b/release-notes/rel3.0.dita @@ -0,0 +1,694 @@ + + + + + + DITA Open Toolkit 3.0.4 Release Notes + + Release Notes + + + + DITA Open Toolkit 3.0.4 is a maintenance release that fixes issues + reported in DITA-OT 3.0, which +

    + + + + + Requirements + +

    + Add info on new minimum Java version or any other requirements that have changed + since previous release. +

    DITA Open Toolkit Release 3.0 requires the Java Runtime Environment (JRE) version + or later.

    +
    + +
    + + + DITA-OT 3.0.4 + <ph outputclass="small">released May 10, 2018</ph> + +
    +

    DITA Open Toolkit 3.0.4 is a maintenance release that includes the + following bug fixes.

    +
      +
    • In previous releases, including a <!DOCTYPE> declaration in a DITAVAL + document resulted in a build failure. This is now fixed, and the referenced grammar file will be found using + the same catalog that is used to locate other grammar files. + #2005, + #2922 +
    • + +
    • DITA-OT 3.0 failed to recognize PDF customizations if the custom plug-in used the same file + names as the base PDF plug-in. The default catalog has been removed from the catalog configuration file to + ensure that only explicitly configured catalogs are used and customizations take precedence regardless of + the file names in the custom plug-in. + #2835, + #2937 +
    • +
    • In DITA-OT 3.0, URI-based links may cause NullPointerExceptions when link targets do not exist + until after copy-to attributes are evaluated. The build failure has been removed, and this + type of link will now generate normal build errors as in previous releases. + #2841, + #2936 +
    • +
    • In previous releases, if a key definition specified both href and + copy-to attributes, references to that key always resolved to the original + href rather than to the new copy specified with copy-to. Key references + to this type of definition will now resolve to the appropriate copy of the resource. + #2842, + #2935 +
    • +
    • In DITA-OT 3.0.1, coderef elements that contained references to line + ranges in DITA map files were not reliably included in PDF output as the preprocessing routine may change + maps. All code references are now resolved from the original files to ensure that code blocks reflect the + intended source range. + #2901, + #2916 +
    • +
    • In DITA-OT 3.0, PDF output files were created outside of the specified output directory when the + map referenced content outside of the map directory. This has been fixed to ensure that PDFs are always + placed in the specified output directory. + #2910, + #2923 +
    • +
    • When generating HTML output with DITA-OT 3.0.2, images referenced indirectly via keys were not + copied to the output folder. Processing has been corrected to ensure that the list of images in the job + configuration includes those referenced via keys. + #2917, + #2921 +
    • +
    • In earlier releases, scale attributes on the fig + element were ignored for PDF output. The scale attribute is now respected for PDF figures, + which may include text content (such as code blocks), inline images inside the text, or block images. + #2926 +
    • +
    • In earlier releases, topic references to peer DITA content reported “missing navigation title” + errors even when the reference included linktext. As with all other peer, external, + and non-DITA references, the linktext for peer topics will now be used as a + fallback title when no navigation title is available. + #2927 +
    • +
    • The Lightweight DITA plug-in has been updated to the latest version (2.0.3) to prevent errors + when processing Markdown input that contains typographic quotation marks with the format + attribute set to markdown + #2929, + #2956 +
    • +
    • When generating PDF output for tables that specified row headers, DITA-OT failed to honor + vertical spans defined via the morerows attribute on an entry + (cell). Row headers are now properly applied when cells span additional rows. + #2942, + #2946 +
    • +
    • When fragref elements were used to reference a syntax diagram fragment, + earlier versions of DITA-OT displayed an error. Processing has been updated to use the latest designs from + the topicpull module and fix the error. + #2945 +
    • +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    +
    +
    + + + DITA-OT 3.0.3 <ph outputclass="small">released March 10, 2018</ph> + +
    +

    DITA Open Toolkit 3.0.3 is a maintenance release that includes the following bug fixes.

    +
      +
    • In some scenarios on Windows, the version of Saxon shipped in DITA-OT 3.0 caches one copy of the + toolkit module functions.xsl and then uses that copy in place of a second (different) + module with the same name. This causes problems when using the ant command to run HTML5 + builds. Adding an explicit path to one of the imports works around the problem. + #2892 +
    • +
    • If an XSLT message is declared to be fatal, throwing that message should halt the build. This + stopped working with a refactored message process several releases ago, but was missed because the default + toolkit does not declare any fatal messages for XSLT modules. + #2894 +
    • +
    • When a DITAVAL document contains a typo in the action attribute (which should + be set to one of include, exclude, flag, or + passthrough), the build ends with a message that is difficult to diagnose. The message + has been updated to be more explicit and to use the toolkit’s standard message format. + #2896
    • +
    • When the navtitle element is used in a map, it should be ignored by + default (for the purposes of TOC titles, PDF bookmarks or generated links), except in cases where the + locktitle attribute on the containing topic reference is set to yes. + This has always worked when using the navtitle attribute on topic references, but + previously the navtitle element in maps was used even if it was not locked. + #2897 +
    • +
    • When a DITA document contains more than one glossentry element, and + keys are defined for those entries using the file name but without including the entry ID, XHTML and + HTML5 builds would fail to process topics that reference the key. This error has been corrected so that + terms linking to glossary entries will go to the correct file, and no error will be generated. + #2900 +
    • +
    • In PDF builds, the navtitle element inside of a topic was ignored when + creating bookmarks and the table of contents. The navtitle element in topics is now + used for each of those cases except when a map overrides the navigation title. + #2904, + #2906 +
    • +
    • When the choicetable element does not specify a table header, it + should generate default values for the "Option" and "Description" fields. In PDF, the "Description" column + was not generating the correct header. This has been fixed so that each column gets the proper header. + #2908, + #2909
    • +
    • In HTML5, the default output process generates a Dublin Core metadata tag that specifies the + content format as XHTML. This is left over from earlier releases when the two formats shared the same code. + The format value is now correctly set to HTML5. + #2912
    • +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    +
    +
    + + + DITA-OT 3.0.2 <ph outputclass="small">released February 5, 2018</ph> + +
    +

    DITA Open Toolkit 3.0.2 is a maintenance release that includes the following bug fixes.

    +
      +
    • If a map or branch of a map was chunked to create a single document, but that portion of the map + also contained a topicref reference to a non-DITA resource, earlier versions of + DITA-OT attempted to read and chunk the non-DITA file. This resulted in build errors and a broken reference. + The non-DITA references are no longer read or renamed when chunking. + #1550, + #2883
    • +
    • Several issues related to relationship table column headings have been resolved: + #2432, + #2873. +
        +
      • If a relationship table heading uses a navtitle without a topic, earlier versions of + DITA-OT would fail with an XSLT error. If the href attribute is not present, the + navigation title will now be used as expected.
      • +
      • You can now set a heading on any relationship table column to apply that heading to the group of links + generated by cells in that column. For example, if you create a column for + glossentry topics and set a title of “Related terms”, the generated links + will appear in a group titled “Related terms” (rather than the default “Related concepts”). In earlier + releases, these headings were ignored unless every column specified its own heading.
      • +
      +
    • +
    • If a bookmap is referenced from within another map or topic reference, earlier versions of + DITA-OT generated an invalid fo:page-sequence within an + fo:block, which caused FO processing to fail. DITA-OT now checks the bookmap + elements at the root level to determine whether page sequences and static content should be generated. This + allows processing to complete without errors. + #2596, + #2859 +
    • +
    • The bundled DITA grammar files have been updated to reflect the latest changes from the OASIS + DITA Technical Committee (Errata 02, 16 January 2018). These changes allow XML Schema-based validators like + Saxon EE to resolve schema references based on URI mappings, and replace declarations of the + domains attribute in modules with domains-att references to facilitate + domain attribute substitution. + #2725, + #2818, + #2860 +
    • +
    • In DITA-OT 3.0, image references in bookmap bookmeta data caused builds to fail. Processing has + been corrected to ignore images when reading topics from the map, allowing builds to complete successfully. + #2828 +
    • +
    • Earlier versions of DITA-OT failed to process resources where the filename includes the percent + % character. The URI parser has been corrected to escape these characters correctly and + rewrite references in valid URI syntax. + #2829 +
    • +
    • The Lightweight DITA plug-in has been updated to the latest version (2.0.2) to prevent errors + when processing Markdown input that contains typographic quotation marks. + #2837, + #2866 +
    • +
    • In DITA-OT 3.0, cross-references to external resources caused problems if the + scope attribute was not explicitly set to external. The preprocess + validation filter has been revised to implicitly treat such references as external in lax processing mode + per the DITA specification and issue a warning. + #2862, + #2877 +
    • +
    • The German translation for danger note labels has been changed from VORSICHT to GEFAHR to align with recommendations in ANSI + Z535.4 Annex D. + #2864, + #2871 +
    • +
    • DITA-OT 3.0 would fail with an error when generating HTML output with non-DITA resource + references such as MathML, which were treated as html. The format tracking + has been corrected to use the correct format in the job configuration instead of html. + #2867, + #2889 +
    • +
    • The DITA 1.2 schemas have been corrected to use DITA 1.2 version-specific identifiers in all + schemaLocation references. Previously one module was referenced with an unversioned + identifier, causing DITA 1.3 rules to be pulled into the DITA 1.2 task schema. + #2874, + #2878 +
    • +
    • The bundled Saxon-HE library was updated to version 9.8.0.7, which restores the ability to run + XSLT 1.0–based stylesheets. This change will allow existing plug-ins that still use XSLT 1.0 syntax to work + in DITA-OT 3.0.2 without migration. + #2887, + #2888 +
    • +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    +
    +
    + + + DITA-OT 3.0.1 <ph outputclass="small">released November 30, 2017</ph> + +
    +

    DITA Open Toolkit 3.0.1 is a maintenance release that includes the following bug fixes.

    +
      +
    • Microsoft Compiled HTML Help requires a Windows codepage rather than UTF-8, so many characters + are converted to HTML entities to ensure they are preserved during the codepage conversion. In earlier + versions of DITA-OT, these entities were not rendered correctly in index terms or in topic titles on the + Contents tab of the .chm file. This is now fixed; characters that exist in the + target codepage are not converted to entities, so they will appear properly in the compiled help file. + #1151, + #1271, + #2852 +
    • +
    • When unordered lists nest greater than 4 levels, PDF processing generates a warning about a + missing variable, and deeply nested lists use text such as Unordered List bullet 5 instead + of a bullet character. Characters for levels 1 through 4 now repeat in deeply nested lists. + #2824, + #2853 +
    • +
    • Map-first processing in 3.0 uses generated file names in the temp directory for HTML Help, but + this breaks any existing context-sensitive help projects that call topics directly by file name rather than + by aliased constants (topic IDs) or help context numbers. Topics in the compiled help file are now restored + to their original names to support external applications that to link to topics within a CHM by file name. + #2830 +
    • +
    • Simplified common variable definitions in 3.0 could not be overridden using the traditional + customization approach; the override process now checks for common variables to ensure those in the + configuration directory are used. + #2833, + #2838 +
    • +
    • Generating Markdown output with DITA-OT 3.0 failed with references to a missing stylesheet. The + Lightweight DITA plug-in has been updated to the latest version (2.0.1), which corrects the plug-in + directory path in the stylesheet reference, so Markdown output is now generated as expected. + #2836, + #2846 +
    • +
    • In 3.0, HTML Help project files would not compile to CHM files because a property definition was + not properly initialized. This has been fixed and CHM files are generated using the original map name. + #2851 +
    • +
    • In 3.0, the args.output.base property to name output files does not work + properly for HTML Help. The property is now used to produce a CHM file with the correct name and contents. + #2854 +
    • +
    • In 3.0, content references to warehouse topics that contain unresolved cross-references would + cause PDF builds to fail, even if the invalid reference was not explicitly included in the content + reference. DITA-OT now checks to make sure such files exist and only parses them if available. + #2856 +
    • +
    • +

      The documentation includes minor + + changes with + corrections and improvements to existing topics.

      +
    • +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    +
    +
    + + + DITA-OT 3.0 <ph outputclass="small">released October 28, 2017</ph> + +
    +

    DITA-OT 3.0 + adds support for Markdown, normalized DITA output, and the alternative authoring formats + proposed for Lightweight DITA. The map-first preprocessing approach provides a modern alternative to the + default preprocess operation.

    +
    + +
    + Markdown support +

    The + implementation previously provided by the external dita-ot-markdown + plug-in has been updated to support additional edge cases and bundled into the DITA-OT 3.0 release. + #2774

    +

    Markdown topics can be added to DITA publications by setting the format attribute to + markdown so the toolkit will recognize the source file as Markdown and convert it to + DITA:

    +

    + <map> + <topicref href="markdown-dita-topic.md" format="markdown"/> +</map> +

    +

    Along with Markdown input, DITA-OT now provides three new output formats to convert DITA content to Markdown, + including the original markdown syntax, markdown_github for + , and markdown_gitbook for publishing via GitBook.

    +

    Markdown output can be generated by passing one of these keywords to the dita command with + the option:

    +

    + dita --input=userguide.ditamap --format=markdown

    +

    The new output formats can be used to feed DITA content into Markdown-based publishing systems or other + workflows that lack the ability to process DITA XML.

    + The Markdown support is based on + , a strongly defined, highly compatible specification of Markdown and implemented + via the flexmark-java parser. +
    + +
    + Preview support for Lightweight DITA +

    The new org.lwdita plug-in replaces the earlier dita-ot-markdown plug-in + and provides preview support for the MDITA and HDITA authoring formats proposed for + .

    +

    The format attribute can be set to mdita to apply LwDITA-specific + processing to Markdown topics:

    +

    + <map> + <topicref href="mdita-topic.md" format="mdita"/> +</map> +

    +

    In this case, the first paragraph in the topic will be treated as a short description, for example, and + additional metadata can be specified for the topic via a YAML front matter block.

    + Since + has not yet been released as a formal specification, the implementation for MDITA and + HDITA authoring formats is subject to change. Future versions of DITA Open Toolkit will be updated as LwDITA + proposals evolve. +
    + +
    + Normalized DITA output +

    The new dita transformation generates normalized topics and maps from DITA input. The + normalized output includes the results of the DITA Open Toolkit pre-processing operations, which resolve map + references, keys, content references, code references and push metadata back and forth between maps and + topics.

    +

    In comparison to the source DITA files, the normalized DITA files are modified in the following ways:

    +
      +
    • References from one DITA map to another are resolved
    • +
    • Map-based links, such as those generated by map hierarchy and relationship tables, are added to the + topics.
    • +
    • Link text is resolved.
    • +
    • Map attributes that cascade are made explicit on child elements.
    • +
    • Map metadata such as index entries and copyrights are pushed into topics.
    • +
    • Topic metadata such as navigation titles, link text and short descriptions are pulled from topics into the + map.
    • +
    • XML comments are removed.
    • +
    +

    Normalized output can be used during plug-in development to troubleshoot the results of preprocessing + routines, or in situations where post-processing of DITA content is required, but the downstream systems are + limited in their ability to resolve DITA references. + #2775

    + The dita transformation can also be used to convert Markdown topics or the + alternative input formats supported by the org.lwdita plug-in to standard DITA XML. +
    + +
    + Map-first preprocessing +

    + #2763

    +

    + +

    +
    +
    + + + Resolved issues + +
    +

    In addition to the highlights mentioned above, DITA Open Toolkit Release 3.0 includes + the following changes.

    +
    + +
    + Features +

    DITA Open Toolkit Release 3.0 includes the following new features:

    + +
      +
    • A new property named args.output.base can be used to control the name of + the output file for transformation types that produce a single output file. The value of the property is the + base file name of the output file, without file extension. The file extension is defined by the + transformation type. + #1200 +
    • +
    • The custom logging implementation used by earlier toolkit versions has been replaced with the + Simple Logging Facade for Java (SLF4J) and the Logback logging framework to better support parameterized log + messages and reduce dependencies on the underlying logging mechanisms. + #1471 +
    • +
    • HTML Help project files are now generated in a temporary directory, so that only the Compiled + HTML Help (.chm) file is returned. + #1551 +
    • +
    • The + routine has been extended to support subject schemes + #2626 +
    • +
    • A new ant.import extension point has been added to make it easier to add new + targets to the Ant processing pipeline. + #2766 + See + for details. +
    • +
    +
    + +
    + Enhancements and changes +

    DITA Open Toolkit Release 3.0 includes the following enhancements and changes to + existing features:

    + +
      +
    • Legacy plug-ins that were removed from the distribution package in earlier releases have been + moved to their own repositories. The following plug-ins have been moved: DocBook, Eclipse Content, Eclipse + map specialization, RTF, ODT, and support for pre-OASIS DITA document types. + #2121 +
    • +
    • Use XMLUnit 2 + #2232, + #2723 +
    • +
    • Generated link groups in XHTML and HTML5 now use list markup rather than + div, as required to comply with WCAG 2.0 accessibility guidelines. + #2447 +
    • +
    • Upgrade Gradle to version 3.5 + #2713 +
    • +
    • When building PDF from files that do not use .dita or + .ditamap extensions, the input file extension (such as .xml) is + no longer included in the generated PDF file name. + #2718 +
    • +
    • Upgrade Saxon-HE to version 9.8 + #2721, + #2727, + #2822 +
    • +
    • Upgrade Apache FOP to version 2.2 + #2736 +
    • +
    • When merging submaps for processing, preserve titles and metadata from the referenced submap so + that they may be used in later processing stages. + #2739 +
    • +
    • Add flagging information from DITAVAL during the same step that handles DITAVAL filtering. + #2748 +
    • +
    • Allow plug-ins to specify custom parameters of type url + #2755 +
    • +
    • Move or rename Java classes + #2765 +
    • +
    • Make it easier for PDF plug-ins or overrides to customize how processing handles the DITA + outputclass attribute, such as by mapping it to corresponding XSL:FO attributes. + #2770 +
    • +
    • Topics exploded by chunk should be written to the topic folder + #2780 +
    • +
    • Move configuration files to a dedicated config/ directory, which ensures + that configuration files and generated files like messages.xml will not be bundled into + the compiled dost.jar + #2781, + #2783 +
    • +
    • Allow any attribute to be used for profiling + #2784 +
    • +
    • Support language-independent variable files. For variables common to all (or nearly all) + languages, this means we no longer need to maintain an individual copy of the variable for every language. + Plugins may also now define variables that are used by all languages. + #2789 +
    • +
    • Use double-hyphen syntax for CLI options in error messages + #2808 +
    • +
    • Refactor HTML5 simpletable accessibility to use more modern attributes + to associate table entries with header cells. + #2811, + #2448 +
    • +
    +
    + +
    + Bugs +

    DITA Open Toolkit Release 3.0 provides fixes for the following bugs:

    + +
      + +
    • Email links without a scope or format previously generated a NullPointerException. The + mailto: syntax is now recognized as an email link and will not be read as a file + reference. + #2654 +
    • +
    • The wrong language code was previously set when documents set xml:lang to the + value zh-Hans + #2742 +
    • +
    • According to the DITA 1.3 specification, when key definitions refer to images, text that would + otherwise become link text should be placed in the images alt element as alternative text. + Previously the text was placed directly into the image, which was not valid and + ignored by later processing. + #2752, + #2814 +
    • +
    • In earlier releases, when a table element included too many entries in + a row, FOP would crash during PDF processing. The extra entries are now ignored with an error message. + #2782 +
    • +
    • A Java method for generating relative paths failed on Windows when comparing two paths from + different drives. The method has been fixed so that it does not try to construct a relative path between + drives. + #2797 +
    • +
    • In HTML5, a DITA stepsction that contained paragraphs resulted in HTML5 + p elements that contained p. The + stepsection now generates a div to ensure valid HTML5 + output regardless of what it contains. + #2807 +
    • +
    • An updated errata has been approved for DITA 1.3 that removes default values for + rowheader on colspec. The relevant grammar file modules from + OASIS have been updated to include this errata. + #2810 +
    • +
    +
    + +
    + Contributors +

    DITA Open Toolkit Release 3.0 includes + by the following people:

    + + NOTE: This lists contributions to the core toolkit, not docs. +
      +
    1. Jarno Elovirta
    2. +
    3. Robert D. Anderson
    4. +
    5. Roger Sheen
    6. +
    7. Alexey Mironov
    8. +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    + +
    + Documentation updates +

    The documentation for DITA Open Toolkit Release 3.0 provides corrections and + improvements to existing topics, along with new information:

    +
      +
    • The top-level documentation structure has been revised to replace book-based paradigms (User + Guide, Developer Reference) with more task-oriented groupings + #121 +
        +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      +
    • +
    • New input formats + #150 + #151 +
        +
      • +
      • +
      • +
      • +
    • +
    • New output formats + #152 +
        +
      • +
      • +
      • +
      • +
      +
    • +
    • +
    • +
    • +
    • +
    +

    For additional information on documentation issues resolved in DITA Open Toolkit Release , see the + + 3.0 milestone in the documentation repository.

    +

    DITA Open Toolkit Release 3.0 includes + by the following people:

    + NOTE: This lists contributions to docs, not to the core toolkit. +
      +
    1. Roger Sheen
    2. +
    3. Robert D. Anderson
    4. +
    5. Jarno Elovirta
    6. +
    7. Shane Taylor
    8. +
    9. Misti Pinter
    10. +
    11. Garrett Guillotte
    12. +
    13. Lionel Moizeau
    14. +
    15. Stefan Eike
    16. +
    +

    For the complete list of documentation changes since the previous release, see the + + changelog.

    +
    +
    +
    + diff --git a/release-notes/rel3.1.dita b/release-notes/rel3.1.dita new file mode 100644 index 0000000..2a3e344 --- /dev/null +++ b/release-notes/rel3.1.dita @@ -0,0 +1,459 @@ + + + + + + DITA Open Toolkit 3.1.3 Release Notes + + Release Notes + + + + DITA Open Toolkit 3.1.3 is a maintenance release that fixes issues + reported in DITA-OT 3.1, which includes . +

    + + + + + Requirements + +

    + Add info on new minimum Java version or any other requirements that have changed + since previous release. +

    DITA Open Toolkit Release 3.1 requires the Java Runtime Environment (JRE) version + or later.

    +
    + +
    + + + DITA-OT 3.1.3 <ph outputclass="small">released October 3, 2018</ph> + +
    +

    DITA Open Toolkit 3.1.3 is a maintenance release that includes the + following bug fixes.

    +
      +
    • In earlier releases, if a footnote was defined in a table cell that specified + align="center", the footnote content at the bottom of a PDF page would also be + center-aligned. This has been fixed so that PDF footnotes always align to the start of the page. + #3060, + #3065 +
    • +
    • In DITA-OT 3.0 and 3.1, unresolved conref errors may appear when nested submaps + that are not in the same directory as the referencing map have title elements with + valid content references. This issue has been fixed. + #3064 +
    • +
    • In PDF output, index entries inside of draft-comment and + required-cleanup would appear in the generated index as broken links when draft + content was excluded. This has been fixed, and the entries will not appear in the index unless draft content + is included. + #3066 +
    • +
    • In earlier releases, missing images could result in a missing file warning that suggested that a + navtitle was needed to use the image in a table of contents. This message has + been fixed to simply describe the missing file. + #3071 +
    • +
    • In earlier releases, many PDF index entries were defined in the XSL-FO file using + id attributes that worked but were technically invalid. This could result in a large + number of warnings from tools that rendered the XSL-FO file. The id attributes have been + fixed to ensure validity. + #3073 +
    • +
    • When maps use content outside of the map directory, and some topicref + elements in the build specify chunk="by-topic", earlier releases could fail with Java + errors when evaluating the chunk attribute. This has been fixed so that chunking is + resolved properly when content is referenced outside of the map directory. + #3077 +
    • +
    • In PDF processing for DITA-OT 3.0 and 3.1, a variable that stores navigation titles was typed in + a way that caused XSLT errors for some values. The variable type has been corrected. + #3081 +
    • +
    • In earlier releases, PDF builds with broken links improperly reported a fatal error. DITA-OT 3.0 + was changed to halt the build on fatal errors, which caused these PDF builds to fail. The error message + level has been corrected from FATAL to ERROR, allowing builds to finish. + #3082 +
    • +
    • In DITA-OT 3.0 and 3.1, the PDF build using preprocess2 had build errors + when the copy-to attribute was used. This error has been resolved, and the + copy-to attribute is evaluated correctly in preprocess2. + #3083, + #3085 +
    • +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    +
    +
    + + + DITA-OT 3.1.2 <ph outputclass="small">released August 13, 2018</ph> + +
    +

    DITA Open Toolkit 3.1.2 is a maintenance release that includes the following bug fixes.

    +
      +
    • When a content reference was combined with conrefend to reference a sequence of + topics, all but the first topic were copied without a required id attribute. This resulted + in NullPointerExceptions from later processing steps that expected id on all topics. The + content reference behavior has been fixed to avoid the error. + #2222, + #3033
    • +
    • In earlier versions, when a topic with index terms had an empty title (or a title with only + metadata), HTML Help and Eclipse Help index processing would end in a NullPointerException. This error has + been fixed. + #2940, + #3043 +
    • +
    • In earlier versions, when the input file was a topic that contained a conref + reference to itself, that topic would not generate output for XHTML or HTML5. The issue has been fixed. + #2948, + #3045 +
    • +
    • When processing without schema validation, it is possible to add keyref + attributes on elements where they are not legal. In earlier releases, this resulted in a + NullPointerException from the keyref resolution module. These invalid attributes are now ignored. + #3008, + #3034
    • +
    • The Lightweight DITA plug-in has been updated to version 2.0.6, which provides improved support + for inline HTML elements. + #3023 +
    • +
    • In DITA-OT 3.1, configuration data is read from two files, but some processes would incorrectly + load only one file and miss properties in the other. This is fixed by removing + lib/configuration.properties and storing all configuration properties in + config/configuration.properties. + #3024 +
    • +
    • In earlier releases, when the "same file" reference syntax href="#./elementid + was pulled into another file as part of a content reference, the href attribute was + corrupted, resulting in broken links. These references have been fixed and now refer to the element with + id="elementid" in the new resolved context. + #3027 +
    • +
    • In DITA-OT 3.0 and 3.1, Saxon would generate XSLT errors when it encountered + cite or term inside of a + linktext element in the related links section of a topic. The XSLT syntax has + been fixed to avoid this error. + #3029 +
    • +
    • In earlier versions, the Ant build code for PDF2 set up a CLASSPATH variable + that referenced JAR files that no longer exist. These references have been removed. + #2832, + #3040 +
    • +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    +
    +
    + + + DITA-OT 3.1.1 <ph outputclass="small">released July 16, 2018</ph> + +
    +

    DITA Open Toolkit 3.1.1 is a maintenance release that includes the following bug fixes.

    +
      +
    • When generating PDF output with Antenna House Formatter, earlier versions would sometimes fail + when interpreting the Antenna House log. Processing has been updated to improve test coverage and handle + these cases more gracefully. + #2662, + #3012 +
    • +
    • Earlier versions treated image files referenced in data elements and + certain other non-DITA resources as DITA topics. The map reader processing phase has been corrected to + reliably collect non-DITA resources and record them as such in the .job.xml file. + #2855, + #3010 +
    • +
    • DITA-OT 3.0 failed to produce Eclipse help output. A missing library import has been restored to + ensure that Eclipse help is generated correctly. + #2870 +
    • +
    • When generating output for HTML-based formats, earlier versions failed to handle + conkeyref attribute references to topics outside the map directory hierarchy, resulting + in missing content and invalid paths to CSS resources. Processing has been corrected to ensure the paths to + such files are calculated correctly. + #2983, + #3014 +
    • +
    • A missing reference to the $file-being-processed parameter has been + restored to ensure that the current file is correctly tracked while resolving map references in + pre-processing. + #3005 +
    • +
    • In earlier versions, key references to duplicate topics created via copy-to + attributes caused builds to fail. The original source information is now correctly recorded for copy-to + targets, allowing builds to continue. + #3007, + #3015 +
    • +
    • In earlier versions, screen elements resulted in a build failure when + published to troff. Updating the plugin to version 3.1.1 resolves the issue. + #3017 +
    • +
    • +

      The documentation includes minor + + changes with + corrections and improvements to existing topics.

      +
    • +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    +
    +
    + + + DITA-OT 3.1 <ph outputclass="small">released June 9, 2018</ph> + +
    +

    DITA Open Toolkit Release 3.1 includes support for DITA 1.3 SVG + domain elements, enhanced codeblock processing, and incremental improvements to + Lightweight DITA processing and PDF output.

    +
    + +
    + Features +

    DITA Open Toolkit Release 3.1 includes the following new features:

    + +
      +
    • A new Java wrapper for the XSLT mapref map resolution module allows for better + handling of content references and key references in nested maps. + #2875 +
    • +
    • Updates to the Java code that calls Saxon now support integrated extension functions for Saxon + HE (versions ≥ 9.2). + #2880 +
    • +
    • A new end-to-end test case ensures a basic test is run for all supported transformation types + with every update to DITA-OT. + #2932 +
    • +
    • DITA-OT now supports the DITA 1.3 SVG domain elements, including svgref + for pulling in external SVG markup. + #2960 +
    • +
    • PDF output now supports key-based linking for phrase like elements, including + cite, ph, and dt. When key + definitions specify a URI for linking, the links will now appear in PDF. This markup already resulted in + links in HTML output, and resulted in PDF links for key references on keyword and + term. + #2025, + #2961 +
    • +
    • Processing for codeblock elements has been enhanced to support new + outputclass keywords that can be used to adjust the presentation of code samples. +
        +
      • To remove leading whitespace in external code references, set the + outputclass attribute to include the normalize-space keyword. With + this setting, DITA-OT trims any leading whitespace that is common to all lines in the code block to + remove excess indentation and keep lines short. + #2907, + #2953 +
      • +
      • To highlight whitespace characters in code blocks, set the outputclass + attribute to include the show-whitespace keyword. When PDF output is generated, space + characters in the code will be replaced with a middle dot or “interpunct” character + ( · ); tab characters are replaced with a rightwards arrow and three spaces + ( →    ). + #2975 +
      • +
      • To add line numbers to code blocks in PDF output, set the outputclass attribute to + include the show-line-numbers keyword. Line numbering has been available since + DITA-OT 2.0, but previously required custom PDF plug-ins to override the + codeblock.generate-line-number template mode to return true(). + DITA-OT 3.1 now checks for the keyword in the outputclass, so line numbering can be + enabled without custom PDF plug-ins. +
      • +
      +
    • +
    +
    + +
    + Enhancements and changes +

    DITA Open Toolkit Release 3.1 includes the following enhancements and changes to + existing features:

    + +
      +
    • The error message generated for duplicate key definitions has been updated for clarity. + #2079 +
    • +
    • Ant scripts for DITA-OT builds now make use of if:set and + unless:set attributes in the Ant namespace, which can be used to control whether + parameters are passed to XSLT modules. These attributes replace custom implementations of + if and unless logic introduced before Ant had this capability. + #2890 +
    • +
    • The PDF build code has been refactored and simplified to use the + xmlcatalog element instead of using a custom xml.catalog.files + property. + #2938 +
    • + +
    • Alternate text for images is now preserved in the XSL-FO files generated for PDF, using the + custom attributes necessary for Apache FOP, RenderX XEP, and Antenna + House processors. The alternate text is now available in the final output file when processors generate + accessible PDF. + #2850, + #2964
    • +
    • In PDF processing with Apache FOP, DITA-OT 3.1 now uses + the Simple Logging Facade for Java (SLF4J), allowing for better control and formatting of FOP log messages. + To reduce noise on the console, all FOP messages are set to the Info level and hidden by default. + #2967 +
    • +
    • The HTML5 XSLT stylesheets used to create TOC navigation have been refactored to use a new + processing mode. This removes the "Duplicate import of map2html5Impl.xsl" message that + appeared with DITA-OT 3.0. + #2821 + #2970 +
    • +
    • The distribution build has been updated to use the documentation Gradle build instead of Ant. + #2972 +
    • +
    • The bundled Apache FOP version has been updated to . (For details on recent changes, see the + .) + #2974, + #2976 +
    • +
    • The frame attribute on choicetable elements is now + respected in PDF output; previously all values for frame on this element were ignored in + PDF. + #2978 +
    • +
    • The LwDITA plugin has been updated to version 2.0.5, pulling in a number of fixes for + Lightweight DITA processing. (Topic metadata is now preserved in YAML headers when generating Markdown for + composite topics, autolinks in Markdown topics are treated as external cross references, and definition + lists in Markdown input and links to ID fragments are now handled correctly.) + #2982, + #2993 +
    • +
    • PDF processing now includes a hook that can be used to add custom + fo:marker elements on any topic. New processing hooks are also available to add + custom anchors on any topic or titled sub-topic element, intended as a way to enable stable links into a + location within a PDF. + #2984 +
    • +
    • The Gradle wrapper used to run the documentation build has been updated to version 4.8. + #2991, + #2994 +
    • +
    +
    + +
    + Bugs +

    DITA Open Toolkit Release 3.1 provides fixes for the following bugs:

    + +
      +
    • When a nested map uses conref to pull content from another map, but the root + map does not use conref, the content reference was not previously resolved. This is + now fixed, and content references in all maps used by the build are resolved properly. + #2494 +
    • +
    • When a chapter element refers to another map that is not a bookmap, PDF + processing now formats the referenced content as a chapter. In earlier versions, the content could be + formatted as a generic topic that did not match other chapters in the same map. + #2898 +
    • +
    • The error message DOTJ007E, which appeared for duplicate filter conditions in + DITAVAL properties, has been switched from an Error to a Warning. This message, which usually does not + indicate a problem that results in broken output, will now appear as DOTJ007W. + #2958 +
    • +
    • The empty temp/ directory included in DITA-OT 3.0 distribution packages has + been removed. + #2973 +
    • + +
    • Several duplicate ID messages that appeared in PDF processing have been fixed by removing + incorrect ID definitions. These messages could previously appear when nested elements inside of topic titles + or topic short descriptions specified their own id attribute; in DITA-OT 3.0, this also + appeared for all pt elements that specified id. + #2985 +
    • +
    • Several unnecessary files have been removed from the docsrc/ folder of the + distribution package. + #2990 +
    • + +
    +
    + +
    + Contributors +

    DITA Open Toolkit Release 3.1 includes + by the following people:

    + + NOTE: This lists contributions to the core toolkit, not docs. +
      +
    1. Jarno Elovirta
    2. +
    3. Robert D. Anderson
    4. +
    5. Roger Sheen
    6. +
    7. Radu Coravu
    8. +
    9. Alexey Mironov
    10. +
    11. Stefan Eike
    12. +
    13. Shane Taylor
    14. +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    + +
    + Documentation updates +

    The documentation for DITA Open Toolkit Release 3.1 provides corrections and + improvements to existing topics, along with new information in the following topics:

    +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +

    For additional information on documentation issues resolved in DITA Open Toolkit Release , see the + + 3.1 milestone in the documentation repository.

    +

    DITA Open Toolkit Release 3.1 includes + by the following people:

    + NOTE: This lists contributions to docs, not to the core toolkit. +
      +
    1. Roger Sheen
    2. +
    3. Robert D. Anderson
    4. +
    5. Lief Erickson
    6. +
    7. Stefan Eike
    8. +
    9. Jarno Elovirta
    10. +
    11. Eero Helenius
    12. +
    13. François Violette
    14. +
    +

    For the complete list of documentation changes since the previous release, see the + + changelog.

    +
    +
    +
    + diff --git a/release-notes/rel3.2.dita b/release-notes/rel3.2.dita new file mode 100644 index 0000000..238033f --- /dev/null +++ b/release-notes/rel3.2.dita @@ -0,0 +1,422 @@ + + + + + + DITA Open Toolkit 3.2.1 Release Notes + + Release Notes + + + + DITA Open Toolkit 3.2.1 is a maintenance release that fixes issues + reported in DITA-OT 3.2, which includes . +

    + + + + + Requirements + +

    + Add info on new minimum Java version or any other requirements that have changed + since previous release. +

    DITA Open Toolkit Release 3.2 requires the Java Runtime Environment (JRE) version + or later.

    +
    + +
    + + + DITA-OT 3.2.1 + <ph outputclass="small">released December 6, 2018</ph> + +
    +

    DITA Open Toolkit 3.2.1 is a maintenance release that includes the + following bug fixes.

    +
      +
    • In earlier releases, the base directory resolution treated input files as local resources. Input + file handling has been extended to support non-local (HTTP and HTTPS) input URIs. + #3140 +
    • +
    • The parsing mechanism for was extended to support pre-release + versions and build metadata in plug-in repository version information. + #3148 +
    • +
    • In earlier releases, branch filtering using ditavalref elements failed + when the map included references outside the scope of the map directory. This has been fixed and filtered + topics are handled as expected. + #3155 +
    • +
    • To make XSLT import and include elements consistent, remaining relative URIs in the default + plug-ins were rewritten to use the absolute plugin URI scheme. This allows Saxon to detect + duplicate imports more easily and makes it easier to copy import and include elements to other stylesheets. + #3156, + #3159, + #3163 +
    • +
    • The plugin registry UI at was not working on certain + older Windows browsers that do not support all of the necessary Javascript features. Polyfills were added to + allow these browsers to correctly display the list of available plug-ins. + #112, + #113, + #114 +
    • +
    +

    For additional information on the issues resolved since the previous release, see the + + 3.2 milestone and + + changelog on GitHub.

    +
    +
    +
    + + + DITA-OT 3.2 + <ph outputclass="small">released November 3, 2018</ph> + +
    +

    DITA Open Toolkit Release 3.2 includes new command-line options, + support for RELAX NG parsing and validation, preliminary processing for the XDITA authoring format proposed + for Lightweight DITA, and a plug-in registry that makes it easier to discover and install new + plug-ins.

    +
    + +
    + Feature Highlights +

    DITA Open Toolkit Release 3.2 includes the following new features:

    + +
      +
    • +

      The dita command has been extended with several new arguments and options to improve + the usability of the plug-in installation and removal processes.

      +
        +
      • The --plugins argument shows a list of the currently installed plug-ins
      • +
      • The --transtypes argument shows the available output formats (transformation + types)
      • +
      • The --force option can be passed to + dita --install to overwrite an existing plug-in with a new + version.
      • +
      +

      When the plug-in integration process runs, the console now shows a list of plug-ins that were added or + removed. + #1960, + #3037, + #3070, + #3120, + #3109, + #3110

      +
    • +
    • +

      RELAX NG schemas can now be used to parse and validate DITA topics and maps without installing additional + plug-ins. + #2019, + #3106

      +

      To use a RELAX NG schema instead of a DTD or schema, add an xml-model processing + instruction at the beginning of the file, immediately after the XML prolog, for example:

      +

      xml-model href="urn:oasis:names:tc:dita:rng:topic.rng" + schematypens="http://relaxng.org/ns/structure/1.0" +

      +
    • +
    • +

      DITA-OT 3.2 adds preliminary processing for the XDITA authoring format proposed for Lightweight DITA in + addition to the preview support for the MDITA and HDITA authoring formats provided in DITA-OT 3.0.

      +

      The org.oasis-open.xdita plug-in version 0.2.2 is now bundled with the default + distribution. XDITA is a subset of DITA designed for users who want to write DITA content but who do not + want (or need) the full power of DITA. + #3108 + #3136 +

      + For examples of cross-format content sharing between topics in XDITA, HDITA, + extended-profile MDITA, and DITA 1.3, see the LwDITA sample files in the DITA-OT installation directory + under plugins/org.oasis-open.xdita.v0_2_2/samples. +
    • +
    • +

      +

      For more information, see + . + #3028, + #3101 +

      +
    • +
    • +

      A new parameter link-crawl has been added to control whether links within topics are + followed.

      +

      By default, links within topics are followed, as are links in any found topics, so that a map with one + topic can end up processing any number of topics. When link-crawl is set to + map instead of the default topic, DITA-OT will only process topics + that are actually referenced in the map. + #3102 +

      +
    • +
    +
    + +
    + Enhancements and changes +

    DITA Open Toolkit Release 3.2 includes the following enhancements and changes to + existing features:

    + +
      +
    • Text-only entries in relationship tables (with link text but no href attribute) + now create plain text entries in the related links section of relevant topics. This update also removes an + unnecessary error message for link or xref elements that + do not specify href. + #1132, + #3030
    • +
    • XSL-FO output for for section and example + elements has been updated for consistency, ensuring that all default sections use the same blocks and + attribute sets. + #1248, + #3057
    • +
    • In earlier versions, PDF builds would finish with BUILD SUCCESSFUL even when the + XSL-FO process failed. This behavior has been adjusted so the build fails if the XSL-FO processor cannot + create the PDF file. + #1414, + #1831, + #3137 +
    • +
    • In earlier releases, when XHTML and HTML5 processing encountered an unknown element with no + fallback processing, the result appeared in yellow. These output processes have been updated to generate a + warning for this case, and to remove the yellow formatting. + #2033, + #3035 +
    • +
    • The default TOC alignment of "justify" has been removed for PDF output with FOP. This was + originally added to work around a defect in FOP; that defect is resolved, so the workaround can be removed. + #2403, + #3036 +
    • +
    • When a grammar file (DTD, Schema, or RNG) cannot be found, DITA-OT previously issued a "file + cannot be loaded" exception that only referred to the map or topic. A new message has been added to + distinguish between topics that cannot be found and grammar files that are not available or not installed + properly. + #2461, + #3124 +
    • +
    • Most values for the chunk attribute have no meaning for PDF processing, which + always produces a single output file. Beginning with this release, chunk processing will be disabled by + default in PDF. It can be re-enabled for chunk attribute edge cases by setting + org.dita.pdf2.chunk.enabled=true. + #2479, + #3118 +
    • +
    • The quote element q now generates an equivalent XHTML and HTML5 + q element, rather than generating quote characters. This improves accessibility + of the XHTML and HTML5 output, and defers any internationalization concerns to settings within the browser. + #2481, + #3032 +
    • +
    • In PDF output, the long quote element lq is now indented by default, as + with other output formats. + #3009, + #3031 +
    • +
    • The previously deprecated dost.jar.path alias has been removed, and the + dost.class.path property to which it referred has been deprecated, as the classpath is + now defined outside the Ant process. + #3011 +
    • +
    • HTML5 CSS configuration has been refactored to improve test coverage and simplify property + declarations. + #3020 +
    • +
    • Legacy arguments for the old Java command-line interface that were deprecated in DITA-OT 2.3 + have now been removed. + #3025 +
    • +
    • PDF output now provides generic hazard statement styling based on the ISO 3864 and ANSI Z535 + standards, with an SVG icon and XSL variables for the corresponding ISO and ANSI color definitions. + #3039 +
    • +
    • The XSL import tree for PDF output has been flattened by moving + topic-attr.xsl and concept-attr.xsl imports to the + topic2fo.xsl shell. In earlier versions, overriding these files required additional + modifications to commons-attr.xsl, from which they were imported. + #3050 +
    • +
    • In all earlier releases, links to topics or other elements with titles would automatically + retrieve the title for use as link text, but links to the title would not. With the growing use of WYSIWYG + editors, it is easy to set (and link to) IDs directly on titles rather than on the container. Accordingly, + output transforms have been updated to pull the same link text when a reference points to a title as for a + reference to a container. The same update is made for links to definition list terms and the containing + definition list entries. + #3056 +
    • +
    • An alternative installation method can now be used to install DITA-OT on macOS via the + package manager. See + for details. + #3059 +
    • +
    • The topicpull step of DITA-OT preprocessing is used primarily to update link + text. This step previously ran on all located topics in the build, but this processing was not useful for + resource-only topics that are not published. Accordingly, the topicpull + step has been updated to only run on normal-role topics. + #3079 +
    • +
    • In earlier releases, conref resolution would fail with an error when the + referring document had a constraint that was not also specified on the target document (as when referencing + DITA content from an XDITA topic, for example). Based on the DITA specification, this is an error condition + but should only fail when the constraint is defined as "strict". Accordingly, the conref + processor has been updated to allow resolution of conref with an error for ordinary + constraints. + #3084, + #3097 +
    • +
    • ARIA role attributes have been extracted from structural HTML5 elements into attribute sets to + make it easier to override roles or add custom class attributes as required by popular web frameworks. + #3090 +
    • +
    • PDF output has been updated so that if change bars are used for revisions and an entire topic is + revised, the change bar will also appear alongside the title in the table of contents and the full topic. + Previously the bar only appeared alongside the topic body. + #3100, + #3111 +
    • +
    • Unnecessary dependencies for common Java libraries have been removed. + #3107 +
    • +
    • The command-line help for the dita command has been updated to clarify the + list of arguments and options. + #3114 +
    • +
    • A single NOTICES file is now generated with the license information for all third-party + libraries included in the distribution package. + #3121 +
    • +
    +
    + +
    + Bugs +

    DITA Open Toolkit Release 3.2 provides fixes for the following bugs:

    + +
      +
    • When a shortdesc element is nested in abstract + along with other elements and PDF output is generated with the default chapter layout, earlier versions of + DITA-OT indented the short description further than its siblings. Processing has been updated to ensure that + the correct indentation from the parent is applied for both BASIC and MINITOC layouts. + #3063, + #3116 +
    • +
    • In earlier releases, footnotes defined inside elements with extra styling (such as bold, italic, + or centered text) erroneously applied the anchor style to the footnote body in PDF output. These footnotes + are now rendered with the same formatting as other footnotes. + #3091 +
    • +
    • In PDF output generated with earlier releases, div elements were + rendered with nothing more than a new line. This has been corrected to render logical division elements like + other blocks, separated by a bit of space from the previous block (and pick up any standard overrides from + the common.block attribute set). + #3115 +
    • +
    • Default formatting for xmlpi elements has been added to all output + types (including HTML-based formats, PDF, and troff) to ensure that XML processing instructions are wrapped + in question marks and angle brackets. A processing instruction tagged as <xmlpi>test + this</xmlpi> is now rendered in the output as <?test this?>. + #3117 +
    • +
    • In earlier releases, the conref push module did not properly handle namespaced debugging + attributes. (It wrote out the attribute but removed the namespace declaration.) The namespaces are now + preserved. + #3119 +
    • +
    • When the same document appeared more than once in a map, cascading metadata was added for every + instance of that document. For maps that reference individual topics in a large document (such as a document + with 500 small topics), this resulted in OutOfMemory errors from the + move-meta preprocessing step. This has been fixed so metadata is handled properly for + each reference to a document. + #3127 +
    • +
    • In earlier releases, input documents that included tables with the frame + attribute set to "none" generated invalid HTML5 markup (border="0"). + Processing has been corrected to ensure that the border attribute is omitted for tables + that have no border. + #3128, + #3139 +
    • +
    +
    + +
    + Contributors +

    DITA Open Toolkit Release 3.2 includes + by the following people:

    + + NOTE: This lists contributions to the core toolkit, not docs. +
      +
    1. Jarno Elovirta
    2. +
    3. Robert D Anderson
    4. +
    5. Roger Sheen
    6. +
    7. Stefan Gentz
    8. +
    9. Radu Coravu
    10. +
    11. Lief Erickson
    12. +
    13. Stefan Eike
    14. +
    15. Alexey Mironov
    16. +
    17. Eero Helenius
    18. +
    19. Sean Molenaar
    20. +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    + +
    + Documentation updates +

    The documentation for DITA Open Toolkit Release 3.2 provides corrections and + improvements to existing topics, along with new information in the following topics:

    +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +

    Additional use cases and sample files are now provided in + , including: +

      +
    • +
    • +
    • +
    • +
    • +
    • +
    + The files for these sample plug-ins are available on + GitHub and included in the DITA-OT installation directory under + docsrc/samples/plugins/. +

    +

    For additional information on documentation issues resolved in DITA Open Toolkit Release , see the + + 3.2 milestone in the documentation repository.

    +

    DITA Open Toolkit Release 3.2 includes + by the following people:

    + NOTE: This lists contributions to docs, not to the core toolkit. +
      +
    1. Roger Sheen
    2. +
    3. Robert D Anderson
    4. +
    5. Mark Giffin
    6. +
    7. Jarno Elovirta
    8. +
    +

    For the complete list of documentation changes since the previous release, see the + + changelog.

    +
    +
    +
    + diff --git a/release-notes/rel3.3.dita b/release-notes/rel3.3.dita new file mode 100644 index 0000000..058d033 --- /dev/null +++ b/release-notes/rel3.3.dita @@ -0,0 +1,710 @@ + + + + + + DITA Open Toolkit 3.3 Release Notes + + Release Notes + + + + DITA Open Toolkit 3.3.4 is a maintenance release that fixes issues + reported in DITA-OT 3.3, which includes . +

    + + + + + Requirements + +

    + Add info on new minimum Java version or any other requirements that have changed + since previous release. +

    +

    + +
    + + + DITA-OT 3.3.4 + <ph outputclass="small text-muted">released September 9, 2019</ph> + + + + + + + +
    +

    DITA Open Toolkit 3.3.4 is a maintenance release that includes the + following bug fixes.

    +
      +
    • In earlier releases, when a topic contained links to files outside of the map directory (but the + map itself did not link to anything outside of the map directory), setting the parameter + onlytopic.in.map to true would corrupt those peer links in the + topics. This has been fixed, and relative links within topics use the expected path. + #3333, + #3350 +
    • +
    • In earlier releases, when a link element without link text also + specified attributes that resulted in DITAVAL-based flag images, generated link text used the target + document’s file name instead of a title. The link text has been fixed to pull a title from the referenced + document. + #3346 +
    • +
    • When a topic title contains elements with id attributes, and those topics are + converted to PDF, earlier releases would place an extra copy of the ID in fo:marker + elements used to help with headers. The duplicate ID, which resulted in warnings from some FO processors, + has been removed. + #3347 +
    • +
    • DITA-OT distribution packages are now built and tested with the open-source Java distribution + OpenJDK 8. + #3348 +
    • +
    • In earlier releases, cross references to footnotes in XHTML and HTML5 applied superscript + styling too early in the build, resulting in errors from later processing stages. This has been corrected, + and the build creates the expected styling without any errors. + #3349 +
    • +
    • In earlier releases, when a map included an authorinformation element + that did not provide an author or organization, formatters would generate errors when creating PDF metadata + based on that empty metadata. The build has been updated to ignore empty author information in source + documents. + #3351 +
    • +
    • In DITA-OT 3.3.3, we updated XHTML and HTML5 processing to make more efficient use of table + metadata when calculating table cell positions for accessibility. That processing failed for some tables + that used invalid CALS markup. The processing has been updated to make it more tolerant of incorrect input. + #3356 +
    • +
    +

    For additional information on the issues resolved since the previous release, see the + 3.3.4 milestone and + + changelog on GitHub.

    +
    +
    +
    + + + DITA-OT 3.3.3 <ph outputclass="small text-muted">released July 13, 2019</ph> + + + + + HTML5 + table headers + flagging + xml:lang + linklist + languages + linklist + link processing + Trouble note labels + note + passthrough + DITAVAL + passthrough action + action + prop + Saxon + tables + screen readers + + + + +
    +

    DITA Open Toolkit 3.3.3 is a maintenance release that includes the following bug fixes.

    +
      +
    • The code that generates headers attributes in HTML-based output formats has + been simplified to prevent Saxon crashes when processing complex tables. (These attributes help screen + readers to identify the header cells to which table cells are related.) + #3313 +
    • + +
    • In recent (3.x) versions of DITA-OT, flagging information is added before generated links are + created, so any flags on the topic reference are ignored. Processing has been updated to copy flags from the + topicref to the links that are generated to point to that topic. + #3317 +
    • +
    • Earlier versions of DITA-OT failed to honor the effective xml:lang attribute + value when processing links. This error has been corrected to ensure that the closest language value is + preserved on the generated linklist, so locale-based headings such as ”Related + information” are applied correctly. + #3321 +
    • +
    • The strings files for each supported language now include default translations for the “Trouble” + note label that is used for note elements with the type attribute + set to trouble. + #3322, + #3336 +
    • +
    • When generating HTML5 output, DITAVAL files can now preserve profiling attributes by default by + setting the action attribute of a prop element to + passthrough. Earlier versions of DITA-OT would only pass values through if the DITAVAL + filter defined matching attribute/value pairs via specific att and val + settings. + #3325 +
    • +
    • The LwDITA plugin has been updated to version 2.3.0 to fix several issues in Lightweight DITA + processing. (Nested lists are now properly generated in Markdown output when list items starts with inline + markup such as bold, or italics. Topic references with the format attribute set to + html will no longer be interpreted as DITA content. LwDITA-specific processing can be + applied to HTML topics by setting the format attribute to hdita.) + #3338 +
    • +
    +

    For additional information on the issues resolved since the previous release, see the + 3.3.3 milestone and + + changelog on GitHub.

    +
    +
    +
    + + + DITA-OT 3.3.2 <ph outputclass="small text-muted">released May 28, 2019</ph> + + + + + Bosnian + Danish + Montenegrin + Vietnamese + Saxon + version + media + images + video + media + + + + +
    +

    DITA Open Toolkit 3.3.2 is a maintenance release that includes the following bug fixes.

    +
      + +
    • Earlier versions of DITA-OT would attempt to download remote media objects referenced via the + data attribute of the object element, and failed to copy local + media objects to the output folder. Processing has been corrected to handle these references correctly. + #2722, + #2861, + #2947, + #3306 +
    • +
    • DITA-OT 3.3.1 would generate an invalid catalog file with an empty XML namespace when the + bundled version 9.8.0.14 of Saxon Home Edition was replaced with Saxon-HE 9.8.0.15. This has been corrected + to ensure that the OASIS namespace is used when generating the catalog-dita.xml file. + #3284, + #3287 + DITA-OT 3.3.2 still ships with + , but now also works with version 9.8.0.15. +
    • +
    • In PDF output, the bitmap warning icon has been replaced with the SVG image previously added for + the PDF implementation of the hazard domain. The new image appears in note elements + of type attention, caution, danger, + trouble, and warning and is scaled to match the previous icon size. + #3304 + The legacy warning.gif file remains available in the common + artwork folder, but will be removed in an upcoming version. +
    • +
    • Translations of the generated string for “continued” index entries have been added to the + Bosnian, Danish, Montenegrin, and Vietnamese localizations. + #3310 +
    • +
    +

    For additional information on the issues resolved since the previous release, see the + 3.3.2 milestone and + + changelog on GitHub.

    +
    +
    +
    + + + DITA-OT 3.3.1 <ph outputclass="small text-muted">released April 8, 2019</ph> + + + + security + TLS + registry + draft-comment + required-cleanup + conref + multiple targets + type + conkeyref + dita command + plug-in registry + integrator + transtype + string + + + + +
    +

    DITA Open Toolkit 3.3.1 is a maintenance release that includes the following bug fixes.

    +
      + +
    • When processing content references in cases with more than one possible target for the + conref value, recent versions of DITA-OT warned about the duplicate ID, but failed to + include the reference target in the message. The DOTX011W warning now restores this context + to aid in troubleshooting. + #3248 +
    • +
    • When processing source files with tables or figures in draft-comment or + required-cleanup elements, earlier versions of DITA-OT included them in lists and + numbered references even when DRAFT output was not active. Hidden elements are now excluded from lists of + figures and tables, and when numbering references. + #3249 +
    • +
    • The type attribute of the args.css and + args.cssroot parameters has been changed to string to better support + values that include relative paths. The transtype has also been corrected to + string. + #3251 +
    • +
    • When copying files to a temporary file scheme that flattens the directory structure, the + map-first preprocessing routine will now correctly handle indirect content references defined via + conkeyref. + #3260 +
    • +
    • The integrator and topic reader modules have been modified to use an alternative method + supported by the XML APIs library to prevent errors when compiling the toolkit’s JAR file. + #3272, + #3273 +
    • +
    • The dita command now uses a secure connection to the plug-in registry when + installing new plug-ins. + #3278 + To ensure data integrity during the plug-in installation process, Transport Layer + Security (TLS) will soon be required to access the plug-in registry. If you are using DITA-OT 3.3, 3.2, or + 3.2.1 and are unable to upgrade to 3.3.1, modify the registry key in the + config/configuration.properties file to switch the URI schema to + https://, so the entry reads + https://plugins.dita-ot.org/. +
    • +
    +

    For additional information on the issues resolved since the previous release, see the + 3.3.1 milestone and + + changelog on GitHub.

    +
    +
    +
    + + + DITA-OT 3.3 + <ph outputclass="small text-muted">released February 28, 2019</ph> + + + + entry + rotate + DITA 1.3 + rotate + tables + attribute sets + rotated cells + + + + +
    +

    DITA Open Toolkit Release 3.3 includes new attribute sets for HTML5 + customization, support for custom integration processing, rotated table cells in PDF output, and hazard + statements in HTML output.

    +
    + +
    + Feature Highlights +

    DITA Open Toolkit Release 3.3 includes the following new features:

    + +
      +
    • +

      The rotate attribute on table entry elements, which was added + in the DITA 1.3 specification, is now supported in PDF output. + #1778, + #2717, + #3161 +

    • +
    • +

      A new CustomIntegrator interface provides a mechanism for custom plug-ins to extend the + default integration process via service provider classes declared via a + Java ServiceLoader. + #3175 +

    • +
    • +

      HTML5 and XHTML output now provide generic hazard statement styling based on the ISO 3864 and ANSI Z535 + standards, with an SVG icon and + variables for the corresponding ISO and ANSI color definitions. The ANSI colors + are used by default to match the PDF styling previously added in DITA-OT 3.2. + #3207, + #3231 +

    • +
    • +

      +

    • +
    +
    + +
    + Enhancements and changes + steps + section + example + prereq + stepsection + mapref + topicref + schema + RELAX NG + dita command + property values + XSLT + file location + Saxon + version + conref + empty +

    DITA Open Toolkit Release 3.3 includes the following enhancements and changes to + existing features:

    + +
      +
    • The dita command now recognizes a wider range of “truthy” property values, + including true, yes, 1, and on and + handles inconsistently cased values more gracefully. + #2225, + #3197 +
    • +
    • Various XSLT files and other resources have been moved from the root of the DITA-OT installation + directory to the base plug-in directory plugins/org.dita.base. + #3157 (If + your plug-ins use the plugin URI scheme as recommended in the + , this change should not require any modifications to custom + plug-in code.)
    • +
    • + #3176 +
    • +
    • In HTML5 output, task steps are now wrapped in + section elements and DITA example, + prereq, and stepsection elements are also generated as + HTML5 section elements. + #3177 +
    • +
    • Java code has been refactored to add missing DITA classes to the list of available Java + constants and re-sort the constant definitions. + #3178 +
    • +
    • Custom pipeline modules can now use SAX filters. This makes it possible + to configure the module’s behavior at the Ant level and add additional processing to a module. Modules do + not have to define nested filters if they prefer not to expose this extension point or do not use SAX + internally. + #3182 + <pipeline> + <module class="com.example.Module"> + <filter class="com.example.XmlFilter"/> + </module> +</pipeline>
    • +
    • New extension points have been added to contribute parameters to the debug-filter, map reader, + and topic reader Java preprocessing modules. + #3187 +
        +
      • + dita.preprocess.debug-filter.param
      • +
      • + dita.preprocess.map-reader.param
      • +
      • + dita.preprocess.topic-reader.param
      • +
      +
    • +
    • The DITA-OT fork of the + jing-trang project + used to provide RELAX NG schema validation in DITA-OT 3.2 has been replaced with the upstream code after the + patches provided by George Bina were included. + #3188 +
    • +
    • Several bundled dependencies have been upgraded to the latest versions. + #3191 +
        +
      • Ant 1.10.5
      • +
      • Jackson 2.9.8
      • +
      • Saxon-HE 9.8.0-14
      • +
      • Xerces-J2 2.12.0
      • +
      +
    • +
    • An additional keyscope test has been added to test interactions with submaps referenced via + mapref. + #3193 +
    • +
    • The default character set for code references can now be changed by adding the + default.coderef-charset key to the + configuration.properties file. The character set values + are those supported by the Java + Charset class. + #3195 +
    • +
    • The ditafileset now supports nested includes + and excludes elements to more easily control which files get processed (or do not + get processed) by each processing step. The copy-files task has been been moved to the end + of the preprocessing pipeline to match the order in map-first preprocessing (preprocess2). + #3196 + ditafileset +
    • +
    • The + build system has been updated to the latest patch release (5.2.1). + #3204 +
    • +
    • When source files contain an empty conref="" attribute value, DITA-OT now + provides a meaningful warning and then ignores this construct, which previously resulted in parser errors. + #3217 +
    • +
    • + #3230 +
    • +
    +
    + +
    + Bugs + topicgroup + topichead + dt + tm + conref + -dita-use-conref-target + keyref + chunk + processing changes + id + dt + DITAVAL + duplicate conditions + change bars + Linux + installation directory + macOS + installation directory + Windows + installation directory + RELAX NG + schema + schema + RELAX NG + dita command + = (equals sign) + nav-toc +

    DITA Open Toolkit Release 3.3 provides fixes for the following bugs:

    + +
      +
    • In earlier releases, external URIs referenced via keyref from within + relationship tables resulted in links with broken link text. This has been fixed, and metadata including + link text or titles is preserved for external URIs referenced by key within a map. + #1439, + #3179
    • +
    • Relative paths in peer or non-DITA key references were not handled correctly in earlier + releases. The paths are now adjusted as needed to stay valid in any referencing location. + #1951, + #2250, + #2581, + #2620, + #3234 +
    • +
    • Several fixes have been added to improve support for the chunk attribute on + topic groups (covering both topicgroup and any other + topicref style container that does not reference a file). + #2428, + #2730, + #2843, + #3216 +
        +
      • In earlier releases, using chunk="to-content" on a grouping element within + another branch or map that specified chunk="to-content" would result in a + NullPointerException. This error has been fixed.
      • +
      • In earlier releases, using chunk="to-content" on a nested map would result in the + same NullPointerExceptions when the map reference was inside of a chunked branch or map.
      • +
      • In earlier releases, topicgroup elements with no title that used + chunk="to-content" would result in a generated heading in the output file, such as + "Chunk1234567". Chunked containers without a heading will no longer result in a generated heading in the + output.
      • +
      • In earlier releases, topichead elements inside of a chunked branch would + result in headings that appeared out of order for PDF. This has been fixed; topic headings will appear + where expected in the PDF flow.
      • +
      +
    • +
    • In earlier versions, references to keys in local scopes were not processed correctly. In certain + other cases, files referenced through mapref were parsed with the root scope instead of their parent scope. + Keyref parsing has been improved to reliably detect and preserve key scopes to ensure that all key + references are resolved in the correct scopes. + #2523, + #3141, + #3194 +
    • +
    • In some recent releases, cross references to local, non-DITA files with formats such as "pdf" or + "txt" did not copy those referenced files to the output directory. When appropriate, such as when generating + HTML output, these files are now copied to the output directory as they were in earlier releases. + #2899 +
    • +
    • On Linux and other systems where the DITA-OT installation directory and temporary directory are + not on the same volume, plug-in installation would fail when DITA-OT tried to move a non-empty directory. + The installation process has been refactored to ensure that plug-ins are correctly installed in these cases. + #3162, + #3238, + #3239 +
    • +
    • In earlier versions, setting an id attribute on a dt + created duplicate IDs in the XSL-FO file, which caused warnings when rendering FO to PDF. + #3180, + #3185 +
    • +
    • The plugin.rnc RELAX NG Compact Syntax schema used to validate plug-in + descriptor files was inadvertently removed from the distribution package and has been restored. + #3183, + #3220 +
    • +
    • The codeblock normalization process would sometimes fail to recognize certain combinations of + characters at the beginning of code blocks, resulting in error messages. These adjacent text events are now + merged before the indentation is adjusted. + #3198 +
    • +
    • In earlier releases, some indirect key references to glossary entries could result in XSLT + errors when more than one possible key target existed. This is corrected by using the single desired target + to resolve such links. + #3210 +
    • + +
    • When the input file set contained resources with different URI schemes (for example local files + and external files referenced via HTTPS), earlier versions of DITA-OT would fail with errors. Preprocessing + routines have been corrected to ensure the the base directory is correctly calculated in these cases. + #3211 +
    • +
    • When generating HTML5 output with the nav-toc parameter set to + partial, earlier versions would fail to insert table-of-contents navigation in topics + whose names contained spaces. The path normalization process has been corrected to ensure that spaces in + file and directory names are correctly URL-encoded as %20, and navigation is included. + #3213, + #3229 +
    • +
    • In earlier releases, some revision properties were ignored on tm + elements in PDF output. This is now corrected, so that revision flagging such as text color or background + color are properly supported on trademarks. + #3214, + #3215 +
    • +
    • In documentation and error messages about available transformation types, extensions of an + existing transformation could result in duplicate values (such as 3 instances of "pdf"). Duplicates are now + removed when listing the available transformation types. + #3219 +
    • +
    • In earlier releases, duplicate conditions in DITAVAL properties (such as using two DITAVAL + documents for a build that each set up rules for rev="rev3") would generate a warning. This + message has been reduced in severity and will now appear only as an informational message with verbose + logging. + #3223 +
    • +
    • In earlier releases, content references on elements that specified + href="-dita-use-conref-target" would evaluate that value as a literal file name. That + token (defined in the + DITA specification) is now ignored on elements that also use + conref. + #3224 + -dita-use-conref-target +
    • +
    • Revised figures and tables are now marked with change bars in booklists when DITAVAL files + define flagging for the corresponding revision values. + #3235 +
    • +
    • The command line syntax for the dita + --install option has been updated to support the “=” equals sign. + #3245 +

      Both of the following formats are now supported: + dita --install=plug-in-zip +dita --install plug-in-zip

      +
    • +
    +
    + +
    + Contributors +

    DITA Open Toolkit Release 3.3 includes + by the following people:

    + + NOTE: This lists contributions to the core toolkit, not docs. +
      +
    1. Jarno Elovirta
    2. +
    3. Robert D Anderson
    4. +
    5. Roger Sheen
    6. +
    7. Simen Tinderholt
    8. +
    9. Eliot Kimber
    10. +
    11. Eric Sirois
    12. +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    + +
    + Documentation updates +

    The documentation for DITA Open Toolkit Release 3.3 provides corrections and + improvements to existing topics, along with new information in the following topics:

    +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +

    For additional information on documentation issues resolved in DITA Open Toolkit Release , see the + + 3.3 milestone in the documentation repository.

    +

    DITA Open Toolkit Release 3.3 includes + by the following people:

    + NOTE: This lists contributions to docs, not to the core toolkit. +
      +
    1. Roger Sheen
    2. +
    3. Eliot Kimber
    4. +
    5. Robert D Anderson
    6. +
    7. Jarno Elovirta
    8. +
    9. Quick van Rijt
    10. +
    +

    For the complete list of documentation changes since the previous release, see the + + changelog.

    +
    +
    +
    + diff --git a/release-notes/rel3.4.dita b/release-notes/rel3.4.dita new file mode 100644 index 0000000..c0f56d7 --- /dev/null +++ b/release-notes/rel3.4.dita @@ -0,0 +1,416 @@ + + + + + + DITA Open Toolkit 3.4 Release Notes + + Release Notes + + + + DITA Open Toolkit 3.4.1 is a maintenance release that fixes issues + reported in DITA-OT 3.4, which includes . +

    + + + + infotexture + + + + + + + + Requirements + +

    + Add info on new minimum Java version or any other requirements that have changed + since previous release. +

    +

    + +
    + + + DITA-OT 3.4.1 + <!--<ph outputclass="small text-muted">(release date)</ph>--> + + + + + project.rnc file + dvrResourcePrefix + dvrResourceSuffix + classification maps + Jackson data binding library + missing SVG images + project files + validating + SVG + + + + + +
    +

    DITA Open Toolkit 3.4.1 is a maintenance release that includes the + following bug fixes.

    +
      +
    • Earlier versions of DITA-OT created extra files in the output folder when the DITA 1.3 + dvrResourcePrefix or dvrResourceSuffix elements were + used to rename filtered topics. When conditions on topic references within a branch filtered out one or more + copies of those files, the renamed resources were removed from the ToC, but still copied to the output + folder. The branch filtering process has been revised to ensure those filtered copies are no longer created. + In some (but not all) cases, this also resolves a related issue where an extra copy of the file was created + in the output folder with the original file name. + #2980, + #3411 +
    • +
    • Due to an omission in the DITA 1.3 shell files provided by the + , classification maps based on the XML Schema Definition were considered invalid. + The error was reported to the TC and resolved in the official OASIS repository and in the grammar files + bundled with DITA-OT. + #3202, + #3426 +
    • +
    • The RELAX NG schema required to validate XML project files was missing in the 3.4 distribution + package. The project.rnc file is now provided in the resources + folder of the DITA-OT installation. + #3409, + #3410 +
    • +
    • When the bundled Apache Formatting Objects Processor + (FOP) was upgraded to version 2.4 for DITA-OT 3.4, a required library reference was omitted, which prevented + embedded SVG images from appearing in PDF output. The library has been restored to the distribution package + to ensure that SVGs are rendered as expected. + #3414, + #3419 +
    • +
    • The bundled Jackson data binding library was updated to version 2.10.1 to resolve several + vulnerabilities reported in previous versions. + #3420, + #3421 +
    • +
    • With DITA-OT 3.1.3 or later, generating PDFs from maps with index terms with the RenderX XEP + processor throws “no entries for index key” errors and fails to generate PDF files. Index + processing has been corrected to take the new indexid attribute into account, which + resolves the error and allows builds to complete successfully. + #3447, + #3450, + #3455 +
    • +
    • The license for the bundled ICU4J library has been updated to the latest version. + #3444, + #3451, + #3454 +
    • +
    +

    For additional information on the issues resolved since the previous release, see the + 3.4.1 milestone and + + changelog on GitHub.

    +
    +
    +
    + + + DITA-OT 3.4 + <ph outputclass="small text-muted">released November 9, 2019</ph> + + + DITA-OT 3.4 + + + + + org.dita.index + project.rnc file + html5.toc.generate + Docker images + parameters + html5.toc.generate + + + + +
    +

    DITA Open Toolkit Release 3.4 includes an official Docker container + image, a separate plug-in for PDF indexing, a new option to skip HTML5 cover pages, and initial support for + project files that allow you to define multiple deliverables in advance, and publish them all at + once.

    +
    + + +
    + Docker container image +

    + #3358 +

    +
    + +
    + New indexing plug-in + +

    + #3390, + #3396 +

    +
    + +
    + Skip HTML5 cover pages +

    The HTML5 transformation supports a new property that determines whether a table of contents file + should be generated to link to the other topics from the input map. The + html5.toc.generate parameter is set to by default, and creates a + cover page named index.html as with previous versions of DITA-OT. If you’re using the + nav-toc parameter to embed navigation links in topics, you can set + html5.toc.generate to to stop creating the extra file. + #3301 +

    + +
    + Project files +

    +

    +

    + #3243, + #3256, + #3262, + #3265, + #3268, + #3269, + #3276, + #3298, + #3300, + #3382, + #3388, + #3394 +

    +
    + +
    + Enhancements and changes + args.logdir + parameters + args.logdir + Lightweight DITA + TocJS + troff +

    In addition to the highlights mentioned above, DITA Open Toolkit Release 3.4 includes + the following enhancements and changes to existing features:

    + +
      +
    • The original preprocessing and map-first preprocessing pipelines have been simplified to process + only the merged root map, where previous versions would redundantly process all DITA maps. + #3250 +
    • +
    • Conref processing has been updated to resolve content references to specializations of the + referencing element + #3264 +
    • +
    • The obsolete build_demo.xml script that was previously used to build Ant + samples has been removed from the source code repository. (The file was removed from distribution packages + with version 2.1.) + #3288 +
    • +
    • Ant scripts have been refactored to simplify condition elements with + isset guards to set properties with plain property + declarations instead. + #3297 +
    • +
    • The logging level for Apache HTTP Client libraries has been reduced to INFO to + quiet the default log output. This information can be displayed if necessary by enabling verbose logging. + #3307, + #3308 +
    • +
    • The ConrefPushParser has been converted from a SAX filter to a DOM filter. + #3315 +
    • +
    • + Travis CI build stages are now + used to run tests and deployments in parallel to speed up continuous integration builds. + #3329 +
    • +
    • Several bundled dependencies have been upgraded to the latest versions. +
        +
      • Ant 1.10.6 + #3354 +
      • +
      • FOP 2.4 + #3406, + #3407 +
      • +
      • Gradle 5.6.3 + #3375, + #3402 +
      • +
      • Jackson 2.9.9 + #3362 +
      • +
      • Saxon-HE 9.9.1.4 + #3330 +
      • +
      +
    • +
    • XSLT error messages now include location information in more cases to make it easier to find the + source of the problem. + #3334, + #3339, + #3341 +
    • +
    • DITA-OT 3.4 no longer includes the TocJS and troff transformation plug-ins in the default + distribution. + #3363, + #3364 + +
    • +
    • The LwDITA plug-in has been updated to version 2.3.2, pulling in a number of fixes for + Lightweight DITA processing, including support for absolute links and strikethrough in Markdown input, and + updated processing for escaped characters and nested blocks in Markdown output. + #3371, + #3408 +
    • +
    • The args.logdir parameter (deprecated since DITA-OT 2.5) has been removed. + To write the log to a file, use dita + --logfile=file or ant + -l + file and specify the path to the log file. + #3398, + #3399 +
    • +
    • The source code for the DITA 1.1 and 1.2 plug-ins has been removed from the core repository and + extracted to dedicated code repositories. The plug-ins themselves remain available in the DITA-OT 3.4 + distribution package. + #3401 +
    • +
    +
    + +
    + Bugs + fo:block + fo:inline + fo:wrapper + index-see-also + index-see +

    DITA Open Toolkit Release 3.4 provides fixes for the following bugs:

    + +
      +
    • Several issues have been resolved in the PDF rendering of a generated index: +
        +
      • To work around an open issue with Apache Formatting Objects Processor + FOP-2520, DITA-OT 3.4 uses fo:block instead of + fo:wrapper to create the destinations for index links. In previous versions + of DITA-OT, index terms that appeared in source files between section titles and paragraph content (and + several other places) created empty space in PDF output. + #2455, + #2914, + #3381 +
      • +
      • When publishing to PDF with Antenna House Formatter, destination anchors for index links now + use fo:wrapper instead of fo:inline. In previous + versions of DITA-OT, index terms that appeared in source files between section titles and other section + content created empty space in PDF output. + #3042, + #3379 +
      • +
      • Index links are now created correctly when entries have subterms. In previous versions, + terms with multiple index-see-also subterms failed to generate links for all + but the first reference, and dropped all instances of a term if even one instance had a sub-term, an + index-see or index-see-also child. + #3314, + #3320, + #3373 +
      • +
      • References to unavailable index-see terms are filtered from the + final index. Previous versions would create invalid links if the target terms were not available in the + current publication context. + #3391 +
      • +
      +
    • +
    • Cross-reference links to other topics from short descriptions no longer cause build errors. + #3078, + #3324 +
    • +
    • In earlier versions, incorrect parameters passed to the dita command could + cause the build to fail with a NullPointerException. The Java code has been updated to issue an appropriate + error message in these cases, instead of crashing the build. + #3360 +
    • +
    +
    + +
    + Contributors +

    DITA Open Toolkit Release 3.4 includes + by the following people:

    + + NOTE: This lists contributions to the core toolkit, not docs. +
      +
    1. Jarno Elovirta
    2. +
    3. Robert D Anderson
    4. +
    5. Roger Sheen
    6. +
    7. Radu Coravu
    8. +
    9. Eliot Kimber
    10. +
    11. Toshihiko Makita
    12. +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    + +
    + Documentation updates +

    The documentation for DITA Open Toolkit Release 3.4 provides corrections and + improvements to existing topics, sample project files in the docsrc/samples/ folder, a + , PDF index, and new information in the following topics:

    +
      +
    • + +
        +
      • +
      • +
      • +
      • +
      • +
      • +
    • +
    • + +
        +
      • +
      • +
    • +
    • +
    • +
    +

    For additional information on documentation issues resolved in DITA Open Toolkit Release , see the + + 3.4 milestone in the documentation repository.

    +

    DITA Open Toolkit Release 3.4 includes + by the following people:

    + NOTE: This lists contributions to docs, not to the core toolkit. +
      +
    1. Roger Sheen
    2. +
    3. Lief Erickson
    4. +
    5. Jarno Elovirta
    6. +
    7. Robert D Anderson
    8. +
    9. Eliot Kimber
    10. +
    11. Ursula Kallio
    12. +
    13. Jason Fox
    14. +
    15. Radu Coravu
    16. +
    +

    For the complete list of documentation changes since the previous release, see the + + changelog.

    +
    +
    +
    + diff --git a/release-notes/rel3.5.dita b/release-notes/rel3.5.dita new file mode 100644 index 0000000..a91d5a5 --- /dev/null +++ b/release-notes/rel3.5.dita @@ -0,0 +1,584 @@ + + + + + DITA Open Toolkit 3.5 Release Notes + + Release Notes + + + + DITA Open Toolkit 3.5.4 is a maintenance release that fixes issues + reported in DITA-OT 3.5, which includes . +

    + + + + + Requirements + +

    + Add info on new minimum Java version or any other requirements that have changed + since previous release. +

    +

    + +
    + + + DITA-OT 3.5.4 + <ph outputclass="small text-muted">released September 19, 2020</ph> + + + +
    +

    DITA Open Toolkit 3.5.4 is a maintenance release that includes the + following bug fixes.

    +
      +
    • In cases where maps contain references to submaps within key scopes, earlier versions of DITA-OT + failed to apply the scopes to relationship tables in the submaps. Processing has been updated to cascade key + scope information to the relationship table of the target map, so links between topics in different key + scopes work as expected. + #2147, + #2393, + #3563 +
    • +
    • In earlier versions, keys in nested key scopes were not resolved correctly. Key processing has + been updated to correctly generate key definitions from sibling key scopes. + #2410, + #3567 +
    • +
    • In previous versions, the dita.xsl.html5.cover extension point did not + work. The corresponding templates have been moved from the + org.dita.html5/xsl/map2html5-coverImpl_template.xsl wrapper to a new + org.dita.html5/xsl/cover.xsl file to allow custom plug-ins to override the HTML5 + cover page with a custom stylesheet. + #2981, + #3579 +
    • +
    • DITA-OT 3.5.2 introduced a regression that caused builds to fail with a Java error when source + files contained irregular table markup. Table processing has been updated to normalize tables with multiple + groups and emit a DOTJ082E error when invalid table markup prevents processing. + #3566, + #3573, + #3575 +
    • +
    • When parsing topics that contain DTD references, public IDs are now preferred when comparing + grammar descriptors with those stored in the grammar cache. This speeds up processing in projects with a + large number of topics and subfolders by allowing the parser to re-use the DTD grammars between them. + #3574 +
    • +
    • HTML versions of the documentation include new information in the following topics: +
        +
      • A list of DITA-OT Day conference videos has been added to the + Resources section. Where applicable, individual topics + include links to relevant presentations from recent events. + #218, + #304 +
      • +
      • A new + topic was added for easier access to details on prior releases. + #305 +
      • +
      • In addition to the latest development version of the documentation, the site + search now returns results from all Release Notes from DITA-OT 2.0 forward, to make it + easier to find information about the changes in earlier releases. + algolia/docsearch-configs#2364 +
      • +
      +
    • +
    +

    For additional information on the issues resolved since the previous release, see the + 3.5.4 milestone and + + changelog on GitHub.

    +
    +
    +
    + + + DITA-OT 3.5.3 <ph outputclass="small text-muted">released August 18, 2020</ph> + + + +
    +

    DITA Open Toolkit 3.5.3 is a maintenance release that includes the following bug fixes.

    +
      +
    • In DITA-OT 3.5, certain branch filtering scenarios prevented key references and content key + references from resolving correctly in map-first preprocessing, resulting in missing content in PDF output. + The Java code for the reader module has been updated to ensure that all filtered and renamed topics contain + the correct information. + #3549 +
    • +
    • In HTML5 output, a new div wrapper element has been added to preserve + attributes like outputclass or id from the steps + element in single-step tasks. Earlier versions discarded this information when generating output. + #3550 +
    • +
    +

    For additional information on the issues resolved since the previous release, see the + 3.5.3 milestone and + + changelog on GitHub.

    +
    +
    +
    + + + DITA-OT 3.5.2 <ph outputclass="small text-muted">released July 2, 2020</ph> + + + +
    +

    DITA Open Toolkit 3.5.2 is a maintenance release that includes the following bug fixes.

    +
      +
    • DITA-OT 3.5 introduced a regression in key scope processing that saved the effective map too + early, before all topic references were updated. In certain cases, keys that were intended to point to + different reference targets were merged to a single reference. The keyref processing module has been updated + to handle these cases correctly. + #3524, + #3542 +
    • +
    • In DITA-OT 3.5.1, generating output from a project file without setting the + --output option caused the build to fail with a NullPointerException. The Java code + has been updated to properly initialize the output directory. + #3526, + #3531 +
    • +
    • Builds would also fail with a NullPointerException when publishing bookmap chapters with keys to + a single file by setting the chunk attribute . The metadata push + process has been updated to properly handle this case. + #3533, + #3534 +
    • +
    • Earlier versions of DITA-OT would sometimes render tables incorrectly when cells were set to + span several rows. Processing for table and simpletable + elements has been updated to ensure that cell coordinates are calculated correctly. + #3538, + #3539 +
    • +
    • When processing maps with flagging information, temporary files include + ditaval-startprop elements that contain prop elements + without class attributes, which generated errors in earlier versions. Processing has been + updated to ignore foreign content at this stage, allowing Saxon to proceed without errors. + #3540 +
    • +
    • The documentation includes corrections and new information in the following topics: +
        +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
    • +
    +

    For additional information on the issues resolved since the previous release, see the + 3.5.2 milestone and + + changelog on GitHub.

    +
    +
    +
    + + + DITA-OT 3.5.1 <ph outputclass="small text-muted">released June 4, 2020</ph> + + + +
    +

    DITA Open Toolkit 3.5.1 is a maintenance release that includes the following bug fixes.

    +
      +
    • In DITA-OT 3.5, Markdown builds failed due to an incompatible plug-in version. The LwDITA + plug-in has been updated to version 2.4, which is compatible with DITA-OT 2.4 and newer. + #3508, + #3512 +
    • +
    • On macOS, DITA-OT 3.5 failed to build output if the input file was specified with a relative + path based at the current working directory with the ./ notation. Paths specified on the + command line are now normalized to support this syntax. + #3509 +
    • +
    • Several bundled dependencies have been updated to address security vulnerabilities, including: +
        +
      • The bundled Jackson data binding library was updated to version 2.11.0 to resolve several + vulnerabilities reported in previous versions, including an OWASP false positive for the SnakeYAML + library, which has been updated to version 1.27. + #3513, + #3515 +
      • +
      • The bundled Ant version has been updated to version 1.10.8 to address + CVE-2020-1945. + #3522
      • +
      +
    • +
    • In DITA-OT 3.5, PDF customizations (and other plug-ins that use xslt + elements within custom pipeline elements) failed to properly compile the custom + XSLT code. The XSLT module has been corrected to resolve custom code correctly and apply the customizations. + #3517 +
    • +
    +

    For additional information on the issues resolved since the previous release, see the + 3.5.1 milestone and + + changelog on GitHub.

    +
    +
    +
    + + + DITA-OT 3.5 + <ph outputclass="small text-muted">released April 27, 2020</ph> + + + + + + + + + +
    +

    DITA Open Toolkit Release 3.5 includes support for additional input + resources, an alternative subcommand syntax for the dita command, and an initial preview + of features for the latest draft of the upcoming DITA 2.0 standard.

    +
    + +
    + DITA 2.0 preview +

    DITA-OT 3.5 includes processing support for the latest DRAFT versions of + the DITA 2.0 DTD and RELAX NG grammar files from OASIS (as of April 2020). + #3449 +

    +

    +

      +
    • +

      + + #3453 +

      +
    • +
    • +

      + + #3440, + #3462 +

      +
    • +
    • +

      + + #3463, + #3482 +

      +
    • +
    • +

      + + #3464, + #3465, + #3479 +

      +
    • +
    • +

      + + #3483 +

      +
    • +
    + +
    + +
    + New features + --resource + result.rewrite-rule.class + result.rewrite-rule.xsl + deliverables subcommand + install subcommand + plugins subcommand + transtypes subcommand + uninstall subcommand + version subcommand +

    DITA-OT 3.5 also includes the following new features:

    + +
      +
    • +

      You can now pass additional input resources to the dita command with the + --resource option. + #3412

      +

      For example, to process a single topic file with a map that contains key definitions, use a command like + this: + dita --input=topic.dita --resource=keys.ditamap --format= +

    • +
    • Two new parameters can be used to dynamically adjust the names and locations of output files in + transformations that use the map-first pre-processing routine (preprocess2). These + parameters can be passed on the command line, or included in a custom plug-in via + property elements in an Ant script as described in + . + #3413 +
        +
      • Use result.rewrite-rule.class to rewrite filenames with a Java class that + implements the org.dita.dost.module.RewriteRule interface
      • +
      • Use result.rewrite-rule.xsl to rewrite via an XSLT stylesheet
      • +
      +
    • +
    • +

      The dita command line interface has been refactored to support subcommands for common + operations. + #3437, + #3492, + #3494 +

      +
      + +
      +
      + +
      +

      For syntax details, see + .

      + The double-hyphen option syntax has been retained for backwards compatibility, so if you use + dita + --install in scripts (or out of habit), it will still work. + Each subcommand has its own --help option, so you can run + dita install + --help for details on the available arguments and options. +
    • +
    • +

      DITAVAL style tokens are now also generated as CSS classes that are added to the + class attribute values in the generated HTML. + #3489

      +

      Rules with corresponding class selectors have been added to the default stylesheets to implement the same + appearance that previous versions of DITA-OT achieved with inline styles. You can override these flagging + styles if necessary using the following classes:

      +
        +
      • .flag__style--bold
      • +
      • .flag__style--italics
      • +
      • .flag__style--overline
      • +
      • .flag__style--underline
      • +
      • .flag__style--double-underline
      • +
    • +
    +
    + +
    + Enhancements and changes + +

    DITA Open Toolkit Release 3.5 includes the following enhancements and changes to + existing features:

    + +
      +
    • The Java code has been refactored to generate xsl:message output using methods + that are compatible with Saxon Enterprise Edition. + #3383, + #3452 +
    • +
    • Handling for UncheckedXPathException errors has been improved to provide more + details on the source of the error including line and column information. + #3395 +
    • +
    • The integration tests for the map-first preprocessing routine (preprocess2) + have been separated from the previous preprocessing tests, with dedicated results defined to evaluate the + compliance of map-first preprocessing with the expected output. + #3425 +
    • +
    • The HTML5 plug-in includes new attribute sets for link lists that make it easier for custom + plug-ins to add supplementary classes or other customizations without overriding entire templates. The + default output includes the same CSS classes as previous versions of DITA-OT (relconcepts, + relinfo, relref, reltasks), so existing customizations + that rely on these classes will behave as expected. + #3430 +
    • +
    • Various unused and deprecated Ant properties, list files, and targets have been removed from the + preprocessing configuration. Recent DITA-OT versions provide alternative mechanisms to achieve the same + results, such as the ditafileset element to select resources in the temporary + directory. + #3434 +
    • +
    • The org.dita.eclipsehelp plugin, which is still bundled with DITA-OT, is now + installed from a separate repository. + #3442 +
    • +
    • XSLT processing has been adjusted to use Saxon’s preferred Java API for XSLT, XQuery, XPath, and + XML Schema processing (S9API) directly instead of the JAXP wrapper used by previous versions of DITA-OT. + #3471 +
    • +
    • Java code has been refactored to use a single instance of XML utilities during processing. This + approach allows other XML-related resources to be shared, including Saxon processors and name pools. + #3473 +
    • +
    +
    + +
    + Bugs + +

    DITA Open Toolkit Release 3.5 provides fixes for the following bugs:

    + +
      +
    • The DITA 1.x specification defines cascade behaviors for maps such that + othermeta and source do not cascade to child + topicref elements. In earlier releases the mappull stage of + processing pushed these to nested elements; that behavior is now corrected to match the specification. + #1899, + #3326
    • +
    • When coderef elements imported code samples with key references via the + keyref attribute, earlier versions of DITA-OT appended the (temporary) file name of the + referenced code sample to the last line of the parent codeblock element. Processing + has been corrected to ensure that code blocks contain only the referenced code samples. + #3232, + #3496 +
    • +
    • To support + additional resources, the mapref preprocessing stage now + runs even if the input file is not a map. DITA-OT now checks whether maps with additional resources are + available, even if they are not specified as input files. + #3429 +
    • +
    • In some earlier releases, a call to an empty stub template for table summary + attributes was dropped. Calls to that template have been restored, making it available for easy overrides. + #3484 +
    • +
    • When key definitions with external scope were defined in maps in subdirectories, earlier + versions treated absolute paths beginning with slashes as relative paths, and prefixed the name of the + enclosing directory to the output path, resulting in broken links. Map reference processing has been + corrected to ensure that absolute paths are recognized as such and passed to the output as intended. + #3497 +
    • +
    • If term elements pointed to missing topics using the + keyref attribute, earlier versions of DITA-OT would crash during the build process. An + additional check has been implemented to catch these cases, allowing the build to finish and report errors + for any unresolved term references. + #3498 +
    • +
    • Earlier versions of DITA-OT stripped namespace declarations from mathml + and svg elements in topics based on RELAX NG syntax. Pre-processing has been + corrected to preserve the namespaces. + #3499, + #3501 +
    • +
    • In HTML5 output, earlier versions of DITA-OT displayed the “Note” label when the + type attribute of a note element was set to + notice. Processing has been updated to ensure that the “Notice” label is correctly + applied. + #3502, + #3503 +
    • +
    • In previous releases, when chunk was used to combine a branch of + content, and a file within that branch was missing or invalid, processing within the chunk module could fail + with a NullPointerException. This condition has been fixed, and processing will continue without the missing + file. + #3505 +
    • +
    +
    + +
    + Contributors +

    DITA Open Toolkit Release 3.5 includes + by the following people:

    + + NOTE: This lists contributions to the core toolkit, not docs. +
      +
    1. Jarno Elovirta
    2. +
    3. Robert D Anderson
    4. +
    5. Radu Coravu
    6. +
    7. Roger Sheen
    8. +
    9. Lionel Moizeau
    10. +
    11. Stefan Weil
    12. +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    + +
    + Documentation updates +

    The documentation for DITA Open Toolkit Release 3.5 provides corrections and + improvements to existing topics, along with new information in the following topics:

    +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +

    The topic hierarchy has been revised to promote information on common customization scenarios, including + and + , and how to extend the toolkit by + and + .

    +

    For additional information on documentation issues resolved in DITA Open Toolkit Release , see the + + 3.5 milestone in the documentation repository.

    +

    DITA Open Toolkit Release 3.5 includes + by the following people:

    + NOTE: This lists contributions to docs, not to the core toolkit. +
      +
    1. Roger Sheen
    2. +
    3. Robert D Anderson
    4. +
    5. Jarno Elovirta
    6. +
    7. Shane Taylor
    8. +
    9. Lief Erickson
    10. +
    11. Heston Hoffman
    12. +
    +

    For the complete list of documentation changes since the previous release, see the + + changelog.

    +
    +
    +
    + diff --git a/release-notes/rel3.6.dita b/release-notes/rel3.6.dita new file mode 100644 index 0000000..b3e767c --- /dev/null +++ b/release-notes/rel3.6.dita @@ -0,0 +1,473 @@ + + + + + DITA Open Toolkit 3.6 Release Notes + + Release Notes + + + + DITA Open Toolkit 3.6.1 is a maintenance release that fixes issues + reported in DITA-OT 3.6, which includes . +

    + + + + + Requirements + +

    + Add info on new minimum Java version or any other requirements that have changed + since previous release. +

    +

    + +
    + + + DITA-OT 3.6.1 + <ph outputclass="small text-muted">released March 9, 2021</ph> + + + +
    +

    DITA Open Toolkit 3.6.1 is a maintenance release that includes the + following bug fixes.

    +
      +
    • In DITA-OT 3.6, builds failed with a NullPointerException when Ant targets in custom + pipeline elements were run without passing references to the new Ant project by + setting the inheritRefs attribute on the antcall to + true. This case will no longer cause the build to fail, but custom plug-ins should still + set targets to inherit references to ensure that processing runs as expected. + #3656, + #3657 +
    • +
    • The jsass compiler used in the HTML5 plug-in build process up to DITA-OT 3.6 + relied on LibSass, which has been deprecated in favor of Dart Sass and caused errors when building on the + 64-bit extension of the ARM architecture. The SCSS source files are now converted to CSS using the official + Dart Sass compiler, which allows DITA-OT distribution builds to run on recent Macs and other ARM systems. + #3659 +
    • +
    • In DITA-OT 3.6, builds failed with a NullPointerException when an unset logger was called. A new + guard has been added to handle these cases more gracefully. + #3667, + #3706 +
    • +
    • The DOTX037W warning message that appears when source documents have no title + has been updated to clarify references to the fallback text that will be used for the HTML page title. + #3669, + #3670 +
    • +
    • DITA-OT 3.6 failed with an IllegalArgumentException when maps contained topic references to + e-mail addresses or other peer resources that are not accessible at build time. Processing has been updated + to properly handle non-file references. + #3677, + #3698 +
    • +
    • In DITA-OT 3.6, branch filtering with nested subtopics failed with an IllegalArgumentException: + URI has a fragment component. Processing has been updated to correctly transform references + that contain anchors. + #3680, + #3696 +
    • +
    • DITA-OT 3.6 in-memory processing calculated absolute paths incorrectly when merging maps. The + merge map and topic parsers have been updated to properly compute absolute locations. + #3687, + #3699 +
    • +
    • DITA-OT 3.6 introduced a regression that prevented PDF2 custom font mappings from resolving + properly. The PDF pre-processor task has been updated with a delegating URI resolver to ensure that custom + resources in PDF plug-ins are applied as expected. + #3688, + #3695 +
    • +
    • Custom rules used to adjust the names and locations of output files in the map-first + pre-processing routine were no longer applied in DITA-OT 3.6. Preprocessing has been updated to ensure that + stylesheets specified via the result.rewrite-rule.xsl parameter are correctly applied. + #3689, + #3697 +
    • +
    • In DITA-OT 3.6, a regression prevented multi-level key references from resolving properly. + Processing has been updated to ensure that topic metadata is correctly copied between key definitions and + key references that point to other keys. + #3694, + #3701 +
    • +
    • The GitHub Packages Docker registry used to publish DITA-OT Docker images prior to version 3.6 + has been superseded by the GitHub Container Registry. The new registry offers anonymous access to public + container images, so you can use it without a GitHub account. As of DITA-OT 3.6.1, the official image is + published to the new registry at ghcr.io. + If you’ve pulled from docker.pkg.github.com/dita-ot/dita-ot/dita-ot:version + in the past, update your workflow to pull from + ghcr.io/dita-ot/dita-ot:version instead. +
    • +
    • The DITA-OT project now provides an official + that can be used to publish documentation via + whenever your source files are changed.
    • +
    • The documentation for DITA Open Toolkit Release 3.6.1 provides corrections and improvements to + existing topics, along with new information in the following topics: +
        +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      +
    • +
    +

    For additional information on the issues resolved since the previous release, see the + 3.6.1 milestone and + + changelog on GitHub.

    +
    +
    +
    + + DITA-OT 3.6 + <ph outputclass="small text-muted">released December 19, 2020</ph> + + + + + + + + + +
    +

    DITA Open Toolkit Release 3.6 includes performance enhancements such + as processing in parallel and in memory, support for PDF changebars with Apache FOP, and an updated preview of features for the latest draft of the upcoming DITA 2.0 + standard, including the audio and video elements, and the + new emphasis domain.

    +
    + +
    + + <p/> + </section> + + <section conkeyref="migrating-to-3.6/in-memory-processing"> + <title/> + <p/> + </section> + + <section> + <title>Additional performance improvements +

    DITA-OT 3.6 includes a series of related changes designed to improve the performance of DITA + transformations.

    +
      +
    • +

      A new --repeat option can be passed to the dita command to run + the process a certain number of times. This option can be used by plug-in developers to measure + performance. (Timings for the first transformation are often dominated by Java warm-up time.) + #3616

      +

      To run a conversion five times, for example, use --repeat=. The + duration of each execution will appear in the console when the final transformation is complete. + $ dita --input=docsrc/samples/sequence.ditamap --format= --repeat= +1 11281ms +2 4132ms +3 3690ms +4 4337ms +5 3634ms +

      +
    • +
    • The DITA-OT Java code uses a new caching DitaClass.getInstance(cls) factory + method rather than generating DitaClass instances directly. This allows previously created + instances to be re-used, which reduces the number of instances that need to be created. + #3569 +
    • +
    • The Java code for several preprocessing modules has been refactored to use concurrent sets or + queues. This helps to speed up certain operations during preprocessing, allowing builds to complete faster. + #3570 +
    • +
    • The Java code now uses a BufferedWriter to serialize Job + objects, which significantly improves UTF-8 encoding performance when writing the + .job.xml file. + #3583 +
    • +
    +
    + +
    + + <p/> + </section> + + <section id="dita-2-0-preview"> + <title>Updated DITA 2.0 preview +

    In addition to the + provided in DITA-OT 3.5, this release includes updated processing support + for the latest DRAFT versions of the DITA 2.0 DTD and RELAX NG grammar files from OASIS (as of October 2020). + #3586, + #3601, + #3617, + #3652 +

    +
      +
    • +
    +

    + +

    + +
    + Enhancements and changes + +

    DITA Open Toolkit Release 3.6 includes the following enhancements and changes to + existing features:

    + +
      +
    • The rotate attribute on table entry elements is now + respected when generating HTML5 output. The rotation is implemented by setting the CSS + writing-mode property to vertical-rl to rotate the cell content. This + property is rendered correctly in Mozilla Firefox, but unevenly supported by other browsers. The + rotate class is passed to HTML5 output, so custom plug-ins can implement alternative + presentation rules in CSS if necessary. + #3448, + #3541, + #3651 +
    • +
    • User-facing text for the dita command line interface has been extracted to a + strings file to facilitate editing. The cli_en_US.properties is provided in the + resources folder as a basis for customization and localization. + #3495, + #3523 +
    • +
    • The new Store implementation that supports in-memory processing includes an + immutable document reader method that can be used to request a document that doesn't need to change during + processing. This approach facilitates caching and helps to speed up processing. + #3506, + #3548 +
    • +
    • In earlier versions, variations in reference capitalization could cause unexpected results when + building output on case-sensitive file systems. DITA-OT now warns when file references use incorrect case. + (For example, if maps reference Topic.dita, but the filename on disk is actually + topic.dita.) In strict processing mode, this is considered a fatal error; in lax + processing mode, the file reference is rewritten to use the same case as the file system. + #3535 +
    • +
    • The --filter option can now be passed to the dita + multiple times in a single command-line invocation to apply conditions from several DITAVAL files at once. + #3556 +
    • +
    • The bundled Apache Formatting Objects Processor (FOP) + has been upgraded to version 2.5, which includes security updates to various embedded libraries. + #3558, + #3630 +
    • +
    • The deprecated msgprefix XSL variable (“DOTX”) has been removed. This variable + was originally deprecated in DITA-OT 2.3, but still defined in several stylesheets. Importing the common XSL + module output-message.xsl no longer requires this variable to be defined. + #3562 +
    • +
    • The S9api message listener from the Saxon API is now used to forward log + messages to the DITAOTLogger. This allows message levels and error codes to be passed from + XSLT to Java code for improved debugging. + #3564 +
    • + +
    • HTML5 output now includes additional metadata to indicate that the content was produced using + DITA Open Toolkit. + #3594 + <meta name="generator" content="DITA-OT"/> +
    • +
    • Up to version 3.5, DITA-OT included the + in both XHTML and HTML5 output. For DITA-OT 3.6, this capability was extracted + to a separate plugin, and Dublin Core metadata is no longer generated in the default HTML5 output. + #3595 +

      If necessary, the + plug-in can be installed from the plug-in registry at + to add Dublin Core metadata to HTML5. To install the plug-in, run + the following command:

      + dita install org.dita.html5.dublin-core +
    • +
    • In XHTML output, previous versions failed to distinguish Notice note types from regular + notes, prefixing both with Note. Support has been backported from HTML5 to XHTML to prefix notices + with Notice as expected. + #3599, + #3600 +
    • +
    • Unused code for flagging and key processing has been removed along with related files that have + been deprecated since version 2.1, including the base flag.xsl stylesheet, the + generated keydef.xml file, and schemekeydef.xml. + #3602, + #3603 +
    • + +
    • +

      Remaining inline style attributes were removed from HTML5 code, which prevented custom plug-ins from + overriding the presentation of the corresponding elements, including: +

        +
      • line-through and + overline elements
      • +
      • syntax diagrams
      • +
      • long quote citations
      • +
      • Boolean states
      • +

      +

      These changes move the default presentation rules to CSS to allow users to override these styles in + custom stylesheets. The output is visually equivalent to the results generated by previous toolkit + versions. + #3632 +

      + In publishing environments that do not use the default common CSS files, these styles + may need to be implemented in custom stylesheets. +
    • +
    +
    + +
    + Bugs + +

    DITA Open Toolkit Release 3.6 provides fixes for the following bugs:

    + +
      + + +
    • +

      Folder names in development build archives previously included the “+” plus sign, which + caused errors when running from the unpacked directory. The snapshot folder name syntax has been updated + to use the “@” at sign instead, which allows builds to run directly from the extracted + folder. + #2414, + #3623 +

      +
    • +
    • +

      The license text for the beta DITA 2.0 grammar file plug-in was missing in DITA-OT 3.5 and is now + included in the distribution package. + #3608, + #3649 +

      +
    • +
    • The Java code has been refactored to anticipate cases where resources are missing or incorrectly defined. +
        +
      • The File.toURI() method has been updated to ensure that the generated URI + for a directory will always end in a trailing slash. This prevents unexpected errors in cases when the + File input points to a path that doesn’t exist. + #3621, + #3624, + #3626 +
      • +
      • The JobSourceSet has been fixed to handle cases where the + src input is null. + #3625 +
      • +
      +
    • +
    • In DITA-OT 3.5.4, the HTMLHelp stylesheet map2hhcImpl.xsl included an + invalid code remnant left over from previous edits. The unnecessary line has been removed. + #3627, + #3634 +
    • + +
    +
    + +
    + Contributors +

    DITA Open Toolkit Release 3.6 includes + by the following people:

    + + NOTE: This lists contributions to the core toolkit, not docs. +
      +
    1. Jarno Elovirta
    2. +
    3. Roger Sheen
    4. +
    5. Robert D Anderson
    6. +
    7. Radu Coravu
    8. +
    9. David Bertalan
    10. +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    + +
    + Documentation updates +

    The documentation for DITA Open Toolkit Release 3.6 provides corrections and + improvements to existing topics, along with new information in the following topics:

    +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +

    For additional information on documentation issues resolved in DITA Open Toolkit Release , see the + 3.6 milestone in the documentation repository.

    +

    DITA Open Toolkit Release 3.6 includes + by the following people:

    + NOTE: This lists contributions to docs, not to the core toolkit. +
      +
    1. Roger Sheen
    2. +
    3. Jarno Elovirta
    4. +
    5. Lief Erickson
    6. +
    7. Heston Hoffman
    8. +
    +

    For the complete list of documentation changes since the previous release, see the + + changelog.

    +
    +
    +
    + diff --git a/release-notes/rel3.7.dita b/release-notes/rel3.7.dita new file mode 100644 index 0000000..d2e0f3c --- /dev/null +++ b/release-notes/rel3.7.dita @@ -0,0 +1,828 @@ + + + + + DITA Open Toolkit <keyword keyref="release"/> Release Notes + + Release Notes + + + + DITA Open Toolkit 3.7.4 is a maintenance release that fixes issues + reported in DITA-OT 3.7, which includes . +

    + + + + + Requirements + +

    + Add info on new minimum Java version or any other requirements that have changed + since previous release. +

    +

    + +
    + + + DITA-OT 3.7.4 + <ph outputclass="small text-muted"> released October 26, 2022</ph> + + + +
    +

    DITA Open Toolkit 3.7.4 is a maintenance release that includes the + following bug fixes.

    +
      + +
    • In PDF output generated with DITA-OT 3.3 and newer, abbreviated-form + references did not work correctly when both topicref elements and + glossentry elements used the same id value. Processing has been + updated to filter any topic references and handle only glossary entries. + #3937, + #4002 +
    • +
    • When processing maps, the processing-role and scope attributes + were not cascading downward in the map. Processing has been updated to correctly apply these attributes to + any elements that are children of the element where the attributes are specified. + #3940, + #4003 +
    • +
    • In earlier versions, builds failed when filtering removed content that was referenced elsewhere. + The XSLT matcher functions have been updated to handle cases when the class argument is an empty sequence, + which allows builds to continue. + #3814, + #4028 +
    • +
    • In the + preprocessing step, related link processing has been updated to consider + references to topics duplicated by branch filtering. + #3989, + #3993 +
    • +
    • In earlier versions, builds failed with a NullPointerException when a peer mapref and local + mapref used the same keyscope. Processing has been updated to allow builds to continue in these cases. + #4007, + #4010 +
    • +
    • When files were parsed with a custom parser, earlier versions categorized the file as the + original file format. (For example, when the LwDITA parser was used to parse Markdown, the file was + treated as format=markdown). The map-first preprocessing routines in the + preprocess2 target have been updated to align with the default preprocess + target, which ensures that files parsed with a custom parser are categorized as dita. + #4027 +
    • +
    +

    For additional information on the issues resolved since the previous release, see the + 3.7.4 milestone and + + changelog on GitHub.

    +
    +
    +
    + + + DITA-OT 3.7.3 + <ph outputclass="small text-muted">released September 6, 2022</ph> + + + +
    +

    DITA Open Toolkit 3.7.3 is a maintenance release that includes the following bug fixes.

    +
      + +
    • In earlier versions, links to non-DITA resources were broken in branch filtering scenarios that + used the dvrResourcePrefix or dvrResourceSuffix elements + to adjust the names of filtered topic files. Processing has been corrected to only rename DITA resources, + and preserve the original names of non-DITA resources like images or other assets. + #2704, + #3947 +
    • +
    • The image metadata processing failed to determine the height and width of images referenced via + keyrefs. The format attribute value is now set to image in the temporary + .job.xml file, so the image dimensions can be read from the file metadata. + #3353, + #3963 +
    • +
    • In earlier versions, builds failed with a NullPointerException when projects contained + references with absolute paths pointing outside the folder where the DITA map is located. A new guard has + been added to handle these cases more gracefully. + #3366, + #3977 +
    • +
    • In DITA-OT 3.5.4 and later, builds failed with a NullPointerException when parsing specialized + topics containing only table rows or cells. The table normalization filter has been updated to process these + cases correctly. + #3597, + #3962 +
    • +
    • When passing DITA maps as files with absolute paths on Windows, the + temporary files folder path was added to the map path, resulting in invalid references. Processing has been + updated to properly compute the file path for map resources with absolute paths. + #3724, + #3964 +
    • +
    • DITA-OT 3.6 always used the bundled open-source Saxon Home Edition (HE), even when a license for + Saxon Professional Edition (PE) or Enterprise Edition (EE) was available in the DITA-OT classpath. The + configuration has been updated to allow DITA-OT to use a licensed Saxon XSLT processor if present. + #3727, + #3949 +
    • + +
    • Earlier versions generated incorrect links to nested topics when the parent topic contained a + key reference and was re-used in different key scopes. Processing has been updated to preserve the fragment + identifiers and ensure that links are generated correctly when topics are duplicated for each key scope. + #3867, + #3874, + #3945 +
    • +
    • On Windows, publishing speed was slower when running DITA-OT with recent Java versions, because + the file canonicalization cache is no longer enabled by default in Java 12 and newer (see + ). The Java commands in the dita.bat and + ant.bat wrapper scripts have been updated to re-enable caching. + #3932, + #3933 +
    • +
    • On Windows, DITA-OT 3.6 failed to build output when input file paths contained non-ASCII + characters. The encoding of the .job.xml file in the temporary directory has been + explicitly set to UTF-8 to ensure that builds complete regardless of the operating system locale and input + file path encoding. + #3934, + #3943 +
    • +
    • In earlier versions, builds failed with a NullPointerException when custom plug-ins referenced + missing stylesheets. A new guard has been added to handle these cases more gracefully. + #3959, + #3960 +
    • +
    • When writing messages to the console in DITA-OT 3.6, xsl:message + references to an XML element recursively printed its descendants. The logging code has been updated to + properly serialize the nodes in XSL messages. + #3969, + #3978 +
    • +
    • The DOTJ085E error message has been aligned for consistency with other + messages. + #3972 +
    • +
    • In DITA-OT 3.7, content references to topic elements were not resolved when publishing to HTML. + Processing has been corrected to ensure that topic conrefs are handled correctly. + #3976, + #3979 +
    • +
    • In earlier verions, builds failed with a NullPointerException when processing maps that + contained elements without class attributes, such as inside + foreign elements. Processing has been updated to handle these situations + correctly. + #3980, + #3981 +
    • +
    • In earlier versions, builds would fail with XSLT errors when named templates returned an empty + sequence. Processing has been relaxed to allow processing to continue under these circumstances. + #3991, + #3992 +
    • +
    • The bundled Jackson data format dependency was updated to resolve a security vulnerability in + the SnakeYAML library, which has been updated to version 1.31. + #3999 + #4000 +
    • +
    +

    For additional information on the issues resolved since the previous release, see the + 3.7.3 milestone and + + changelog on GitHub.

    +
    +
    +
    + + + DITA-OT 3.7.2 + <ph outputclass="small text-muted">released May 17, 2022</ph> + + + +
    +

    DITA Open Toolkit 3.7.2 is a maintenance release that includes the following bug fixes.

    +
      + +
    • In version 3.7.1, processing failed when link targets contained unexpected syntax. The URL + processing and validation filters in the Java code have been updated to support mailto: + links and additional URI schemes. + #3730, + #3912 +
    • +
    • The DITA 1.3 grammar files have been updated to allow the outputclass attribute + on the change-historylist element. + #3905, + #3911 +
    • +
    • Processing will now report an error when a project file param is used to define + a parameter that should be set with a dedicated key instead. + #3913, + #3915 +
    • +
    • When parallel processing was enabled with parallel=, + some files were occasionally skipped with “folder could not be created” errors when different + processes tried to create the same directory. Processing has been updated to handle concurrent directory + creation. If the directory already exists, processing will now continue without errors. + #3917, + #3925 +
    • +
    • The jackson-databind library has been updated to the latest patch version + 2.13.2.2 to address a reported security vulnerability: + CVE-2020-36518. + #3923 +
    • +
    +

    For additional information on the issues resolved since the previous release, see the + 3.7.2 milestone and + + changelog on GitHub.

    +
    +
    +
    + + + DITA-OT 3.7.1 <ph outputclass="small text-muted">released March 23, 2022</ph> + + + +
    +

    DITA Open Toolkit 3.7.1 is a maintenance release that includes the following bug fixes.

    +
      +
    • In earlier versions, paths or filenames with typewriter apostrophes “'” or + tilde “~” characters caused HTML builds to fail. Processing has been updated to ensure that + these characters are handled correctly. + #2844, + #3880 +
    • +
    • On Windows, referencing images on another disk drive caused builds to fail. Resources with + different drive letter paths are now handled correctly. + #3635, + #3885 +
    • +
    • As of version 3.6, XSL messages with serialized XML elements included only the text content. + Processing has been revised to include the original XML element structure as in DITA-OT 3.5.4 and earlier + releases. + #3662, + #3893 +
    • +
    • When publishing documents with nested topics or multiple glossary entries in the same file, + generating copy-to attributes with force-unique= + caused earlier versions of DITA-OT to create redundant copies of each file. The + ForceUniqueFilter has been updated to properly handle references to separate topics + within the same file. + #3750, + #3894 +
    • +
    • Earlier versions failed with errors when generating HTML5 output for chunked topics that include + links between inner topics. Chunk processing has been updated to ensure that links between nested topics are + generated correctly when the chunk attribute is defined with + to-content select-topic. + #3846, + #3881 +
    • +
    • The bundled Apache Xerces XML parser has been + upgraded to version 2.12.2, which includes security updates to mitigate the vulnerability described in + CVE-2022-23437 when handling specially crafted XML document payloads. + #3857, + #3860 +
    • +
    • Strict processing mode has been updated to stop processing when images are missing. Earlier + versions reported errors in this case, but allowed processing to continue. + #3858, + #3871 +
    • +
    • In earlier versions, the PDF2 dita.xsl.xslfo.i18n-postprocess extension point + did not work, because the extension point and the XSLT templates were defined in the same place. The + templates have been moved to a new file to ensure that templates in custom plug-ins take precedence when + using the extension point. + #3861, + #3862 +
    • +
    • The DITA-OT 3.7 distribution package contained a spurious fop.jar file with + an empty manifest in the root folder. The unnecessary Java archive has been removed. + #3864 +
    • +
    • In earlier versions, the branch filtering routine did not handle nested subtopics correctly. + Processing has been corrected to properly re-write topic references with ditavalrefs and inner topics. + #3875, + #3887 +
    • +
    • Messages in build logs now contain location information when available. + #3877, + #3884 +

      The following error messages now include the name of the file where the issue was found: +

        +
      • DOTJ041E
      • +
      • DOTJ045I
      • +
      • DOTJ046E
      • +
      • DOTJ052E
      • +
      • DOTJ060W
      • +
      • DOTJ074W
      • +
      • DOTJ077F
      • +
      • DOTX008E
      • +
      • DOTX065W
      • +
      +

      +
    • +
    • The German and French translations for Caution, Notice, and Remember note labels have been + updated to align with the signal words defined in ANSI Z535. + #3882, + #3883 +
    • +
    • When publishing to HTML, builds would fail when image paths contained a ? query + component or # fragment identifier. Processing has been updated to handle these references + correctly. + #3886, + #3892 +
    • +
    • The “Notice” strings added to PDF2 in DITA-OT 1.7.1 have been moved to the base plugin to ensure + that all signal words for safety levels are defined in the same location. + #3888, + #3899 +
    • +
    + + +

    For additional information on the issues resolved since the previous release, see the + 3.7.1 milestone and + + changelog on GitHub.

    +
    +
    +
    + + + DITA-OT 3.7 + <ph outputclass="small text-muted">released January 17, 2022</ph> + + + + + + + + + +
    +

    DITA Open Toolkit Release 3.7 includes stable IDs in re-used + content, a common variable format for generated text strings, and an updated preview of features for the + latest draft of the upcoming DITA 2.0 standard, such as the new “combine” chunk action, the + titlealt element, and the alternative titles domain.

    +
    + +
    + + <p/> + </section> + + <section id="dita-2-0-preview"> + <title>Updated DITA 2.0 preview +

    In addition to the + provided in DITA-OT 3.5 and 3.6, this release adds support for the DITA 2.0 + “combine” chunk action, and updated processing for the latest DRAFT versions of the DITA 2.0 DTD and RELAX NG + grammar files from OASIS (as of ). + + #3674, + #3760, + #3809, + #3833, + #3847 +

    + +
      +
    • +
    +

    + + +

    + +
    + Enhancements and changes + +

    DITA Open Toolkit Release 3.7 includes the following enhancements and changes to + existing features:

    + +
      + +
    • The + + Dockerfile has been updated to better support the official + that was introduced in 3.6.1 to publish documentation via + whenever your source files are changed. The Dockerfile + adds the SHELL command and installs the locales and + tzdata packages as part of the base image, so custom actions can be simplified to a + series of scripting hooks. + #3665
    • +
    • In earlier versions, IDs defined on elements in reusable components were not + preserved when the parent element was included in other topics via content reference. In this case, element + IDs were always randomized to prevent duplicate IDs, but this made it difficult to cross-reference reused + content. The conref preprocessing module has been updated to retain the original IDs + whenever possible, and only generate a randomized ID if the original would not be unique in the new context. + This ensures that content references produce stable anchors in HTML and named destinations in PDF output. + #3736, + #3739 +
    • +
    • Additional support for Ant style was added to make custom + pipeline + configurations more consistent with XSLT tasks in Ant. + A stylesheet can be passed as an Ant + resource, providing support for classpath-based plug-in resources. + #3780 +
    • +
    • The mappull processing step has changed how related links are generated with + args.rellinks. Starting in 3.7, will not generate any + ancestor links and will not generate sibling, cousin, ancestor, or descendant + links. Prior to 3.7, args.rellinks= did not actually include all + links. Now it will. As in previous versions, the default value for PDF output is , + and other output formats include all link roles except ancestor links. + #3792, + #3850 +
    • +
    • Mapref processing was improved to remove any duplicate keyscope values. Prior + to 3.7 it was possible that mapref and map would + contribute the same keyscope value when the value was defined on both. + #3796 +
    • +
    • A commonattributes mode was added to the HTML5, PDF, and XHTML plug-ins to allow + for easier extension. This is a backwards compatible change, however, existing plug-ins should be changed to + use the new commonattributes mode. + #3806 + + Named template prior to version 3.7 + <xsl:template name="commonattributes"> + <!-- whole copy of commonattributes named template with customizations --> +</xsl:template> + + + Template mode as of version 3.7 + <xsl:template match="@* | node()" mode="commonattributes"> + <xsl:param name="default-output-class" as="xs:string*"/> + <xsl:next-match> + <xsl:with-param name="default-output-class" select="$default-output-class"/> + </xsl:next-match> + <!-- customizations --> +</xsl:template> + +
    • +
    • +

      The copy-to preprocessing module has been updated to preserve fragment-only links. This + ensures that any local anchors do not change when original topic resources are copied to new resources + defined by the copy-to attribute. + #3811, + #3832 +

    • +
    • HTML5 +
        +
      • The order of elements in the head element of the HTML template + files was changed to facilitate overrides. The common CSS stylesheets and any custom CSS files specified + via args.css now come after the contents of the custom header file specified + via args.hdf. This change better supports use cases in which the custom header file + is used to insert references to external CSS stylesheets for frameworks like + Bootstrap. In previous versions of DITA-OT, framework styles took precedence + over any equivalent rules in the user’s custom stylesheet. This change allows rules in custom CSS files + specified via args.css to override any of the framework styles as necessary. + #3770 +
      • +
      • The legacy gen-user templates that were originally used to add content to + the head element have been deprecated and will be removed in a future release. + For each of these templates, parameter-based customizations are available that can be used to specify + files that contain content that extends the default processing. + #3835, + #3849 +
          +
        • gen-user-head → use args.hdf instead
        • +
        • gen-user-header → use args.hdr
        • +
        • gen-user-footer → use args.ftr
        • +
        • gen-user-scripts → use args.hdf
        • +
        • gen-user-styles → use args.css
        • +
        +
      • +
      • Support for the legacy media format Adobe Flash has been removed. All major browser + vendors block Flash Player in recent versions, making it difficult to view Shockwave Flash content. + #3791 +
      • +
      • The HTML5 stylesheets were updated to use XSL modes instead of named templates. + #3794 +

        This is a backwards compatible change, however, existing plug-ins should be changed to use modes + instead of named templates for: +

          +
        • copyright
        • +
        • gen-endnotes
        • +
        • generateDefaultMeta
        • +
        • generateCssLinks
        • +
        • generateChapterTitle
        • +
        • processHDF
        • +
        • generateBreadcrumbs
        • +
        • processHDR
        • +
        • processFTR
        • +
        • generateCharset
        • +
        +

        +
      • +
      +
    • +
    • PDF +
        +
      • The new note__image attribute set was added to combine attributes for + images or icons for notes. + #3529 + #3660 +
      • +
      • Japanese font mappings have been updated to ensure characters are rendered correctly. + #3768, + #3769 +
          +
        • The logical font Sans now prefers MS-Gothic, Hiragino Kaku Gothic Pro, + HiraKakuProN-W3, or YuGothic over Arial Unicode MS.
        • +
        • For Serif text, MS-Mincho, Hiragino Mincho Pro, HiraMinProN-W3, or YuMincho are + preferred to Arial Unicode MS.
        • +
        • For Monospaced text, MS-Gothic, Hiragino Kaku Gothic Pro, HiraKakuProN-W3, + YuGothic, or Arial Unicode MS are used.
        • +
        +
      • +
      • The source code for the renderer-specific PDF plug-ins for Antenna House Formatter (AXF) and + RenderX XEP have been extracted to dedicated code repositories. The renderer-specific plug-ins are still + distributed with DITA-OT. Only the source code location changed, allowing for easier maintenance. + #3807, + #3813 +

        This allows the plug-ins to be updated separately by commercial software vendors or open source + contributors independent of the DITA-OT release cycle: +

          +
        • +
        • +
        • +
        • +
        +

        +
      • +
      +
    • +
    • Several bundled dependencies have been upgraded to new versions: +
        +
      • Ant 1.10.12 + #3821 +
      • +
      • FOP 2.6 + #3774 +
      • +
      • Gradle 7.2 + #3803 +
      • +
      • ICU4J 70.1 + #3821 +
      • +
      • Jackson 2.13.0 + #3821 +
      • +
      • JUnit 4.13.2 + #3821 +
      • +
      • Logback 1.2.8 + #3821, + #3837, + #3838 +
      • +
      • RenderX XEP 3.6.3 + #3813 +
      • +
      • Saxon 10.6 + #3485, + #3805, +
      • +
      • SLF4J 1.7.32 + #3821 +
      • +
      • Xerces 2.12.1 + #3821 +
      • +
      +
    • +
    • Up until DITA-OT 2.4, the log4j logging library was bundled as a dependency of + the Apache™ Formatting Objects Processor (FOP). DITA-OT 2.4 upgraded FOP to version 2.1, and removed the + log4j library, but left the corresponding configuration files behind. The obsolete + log4j.properties files have now been removed from the distribution package. + #3841 +
    • +
    +
    + +
    + Bugs + +

    DITA Open Toolkit Release 3.7 provides fixes for the following bugs:

    + +
      +
    • In PDF output generated with previous versions, “Warning” note labels used the same attribute + set as “Danger” note labels. Processing has been corrected to apply the dedicated attribute set defined for + warning note labels. Both attribute sets are empty by default, but this change makes it easier for custom + plug-ins to define separate styling for danger and warning notes. + #3709 +
    • +
    • HTML5 output generated by earlier versions defined the character set twice in the + head element, which certain HTML validation services reported as an error. The + legacy meta element that specified the content type with an + http-equiv attribute has been removed in favor of the simpler version, which defines only + the character set: <meta charset="UTF-8">. + #3715, + #3738 +
    • +
    • Key references were not properly expanded within content references when using key scopes. + Processing has been updated to create unique topics for all resources, including resource-only topics. + #3733, + #3775 +
    • +
    • The command line interface now respects the convention to disable colored output when either the + TERM=dumb or NO_COLOR environment variables are set, or the + --no-color option is passed to the dita command. + #3741 +
    • +
    • The German localization of the PDF Preface header strings included the page numbers + twice, and the prodname parameter was missing. The default German strings have been + aligned to include the product name and page numbers in the same pattern as other languages. + #3742 +
    • +
    • Column and row separators defined via the tgroup element were ignored. + HTML processing has been corrected to ensure separators are applied as expected in HTML5 and XHTML table + groups. + #3751, + #3752 +
    • +
    • The PDF2 internationalization configuration for the service mark character used an incorrect + decimal code &#2120;, which corresponds to the U+0848 MANDAIC LETTER + ATT character: ࡈ. The language files have been updated to use the correct hexadecimal code + &#x2120; for the U+2120 SERVICE MARK character: ℠. + #3754 +
    • +
    • When plug-ins were installed on Windows systems, the integration process wrote Windows-style + backslash “\” characters as path separators to the generated properties files, which caused errors if the + same DITA-OT installation was used on other operating systems. All resources generated by the integrator now + use UNIX-style slashes “/” as path separators, which work on Linux, macOS, and Windows. This ensures DITA-OT + installations remain portable for use in continuous integration systems and other cross-platform publishing + scenarios. + #3755, + #3759 +
    • +
    • Project files that included empty values in param elements failed with + errors. Processing has been updated to allow processing to continue. + #3761, + #3824 +
    • +
    • In PDF output, figure descriptions were rendered before the image and title. Processing has been + updated to correct the order of elements within figures. The image now appears first, followed by title and + description. + #3765, + #3766 +
    • +
    • When processing simple tables such as parameter tables with no explicit header elements, earlier + versions failed to assign IDs to generated elements. IDs are now generated correctly in these cases. + #3778 +
    • +
    • XHTML processing has been refined to correct the order of contents within + object elements. Any desc or + longdesc content is now generated after any param + element to ensure the resulting XHTML files pass EPUBCheck validation. + #3779 +
    • +
    • HTML output generated from SVG files that specified height or width values in centimeters or + inches were not scaled properly. Length values are now converted to pixels to ensure images are scaled + correctly. + #3785, + #3786 +
    • +
    • When publishing documents with peer map references, spurious errors were reported for missing + files, link text, and navigation titles when the peer maps were not available at processing time. Processing + has been updated to relax these requirements for peer maps, and allow processing to complete without errors. + #3790 +
    • +
    • Table of contents navigation in HTML5 output used a nav element with + the ARIA role attribute set to toc. Certain accessibility tools flagged + this as an error. The invalid role has been replaced with the navigation landmark role. A + new toc class allows custom CSS styles to target the ToC navigation. CSS rules that use the + nav[role='toc'] selector can be simplified to nav.toc. + #3800, + #3801 +
    • +
    • A 17-year-old bug in the content reference implementation has been resolved. When the original + conref code was updated to XSLT 2.0 years ago, the syntax was not adjusted to account for the differences + between XSLT 1.0 and 2.0, which caused errors in the selection of the first topic in a document. + #3842 +
    • +
    • DITA 1.3 grammar files have been updated to include hotfixes from the latest OASIS errata + branch, which resolve issues with the available attributes on change-historylist + and colspec elements. + #3843 +
    • +
    +
    + +
    + Contributors +

    DITA Open Toolkit Release 3.7 includes + by the following people:

    + + NOTE: This lists contributions to the core toolkit, not docs. +
      +
    1. Jarno Elovirta
    2. +
    3. Roger Sheen
    4. +
    5. Radu Coravu
    6. +
    7. Eric Sirois
    8. +
    9. Robert D Anderson
    10. +
    11. Eliot Kimber
    12. +
    13. Chris Papademetrious
    14. +
    15. Julien Lacour
    16. +
    17. Toshihiko Makita
    18. +
    19. Dmitriy Krasilnikov
    20. +
    21. David Bertalan
    22. +
    23. Jake Bourne
    24. +
    25. Jason Fox
    26. +
    27. Joe D. Williams
    28. +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    + +
    + Documentation updates +

    The documentation for DITA Open Toolkit Release 3.7 provides corrections and + improvements to existing topics, along with new information in the following topics:

    +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +

    For additional information on documentation issues resolved in DITA Open Toolkit Release , see the + 3.7 milestone in the documentation repository.

    +

    DITA Open Toolkit Release 3.7 includes + by the following people:

    + NOTE: This lists contributions to docs, not to the core toolkit. +
      +
    1. Roger Sheen
    2. +
    3. Jarno Elovirta
    4. +
    5. Lief Erickson
    6. +
    7. Jason Fox
    8. +
    9. Nicolas Delobel
    10. +
    11. Stefan Eike
    12. +
    +

    For the complete list of documentation changes since the previous release, see the + + changelog.

    +
    +
    +
    + diff --git a/release-notes/rel4.0.dita b/release-notes/rel4.0.dita new file mode 100644 index 0000000..e595c1d --- /dev/null +++ b/release-notes/rel4.0.dita @@ -0,0 +1,424 @@ + + + + + DITA Open Toolkit 4.0 Release Notes + + Release Notes + + + + DITA Open Toolkit 4.0.2 is a maintenance release that fixes issues + reported in DITA-OT 4.0, which includes . +

    + + + + + Requirements: Java 17 + +

    + Add info on new minimum Java version or any other requirements that have changed + since previous release. +

    +

    +

    + +
    + + + DITA-OT 4.0.2 + <ph outputclass="small text-muted"> released February 18, 2023</ph> + + + +
    +

    DITA Open Toolkit 4.0.2 is a maintenance release that includes the + following bug fixes.

    +
      + +
    • Earlier versions of DITA-OT did not respect key references defined on long descriptions within + image elements. Processing has been updated to ensure that keyref attributes on + longdescref elements are resolved to the resource defined by the + href attribute on the key. + #4071, + #4080 +
    • +
    • If copy-to attributes were used to create duplicate versions of topics, + previous versions did not resolve key references to content inside the topic copies correctly. Key reference + processing has been corrected to ensure that topic IDs for copied topics are properly adjusted when + calculating link targets. + #4076, + #4110 +
    • +
    • In certain cases, when a context map resource was passed to the dita command + with the --resource option or the args.resources parameter, the + resource map was overwritten with its temporary version from preprocessing. These maps are now copied and + processed to the temporary files folder instead of being overwritten in-place, and the key values they + contain are correctly resolved from the copies in the temporary folder. + #4104, + #4112 +
    • +
    • In earlier versions, the DITA-OT logging configuration mistakenly enabled full debug logging for + all Java packages in any of the installed plug-ins. This error has been corrected to preserve the default + INFO level for custom plug-ins, and only enable debug logging for Java code in DITA-OT + itself. + #4106, + #4114 +
    • +
    • Content key references in map titles were not resolved if they pointed to phrase elements that + contained another ph element. Key references are now handled correctly, even when + conkeyref targets contain nested phrase elements. + #4117, + #4120 +
    • +
    • Obsolete Travis configuration files have been removed from the DITA-OT repository. + #4118 +
    • +
    +

    For additional information on the issues resolved since the previous release, see the + 4.0.2 milestone and + + changelog on GitHub.

    +
    +
    +
    + + + DITA-OT 4.0.1 <ph outputclass="small text-muted"> released December 9, 2022</ph> + + + +
    +

    DITA Open Toolkit 4.0.1 is a maintenance release that includes the + following bug fixes.

    +
      + +
    • + +
    • +
    • In earlier versions, the args.xhtml.toc.class and + args.html5.toc.class properties did not work. HTML processing has been updated to + ensure that the value of the class attribute is correctly set on the + body element in the table of contents (TOC) files generated for XHTML and HTML5 + output. + #4015, + #4065 +
    • +
    • The bundled Jackson data binding library was updated the latest version (2.14.0) to resolve a + security vulnerability. + #4016, + #4058 +
    • +
    • When link targets included index terms, PDF output generated by earlier versions added the text + of the index entries to the end of cross-reference link text. Processing has been updated to correctly + filter indexterm elements when computing the target text for + xref elements. + #4017, + #4030 +
    • +
    • In earlier releases, syntax diagrams with an id attribute did not preserve the + ID in HTML5 output. This is now fixed. + #4021, + #4057 +
    • +
    • A spelling mistake has been corrected in the DOTX034E message that appears when + unordered list items are cross-referenced without specifying link text. + #4029 +
    • +
    • In earlier versions, conditional processing did not work as expected when specialized attributes + were used for flagging. The flagging module has been updated to work correctly with specialized attributes. + #4043, + #4053 +
    • +
    +

    For additional information on the issues resolved since the previous release, see the + 4.0.1 milestone and + + changelog on GitHub.

    +
    +
    +
    + + + DITA-OT 4.0 + <ph outputclass="small text-muted">released November 12, 2022</ph> + + + + + + + + + +
    +

    DITA Open Toolkit Release 4.0 includes + a new plug-in for easier PDF customization, project file improvements, + updates to LwDITA processing, and support for the split chunking feature in the latest drafts of the + upcoming DITA 2.0 standard.

    +
    + +
    + New PDF theme plug-in +

    +
    + For information on the available theming options and a sample YAML theme, see + . +
    + +
    + Project file improvements +
      +
    • +

      The re-usable publication element in DITA-OT project files can now be overridden + with additional parameters (or modified parameter settings) by adding new param + elements to the referencing element. + #3682, + #3907 +

      +

      This allows common publications to be defined in one place, re-used in others, and overlaid with local + variations when the common settings need to be adjusted in certain cases.

      + <project xmlns="https://www.dita-ot.org/project"> + <publication transtype="html5" id="common-html5"> + <param name="nav-toc" value="partial"/> + </publication> + <deliverable> + <context> + <input href="root.ditamap"/> + </context> + <output href="./out"/> + <publication idref="common-html5"> + <!-- Define publication-specific parameter settings --> + <param name="nav-toc" value="full"/> + </publication> + </deliverable> +</project>
    • +
    • +

      The publication element in DITA-OT project files now supports nested + profile elements. When both context and publication contain profiles, they are + applied in order: publication profiles first, context profiles second. + #3690, + #3895 +

      +

      This allows publications to define filter criteria that are applied to the content of the individual + publication (in addition to those specified for the entire deliverable context).

      + <project xmlns="https://www.dita-ot.org/project"> + <deliverable name="Name" id="site"> + <context name="Site" id="site"> + <input href="site.ditamap"/> + <profile> + <ditaval href="site.ditaval"/> + </profile> + </context> + <output href="./site"/> + <publication transtype="html5" id="sitePub" name="Site"> + <profile> + <!-- Define publication-specific filters --> + <ditaval href="site-html5.ditaval"/> + </profile> + </publication> + </deliverable> +</project> +
    • +
    +
    + +
    + Lightweight DITA and Markdown updates +

    The org.lwdita plug-in has been updated to version , + which includes Markdown processing improvements.

    +
      +
    • DITA-OT 4.0 includes processing updates to reflect recent changes to the latest drafts of the LwDITA + profile from OASIS
    • +
    • Add support for Markdown files without first-level headings
    • +
    • Better support for +
    • +
    • Markdown input improvements: +
        +
      • Improve subscript and superscript support
      • +
      • Fix backslash escapes in code phrases (applies only to + format=markdown, as MDITA does not support code phrases)
      • +
      • Add support for table spanning
      • +
      +
    • +
    • In previous releases, standard Markdown syntax could be used to indicate a span of code by wrapping it + with backtick quotes (`). These constructs were converted to DITA + codeph elements on import, and rendered as code elements + in HTML output. This support has been removed from MDITA processing to align with LwDITA, which does not + support code phrase markup.
    • +
    +
    + +
    + Updated DITA 2.0 preview +

    In addition to the + DITA 2.0 preview support provided in previous releases (3.5, 3.6, and + 3.7), DITA-OT 4.0 includes updated processing support for the latest drafts of the + DITA 2.0 DTD and RELAX NG grammar files from OASIS (as of ). + + #4040 +

    +
      +
    • +
    +

    + +

    + +
    + + <p/> + </section> + + <section id="enhancements"> + <title>Enhancements and changes + +

    DITA Open Toolkit Release 4.0 includes the following enhancements and changes to + existing features:

    + +
      +
    • When + publishing with project files, separate temporary folders are now + created for each deliverable in the project. This facilitates debugging and troubleshooting, as it makes it + easier to inspect the temporary files that have been created for each deliverable. + #3757, + #3898 +
    • +
    • + +
    • +
    • Attribute generation routines in XSLT stylesheets have been refactored from the old XSLT 1.0 + style xsl:value-of select="…" to the modern XSLT 2 notation: + xsl:attribute select="…"/. + #3830 +
    • +
    • Many Ant targets refer to skip properties that can be used to skip + preprocessing steps. In earlier releases, these properties were not set or named consistently; these + properties are now generated automatically with more consistent naming and behavior. + + #3851 +
    • +
    • When an included file uses a character set that is neither the system default nor matches the + explicit character set definition in the include, reading the file may fail. A new DOTJ084E + error message makes it easier to debug character set encoding issues like this in source files. + #3891 +
    • +
    • Grammar caching and validation has been added for RELAX NG–based DITA topics and maps. Together + these enhancements make publishing faster and more reliable for RNG-based content. + #3253, + #3661, + #3926 +
    • +
    • Many XSLT files have been updated to use #current for the processing mode. This + simplifies the code and makes it easier to read and maintain. + #3974 +
    • +
    +
    + +
    + Bug fixes + +

    DITA Open Toolkit Release 4.0 provides fixes for the following bugs:

    + +
      +
    • In earlier releases, unexpected or invalid markup in a plugin.xml file + might throw errors, but the installation would still show as successful. This has been fixed, and plug-in + installation will now fail when the integration process does not work. + #2641, + #3825 +
    • +
    • In earlier releases, the frame="none" attribute on tables was + not properly handled for PDF output. This issue has been fixed, and the table border is now handled + correctly. + #3303, + #3852, + #3854 +
    • +
    • In 3.7 and some earlier releases, including namespaced elements such as + m:math or svg:svg in a topic that is chunked would + result in build failures. The chunking process now handles these elements without errors. + #3684 +
    • +
    • The FINALOUTPUTTYPE XSLT parameter has been removed from + maplinkImpl.xsl and mappullImpl.xsl; this parameter is a legacy + of very early code and has never been used by DITA-OT. + #4018 +
    • +
    • In DITA-OT 3.7.4, publishing failed with an IllegalArgumentException when images were referenced + with an HTTP URI scheme. Processing has been corrected to set the missing scope attribute + to external per . + #4032, + #4039 +
    • +
    +
    + +
    + Contributors +

    DITA Open Toolkit Release 4.0 includes + by the following people:

    + + NOTE: This lists contributions to the core toolkit, not docs. +
      +
    1. Jarno Elovirta
    2. +
    3. Radu Coravu
    4. +
    5. Robert D Anderson
    6. +
    7. Toshihiko Makita
    8. +
    9. Eric Sirois
    10. +
    11. Chris Papademetrious
    12. +
    13. Julien Lacour
    14. +
    15. Roger Sheen
    16. +
    +

    For the complete list of changes since the previous release, see the + + changelog on GitHub.

    +
    + +
    + Documentation updates +

    The documentation for DITA Open Toolkit Release 4.0 provides corrections and + improvements to existing topics, along with new information in the following topics:

    +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    +

    For additional information on documentation issues resolved in DITA Open Toolkit Release , see the + 4.0 milestone in the documentation repository.

    +

    DITA Open Toolkit Release 4.0 includes + by the following people:

    + NOTE: This lists contributions to docs, not to the core toolkit. +
      +
    1. Roger Sheen
    2. +
    3. Jarno Elovirta
    4. +
    +

    For the complete list of documentation changes since the previous release, see the + + changelog.

    +
    +
    +
    + diff --git a/release-notes/rel4.1.dita b/release-notes/rel4.1.dita new file mode 100644 index 0000000..bb4c302 --- /dev/null +++ b/release-notes/rel4.1.dita @@ -0,0 +1,563 @@ + + + + + DITA Open Toolkit 4.1 Release Notes + + Release Notes + + + + DITA Open Toolkit 4.1.2 is a maintenance release that fixes issues + reported in DITA-OT 4.1, which includes . +

    + + + + + Requirements: Java 17 + +

    + Add info on new minimum Java version or any other requirements that have changed + since previous release. +

    +

    +

    + +
    + + + DITA-OT 4.1.2 + <ph outputclass="small text-muted">released October 2, 2023</ph> + + +
    +

    DITA Open Toolkit 4.1.2 is a maintenance release that includes the + following bug fixes.

    +
      + +
    • Various issues in map-first preprocessing have been resolved in this release. + #4237 +
        +
      • Earlier versions failed to expand content references that were specified in key definitions. + In preprocess2, content references are now expanded before key references to ensure + that all topics are available when the map is processed. + #2420, + #4258, + #4261 +
      • +
      • Key references to duplicate topics created via copy-to attributes caused + builds to fail. This issue was initially resolved for the original preprocessing routine in DITA-OT + 3.1.1. The original source information is now also correctly recorded for copy-to targets in + preprocess2, allowing builds to continue. + #3007, + #3015 +
      • +
      • Earlier versions failed to catch certain validation errors in preprocess2. + Map-first preprocessing has been updated to validate files correctly. + #3281 +
      • +
      • In DITA-OT 3.5 to 4.1, map-first preprocessing failed to report unresolved content + references to topics that were not referenced in the map, and any key references they contained were not + expanded. In the past, this issue could be avoided by adding content reference targets to the map with + the processing-role attribute set to resource-only, but this + workaround is no longer necessary. Unresolved references should now be reported, and keys expanded even + if the target topics are not referenced in the map. + #3446, + #3546 +
      • +
      • Map-first preprocessing set incorrect values for the path2project, + path2project-uri, and path2rootmap-uri processing instructions. In + preprocess2, they are now set with correct values that match the original preprocess + output. + #3514, + #4252 +
      • +
      • The map-first preprocessing test code has been simplified to use the same expected output + for the original preprocessing routines and preprocess2. + #4268 +
      • +
      +
    • +
    • Network file URI validation has been fixed to allow builds to continue when cross-references + point to invalid URIs. Up until DITA-OT 3.6, the non-standard 2-slash format could be used to represent the + server name in Windows UNC filenames such as \\server\folder\file.pdf using the + Authority part of the URI as file://server/folder/file.pdf. Recent versions of DITA-OT + required the correct 3-slash notation with an explicitly empty authority component + (file:///server/folder/file.pdf), or builds would fail. Validation has been relaxed + to restore support for the 2-slash format. + #3718, + #4255 +
    • +
    • Chunk-to-content publishing failed on DITA map files whose paths included spaces. The chunk map + reader module now normalizes map file paths to allow publishing to continue in these cases. + #4064, + #4257 +
    • +
    • The HTML5 plug-in has been updated to remove the remaining inline style attributes that + prevented custom plug-ins from overriding the monospace font presentation of teletype + tt elements. These changes move the default teletype styling to CSS to allow + users to override the presentation in custom stylesheets. The output is visually equivalent to the results + generated by previous toolkit versions. + #4254, + #4267 + In publishing environments that do not use the default common CSS files, these styles + may need to be implemented in custom stylesheets. +
    • +
    • Test coverage has been improved to include unit tests for preprocessing, integration tests for + subject schemes, and unit tests for cascading metadata in duplicate topicrefs. + #4259, + #4264, + #4280 +
    • +
    • In earlier versions, cross-references or other links to titles that contained footnotes included + the footnote text. For a link to a target element that has no explicit link text, DITA-OT computes default + link text from the target element. Link text computation now ignores any fn + elements it encounters, so the link shows only the text from the title element. + #4269, + #4276 +
    • +
    • When maps point to the same resource in multiple topic references with different navigation + titles (or other topic metadata), older versions of DITA-OT used the metadata from the first reference for + all subsequent instances. The original code was written to cascade metadata within the map and also collect + metadata to be pushed to topics. This code worked when each topic was only referenced once. When there were + duplicates, only the first topic reference got the correct cascaded metadata; the second reference was + processed with the cascaded metadata, but also with the metadata from the first topicref. The code has been + refactored to separate metadata cascading within maps from the collection of metadata to push to topics, so + subsequent references to the same resource now retain the correct metadata for each instance. + #4275, + #4283, + #4284 +
    • +
    • The bundled XML Resolver has been upgraded to version 5.2.1, which no longer fails on invalid + URI characters like spaces or Windows backslashes, and now also runs in environments with a restrictive + security manager. + #4274, + #4279 +
    • +
    +

    For additional information on the issues resolved since the previous release, see the + 4.1.2 milestone and + + changelog on GitHub.

    +
    +
    +
    + + + DITA-OT 4.1.1 + <ph outputclass="small text-muted">released July 20, 2023</ph> + + +
    +

    DITA Open Toolkit 4.1.1 is a maintenance release that includes the following bug fixes.

    +
      + +
    • In previous releases, there were some cases in which a desc element + inside an xref or link element was not annotated with the + expected ditaot usershortdesc processing instruction during preprocessing. These omissions + have been corrected to aid in debugging. (This change is relevant only within preprocessing, as these + processing instructions are deleted when preprocessing completes.) + #4155 +
    • +
    • When building HTML output, earlier versions reported XSLT errors while resolving custom header + files if paths used Windows backslash characters “\” as separators. Path separators in + args.ftr, args.hdf, and args.hdr parameter + values are now converted to the forward slash character “/” to ensure URLs are valid before + they are passed to XSLT. + #4218, + #4226 +
    • +
    • For cross-references to a topic, the target topic’s short description is processed to create a + link description. When that shortdesc element contained another cross-reference, + earlier versions did not process it correctly, and reported DOTX031E (file not available) + errors during processing. This issue is now fixed, and link descriptions are created correctly. + #4221, + #4239 +
    • +
    • Build scripts have been updated to ensure unit tests run correctly during Gradle builds. + #4230 +
    • +
    • The RELAX NG grammar caching changes in DITA-OT 4.0 introduced a configuration bug that + accidentally disabled XML Schema Definition validation. Processing and tests have been updated to ensure + that XSD-based maps and topic files can be published correctly. + #3926, + #4234, + #4238 +
    • +
    • When logging was changed to use processing mode in DITA-OT 4.1, the change logged the exception + without location. Logging code has been corrected to restore the location information to the exception, so + errors once again show the line/column number where the problem appears. + #4187, + #4240, + #4248 +
    • +
    • Several dependencies have been upgraded to include the latest utility versions and fix security issues in + bundled libraries: +
        +
      • Guava 32.1.1 + #4227, + #4245 +
      • +
      • Jackson 2.15.2 + #4216, + #4228 +
      • +
      • Logback 1.4.8 and SLF4J 2.0.7 + #4246, + #4250 +
      • +
      • Saxon 12.3 + #4241, + #4247, + #4250 +
      • +
      +
    • +
    +

    For additional information on the issues resolved since the previous release, see the + 4.1.1 milestone and + + changelog on GitHub.

    +
    +
    +
    + + + DITA-OT 4.1 + <ph outputclass="small text-muted">released June 22, 2023</ph> + + + + + + + + + +
    +

    DITA Open Toolkit Release 4.1 includes a new version of the + Lightweight DITA plug-in with significant enhancements to Markdown processing, and updates for the latest + DITA 2.0 draft standard.

    +
    +
    + Plug-in development features + +
      +
    • Since DITA-OT 3.5, the dita + plugins subcommand shows a list of the currently installed plug-ins by plug-in ID. To + make it easier to determine which version of each plug-in is installed, the output now includes the version + number for each plug-in as specified in the plugin.xml file. + #4137, + #4141 +
    • +
    • Previously only files referenced from the start map could be parsed using a custom parser. The + start map itself was always processed as DITA XML. As of DITA-OT 4.1, processing has been updated to also + allow the start map to use a custom parser. This change allows recent versions of the LwDITA plug-in to + process Markdown maps. + #4159 +
    • +
    • Plug-in developers can now configure custom parsers via SAX properties that provide a list of + formats and processing mode. The LwDITA plug-in uses this mechanism to configure the options supported for + Markdown and MDITA. + #4205 +
    • +
    +
    + +
    + Lightweight DITA and Markdown updates +

    The org.lwdita plug-in has been updated to version , + which includes performance improvements and updates to Markdown processing to reflect recent changes to the + latest LwDITA drafts from OASIS.

    +
      +
    • +

      Markdown output

      +
        +
      • When generating Markdown output, the less-than “<” and greater-than “>” characters are now added + to xmlelement content as in HTML and PDF output.
      • +
      • Markdown output now treats programming and software domain elements as code spans and wraps the + content in backtick quotes (`) for better correspondence with HTML5 output, which wraps + these elements in code.
      • +
    • +
    • +

      Markdown input

      +
        +
      • Standard Markdown syntax can now be used to indicate a span of code by wrapping it with backtick + quotes (`). In Markdown DITA input, these constructs are converted to DITA + codeph elements on import, and rendered as code + elements in HTML output. In MDITA input, backtick code spans are parsed as teletype + tt elements to align with LwDITA, which supports teletype highlighting in + XDITA.
      • +
      • The LwDITA plug-in supports a new $schema key in the YAML front matter block. This + key can be used to define parsing options in topic files for more control over how Markdown content is + converted to DITA. For more information, see + .
      • +
      • Earlier versions of the plug-in failed to parse certain Markdown tables correctly. Table parsing has + been improved to ensure these cases are properly processed.
      • +
      • The MDITA core profile can now be specified via the new schema key in the YAML front matter + block.
      • +
      • Any linefeed processing instructions in Markdown input are now converted to line feeds + in HTML5 and PDF output.
      • +
      • Markdown DITA supports both loose and + tight list + spacing (with no blank lines between list items). MDITA treats all lists as loose, and wraps each list + item in a paragraph: <li><p>item</p></li>.
      • +
      • DITA maps can now be written in Markdown using standard Markdown syntax for links and lists. +
          +
        • In Markdown DITA, the schema key in the YAML front matter block is used to define the file as a + map. Unordered list items create topicref elements, and ordered list items + create topicref elements with + collection-type=. List items without a link are treated + as topic heads.
        • +
        • In MDITA, maps use the file name extension mditamap to define the file as a + map. Both ordered and unordered list items create topicref, and any + unlinked topic heads are ignored.
        • +
        +
      • +
      +
    • +
    • +

      The flexmark Markdown parsing library has been updated to version 0.64.

    • +
    • +

      The XDITA plug-in has been updated to version , which includes + recent changes to the grammar files from OASIS (as of ). + #4214 +

      +
    • +
    +
    + +
    + Updated DITA 2.0 preview +

    In addition to the + provided in DITA-OT 3.5 – 4.0, this release includes updated processing for + the latest draft versions of the DITA 2.0 grammar files from OASIS (as of ). +

    +
      +
    • +
    +

    + +

    + +
    + Enhancements and changes + +

    DITA Open Toolkit Release 4.1 includes the following enhancements and changes to + existing features:

    + +
      +
    • When publishing to HTML and PDF, email links no longer include the mailto: + prefix in the default link text. + #4020, + #4089 +
    • +
    • When filtering profiled content with DITAVAL files that exclude content by default, the + DOTJ031I message no longer appears when no rule is specified for a certain attribute. + #4048, + #4073 +
    • +
    • The Java code has been refactored to use new language and library features from recent Java + versions. These changes make the code more future-proof and easier to maintain. + #4090, + #4091, + #4092, + #4121 +
    • +
    • The following bundled plug-ins have been upgraded to the latest versions: +
        +
      • The Normalized DITA plug-in version 1.1 now removes unnecessary key artefacts like + keys, keyref or keydef after key + resolution, and ditavalref elements after branch filter resolution. + #4140 +
      • +
      • The Lightweight DITA plug-in version 5.5 includes the + described above. + #4167, + #4178, + #4210 +
      • +
      • The PDF Theme plug-in version 0.7.0 adds support for tasks, and the hazard, highlight, + markup, UI, and XML domains, so you can now style these elements in a YAML theme file without building a + custom PDF plug-in. + #4194 +
      • +
      +
    • +
    • Several bundled dependencies have been upgraded to the latest versions: +
        +
      • Ant 1.10.13 + #4182 +
      • +
      • FOP 2.8 + #4183, + #4011 +
      • +
      • Gradle wrapper 7.6.1 + #4197 +
      • +
      • Saxon 12.2 + #4130 +
      • +
      +
    • +
    +
    + +
    + Bug fixes + +

    DITA Open Toolkit Release 4.1 provides fixes for the following bugs:

    + +
      +
    • Earlier versions of + (preprocess2) failed to copy non-DITA files to the output directory. + Processing has been updated to copy media files and other linked assets. + #3242, + #3966, + #4132 +
    • +
    • When a map contained references to nested subtopics within the same topic file, earlier versions + would process the file multiple times during branch filtering. The output was correct but runtime was + increased. This issue has been fixed so that the topic file is only filtered once. + #3903, + #4152 +
    • +
    • In earlier versions, cross-references to fn footnote elements without + target text were rendered with two levels of sup superscript formatting in XHTML + and HTML5 output. Now, these links are only superscripted once. + #3967, + #3968 +
    • +
    • When generating PDF output, earlier versions failed with the PDFX005F error + when topic references targeted external resources with the scope attribute set to + external. Processing has been updated to properly recognize external resources and allow + builds to complete. + #4131 +
    • +
    • Earlier versions included DITA 2.0 grammar files from OASIS that referenced non-public URNs. The + files have been updated to the latest versions (as of ), which + include updated references in the RELAX NG files. + #4144, + #4177 +
    • +
    • Earlier versions reported errors when processing DITA 2.0 content with empty + specializations attribute values. Processing has been updated to handle these cases + correctly. + #4165 +
    • +
    • When generating HTMLHelp with DITA-OT 4.0, builds failed with the DOTA015F + error. HTMLHelp has been updated to replace the outdated preprocess.copy-image.skip + property with the corresponding DITA 4.0 build-step.copy-image property for compatibility + with recent toolkit versions. + #4181, + #4186 +
    • +
    • When topic short descriptions contain cross-reference links that point to one another in + circular references across topics, earlier versions would fail with an infinite-recursion stylesheet loop. + Now, shortdesc descriptions in referenced elements are processed only one level deep. + #4184, + #4185 +
    • +
    • In earlier versions, setting the processing-mode parameter to + would only stop processing if errors were reported from the Java code. Any XSLT + errors were logged to the console, but processing continued. Now, XSLT errors will also stop processing, so + mode is a bit … stricter. + #4187 +
    • +
    +
    + +
    + Contributors +

    DITA Open Toolkit Release 4.1 includes + by the following people:

    + + NOTE: This lists contributions to the core toolkit, not docs. +
      +
    1. Jarno Elovirta
    2. +
    3. Robert D Anderson
    4. +
    5. Radu Coravu
    6. +
    7. Chris Papademetrious
    8. +
    9. Roger Sheen
    10. +
    11. Duna Marius Cosmin
    12. +
    13. Josh Johnson
    14. +
    15. Toshihiko Makita
    16. +
    +

    For the complete list of changes since the previous release, see the + changelog on GitHub.

    +
    + +
    + Documentation updates +

    The documentation for DITA Open Toolkit Release 4.1 provides corrections and + improvements to existing topics, along with new information in the following topics:

    +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • + +
        +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      +
    • +
    +

    For additional information on documentation issues resolved in DITA Open Toolkit Release , see the + 4.1 milestone in the documentation repository.

    +

    DITA Open Toolkit Release 4.1 includes + by the following people:

    + NOTE: This lists contributions to docs, not to the core toolkit. +
      +
    1. Roger Sheen
    2. +
    3. Jarno Elovirta
    4. +
    5. Lief Erickson
    6. +
    7. Darrenn Jackson
    8. +
    9. Mark Giffin
    10. +
    +

    For the complete list of documentation changes since the previous release, see the + changelog.

    +
    +
    +
    + diff --git a/resources/common-resources.ditamap b/resources/common-resources.ditamap new file mode 100644 index 0000000..68c89ab --- /dev/null +++ b/resources/common-resources.ditamap @@ -0,0 +1,12 @@ + + + + + Common Resources + + + + + + + diff --git a/resources/common-toc.ditamap b/resources/common-toc.ditamap new file mode 100644 index 0000000..dd72ea0 --- /dev/null +++ b/resources/common-toc.ditamap @@ -0,0 +1,52 @@ + + + + + DITA Open Toolkit <keyword keyref="release"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/conref-task.dita b/resources/conref-task.dita new file mode 100644 index 0000000..108cdb3 --- /dev/null +++ b/resources/conref-task.dita @@ -0,0 +1,168 @@ + + + + + Conref file for tasks + + +

    DITA-OT releases follow + guidelines. Version numbers use the major.minor.patch syntax, where + major versions may include incompatible API changes, minor versions add + functionality in a backwards-compatible manner and patch versions are maintenance releases + that include backwards-compatible bug fixes.

    +

    Custom plug-ins developed for a previous major version may require + changes to work correctly with recent toolkit versions. Most plug-ins should be compatible with subsequent + minor and patch versions of the major release for + which they were originally developed.

    +
    + +
    Standard Path / Directory Names
    +
    dita-ot-dir
    +
    dita
    +
    dita-ot-dir/docsrc
    +
    dita-ot-dir/docsrc/samples
    +
    /absolute/path/to/dita-ot-dir/docsrc/samples
    +
    + +
    Plug-In Info
    +
    +
      +
    • <plug-in-id> is the unique ID of the + plug-in, as defined in the plug-in’s configuration file (plugin.xml).
    • +
    • plug-in-zip is the + filename or URL of the plug-in’s distribution ZIP file + (optional).
    • +
    • the optional <plug-in> argument is one of + the following: +
        +
      • the unique ID of the plug-in as defined in the plug-in registry at + (or a local registry)
      • +
      • the remote URL of the plug-in’s distribution ZIP file
      • +
      • the name of a local ZIP file
      • +
      +
    • +
    • If no ID, URL, or + file argument is provided, the installation process reloads the current set of + plug-ins from the plugins directory (or any custom locations defined via the + pluginsdir property in the configuration.properties file + in the config directory). This approach can be used to add or remove multiple + plug-ins at once, or any individual plug-ins you have already copied to (or removed from) the plug-in + directories. Any plug-ins added or removed in the process will be listed by their plug-in + ID.
    • +
    • The uninstall subcommand also + removes the corresponding plug-in directory from the plugins folder. + uninstalling
    • +
    • + In earlier versions of DITA-OT (2.4–3.4), use the double-hyphen option + syntax dita + --uninstall. In DITA-OT 2.0–2.3, use the + single-hyphen form: dita +
    • +
    +
    +
    +
    +
    + + + + + Download the dita-ot-.zip + package from the project website at + . + + + + Open a command prompt or terminal session. + +
      +
    • input-file is the DITA map or DITA file that you want to + process.
    • + +
    • +

      + format is the output format (transformation type). This argument corresponds to the + common parameter . Use the same values as for the + transtype build parameter, for example or + .

      +
    • + +
    • +

      +

      You can create plug-ins to add new output formats; by default, the following values are + available: + transtype + list +

        +
      • +
      • +
      • +
      • +
      • , , and +
      • +
      • +
      • +
      + See + for sample command line syntax and more information on each + transformation. +

      +
    • +
    • [options] include the following optional build parameters: + + + + + +
    • +
    +
    + +

    If processing is successful, nothing is printed in the terminal window. The built output is written to the + specified output directory (by default, in the out subdirectory of the current + directory).

    +
    +
    + + Extending pre-processing + + For maximum compatibility with future versions of + DITA-OT, most plug-ins should use the extension points that run before or after + pre-processing. + The internal order of preprocessing steps is + subject to change between versions of DITA-OT. New versions may remove, reorder, combine, or add steps to + the process, so the extension points within the pre-processing stage should only be used if absolutely + necessary. + + + + Use the dita install subcommand to install the plug-in. + + For more information, see + . + +
    + + Copy /properties/template.properties; this template describes each of the properties you can + set. + If you are building in different environments where the location of the input + files is not consistent, set with the dita command and + reference its value with ${args.input.dir} in your .properties file. + dita command + + .properties file + args.input.dir + +
      +
    1. +

      Use the dita install subcommand to install the plug-in.

      + For more information, see + . +
    2. +
    +
    +
    +
    diff --git a/resources/dita-ot-day-video-keys.ditamap b/resources/dita-ot-day-video-keys.ditamap new file mode 100644 index 0000000..421868d --- /dev/null +++ b/resources/dita-ot-day-video-keys.ditamap @@ -0,0 +1,14 @@ + + + + + DITA-OT Day Videos Keys + + + + + + + + + diff --git a/resources/dita-ot-doc.css b/resources/dita-ot-doc.css new file mode 100644 index 0000000..6e1ae32 --- /dev/null +++ b/resources/dita-ot-doc.css @@ -0,0 +1,1047 @@ +/* DITA Open Toolkit documentation style */ + +/* Based on almond.css by Alvaro Montoro */ + +/* stylelint-disable -- Ignore stylelint rules on almond.css */ + +/* + Copyright (c) 2019 - Alvaro Montoro (alvaromontoro@gmail.com) + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +/************************************************************/ +/* Almond.CSS */ +/************************************************************/ +/** Author: Alvaro Montoro **/ +/** Project: https://github.com/alvaromontoro/almond.css **/ +/************************************************************/ +:root { + /* Colors */ + --primaryH: 210; + --primaryS: 50%; + --primaryL: 40%; + --primary-bg: #fff; + --secondaryH: 0; + --secondaryS: 0%; + --secondaryL: 13%; + --secondary-bg: #fff; + /* Font */ + --font-family: Helvetica, Arial, sans-serif; + --font-size-root: 16px; + --font-weight-bolder: 700; + --font-weight-bold: 400; + --font-weight-normal: 200; + --font-weight-thin: 100; + --line-height: 1.75rem; + --heading-margin: 1.5rem 0 1rem; + /* Inputs */ + --border-radius: 2px; + /* Status */ + --error: #d00; + --warning: #ec0; + --info: #369; + --correct: #080; } + +:root { + /* Calculated colors */ + --primary: hsl(var(--primaryH), var(--primaryS), var(--primaryL)); + --primary-bright: hsl(var(--primaryH), calc(var(--primaryS) * 1.25), 90%); + --primary-transparent: hsla(var(--primaryH), var(--primaryS), var(--primaryL), 0.05); + --primary-dark: hsl(var(--primaryH), var(--primaryS), calc(var(--primaryL) * 0.5)); + --primary-darker: hsl(var(--primaryH), var(--primaryS), calc(var(--primaryL) * 0.2)); + --primary-light: hsl(var(--primaryH), var(--primaryS), 75%); + --primary-lighter: hsl(var(--primaryH), var(--primaryS), 96%); + --secondary: hsl(var(--secondaryH), var(--secondaryS), var(--secondaryL)); + --secondary-transparent: hsl(var(--secondaryH), var(--secondaryS), var(--secondaryL), 0.05); + --secondary-dark: hsl(var(--secondaryH), var(--secondaryS), calc(var(--secondaryL) * 0.5)); + --secondary-darker: hsl(var(--secondaryH), var(--secondaryS), calc(var(--secondaryL) * 0.2)); + --secondary-light: hsl(var(--secondaryH), var(--secondaryS), 75%); + --secondary-lighter: hsl(var(--secondaryH), var(--secondaryS), 96%); } + +html { + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; + background-color: var(--secondary-bg); + color: var(--secondary); + font-family: var(--font-family); + font-size: var(--font-size-root); + font-weight: var(--font-weight-normal); + margin: 0; + padding: 0; } + +body { + font-size: 1rem; + margin: auto auto; + padding: 1rem; } + +@media all and (min-width: 1024px) { + body { + max-width: 920px; } } + +@media all and (min-width: 1200px) { +body { + max-width: 1080px; } } + +:focus { + outline: 1px dashed var(--primary); + outline-offset: 2px; } + +[hidden], +template { + display: none; } + +h1, +h2, +h3, +h4, +h5, +h6 { + color: var(--brand-primary); +/*font-weight: var(--font-weight-normal);*/ + margin: var(--heading-margin); } + +h1 { + font-size: 2.5rem; } + +h2 { + font-size: 2rem; } + +h3 { + font-size: 1.66rem; } + +h4 { + font-size: 1.45rem; } + +h5 { + font-size: 1.25rem; + font-weight: var(--font-weight-bolder); } + +h6 { + font-size: 1.125rem; + font-weight: var(--font-weight-bolder); } + +ul, +ol { + margin: 0.5rem 0; + padding-left: 1.2rem; } + ul ul, + ul ol, + ol ul, + ol ol { + margin: 0; } + +li { + font-size: 1rem; + line-height: var(--line-height); + margin: 0.5rem 0; + max-width: 80ch; + max-width: calc(80ch - 3rem); } + +table { + background-color: var(--secondary-bg); + border: 0; + border-collapse: collapse; + border-spacing: 0; + width: 100%; } + +thead { + background-color: var(--secondary-lighter); +/*box-shadow: inset 0 -2px var(--secondary);*/ } + +tfoot { + box-shadow: inset 0 2px var(--secondary); } +/* +tbody tr:nth-child(even) { + background-color: var(--secondary-lighter); } +*/ +tbody tr:hover { + background-color: var(--primary-lighter); } + +td, +th { + padding: 0.5rem; + vertical-align: top; } + +th { + font-weight: var(--font-weight-bold); } + +input:not([type="file"]), +optgroup, +option, +textarea, +select { + border: 1px solid var(--secondary-light); + border-radius: var(--border-radius); + box-sizing: border-box; + color: inherit; + font: inherit; + font-size: 1rem; + height: 2.5rem; + line-height: normal; + margin: 0; + padding: 0 0.5rem; + max-width: 100%; + min-width: 15rem; + text-transform: none; + vertical-align: bottom; } + input:not([type="file"]):invalid, + optgroup:invalid, + option:invalid, + textarea:invalid, + select:invalid { + border-color: var(--error); } + input:not([type="file"]):invalid:hover, + optgroup:invalid:hover, + option:invalid:hover, + textarea:invalid:hover, + select:invalid:hover { + border: 1px solid #aa0000; } + input:not([type="file"])[disabled], input:not([type="file"]):disabled, + optgroup[disabled], + optgroup:disabled, + option[disabled], + option:disabled, + textarea[disabled], + textarea:disabled, + select[disabled], + select:disabled { + background: var(--secondary-lighter); + color: var(--secondary-light); } + input:not([type="file"])::-webkit-calendar-picker-indicator, + optgroup::-webkit-calendar-picker-indicator, + option::-webkit-calendar-picker-indicator, + textarea::-webkit-calendar-picker-indicator, + select::-webkit-calendar-picker-indicator { + display: none; + background: none; } + +input:not([type="file"]):not([type="image"]):not(:invalid):not(:disabled):not([disabled]):not([readonly]):hover, +textarea:not(:invalid):not(:disabled):not([disabled]):not([readonly]):hover, +select:not(:invalid):not(:disabled):not([disabled]):not([readonly]):hover { + border: 1px solid var(--secondary); } + +input[type="color"] { + padding: 0.125rem; } + +input[type="range"] { + padding: 0; } + +textarea { + height: 5rem; + line-height: 1.5rem; + overflow: auto; } + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; } + +input[type="search"] { + -webkit-appearance: textfield; + appearance: textfield; } + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; + appearance: none; } + +input[type="radio"], +input[type="checkbox"], +input[type="image"], +input[type="file"] { + border: 0; + box-sizing: border-box; + height: auto; + max-width: initial; + min-width: auto; + padding: 0; } + +button, +input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + appearance: button; + background-color: var(--primary); + border: 1px solid transparent; + border-radius: var(--border-radius); + box-sizing: border-box; + color: var(--primary-bg); + cursor: pointer; + display: inline-block; + font-size: 0.8rem; + font-weight: var(--font-weight-bold); + min-height: 2.5rem; + max-width: auto; + min-width: auto; + overflow: visible; + padding: 0 1rem; + text-transform: uppercase; } + button[disabled], button:disabled, + input[type="button"][disabled], + input[type="button"]:disabled, + input[type="reset"][disabled], + input[type="reset"]:disabled, + input[type="submit"][disabled], + input[type="submit"]:disabled { + background: var(--secondary-lighter); + color: var(--secondary-light); } + button:not(:disabled):not([disabled]):hover, + input[type="button"]:not(:disabled):not([disabled]):hover, + input[type="reset"]:not(:disabled):not([disabled]):hover, + input[type="submit"]:not(:disabled):not([disabled]):hover { + background-color: var(--primary-dark); + border: 1px solid transparent; } + +input[type="reset"] { + background-color: var(--primary-bg); + border: 1px solid var(--primary); + color: var(--primary); } + input[type="reset"]:not(:disabled):not([disabled]):hover { + background-color: var(--primary-lighter); } + input[type="reset"]:disabled, input[type="reset"][disabled] { + background: var(--secondary-lighter); + border: 1px solid transparent; + color: var(--secondary-light); } + +button[disabled], +html input[disabled] { + cursor: default; } + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; } + +input[type="radio"], +input[type="checkbox"] { + -moz-appearance: none; + -webkit-appearance: none; + appearance: none; + width: 1rem; + height: 1rem; + border-radius: 50%; + border: 1px solid var(--secondary-light); + box-shadow: inset 0 0 0 0.185rem var(--secondary-bg); + background: var(--secondary-bg); + vertical-align: text-top; } + input[type="radio"][type="checkbox"], + input[type="checkbox"][type="checkbox"] { + border-radius: var(--border-radius); } + input[type="radio"]:checked, + input[type="checkbox"]:checked { + background: var(--primary); } + input[type="radio"]:disabled, + input[type="checkbox"]:disabled { + box-shadow: inset 0 0 0 0.185rem var(--secondary-lighter); + background: var(--secondary-lighter); } + +select:not([multiple]) { + -webkit-appearance: none; + appearance: none; + background-image: url("data:image/svg+xml;utf8,"); + background-size: 1em 1em; + background-repeat: no-repeat; + background-position: right 0.5em center; + padding-right: 2em; } + select:not([multiple]):hover, select:not([multiple]):active { + background-image: url("data:image/svg+xml;utf8,"); } + +select[multiple] { + min-height: 10rem; + padding: 0; } + select[multiple] option:checked { + background: var(--secondary-light) linear-gradient(0deg, var(--secondary-light) 0%, var(--secondary-light) 100%); } + select[multiple]:focus option:checked { + background: var(--primary) linear-gradient(0deg, var(--primary) 0%, var(--primary) 100%); + color: var(--primary-bg); } + +optgroup { + border: 0; + border-radius: 0; + font-weight: var(--font-weight-bolder); + padding: 0.5rem; } + +option { + border: 0; + border-radius: 0; + display: flex; + font-weight: var(--font-weight-normal); + align-items: center; + justify-content: flex-start; } + option:hover { + border: 0; + background: var(--primary-lighter); } + +a, +a:link, +a:visited, +a:active, +a:focus { + color: var(--link-color); + font-weight: var(--font-weight-normal); + text-decoration: none; } + +a:hover { + text-decoration: underline; + color: var(--link-hover-color); } + +abbr[title] { + border-bottom: 0; + text-decoration: underline dashed var(--primary); } + +address { + display: block; + font-style: normal; + margin: 1rem 0; } + +audio { + display: inline-block; + vertical-align: baseline; + max-width: 100%; } + audio:not([controls]) { + display: none; + height: 0; } + +b, +strong { + font-weight: var(--font-weight-bold); } + +blockquote { + background-color: var(--secondary-transparent); + box-sizing: border-box; + display: block; + margin: 1rem 0 1rem 3rem; + max-width: 80ch; + max-width: calc(80ch - 3rem); + overflow: hidden; + padding: 1rem; + page-break-inside: avoid; + position: relative; } + blockquote::before { + content: open-quote; + color: hsla(var(--secondaryH), var(--secondaryS), var(--secondaryL), 0.15); + font-size: 5rem; + font-family: "Times New Roman", "Times", serif; + left: 0.25rem; + line-height: 1; + position: absolute; + top: 0; + z-index: -1; } + blockquote > :first-child { + margin-top: 0; + text-indent: 1rem; } + blockquote > :last-child { + margin-bottom: 0; } + +canvas { + display: inline-block; + vertical-align: baseline; + max-width: 100%; } + +code { +/*background: var(--secondary-lighter);*/ + color: var(--secondary); + display: inline-block; + font-family: monospace, monospace; + font-size: 1em; +/*font-weight: var(--font-weight-bold);*/ +/*padding: 0 0.25rem;*/ } + +del { + text-decoration: line-through var(--primary); } + +details { + border: 1px solid var(--secondary-light); + border-radius: var(--border-radius); + display: block; + padding: 0 1rem; } + details summary { + margin: 0 -1rem; + padding: 1rem; } + details[open] summary { + border-bottom: 1px solid var(--secondary-light); } + +dfn { + font-style: italic; +/*font-weight: var(--font-weight-bold);*/ } + +dl { + margin: 1rem 0; + font-size: 1rem; + line-height: 1.5rem; + max-width: 80ch; } + +dt { + font-weight: var(--font-weight-bold); + margin-top: 1rem; } + +dd { + margin-left: 1rem; + font-style: normal; } + +fieldset { + border: 1px solid var(--secondary-light); + border-radius: var(--border-radius); + margin: 1rem 0; + padding: 0 1rem 1rem 1rem; } + fieldset > :last-child { + margin-bottom: 0; } + +legend { + background: var(--secondary-lighter); + border: 1px solid var(--secondary-light); + border-radius: var(--border-radius); + padding: 0.25rem 0.5rem; } +/* +figure { + background: var(--secondary-lighter); + border: 1px solid var(--secondary-light); + border-radius: var(--border-radius); + display: block; + margin: 1rem 0; + padding: 1rem; + text-align: center; } +*/ +figcaption { + font-size: 0.875rem; + font-style: italic; } + +hgroup { + border-left: 5px solid var(--primary); + display: block; + margin: var(--heading-margin); + padding-left: 1rem; } + hgroup h1, + hgroup h2, + hgroup h3, + hgroup h4, + hgroup h5, + hgroup h6 { + margin: 0; } +/* +hr { + border: 0; + border-top: 1px solid var(--secondary-light); + box-sizing: content-box; + height: 0; + margin: 2rem auto; + max-width: 15rem; + width: 50%; } +*/ +img { + border: 0; + max-width: 100%; } + +ins { + text-decoration: underline var(--primary); } + +kbd { + background-color: var(--secondary-lighter); + border: 1px solid var(--secondary-light); + border-radius: var(--border-radius); + color: var(--secondary); + font-family: monospace, monospace; + font-size: 0.9rem; + padding: 0.125rem 0.25rem; } + +mark { + background-color: var(--primary-bright); + border-left: 4px solid var(--primary-bright); + border-right: 4px solid var(--primary-bright); + color: var(--secondary-darker); } + +p { + font-size: 1rem; + line-height: var(--line-height); + margin: 1rem 0; + max-width: 80ch; } + +pre { + font-family: monospace, monospace; + font-size: 1em; + margin: 1rem 0; + max-width: 100%; + overflow: auto; } + pre > code { + display: block; + font-size: 1rem; + line-height: 1.5rem; + padding: 0.5rem 0.75rem; } + +progress { + display: inline-block; + max-width: 100%; + min-width: 15rem; + vertical-align: baseline; } + +q { + font-style: italic; } + q::before { + content: open-quote; + font-style: normal; } + q::after { + content: close-quote; + font-style: normal; } + +samp { + font-family: monospace, monospace; + font-size: 1em; +/*font-weight: var(--font-weight-bold);*/ } + +small { + font-size: 0.75em; } + +sub, +sup { + font-size: 0.75em; + line-height: 0; + position: relative; + vertical-align: baseline; } + +sup { + top: -0.5em; } + +sub { + bottom: -0.25em; } + +svg:not(:root) { + border: 0; + max-width: 100%; + overflow: hidden; } +/* +var { + font-family: monospace, monospace; + font-size: 1em; + font-style: normal; + font-weight: var(--font-weight-bold); } +*/ +video { + display: inline-block; + vertical-align: baseline; + max-width: 100%; } + +/* ↑ end almond.lite.css ↑ */ + +/* stylelint-enable */ + +/* ↓ add extension.images ↓ */ + +a[rel~='external'], +a[download] { + background-position: 0 50%; + background-repeat: no-repeat; + background-size: 1rem 1rem; + display: inline-block; + padding-left: 1.25rem; } + +a[download] { + background-image: url("data:image/svg+xml;utf8,"); } + +a[rel~='external'] { + background-image: url("data:image/svg+xml;utf8,"); } + +/* ↑ end extension.images ↑ */ + +/* ---------------------------------------------------------------------------------------------- */ + +:root { /* stylelint-disable-line */ + + /* DITA Open Toolkit overrides to Almond :root styles */ + + --font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; + --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace; + --font-weight-bolder: 800; + --font-weight-bold: 600; + --font-weight-medium: 500; + --font-weight-normal: 400; + --font-weight-light: 300; + --line-height: 1.5em; + + /* DITA-OT color scheme */ + + --brand-primary: #1d365d; + --body-color: #212529; + --link-color: #3563ab; + --link-hover-color: var(--brand-primary); + --code-color: #6c757d; + --pre-bg: #f5f5f5; + --pre-border-color: #ccc; + --kbd-color: #555; + --table-borders: #dee2e6; + --headings-color: var(--brand-primary); +} + +/**************************************** +Basic fonts and typography +****************************************/ + +/* ↓ header-coderef ↓ */ +.header { + margin-bottom: 1rem; + padding: 0 12px; +} + +.header p { + color: var(--headings-color); + font-size: 1.5rem; + margin: 0 0 16px; +} + +.header hr { + border: 0; + border-bottom: 1px solid var(--secondary-light); + height: 0; +} +/* ↑ end-header-ref ↑ */ + +.shortdesc { + color: var(--code-color); + font-size: 1.25rem; + font-weight: var(--font-weight-light); +} + +.context, +.p { + font-size: 1rem; + line-height: var(--line-height); + margin: 1rem 0; + max-width: 80ch; +} + +/**************************************** +Code typography +****************************************/ + +code, +pre, +samp, +.cmdname, +.codeph, +.filepath, +.msgnum, +.option, +.parmname, +.varname { + color: var(--code-color); + font-family: var(--font-family-monospace); + font-size: 0.9375em; +} + +.filepath .varname { + font-size: 0.9375rem; +} + +.codeblock .cmdname, +.codeblock .filepath, +.codeblock .msgnum, +.codeblock .option, +.codeblock .parmname, +.codeblock .varname, +pre code samp, +pre code { + font-size: 0.8125rem; +} + +.syntaxdiagram { + color: var(--code-color); +} + +.syntaxdiagram blockquote { + background-color: var(--pre-bg); + border: 1px solid var(--pre-border-color); + border-radius: 4px; + font-size: 0.8125rem; + line-height: 1.5rem; + margin: 1rem; + padding: 0.5rem 0.75rem; +} + +.syntaxdiagram blockquote::before { + content: ''; +} + +.syntaxdiagram kbd { + background: none; + border: 0; + color: var(--code-color); + padding: 0; +} + +.syntaxdiagram code, +.syntaxdiagram kbd, +.syntaxdiagram pre, +.syntaxdiagram samp, +.syntaxdiagram var, +.syntaxdiagram .cmdname, +.syntaxdiagram .codeph, +.syntaxdiagram .filepath, +.syntaxdiagram .msgnum, +.syntaxdiagram .option, +.syntaxdiagram .parmname, +.syntaxdiagram .varname { + color: var(--code-color); + font-family: var(--font-family-monospace); + font-size: 0.8125rem; +} + +/**************************************** +Headings +****************************************/ + +h1, +h2, +h3 { + margin-bottom: 0.75em; + margin-left: 0; + margin-right: 0; + margin-top: 1em; + padding: 0; +} + +h1 .cmdname, +h1 .filepath, +h2 .filepath, +h3 .filepath { + font-size: 0.9em; + font-weight: var(--font-weight-bold); +} + +h1 .filepath { + color: var(--brand-primary); +} + +h1 .codeph, +h2 code, +h2 .codeph { + font-size: inherit; +} + +.small.text-muted { + color: var(--code-color); + font-size: 0.8125em; +} + +.sectiontitle { + color: var(--brand-primary); + font-size: 2rem; + font-weight: var(--font-weight-medium); +} + +.topictitle1 { + font-size: 2.5rem; + font-weight: var(--font-weight-medium); + margin-top: 1.1rem; +} + +.topictitle2 { + font-size: 2rem; + font-weight: var(--font-weight-medium); +} + +/**************************************** +Basic indentation, padding, and margins +****************************************/ + +@media screen and (min-width: 992px) { + main { + margin-left: 300px; + } +} + +/**************************************** +Block elements +****************************************/ + +.codeblock, +.screen { + background-color: var(--pre-bg); + border: 1px solid var(--pre-border-color); + border-radius: 4px; +} + +/**************************************** +In-line elements +****************************************/ + +.cmdname, +.msgnum { + font-weight: var(--font-weight-bold); +} + +/**************************************** +Links +****************************************/ + +.related-links { + color: var(--code-color); +} + +.related-links strong a { + font-weight: var(--font-weight-bold); +} + +.linklist { + margin-top: 1em; +} + +/**************************************** +Notes +****************************************/ + +.note { + line-height: var(--line-height); + margin-left: 1rem; + margin-right: 1rem; + padding: 0; +} + +.caution { + font-weight: var(--font-weight-bold); +} + +/**************************************** +Tables +****************************************/ + +table, +.table { + border-bottom: 1px solid var(--secondary-light); + border-top: 1px solid var(--secondary-light); + font-size: 0.9rem; + margin-bottom: 1rem; + margin-top: 1rem; + padding: 0.5rem; +} + +.frame-all, +.frame-topbot { + border-bottom: 1px solid var(--secondary-light); + border-top: 1px solid var(--secondary-light); +} + +.stentry, +.rowsep-1, +thead, +tr { + border-bottom-color: var(--secondary-light); +} + +.chhead, +.sthead { + border-top-color: var(--secondary-light); +} + +.stentry { + border-right: 0; +} + +th { /* stylelint-disable-line no-duplicate-selectors -- Override almond.css */ + text-align: left; +} + +caption, +figcaption { + color: var(--code-color); + font-style: italic; + text-align: left; +} + +table caption { + padding-bottom: 1rem; +} + +caption code, +figcaption code, +figcaption .filepath { + font-size: 0.875rem; +} + +table code, +table pre, +table samp, +table .cmdname, +table .codeph, +table .filepath, +table .msgnum, +table .option, +table .parmname, +table .varname { + color: var(--code-color); + font-family: var(--font-family-monospace); + font-size: 0.875rem; +} + +/**************************************** +Navigation +****************************************/ + +/* ↓ nav-coderef ↓ */ +/* Style ToC nav as sidebar on desktop */ +@media screen and (min-width: 992px) { + nav.toc { + float: left; + width: 300px; + } +} + +nav.toc li.active > a { + font-weight: var(--font-weight-bold); +} +/* ↑ end-nav-ref ↑ */ + +nav.toc > ul { + margin-left: -0.4rem; + margin-right: 2rem; +} + +nav.toc > ul li { + line-height: 1.25rem; +} + +/**************************************** +Glossary +****************************************/ + +.glossAbbreviation, +.glossAcronym { + color: var(--code-color); + font-size: 0.9rem; + font-style: italic; + font-weight: var(--font-weight-bold); + margin-left: 1rem; +} + +.glossAbbreviation::before, +.glossAcronym::before { + content: 'Abbreviation: “'; +} + +.glossAbbreviation::after, +.glossAcronym::after { + content: '”'; +} + +.glossdef { + line-height: 1.5rem; +} + +/**************************************** +Video link icons for DITA-OT Day talks +****************************************/ + +/* Append video icon to DITA-OT Day links in related links and link lists (but not in page footers) */ +a.link[href*='dita-ot_day']::after, +.link a[href*='dita-ot_day']::after { + background-image: url('data:image/svg+xml;utf8,'); + background-position: bottom; + background-repeat: no-repeat; + background-size: contain; + content: '    '; + display: inline; + margin-left: 6px; +} diff --git a/resources/ditaotdaykeys/all-conferences.ditaval b/resources/ditaotdaykeys/all-conferences.ditaval new file mode 100644 index 0000000..bf89e89 --- /dev/null +++ b/resources/ditaotdaykeys/all-conferences.ditaval @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/ditaotdaykeys/dita-ot-day-2014-keys.ditamap b/resources/ditaotdaykeys/dita-ot-day-2014-keys.ditamap new file mode 100644 index 0000000..fac0b41 --- /dev/null +++ b/resources/ditaotdaykeys/dita-ot-day-2014-keys.ditamap @@ -0,0 +1,191 @@ + + + + + + DITA-OT Day 2014 + + + Quo vadis? + Discussion about the present and the future of the DITA-OT project. + Panel moderated by George Bina + + + + + Providing Designers a Flexible Way to Publish DITA Content into Adobe InDesign + This presentation shows how Mekon have implemented a plugin that provides an approach to publishing + into InDesign, providing designers the flexibility they require. + Mark Poston + + + + + Publishing DITA Content Re-Used in Different Context in EPUB and Eclipse Infocenter by Using + DITA-OT + On the example of ice hockey rule books, we show how easy content can be re-used by creating new + context variants and how it can be published to EPUB or into an Eclipse help infocenter. + Gunthilde Sohn + + + + + SCORM Wrapper for DITA to SCORM + Hal Trent of Comtech will present a SCORM wrapper developed for learning and training output, which + could be potentially donated to the DITA-OT. The wrapper incorporates the current DITA to SCORM output and adds + a layer of JavaScript with the SCORM API to integrate the output generated from the DITA-OT into an LMS. The + wrapper passes test completion status to and from the LMS and provides a much needed output for the learning and + training implementation. + Hal Trent + + + + + DITA Open Toolkit PDF Generation with CSS + How about producing and styling PDFs only by using CSS? Join Radu for an overview of a new, innovative, + open-source DITA-OT plugin, which produces PDF from DITA content using CSS and an XML+CSS to PDF engine such as + the Prince XML or Antenna House engines. + Radu Coravu + + + + + DITA Open Toolkit PDF Plugins Without Fuss, Muss, or Writing XSL-FO + Did you know that you can create customized PDF plugins using an easy online tool? Join Jarno for an + overview of his plugin generator, what it produces, and his work developing the dynamic Web + interface. + Jarno Elovirta + + + + + PDFs from the DITA Open Toolkit: The Easy and the Not-so-Easy + With a few simple changes, it's possible to give the DITA-OT's default PDF output much of your own look + and feel. If you need to develop a DITA proof of concept for your organization, these changes might be all you + need to get the ball rolling. Join Leigh to find out what's easy to do, what's not quite so easy to do, and + where the real heavy lifting is. + Leigh White + + + + + dita2rdf: from trees to triples + The dita2rdf plugin is meant to extract metadata from DITA content and produce an RDF/XML output, which + is a serialization of the W3C RDF standard. The final objective is to get insights from the DITA content by + querying its metadata as a graph, not as a tree-like in XML. It also potentially enables the connection of the + DITA metadata with other types of entities such as products, people, events, etc. + Colin Maudry + + + + + Extending the DITA Open Toolkit: How crazy can you get? + DITA-OT includes extension points that let you do any number of things. This session will cover what's + available, what you should or shouldn't extend, and give out sample plugins to slice and dice your + content. + Robert Anderson + + + + + RNG to DTD and XSD using the DITA Open Toolkit + The new version of DITA, version 1.3, will use Relax NG as the normative grammar to express the DITA + content models. George proposed this idea and provided a working prototype under the DITA-NG open source project + and Eliot took this further making it an official proposal for DITA 1.3 and finalized its implementation. See + how Relax NG simplifies the way DITA content models and specializations are defined and what other benefits it + brings to DITA 1.3. + Eliot Kimber + + + + + Contributing to the Toolkit via GitHub + Now that the toolkit is hosted on GitHub, it's easier than ever to contribute changes to the DITA-OT + code. Roger will demonstrate how to fork the repository, create a new branch, change the necessary files and + submit a pull request. + Roger Fienhold Sheen + + + + + Looking under the hood of the DITA Open Toolkit + Participate in a deeper, more technical dive with the primary DITA-OT developer. This session will + cover the pre-processing architecture of the DITA-OT and information about the output + transformations. + Jarno Elovirta + + + + + Overview of the DITA Open Toolkit + Are you new to the DITA-OT? Come and get an overview of what it is, how it works, its history, and the + people involved. This will be an excellent start to DITA-OT day for novices. + Kristen James Eberlein + + + diff --git a/resources/ditaotdaykeys/dita-ot-day-2015-keys.ditamap b/resources/ditaotdaykeys/dita-ot-day-2015-keys.ditamap new file mode 100644 index 0000000..911ce4f --- /dev/null +++ b/resources/ditaotdaykeys/dita-ot-day-2015-keys.ditamap @@ -0,0 +1,238 @@ + + + + + + DITA-OT Day 2015 + + + DITA-OT documentation update + This talk provides an overview of recent changes to the DITA-OT documentation, points out open issues, + highlights ideas for future improvements, and closes with room for suggestions from the community and a call for + contributions. + Roger Fienhold Sheen + + + + + Multiple OT with Git + If you need to maintain multiple configurations of the OT for day-to-day or minute-by-minute changes + to the OT for different projects, clients, etc., you can use git to do it. There are some tricks and gotchas but + it does work. + Eliot Kimber + + + + + Selling DITA with demo data + Over a couple of years, the Gnostyx team has been preparing and refining a DITA Demonstration Data + Set. It's purpose is to provide members of the community a functionally realistic data set with which to + demonstrate DITA based applications. It was made available publicly in early 2015 and has since been adopted and + used by several members of the DITA Community. This talk is really a demonstration of some of the business use + cases that we use to convince business stakeholders that DITA demands serious attention. People will learn a + little about the DITA Demonstration Data Set and some of the sales pitches that they might want to use, and to + demonstrate, in the future. + Joe Gollner + + + + + Publishing with DITA-OT - the CMS perspective + Publishing from a CMS imposes specific requirements on the DITA-OT. We will review these requirements + while showing how IXIASOFT integrated the DITA-OT into their Output Generator. + Jean-François Ameye + + + + + Parameters annotations for DITA-OT plugins + Each DITA-OT plugin provides a set of parameters that can be configured to customize the publishing + process. As these need to be made available to users it is important to have an automated way of discovering + these parameters and additional information about them - what they represent, what values are possible, etc. + DITA-OT makes this possible by allowing parameters to be annotated. + Radu Coravu + + + + + How to run DITA-OT + There are multiples ways to run DITA-OT and some of them are good, some are bad, and some are just + plain ugly. This presentation goes through different interfaces to DITA-OT and when to use them. + Jarno Elovirta + + + + + Creating DITA-OT constraint/specialisation plugins + This presentation will address the problem of creating DITA constraints/specialisations to customize + DITA to meet your specific needs. We will identify a problem, create a Relax NG constraint/specialization to + solve it and convert that to DTD. All these will be packaged as a DITA-OT plugin. + Radu Coravu + + + + + DITA Community + The DITA Community GitHub organization serves as a general place for people to contribute DITA Open + Toolkit plugins and other DITA-related tools and utilities that are not maintained by DITA-OT or other projects. + This presentation provides an overview of the DITA Community organization, what's there today, and how you can + contribute. + Eliot Kimber + + + + + PDF5-ML Plug-in - features for practical use + Demonstrates the following features of PDF5-ML Multiple language in one documentConditional variable + & style definitionFree format cover pages + Toshihiko Makita + + + + + DITA-OT ... reloaded! + Professional writing can require several features that the present DITA-OT (2.1.1) has not implemented. + There are several expensive plugins available as commercial products to improve that situation. Helmut Scherzer + presents a match to highly professional DITA-OT extensions which contains a list of more than 20 new powerful + features to PDF2 – offered to become part of the public DITA-OT. + Helmut Scherzer + + + + + DITA-OT: Inside the black box + When creating a product, a good design is critical; in many cases, this rule applies not only to the + outside, but also to the parts inside that normal users will not see. Unfortunately, to those who looked, the + inner workings of the early toolkit seemed to have almost no design at all. In this session, we'll talk about + how Jarno has cleaned up the hidden inner workings of the toolkit -- and how everyone benefits from these + changes to things they might never see. + Jarno Elovirta + + + + + PDF generation with CSS + Presenting new updates made to the DITA-OT plugin which can now be used to generate PDF from DITA and + CSS using either Prince XML or Antenna House. + Radu Coravu + + + + + Markdown plugin + This talk introduces Jarno Elovirta’s DITA-OT Markdown plugins, which extend the DITA Open Toolkit so + you can use Markdown files directly in topic references and export existing DITA content in Markdown format for + use in other publishing systems. This makes it easier for people to contribute content to DITA publications, + enables mobile authoring workflows, facilitates review processes with less technical audiences and expands the + range of publishing options to workflows based on Markdown. + Roger Fienhold Sheen + + + + + Why "startcmd" is not your friend + The startcmd batch script made it possible for many to easily use DITA-OT, but whether you realize it + or not, it's no longer really necessary. I'll briefly explain where it came from, why it was always more of a + kludge than a Feature, and how better DITA-OT designs mean it's no longer needed. + Robert Anderson + + + + + DITA-OT Patterns and Anti-patterns + What might often seem like a good way to use or extend DITA-OT, but likely result in trouble later? + What is the alternative? This session will cover known traps that organizations have fallen into when using + DITA-OT, and suggest how to avoid those issues or (perhaps with difficulty) recover from the mistakes. The + session will leave time for discussion about other traps that audience members may have fallen into. + Robert Anderson + + + + + What's new in DITA-OT + What's new in DITA-OT? We'll cover major changes in both 2.1 and 2.2, with a focus on support for new + DITA 1.3 features. + Kristen James Eberlein + + + diff --git a/resources/ditaotdaykeys/dita-ot-day-2016-keys.ditamap b/resources/ditaotdaykeys/dita-ot-day-2016-keys.ditamap new file mode 100644 index 0000000..9b064da --- /dev/null +++ b/resources/ditaotdaykeys/dita-ot-day-2016-keys.ditamap @@ -0,0 +1,221 @@ + + + + + + DITA-OT Day 2016 + + + Panel + + Robert Anderson + + + + + Long term DITA-OT planning + Kris and Robert will discuss the long term future of DITA-OT: what can we all do to ensure the + continued health of this critical piece of the overall DITA infrastructure? + Kristen Eberlein + + + + + The use-cases for a "DITA to resolved DITA" transformation + A DITA to simplified/resolved DITA transformation provides a solution for some of the possible issues + with translating DITA. There are also other advantages, especially in connection to the increased dynamics in + DITA-OT development. Join me to discover how a DITA to resolved DITA can help you! + George Bina + + + + + DITA terminology management and checking + I'd like to present how we manage and check terminology using the org.doctales.terminology + plugin. + Stefan Eike + + + + + Codeblock Quality Assurance instead of Errata + Fixing errors during authoring stage is cheap in both technical communication and software development; + fixing errors after publishing is expensive. In this talk I demonstrate a QA method for software documentation + in DITA. + Jarno Elovirta + + + + + Testing in DITA-OT + Jarno and Robert will discuss how the DITA-OT is tested, get feedback and talk about where we want to + go. + Jarno Elovirta, Robert Anderson + + + + + Large Scale Production Using Project Maps + This presentation will show how SAP has integrated the DITA Open Toolkit to create a large scale + production infrastructure able to create daily builds producing 50 000+ outputs for all SAP Product + documentation. This covers the end-to-end process from getting the DITA content from the CMS to publishing the + produced outputs to the appropriate delivery channels, using so-called project maps as a key ingredient. + Advanced features like peer linking across outputs will be shown, as part of the overall implementation. + Youssef BENNANI + + + + + Using the Open Toolkit Through Docker Containers + Docker containers make it easy to package and use different configurations of software components. + Docker containers can also provide the dependencies needed to run a given piece of software. For the Open + Toolkit, you can use Docker containers to easily provision and run the Open Toolkit without worrying about the + local Java configuration or other dependencies. Docker also makes it easy to set up custom configurations of the + Open Toolkit or use different versions. This presentation shows how to use Docker-based Open Toolkit + packages. + Eliot Kimber + + + + + Gotcha! Upgrading PDF plugins to DITA-OT 2.x + There are some significant changes to DITA-OT 2.x that can make upgrading PDF plugins written for + earlier versions of the OT a challenge. Having just upgraded several plugins, and released a new edition of + "DITA For Print," Leigh will share a few of the major things to look out for. + Leigh White + + + + + Documentation Development(s) + This talk provides an overview of recent changes to the DITA-OT documentation, points out open issues, + highlights ideas for future improvements, and closes with room for suggestions from the community, a call for + contributions and a brief demonstration of the pull request approval process that is applied when people submit + changes to the development documentation via the /Edit this Page/ links. + Roger Fienhold Sheen + + + + + Simplified contribution process for the DITA-OT documentation + Now it is very easy to contribute to the DITA-OT documentation - just read the developer docs and use + the "Edit" button to open the source topic from GitHub for editing. Save will automate all the contribution + process, sending a pull request with your proposed changes. + George Bina + + + + + DITA-OT internals and future development plans + The internals of DITA-OT are in perpetual motion and most of these changes are not visible to end + users. In this talk we go through changes in the black box and describe future development plans. + Jarno Elovirta + + + + + Seven open-source DITA-OT plugins developed by Oxygen + This session shows 7 DITA Open Toolkit open source plugins that the developers of Oxygen XML have + created or updated this year including: DITA + CSS = PDF - This pre-existing plugin now was updated to add + support for showing Oxygen track changes and comments. DITA Classic PDF Review - This plugin adds support for + showing Oxygen track changes and comments in the classic PDF output. Media Support Plugin - Plugin which adds + the possibility to embed videos (including YouTube videos) and audio resources in DITA topics and publish to + HTML and PDF. DITA Merged - Plugin which produces a single merged XML file from the entire DITA content. DITA + Relax NG Defaults - Plugin which adds support to a DITA-OT distribution to process Relax NG-based topics and + maps. + Radu Coravu + + + + + Internationalization and the DITA-OT: Who does what? + While tools can be used to simplify many things, localization can still be scary. In this session, + we'll go over how the toolkit is set up to handle publishing in multiple languages: what comes out of the box? + What should you expect to do on your own? And how has this changed over the last few releases? Also: stories of + panic from the past! + Robert Anderson + + + + + New DITA-OT 2.4 Release Announcement + + Robert Anderson + + + diff --git a/resources/ditaotdaykeys/dita-ot-day-2017-keys.ditamap b/resources/ditaotdaykeys/dita-ot-day-2017-keys.ditamap new file mode 100644 index 0000000..14daa20 --- /dev/null +++ b/resources/ditaotdaykeys/dita-ot-day-2017-keys.ditamap @@ -0,0 +1,226 @@ + + + + + + DITA-OT Day 2017 + + + Panel: What's next for DITA-OT? + + Jarno Elovirta, Robert Anderson, Roger Fienhold Sheen, George Bina + + + + + What are we missing? Where would you like to see us go? + This is a feedback session where we want to hear from you! One problem with DITA-OT development is that + we don't usually know what our customers like most, what they're using, and (almost as important) what they're + not using. It's also likely that in some cases, we're not sure what to ask. In this session we'll discuss + potential ways of getting this feedback, related issues such as data privacy, and ideally take suggestions from + the audience for improved communication. + Jarno Elovirta and Robert Anderson + + + + + DCQL - the Dita Cascading Query Language + Short overview of the DCQL attribute domain and accompanying code that allows pulling DITA content in + from SQL or XML databases at publish time or runtime, and even keeping the data link alive on interactive media. + Jang Graat + + + + + Locale-Aware Sorting and Text Handling in the Open Toolkit + Presents the DITA Community i18n Plugin, which provides an integration with the ICU4J libraries. The + i18n plugin provides support for locale-specific grouping and sorting, including dictionary-based Simplified + Chinese, as well as facilities for doing locale-specific word and line breaking. + Eliot Kimber + + + + + Automatically Create Targeted Review Docs for your SMEs + This presentation illustrates how an OT plugin can leverage CMS status information to create a PDF for + review that includes only the content SMEs need to look at, or alternatively, include everything for full + context but highlight the specific content that needs reviewing. This presentation demonstrates how to quickly + create a PDF that includes material for a specific reviewer, and how to create a PDF intended for multiple + reviewers with their names assigned to each topic. + Leigh White + + + + + Bootstrapping DITA - Customizing HTML output for modern web frameworks + Web developers often use CSS frameworks, HTML5 boilerplate or component libraries like Bootstrap or + Foundation to quickly build robust, responsive sites. With custom HTML plug-ins, DITA-OT can be extended to + produce HTML5 output that makes use of these common templates so that generated documents can build on existing + front-end solutions. This talk will outline the process, using the DITA-OT project website at dita-ot.org as an + example. + Roger Fienhold Sheen + + + + + Using CSS to style the PDF output + Using CSS to produce PDF from DITA content is way easier than writing plugins and customizing XSLT + stylesheet and will probably become in the future the most used way to produce a PDF. We will go over the + existing solutions for producing PDF from DITA using CSS and maybe try to show a little bit of the CSS + pagination standard: change the front matter and backmatter, change headers and footers, change some colors and + styles, change the paper type and orientation. + Radu Coravu + + + + + Markdown support inside-out + Description of how Markdown support was added to DITA-OT to make Markdown a first-class file format for + DITA content. Focus is on the implementation details and goals instead of Markdown author + perspective. + Jarno Elovirta + + + + + DITA-OT Docs Development(s) + This talk provides an overview of DITA-OT documentation usage metrics and highlights recent changes to + the docs and ideas for future improvements. We’ll close with room for suggestions from the community and a call + for contributions with information on the browser-based workflow for suggesting changes. + Roger Fienhold Sheen + + + + + Managing a large scale build environment with 50+ custom plugins + Tips and tricks, mistakes made, and lessons learned: how IBM manages a single build environment for + hundreds of authors with 50+ plugins -- including new doctypes, new transform types, and externally contributed + plugins -- while keeping up with the latest DITA-OT releases. + Robert Anderson + + + + + Generating SVG syntax diagrams with plugins for all output formats + DITA includes a lot of markup for syntax diagrams, but it's not particularly useful without a way to + render the diagrams. Many years ago Deborah Pickett wrote a group of plugins to render those diagrams as SVG, + but they were tied to the "html+" transform type and required an obsolete version of DITA-OT. Last year IBM + extracted the SVG diagram feature from those plugins, brought it up to date, and made it usable by other formats + (including PDF and EPUB). This session will give an overview of Deborah's original plugins, and explain how + anybody can use the updated versions with the latest DITA-OT. + Robert Anderson + + + + + DITA Validation and spell-checking + Jason will discuss and demonstrate how HERE Technologies extends DITA-OT using open-sourced plugins to + continuously validate and build technical documentation. See: https://github.com/heremaps/dita-ot-plugins for + more details. The discussion will cover the design and evolution of the plugins, interaction with end users and + how you can integrate the plugins in your own workflows, as well as expected future developments. + Jason Fox + + + + + Accessibility in DITA-OT + Not only is accessible content often mandatory, it's also just a good idea -- assuming you want your + content available to as many readers as possible. This session provides an overview of the accessibility + features in output generated by the DITA-OT. While many features are automated thanks to the semantic nature of + DITA elements, others rely on you to make sure your content includes everything it needs to. While going over + these features, we will explain how DITA-OT handles your content, while also giving tips for how to ensure your + content reaches users on all sorts of devices. + Robert Anderson + + + + + We shall call it preprocess2 + Overview of preprocess2, the replacement module for the original preprocessing routines. This session + explains the new approach, why we developed it, and why should you care. + Jarno Elovirta + + + + + DITA-OT + A quick announcement about the DITA-OT project. + Robert Anderson + + + diff --git a/resources/ditaotdaykeys/dita-ot-day-2018-keys.ditamap b/resources/ditaotdaykeys/dita-ot-day-2018-keys.ditamap new file mode 100644 index 0000000..e87f653 --- /dev/null +++ b/resources/ditaotdaykeys/dita-ot-day-2018-keys.ditamap @@ -0,0 +1,260 @@ + + + + + + DITA-OT Day 2018 + + + What's next for DITA-OT? + + Robert Anderson, Roger Sheen, Jarno Elovirta, George Bina + + + + + Who are you calling “stale” ‽ + The DITA-OT issue tracker contains a backlog of open issues, many of which have not been updated in + several years, and may no longer apply to recent versions. This session will discuss options for removing + outdated issues from the backlog to help focus resources on issues that are most important to users. + Robert Anderson, Roger Sheen, Jarno Elovirta + + + + + Twisted XSLT Tricks: Making Column Switching Work for FOP + Switching from single column to two-column layout is almost impossible using the PDF2 transform and FOP + because FOP enforces XSL-FO's rule that only direct children of fo:flow can change the column spanning. + Likewise, splitting page sequences to change from portrait to landscape is hard to do with the PDF2 transform + because it provides no easy way to change the page sequence within the context of a topic's body (e.g., to put + rotated tables on landscape pages). This talk presents a general XSLT technique for splitting a single tree into + multiple trees, enabling changing column spanning and splitting page sequences with a minimum of rework of + normal templates. + Eliot Kimber + + + + + DITA-OT and DocOps + Developing documentation concurrent with the software using DITA-OT in VSTS environment at + Shell. + Quick van Rijt + + + + + Validation meets publication - Apply your style guide rules during the publication + DITA-OT warns about technical issues in the input. Why not warn about style guide violations? This talk + shows how Schematron can be used to check topics and maps after the preprocessing phase and stop the build if + content does not pass the defined quality gates. + Stefan Eike + + + + + A fast path for building data assets from DITA + Structured content can save the day when product complexity gets in the way. Let's see how DITA content + fits into an external database using the org.dita.normalize transformation as base. DITA-OT can be packaged in + different ways to prepare dev/test environment setups for IT and developer contributors. + François Violette + + + + + Overview of dita-semia open-source plugins for DITA-OT + I have created some DITA-OT plugins that are available as open-source (github.com/dita-semia). And I'd + like to give an overview of them: 1) postprocessing: Zip the output or set the pdf filename dynamically + depending on some content. 2) topic-num: Add numbers to topics, figures and tables (especially for HTML output). + 3) image-convert: Convert images for compatibility (e.g. SVG to PNG for HTML output). 4) pdf: Yet another pdf + layout working with FOP. 5) diff: Compare two versions of a document and highlight the differences.resolver: + Resolve custom attributes (usually set as defaults be the schema) to standard DITA content, e.g. by applying an + XSLT transformation to some content, add static text content or resolve identifiers to cross + references. + Patrik Stellmann + + + + + Unit Testing DITA-OT Plugin Extensions + I have created a Unit Testing Framework for DITA-OT Plugins + https://github.com/jason-fox/fox.jason.unit-test - This is a DITA-OT Plugin to test DITA-OT Plugins. The + complete functionality would include HTML and command line test results, ANT script profiling, XSL template code + coverage, e automated CI testing - integration with Travis, and how to write maintainable tests swiftly and + painlessly. + Jason Fox + + + + + Step by step implementation of a DITA Open Toolkit plugin + There are lots of DITA-OT extension points, maybe list some of the most common ones, then based on 3-4 + use cases implement small plugins which use those extension points. For example: a plugin which changes the + default label value for "Note"; a plugin which adds an XHTML customization matching a DITA element with a + certain status attribute value and producing a certain HTML span; a plugin which customizes the + PDF processing in some way; a plugin which adds a specialization DTD with an XML catalog + Radu Coravu + + + + + Meta DITA samples: testing around the edge cases + Over the past few years I've developed a number of test cases that are exhaustive but on very specific + features. The sample files are not well suited for automated testing, but can often be used to manually test + custom plugins. In this lightning talk, I'll describe the samples that exist today, and also solicit feedback on + other similar test sets that might prove useful. + Robert Anderson + + + + + Plug-in installation made easier + Description and a demo of the new DITA-OT plug-in repository. + Jarno Elovirta + + + + + Installing DITA-OT on macOS via Homebrew + A new alternative installation method can now be used to install DITA-OT on macOS via the platform's + most popular open-source package manager. This talk explains the benefits of this approach, highlights key + differences to the default installation via .zip archive and demonstrates the new installation + process. + Roger Sheen + + + + + Comparison between the DocBook and DITA publishing systems + Let's compare side by side look at how the Docbook and DITA publishing systems work. This could give us + some ideas about future directions for DITA publishing. The presentation could be structured like this: Main + target audiences for Docbook and DITA vocabularies. Maybe initially discuss a little the Docbook and DITA + vocabularies, the ways in which Docbook handled new versions, how DITA tried to have all versions backward + compatible, the choice not to have a namespace for DITA elements. Show how Docbook solved the problem with + supporting both Docbook 4 and Docbook 5 standards. The Docbook @version attribute. 1) Pure XSLT-based processing + versus the melange of ANT + Java + XSLT which is the DITA Open Toolkit. How parameters can be discovered and + set. Also discuss how many parameters are available by default to be set for Docbook. Maybe ask people if they + want more params available by default for DITA processing. Show some examples with how a simple XSLT + customization for the HTML output can be accomplished in both systems. Also discuss disadvantages of pure XSLT + based publishing approaches, impossibility of copying resources (images for example) to an output folder for + example. 2) Adding new elements/attributes to Docbook and DITA. If you change Docbook in any way, it can no + longer be named Docbook 3) User's guides. A very decent user's manual structured a bit like a tutorial binding + together the Docbook specs, extending the vocabulary + publishing part:. The DITA-OT documentation only contains + documentation about the publishing part. 4) Profiling (filtering content). For example Docbook allows you to + filter content based on any attribute (even on xml:lang). 5) Discuss new ideas to be implemented in DITA, after + they were originally used in the DocBook publishing system:a) Index pages creating when using Apache FOP b) The + Docbook WebHelp project (Javascript-based search). c) Syntax highlight in code blocks d) Olinks (linking between + publications) e) You can add xlink:href on any Docbook element converting it to a link. f) Custom Processing + instructions which can change the publishing. + Radu Coravu + + + + + DITA, Gradle and Git: a small team approach to publishing + At L-Acoustics we adopted an open source toolchain to automate our publishing process. With the CI + capabilities of GitLab and the dita-ot-gradle and saxon-gradle plugins developed by Eero Helenius, we have + created a comprehensive publishing solution suited to the needs of our small teams. One important feature of our + system is the handling of DITA-OT plugin dependencies. This architecture has facilitated the use of DITA by our + SMEs and marketing writers since from their point of view they just have to produce content and the output + "magically" appears. + Lionel Moizeau + + + + + DITA-OT Website Survey Results + This session presents the results of a survey of www.dita-ot.org website users conducted in summer + 2018. Topic areas included user happiness with the current website, how often and how the site is used, in what + formats users desire the DITA-OT documentation, etc. + Lief Erickson + + + + + Highlights in recent DITA-OT versions + The core developers present an overview of the changes in DITA Open Toolkit within the past year and + highlight new features that may be of particular interest to users. + Robert Anderson/Jarno Elovirta + + + diff --git a/resources/ditaotdaykeys/dita-ot-day-2019-keys.ditamap b/resources/ditaotdaykeys/dita-ot-day-2019-keys.ditamap new file mode 100644 index 0000000..8d4c928 --- /dev/null +++ b/resources/ditaotdaykeys/dita-ot-day-2019-keys.ditamap @@ -0,0 +1,225 @@ + + + + + + DITA-OT Day 2019 + + + DITA-OT Shop Talk + Join us for an inside view of the DITA Open Toolkit project workshop: Who’s on duty; what’s on the + workbench; shavings, chips, and sawdust on the cutting room floor; management negotiations with union + representatives; annual guild membership drive, and a few ideas for what comes next. + Robert Anderson, Roger Sheen, Jarno Elovirta, George Bina + + + + + Easy as pie PDF customizations using CSS + CSS can be used to produce quality PDF and using CSS to style the PDF output is much easier than using + XSLT stylesheets. We'll explore various scenarios (changing fonts, changing the paper size, rotating pages, + flagging content) and see how easily this can be done using CSS. + Radu Coravu + + + + + Generating metrics from your DITA project + The DITA Map Metrics Report plugin can be used to generate all kinds of interesting metrics from your + DITA project. We'll explore what the plugin can offer and then use the plugin to build graphics which show + metrics evolve between various versions of the user's manual. + Radu Coravu + + + + + Case Study of Taxonomy and Search for DITA-OT + The DITA-OT website was the case study organization for my master's thesis. In this session we'll talk + about what data and metrics influenced the taxonomy used to create the index, how Subject Scheme is used to + control @outputclass values, how Algolia DocSearch is causing findability problems, and recommendations for + improvements. + Lief Erickson + + + + + Documentation Developments + This talk provides an overview of recent changes to the DITA-OT documentation and project website, + points out open issues, highlights ideas for future improvements, and closes with room for suggestions from the + community and a call for contributions. + Roger Fienhold Sheen + + + + + The Art of doing nothing + Standard DITA-OT pre-processing assumes that all input files are of a processable format (e.g. DITA + topics, lwDITA, hDITA etc). This session demonstrates the use of a series of DITA-OT pass-through plugins, which + avoid DITA-OT pre-processing and extend possible input formats for chapters and topics to a wider range of + standard documentation formats used by developers and non-technical experts (e.g. Word documents, Swagger + specifications, Postman collections etc.):1) fox.jason.passthrough, 2) fox.jason.passthrough.pandoc, 3) + fox.jason.passthrough.swagger + Jason Fox + + + + + All the cool kids are using the Cloud + Demonstration of two new DITA-OT transforms showing how to create novel XML-based intermediate outputs + and consume cloud-based services. The two new transforms cover DITA-to-speech and intelligent natural language + translation of text based on semantic DITA markup:1) fox.jason.audiobook, 2) + fox.jason.translate.xliff + Jason Fox + + + + + All the cool kids are using JavaScript + Demonstration of a series of DITA-OT plugins combining the use of JavaScript with ANT and XSLT. An + architectural discussion on how to design, test and integrate JavaScript-based functions within DITA-OT Plugins + and how to split the code between different programming languages and appropriate use of extension points. The + plugins include a syntax-highlighter and a DITA prettifier:1) fox.jason.splash, 2) fox.jason.prismjs, 3) + fox.jason.readthedocs, 4) fox.jason.pretty-dita + Jason Fox + + + + + Editing DITA Open Toolkit Project files + DITA Open Toolkit project files can store the entire set of main DITA Maps, output formats and + parameters necessary for publishing your DITA project. We'll explore how an XML editing tool can provide + editing, validation and publishing support for the project file. + George Bina + + + + + One file to rule them all (DITA Project) + DITA-OT 3.4 introduces support for project files to define reusable input context and publications. We + discuss why the feature was developed, how to use them and in the darkness bind them. + Jarno Elovirta + + + + + AH-WML DITA-to-Word Plug-in + AH-WML is a DITA-OT plug-in that generates Microsoft Word Document (.docx) from DITA contents. It is a + work in progress, but it already supports multiple image formats (GIF, PNG, JPEG, TIFF, EMF, SVG (Word 2016 or + later)), CALS table rendering, and several standard DITA elements (<p>, <ul>, <ol>, + <dl>, <pre>). + Tony Graham + + + + + Various useful Open source plugins to enhance DITA publishing + The DITA Open Toolkit publishing engine has support for plugins which can be installed to customize or + enhance the publishing process. In time Syncro Soft (the company which produces Oxygen XML Editor) has developed + and made open source lots of small plugins which can be installed in the publishing engine. I will be presenting + small examples in order to show case what each plugin in the Oxygen XML GitHub organization does and maybe give + you ideas about how you could use these open source plugins on your side. + Radu Coravu + + + + + Running on someone else’s computer + Description and demo of how to deploy DITA-OT on AWS, using Batch, Lambda, DynamoDB, and API Gateway + to run the process and orchestrate the deployment with CDK. + Jarno Elovirta + + + + + Trim your toolkit with this one weird trick! + DITA-OT has now been under development for over fifteen years. If you started customizing DITA-OT with + the first release to support plug-ins, even those plug-ins could be over a decade old. So what should we all be + doing to keep our tools clean? In this session, we will talk about how DITA-OT has grown: a brief history of how + we got where we are, past efforts to handle technical debt, what we all might do to help make it easier to + manage (or get rid of) that debt. + Robert Anderson + + + + + News and Announcements + + DITA-OT Day team + + + diff --git a/resources/ditaotdaykeys/dita-ot-day-2022-keys.ditamap b/resources/ditaotdaykeys/dita-ot-day-2022-keys.ditamap new file mode 100644 index 0000000..809e7ef --- /dev/null +++ b/resources/ditaotdaykeys/dita-ot-day-2022-keys.ditamap @@ -0,0 +1,213 @@ + + + + + DITA-OT Day 2022 + + + DITA HTML Styling via Bootstrap 5 + A code walkthrough of the updated html-bootstrap plugin demonstrating newly supported + components and accessibility options, and discussing the challenges of mapping DITA to structured HTML using XSL + transforms. + Jason Fox + + + + + Our experience helping the DITA-OT project as a commercial company - Radu Coravu + I will cover the various ways in which Oxygen XML Editor tries to help the DITA Open Toolkit project + (by adding issues, opening pull requests, adding documentation issues, helping people with DITA OT related + questions on various channels, attending in the DITA OT meetings and sponsoring the DITA OT Day events). + Radu Coravu + + + + + Supercharging DITA-OT Webhelp creation + DITA is all about reuse, but when it comes to publishing, none of the existing output makes it into + the new publication. In this lightning talk, I will demonstrate how Webhelp (or any HTML-based) output creation + can be made 1000 times faster by only recompiling the DITA files that have changed. Using technology that + existed even before the birth of XML in a way that nobody has tried before. Conceptual talk, but including proof + of concept with fully working demo. Fasten your seatbelts before takeoff. + Jang Graat + + + + + Extending Doctales reveal.js with CSS Grid - Lief Erickson + The Doctales plugin creates web presentations using the reveal.js framework. By default the reveal + framework does not support CSS Grid or viewport overflow. I'll cover how I extended the XSLT in a new plugin and + added a new theme with CSS grid and other features using SCSS. + Lief Erickson + + + + + Pushing square pegs into round holes + Topic based structured writing doesn’t require DITA or XML. It can be done with a pen and paper. What + is required, however, is a lot of discipline. What happens when people are sold an authoring format that allows + you to write DITA and that technology will not hold your hand and help you to stick to the rules and guidelines? + A description of what happens in one DITA processor when it’s given something that is not DITA but the user + really, really wants it to work. + Jarno Elovirta + + + + + Various DITA publishing ideas experimented on the Oxygen XML Blog - Radu Coravu + I will discuss about various articles we wrote on the Oxygen XML Blog in the last years about various + ways to enhance DITA publishing: Generating Google Structured Data Generating content for the Google Chatbot + Converting OpenAPI to DITA content Showing consecutive codeblocks in separate tabs Generating an RSS feed + Tagging certain articles with labels Embedding diagrams in DITA content Creating Link Graphs From DITA Maps + Publishing DITA Content Using the MKDocs Web Site Generator and others. + Radu Coravu + + + + + Simpler custom PDFs - The technical details + Technical description of how the new theme plug-in processes theme files to produce PDF output. We go + through how code generation is used to produce XSLT templates that build on PDF2 processing and how that allows + us to produce PDFs without coding XSLT. No prior experience with PDF2 customization is required. + Jarno Elovirta + + + + + Simpler custom PDFs - The user perspective + Many tech writers find it hard to customize the DITA Open Toolkit’s default PDF output. Even + relatively minor adjustments require knowledge of XSLT, attribute sets, DITA-OT plug-ins, and a bit of research + to figure out what you need to change. What if there were an easier way? The DITA-OT project team has been + working on an alternative mechanism that can be used to configure basic formatting in a simple plain-text theme + file. This approach makes it easier to adjust page sizes, headers and footers, and various attributes for common + elements. While complex customizations would still require a custom plug-in, if you just need to tweak a few + font families and colors to approximate your company branding, this new alternative might be all you need. + Roger Sheen + + + + + Scaling the DITA Open Toolkit for Enterprise Use - Robert Anderson + Moderated discussion about scaling the DITA Open Toolkit for use in big companies. + Robert Anderson + + + + + DITA and Markdown and Docker, oh my… + Nokia’s Cloud and Network Services is one of three major business groups in Nokia, all of which use + DITA and DITA-OT for the great majority of customer-facing documentation. Unlike Nokia’s Mobile Networks or + Network Infrastructure groups, CNS focuses entirely on software for both cloud and core network solutions and + services. With the advent of co-authoring between DITA content from Technical Writers and Markdown content from + R&D developers, Lw-DITA and the Lw-DITA OT-plugin have now become key aspects of our documentation + ecosystem. The CNS User Assistance Tools team has implemented a dozen OT Plugins, and leverages Ant, Maven, Git, + and Jenkins plugins to support both local documentation builds on writers’ workstations as well as CI builds on + a server farm orchestrated by Kubernetes. By packaging our Maven, Ant, and DITA-OT customizations into separate + Docker layers, we're able to allow R&D pipelines to build the corresponding documentation during a software + build to support rapid CI/CD deployments going forward. With the generation of OT Project files by our pipeline, + we were able to further eliminate the need for some of our previous scaffolding. Local workstation builds are + facilitated by OxygenXML SDK plugins to marshal writer configuration info to OT. Unit testing of our OT + customizations is accomplished using a combination of XSpec, AntUnit and Jenkins. The next wave of OT plugins + will support OpenAPI3 conversion to DITA in a pre-process plugin and to Markdown. We will also be enriching our + content to better support modern presentation solutions, including the application of machine learning and + AI-assisted solutions. + John Kirkilis + + + + + Avoiding duplicate effort with post-preprocessing - Tim Grantham + If you have publishing requirements, such as custom styling or content restructuring, that applies to + multiple outputs (such as PDF and HTML), use post-preprocessing to restructure content before it heads further + down the pipeline. + Tim Grantham + + + + + Technical values - Stefan Jung + This talk shows how to single-source technical values in a complex environment with a product + information management system and how to convert it to various different formats on-the-fly. + Stefan Jung + + + + + Making the migration leap: jumping across versions to the latest DITA-OT - Robert D. Anderson + Many DITA-OT implementations are unable or unwilling to move off of obsolete versions. Some shops + continue to run version 1.8.5, released 8 years back (and 15 major versions behind the latest). Why is that the + case? What is preventing teams from moving to a more recent, full featured, and supported release? In this + session we will discuss what’s involved in moving off of older releases from 1.x, 2.x, and now early 3.x. Most + importantly, is it worth it? What would you get from upgrading? When you decide to move, should you go one + version at a time, or jump to the latest? Attendees who have gone through this migration in the last few years + are encouraged to discuss their experience; attendees who are still running older releases are likewise + encouraged to discuss their concerns or share any upgrade plans. + Robert D. Anderson + + + diff --git a/resources/ditaotdaykeys/dita-ot-day-2024-keys.ditamap b/resources/ditaotdaykeys/dita-ot-day-2024-keys.ditamap new file mode 100644 index 0000000..e6f053b --- /dev/null +++ b/resources/ditaotdaykeys/dita-ot-day-2024-keys.ditamap @@ -0,0 +1,312 @@ + + + + + DITA-OT Day 2024 + + + Search, Style and More - Extending DITA Bootstrap + The basic Bootstrap HTML provides a professional looking framework for DITA documents, however with a single extension point you can do so much more. A short presentation on adding Lunr Search, extending and customising the Bootstrap CSS and making additional modifications to the Bootstrap look-and-feel. + Jason Fox + + + + + Lessons Learned: Migrating DITA-OT For an IT Hardware Product +Documentation + The migration of DITA-OT poses unique challenges, particularly when applied to the context of IT hardware product documentation. The narrative explains the crucial decision-making processes, including the initial assessment of legacy documentation systems, the formulation of migration strategies, and the execution of the migration plan. Key focus areas include content reusability, metadata structuring, and adaptation of DITA-OT functionalities to cater specifically to the nuances of IT hardware documentation. Drawing from first-hand experiences, I will outline the technical challenges encountered during the migration process and innovative solutions and best practices adopted to overcome them. It addresses issues such as maintaining document integrity, preserving hyperlink structures, and ensuring seamless integration with existing IT infrastructure. + + Amit Siddhartha + + + + + Syntax Diagrams: If you can't avoid them... + Syntax diagrams belong to the kind of special-purpose documentation that +nobody really wants to deal with, the presenter included. This is a brief overview of +real-world challenges in general and how to represent syntax diagrams in DITA in particular. + Frank Wegmann + + + + + Using DITA Open Toolkit Project to Implement a Publishing Service +in a Commercial Application + Oxygen Content Fusion version 6 started using DITA Open Toolkit project +files to define publications and deliverables and then to publish based on the defined +deliverables using a publishing service. In this small talk I will present the usefulness of +the DITA OT project file when it comes to defining deliverables, publication parameters and +publishing in the Oxygen Content Fusion commercial application. + Radu Coravu + + + + + + + DITA-OT "How far can you go" + I will demonstrate a plugin, which adds functions to the DITA-OT that are +very useful in particular for industry and reseach. Out of many helpful extensions there are +mechanisms like "Auto-Bibliography Generation", "Auto-Image Sizing", Page Control (e.g. +"Landscape page in a flow of upright pages") and many more. All extensions are convertible +into DOCX, HTML and CHM. A full documentation is available for all implemented extensions. + Helmut Scherzer + + + + + PDF5-ML Plugin Update + An update on the features of the PDF5-ML Plugin, including details of the +new automated ability to show Oxygen change tracking and comments in PDF output. + Tony Graham + + + + + DITA-OT and ensuring DITA Map conversion + DeltaXML software were until now focused on comparing two XML documents of +same structure and similar data to identify the changes between them by considering the +structure. However, we recently started to look at the use case where there is a need to +compare XML documents with different structure but similar data. We came across some of +partners and customers who convert their documents from one form of XML to another which needs +a manual process to check if there were any errors or inconsistencies during the document +conversion. DeltaXML's new product, ConversionQA, understands different document formats such +DITA, Microsoft Word, etc and performs a comparison between original and converted document +provide a quality assurance report. ConversionQA makes use of the DITA-OT transformation to +process DITA Maps into a single DITA file for conversion checking process with another single +file format. We have used DITA-OT Java Application Programming Interface in product to process +DITA Maps as a part of overall workflow. The lightning the talk will focus on how we have +integrated DITA-OT in conversion. We will also discuss the issues we faced during DITA OT +integration and how they were resolved. + Tejas Pradip Barhate + + + + + DITA and Markdown Interoperability using new schema-provider +extension mechanism + In order to support a new DITA <topicmeta> specialization, we added +support for it in Markdown content by leveraging the new schema-provider mechanism to +customize Markdown parsing and transparent DITA conversion. + John Kirkilis + + + + + Publishing with iiRDS from DITA + iiRDS, the tekom standard for the standardized exchange and delivery of +technical documentation, has been on the market for a few years. We have demonstrated in the +past why an XML standard like DITA is a good fit. Coming in 2024, tekom is publising an OT +plugin that allows to generate iiRDS packages from standard DITA, based on the metadata that +you already have. After a brief introduction to iiRDS, you will learn how you can make use of +the plugin in your DITA environment. + Marion Knebel + + + + + DITA-OT plug-in for work instructions: Say goodbye to manual +summaries and hello to accuracy and efficiency! + We understand the importance of having a clear and concise summary at the +beginning of each work instruction. That's why we've developed a plug-in that automates the +creation of these summaries based on the information in the individual steps of the work +instruction. With our DITA-OT plug-in, content creators can now easily add the tools, +supplies, and spare parts in the individual steps of the work instruction, knowing that the +summary will always reflect the most up-to-date information. No more worrying about +inconsistencies or discrepancies between the summary and the steps! This plug-in not only +saves time for the writer but also ensures that mechanics in the workshops have access to +accurate and reliable information. + Pieterjan Vandenweghe + + + + + Deploying and Maintaining DITA OTs in an Enterprise +environment + For our clients, we support DITA OTs from 1.5.2 to 4.x. More advanced users +can maintain and update their own OTs while others are maintained by Ixiasoft. We will discuss +some of the challenges in in supporting DITA OTs in an enterprise environment. + Eric Sirois + + + + + Cheap and Easy Cross-Deliverable Link Implementation + ServiceNow uses cross-deliverable key references to author and publish +links between publications, primarily published through Zoomin (https://docs.servicenow.com). +We implemented this by generating "delivery keydef maps" from our root maps from the peer map +references in each root map. We then use a simple OT extension and XSLT transform to swap the +peer maprefs for references to the delivery keydef maps at build time. The delivery keydef +maps are managed in a dedicated git repository. + Eliot Kimber + + + + + From zero to DITA-OT hero – a story of a DITA-OT implementation in +a small documentation team + So you just got a new job as a technical writer in a modern, high-tech +company. They want to move away from MS Word documentation to a structured documentation but +have no idea how to do it and guess what – you are the person who will do it from beginning to +the end! The problem is you don’t even know how to start... You have been doing documentation +in Adobe InDesign and MS Word so far. You only heard about this DITA thing and heard it’s +quite cool but haven’t done any work with it. In addition, your teammate is about to retire +and you are soon to learn that the Internet is NOT full of easy-access information about +DITA-OT. Embark with me on this exciting journey of big successes and many challenges +in setting up a working environment to write and publish user documentation with DITA and +DITA-OT. A light-hearted view on learning DITA and DITA Open Toolkit from scratch +while trying to prove to your new employer that yes, structured documentation is the best +solution and it will bring cost savings. + Justyna Hietala + + + + + IBM Workflow Manager: an automated build environment + In this presentation, I will talk about what IBM has been doing the last 5 +years with DITA, and how we integrated the DITA-OT as the center piece of our automated build +system for technical documentation, called IBM Workflow Manager (WFM). WFM is a cloud based +solution meant to automatically build DITA files stored in GitHub (possibility from multiple +repositories), test Accessibility, and publish the outputs to their final location (either IBM +Documentation website at ibm.com/docs or other channel like Box or sFTP servers). It also +connects to communication channels like Slack to give real-time feedback on any failure that +might happen. Along with edit links based on Oxygen Web Author, it creates a 0 click user +experience where users can edit their documentation from their browser, and see the output +live a few minutes later. + Guillaume Delory + + + + + Documentation Developments + This talk provides an overview of recent changes to the DITA-OT +documentation and project website, points out open issues, highlights ideas for future +improvements, and closes with room for suggestions from the community and a call for +contributions. + Roger Sheen - Documentation Lead + + + + + Moving an HTML plugin to preprocess2: how scared should you +be? + Our custom HTML plugin includes several extension points that hook into the +old "preprocess" steps -- meaning that when the base code moves to "preprocess2", those +extensions are lost. In this session, I will talk about what was required to adopt the updated +model, what worked and didn't, how we re-integrated the old extensions, and how we went about +testing the changes. + Robert D. Anderson - DITA-OT Project Lead + + + + + Retrospective - DITA-OT improvements between 3.7 and 4.1 + Taking a look at what features, improvements and bug fixes were added +between DITA OT 3.7 and 4.1. + Jarno Elovirta - DITA-OT Main Developer + + + diff --git a/resources/expert.ditaval b/resources/expert.ditaval new file mode 100644 index 0000000..1bbddcb --- /dev/null +++ b/resources/expert.ditaval @@ -0,0 +1,6 @@ + + + + + + diff --git a/resources/extension-points.xsl b/resources/extension-points.xsl new file mode 100644 index 0000000..7ba289a --- /dev/null +++ b/resources/extension-points.xsl @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + Generated from plugin source, do not edit! + + All DITA-OT extension points + + All extension points + + The pre-defined extension points can be used to add new functionality to DITA-OT. If + your toolkit installation includes custom plug-ins that define additional extension points, you can add to this + list by rebuilding the DITA-OT documentation. + +
    +
    + + + +
    +
    +
    +
    +
    + + + + + + Writing extension-points-in-.dita + + Generated from plugin source, do not edit! + + + <xsl:text>Extension points in </xsl:text> + <codeph><xsl:value-of select="@id"/></codeph> + + + + + + + The plug-in provides extension points + to modify processing. + +
    +
    + + + +
    +
    +
    +
    +
    +
    +
    + + + + + + + deprecated + + + required + +
    + + + + + + + + extension points + + + + + + deprecated featuresextension points + + + + + +
    +
    + +
    +
    +
    + + + + + + deprecated + + + required + +
    + + + + + + + + extension points + + + + + + deprecated featuresextension points + + + + + +
    + +
    Defined in plug-in + + + . +
    +
    + + + + diff --git a/resources/external-links.ditamap b/resources/external-links.ditamap new file mode 100644 index 0000000..1134928 --- /dev/null +++ b/resources/external-links.ditamap @@ -0,0 +1,1114 @@ + + + + + External links + + + + + DITA-OT GitHub Project + + + + GitHub issues tracker + + + + + code contributions + + + + + documentation contributions + + + + + DITA 1.3 label + + + + + DITA 2.0 label + + + + + dita-ot-action + + + + + DITA-OT Gradle Plugin + + + + + github.com/dita-ot/registry + + + + + pull request + + + + + org.dita.html5.dublin-core + + + + + org.dita.pdf2.axf + + + + + org.dita.pdf2.xep + + + + + + + DITA-OT Release Notes + + + + DITA-OT 2.0 Release Notes + + + + + DITA-OT 2.1 Release Notes + + + + + DITA-OT 2.2 Release Notes + + + + + DITA-OT 2.3 Release Notes + + + + + DITA-OT 2.4 Release Notes + + + + + DITA-OT 2.5 Release Notes + + + + + DITA-OT 3.0 Release Notes + + + + + DITA-OT 3.1 Release Notes + + + + + DITA-OT 3.2 Release Notes + + + + + DITA-OT 3.3 Release Notes + + + + + DITA-OT 3.4 Release Notes + + + + + DITA-OT 3.5 Release Notes + + + + + DITA-OT 3.6 Release Notes + + + + + DITA-OT 3.7 Release Notes + + + + + DITA-OT 4.0 Release Notes + + + + + DITA-OT 4.1 Release Notes + + + + + DITA-OT 4.2 Release Notes + + + + + + + Download links + + + + ant.apache.org + + + + + dita-ot.org/download + + + + + xmlgraphics.apache.org/fop + + + + + web.archive.org + + + + + icu-project.org/download + + + + + adoptium.net + + + + + Azul Zulu + + + + + Amazon Corretto + + + + + Red Hat + + + + + oracle.com/java + + + + + saxon.sourceforge.net + + + + + + + FOP links + + + + Apache FOP 2.0 Release Notes + + + + + Apache FOP 2.1 Release Notes + + + + + Apache FOP 2.3 Release Notes + + + + + Apache FOP 2.9 Release Notes + + + + + Apache FOP Accessibility + + + + + + + Specs and RFC links + + + + + DITA 1.3 specification + + + + + DITA 1.3 Part 3 latest errata version: All-Inclusive Edition (HTML) + + + + + DITA 1.3 Part 3 latest errata version: All-Inclusive Edition (PDF) + + + + + DITA Version 1.3 Errata 01 (Distribution ZIP of the DITA source) + + + + + DITA 1.3 specification: Cascading of metadata attributes in a DITA map + + + + + Example: How the @cascade attribute functions + + + + + DITA 1.3 specification: Scoped keys + + + + + DITA 1.3 specification: Branch filtering + + + + + DITA 1.3 specification: The conaction attribute + + + + + DITA 1.3 specification: Groups within profiling attributes + + + + + DITA 1.3 specification: The revprop element + + + + + DITA 1.3 specification: The scope attribute + + + + + + + DITA 1.2 Specification (XHTML) + + + + + DITA 1.2 Specification (PDF) + + + + + DITA 1.2 Specification (DITA source) + + + + + Chunking definition in the DITA 1.2 specification + + + + + Localization overview in the OASIS DITA standard + + + + + + Dublin Core Metadata Element Set + + + + + JSON + + + + + HTML5-compliant syntax highlighting + + + + + + Lightweight DITA + + + + + + XSL-FO fo:change-bar-begin element + + + + + @change-bar-style + + + + + RFC 3986 + + + + + RFC 5147 + + + + + YAML + + + + + + + Third-party licenses + + + + Apache License 2.0 + + + + + Eclipse Public License 1.0 + + + + + GNU Lesser General Public License 2.1 + + + + + ICU License + + + + + MIT License + + + + + Mozilla Public License 1.0 + + + + + W3C Document License + + + + + + + Other Websites + + + + Apache Ant documentation + + + + + Bootstrap + + + + + CommonMark + + + + + Chocolatey + + + + + OASIS DITA Adoption Technical Committee + + + + + OASIS DITA Technical Committee + + + + + Docker + + + + + Official Eclipse website + + + + + GitHub-Flavored Markdown + + + + + Gradle + + + + + GitBook + + + + + Gradle Daemon + + + + + Homebrew + + + + + JDK-8207005 + + + + + Font configuration in PDF2 + + + + + Markdown + + + + + mdBook + + + + + Noto Sans + + + + + PATH environment variable + + + + + prism.js + + + + + Sass + + + + + SDKMAN! + + + + + Python-Markdown Attribute Lists + + + + + Integrated extension functions + + + + + semantic versioning + + + + + signing your work + + + + + dita-ot.org/plugins + + + + + GitHub Actions + + + + + diff --git a/resources/fact.hs b/resources/fact.hs new file mode 100644 index 0000000..209162a --- /dev/null +++ b/resources/fact.hs @@ -0,0 +1,6 @@ +-- START-FACT +fact :: Int -> Int +fact 0 = 1 +fact n = n * fact (n-1) +-- END-FACT +main = print $ fact 7 diff --git a/resources/header.xml b/resources/header.xml new file mode 100644 index 0000000..c7f5616 --- /dev/null +++ b/resources/header.xml @@ -0,0 +1,4 @@ +
    +

    DITA Open Toolkit

    +
    +
    diff --git a/resources/html.ditaval b/resources/html.ditaval new file mode 100644 index 0000000..d6c5113 --- /dev/null +++ b/resources/html.ditaval @@ -0,0 +1,6 @@ + + + + + + diff --git a/resources/key-definitions.ditamap b/resources/key-definitions.ditamap new file mode 100644 index 0000000..aaa7736 --- /dev/null +++ b/resources/key-definitions.ditamap @@ -0,0 +1,197 @@ + + + + + Key definitions (variables) + + + + + + + + + + + + + + 4.2 + + + + + + + + + + 4.2.3 + + + + + + + + + January 22, 2024 + + + + + + + January 26, 2024 + + + + + + + + + + + 1.10.14 + + + + + + + + 1.10 + + + + + + + + 2.8.0 + + + + + + + + 32.1.1-jre + + + + + + + + 74.2 + + + + + + + + 2.16.1 + + + + + + + + 17 + + + + + + + + 1.4.14 + + + + + + + + 5.7 + + + + + + + + 2.0.12 + + + + + + + + 2.12.2 + + + + + + + + 2.9 + + + + + + + + 1.4.01 + + + + + + + + + 1.2 + + + + + + + + + 5.2.3 + + + + + + + + Saxon-HE + + + + + + + 12.4 + + + + + + + + 0.3.2 + + + + diff --git a/resources/messages.xsl b/resources/messages.xsl new file mode 100644 index 0000000..3efa370 --- /dev/null +++ b/resources/messages.xsl @@ -0,0 +1,133 @@ + + + + + + + + + + This file is part of the DITA Open Toolkit project. + See the accompanying LICENSE file for applicable license. + + + This file is generated based on the message information shipped + with DITA-OT, as defined in the file + DITA-OT/config/messages.xml + To regenerate this topic, run the following command: + DITA-OT/docsrc/gradlew messages + + Alternatively, you may use that same build file to + create a PDF, HTML5, or HTML Help version of the documentation, which + will update the topic as part of the build. To rebuild PDF and HTML5, + just run the command + DITA-OT/docsrc/gradlew + + To build only one output format, run that same build command, followed + by either "html", "pdf", or "htmlhelp". For example, + this command will rebuild the HTML documentation (including the updated + messages topic): + DITA-OT/docsrc/gradlew html + + + + Error messages + This topic defines all error messages generated by the DITA-OT. + + + + error messages + + + + +

    Plug-ins may be used to add additional error messages into the toolkit; + for more information, see Customizing DITA-OT.

    + + DITA-OT error messages + + + + + + + + Message ID + Severity + Message text + Additional details + + + + + + + + + + Info + Warning + Error + Fatal + + + + + + + + + + + + +   + + + + +
    +
    +
    +
    + + + + + + + + % + + + + + + + + + + + + + + + +
    diff --git a/resources/novice.ditaval b/resources/novice.ditaval new file mode 100644 index 0000000..26734a9 --- /dev/null +++ b/resources/novice.ditaval @@ -0,0 +1,6 @@ + + + + + + diff --git a/resources/params.xsl b/resources/params.xsl new file mode 100644 index 0000000..7a8a751 --- /dev/null +++ b/resources/params.xsl @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + Generated from plugin source, do not edit! + + DITA-OT parameters + + All DITA-OT parameters + +
    + + + + + + + + + +
    +
    +
    +
    +
    + + + + + + Writing parameters-.dita + + Generated from plugin source, do not edit! + + + <xsl:value-of select="current-group()[1]/@desc"/> + <xsl:text> parameters</xsl:text> + + + + + + + + +
    + + + + + + + + + + + + +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + deprecated + + + required + + + + + + + + + + parameters + + + + + + deprecated featuresparameters + + + + + + + + + + + The following values are supported: +
      + +
    • + + + (default) + + + +
    • +
      +
    +
    + + The allowed values are + + + + , + and + + + + + + and + + + + + + ; the default value is + + + . + +
    +
    +
    +
    + +
    diff --git a/resources/pdf.ditaval b/resources/pdf.ditaval new file mode 100644 index 0000000..82a0362 --- /dev/null +++ b/resources/pdf.ditaval @@ -0,0 +1,6 @@ + + + + + + diff --git a/resources/properties-file.xsl b/resources/properties-file.xsl new file mode 100644 index 0000000..20a9300 --- /dev/null +++ b/resources/properties-file.xsl @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# ============================================================================ # +# +# GENERATED PROPERTIES FILE FOR USE WITH THE DITA COMMAND +# +# Lines in this file that start with a number sign '#' are comments. +# +# To set a build parameter, remove the commenting '#' at the start of the line +# and specify the value for the parameter after the '=' sign, for example, +# +# args.filter = my-filter.ditaval +# +# Use the `dita` command with the `--propertyfile` option to use the build +# parameters specified in a properties file, for example: +# +# dita --input=my.ditamap --format=html5 --propertyfile=my.properties +# +# Build parameters in this file are grouped by transformation type. +# Supported parameter values are listed in brackets [] after each description, +# with an asterisk (*) indicating the default value where appropriate. +# +# ============================================================================ # + + + + + + + + + + + + + + + + + (REQUIRED) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/reltable.ditamap b/resources/reltable.ditamap new file mode 100644 index 0000000..803c420 --- /dev/null +++ b/resources/reltable.ditamap @@ -0,0 +1,398 @@ + + + + + Relationship tables + + + + + + How to add or modify generated text strings + + + + + + + Languages supported by the core toolkit + + + + + Variable overrides for PDF + + + + + + + + + + CTR: Ant topics + + + + + + + + + + + + + + + + + + + + Apache Ant documentation + + + + + + + + + Eclipse help transformation + + + + + + + + + + + + + + + HTML help transformation + + + + + + + + + + + + + + + PDF transformation + + + + + + + + + + + + + + XHTML transformation + + + + + + + + + + + + + + + + + HTML5 transformation + + + + + + + + + + + + + + + + + + + + + + + + + + + Normalized DITA transformations + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Source and target + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reference to reference: Bi-directional links + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Task to task: Bi-directional links + + + + + + + + + + + + + + + External resources + + + + + + + + Official Eclipse website + + + + + + + + + + + + Localization overview in the OASIS DITA standard + + + + + + + Plugins + + + + + + + + + + + + + + + Plugins + + + + + + + + + + + + + + + + + + + + + + + Source and target: Troubleshooting topics + + + + + + + + + + + + + + + + Release history + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DITA-OT 1.8 - 1.0 Release Notes + The DITA-OT project archive at dita-archive.xml.org provides news about earlier toolkit releases, and + release notes for legacy versions. + + + + + + diff --git a/resources/reusable-components.dita b/resources/reusable-components.dita new file mode 100644 index 0000000..30e77b8 --- /dev/null +++ b/resources/reusable-components.dita @@ -0,0 +1,276 @@ + + + + + Re-usable components + Warehouse topic used to store re-usable content for concept topics or other constructs that would not be + valid in the existing warehouse task conref-task.dita. + + + + + + + + +
    + Upgrade stylesheets to XSLT 2.0 + upgrading + Saxon + XSLT + 1.0 + XSLT + 2.0 + plug-ins + upgrading +

    The Saxon project has announced plans to remove XSLT 1.0 support from the Saxon-HE library that ships with + DITA-OT:

    + …we’re dropping XSLT 1.0 + backwards compatibility mode from Saxon-HE, and hope to eliminate it entirely in due course. +

    DITA-OT 3.0 and 3.0.1 included Saxon-HE 9.8.0.5, which rejects XSLT stylesheets that specify + version="1.0". Plug-ins with XSLT templates specifying version 1.0 will fail with the message + “XSLT 1.0 compatibility mode is not available in this configuration.”

    +

    To resolve this issue, change any occurrences of <xsl:stylesheet version="1.0"> in custom + plug-in stylesheets to at least <xsl:stylesheet version="2.0">.

    + DITA-OT 3.0.2 includes Saxon-HE 9.8.0.7, which restores XSLT 1.0 backwards-compatibility mode, + but the DITA Open Toolkit project recommends upgrading all stylesheets to XSLT 2.0 to ensure plug-ins remain + compatible with future versions of DITA-OT and Saxon-HE. +
    + +
    + Upgrade stylesheets to XSLT3 + upgrading + Saxon + XSLT + 1.0 + XSLT + 2.0 + XSLT + 3.0 + plug-ins + upgrading +

    DITA-OT 4.2 updates XSLT stylesheet headers from XSLT version 1.0 and 2.0 to version 3.0 to make way for the + use of XSLT3 features in future toolkit versions.

    +

    This is a backwards-compatible change, as there are no changes to the actual code; only the stylesheet headers + have been modified for now. This approach has been chosen to help identify any external or third-party + incompatibilities that might result from switching to XSLT3.

    + The next major version of DITA-OT will upgrade template content to use XSLT3 syntax. +

    To ensure plug-ins remain compatible with future versions of DITA-OT and Saxon-HE, the DITA Open Toolkit + project recommends upgrading all stylesheets to XSLT 3.0.

    +

    Change any occurrences of xsl:stylesheet version="1.0" or xsl:stylesheet + version="2.0" in custom plug-in stylesheets to at least xsl:stylesheet + version="3.0".

    +
    + +
    + Validating plug-ins +
    +

    DITA-OT includes a RELAX NG schema file that can be used to validate the plugin.xml + files that define the capabilities of each plug-in. + schema + RELAX NG + validate +

    +

    To ensure the syntax of your custom plug-in is correct, include an xml-model processing + instruction at the beginning of the plugin.xml file, immediately after the XML + prolog:

    +

    xml-model href="https://www.dita-ot.org/rng/plugin.rnc" type="application/relax-ng-compact-syntax"

    +

    If your authoring environment does not apply this schema automatically, point your editor to dita-ot-dir/resources/plugin.rnc to associate the schema with + your plug-in file.

    +
    +
    + +
    + <cite>DITA for Print: A DITA Open Toolkit Workbook</cite> (Second Edition, 2017) + Leigh White + DITA for Print +

    Authored by Leigh W. White, DITA Specialist at IXIASOFT, and published by XML Press, DITA for + Print walks readers through developing a PDF customization from scratch.

    +

    Here is an excerpt from the back cover:

    + DITA for Print is for anyone who wants to learn how to create PDFs using the DITA Open Toolkit + without learning everything there is to know about XSL-FO, XSLT, or XPath, or even about the DITA Open Toolkit + itself. DITA for Print is written for non-programmers, by a non-programmer, and although it is + written for people who have a good understanding of the DITA standard, you don’t need a technical background to + get custom PDFs up and running quickly. +

    This is an excellent, long-needed resource that was initially developed in 2013 for DITA-OT 1.8.

    +

    The second edition has been revised to cover DITA Open Toolkit Version 2, including customizing the DITA 1.3 + troubleshooting topic type, localization strings, bookmarks, and the new back-cover functionality.

    + +

    The first edition of DITA for Print recommended copying entire files from the PDF2 plug-in to + your custom plug-in. The DITA-OT project — and the second edition of the book — do not recommend this + practice.

    +

    Instead, you should copy only the specific attribute sets and templates that you want to override. Following + this practice will more cleanly isolate your customizations from the DITA-OT code, which will make it easier + for you to update your plug-ins to work with future versions of DITA-OT.

    +
    + +
    + <cite>DITA for Practitioners: Volume 1, Architecture and Technology</cite> (2012) + Eliot Kimber + DITA for Practitioners: Volume 1, Architecture and Technology +

    Authored by Eliot Kimber and published by XML Press, this seminal resource contains a chapter dedicated to DITA + Open Toolkit: “Running, Configuring, and Customizing the Open Toolkit”. In addition to a robust overview of + DITA-OT customization and extension, the chapter contains a detailed example of customizing a PDF plug-in to + specify 7" × 10" paper size and custom fonts for body text and headers.

    +

    The DITA-OT chapter in DITA for Practitioners: Volume 1 was written for DITA-OT 1.5.4, which was + the latest stable version at the time it was written.

    +
    + +
    + Supported Java versions +

    DITA-OT is designed to run on Java version or later and built and tested with the Open Java Development Kit (OpenJDK). + Compatible Java distributions are available from multiple sources: + Java + versions + Amazon Corretto + OpenJDK + Oracle JDK +

      +
    • You can download Oracle distributions from + under commercial license.
    • +
    • Eclipse Temurin is the free OpenJDK distribution available from + .
    • +
    • Free OpenJDK distributions are also provided by + , + , and + .
    • +
    • Java versions are also available via package managers such as + , + , or +
    • +
    +

    +

    + The Java virtual machine is generally backwards compatible, so class files built with earlier versions + should still run correctly with Java 17 and DITA-OT . If your DITA-OT installation + contains plug-ins with custom Java code, you may need to recompile these with Java 17 — but in most cases, + this step should not be necessary. +

    +
    + +
    + Limitations of map-first pre-processing +

    The internal extension points that run before or after individual steps in the + original preprocess pipeline (preprocess.*.pre/preprocess.*.post) are not + available in the newer map-first pre-processing pipeline (preprocess2), which is used in the PDF + and HTML Help transformations as of DITA-OT 3.0, and in HTML5 and Normalized DITA output as of DITA-OT 4.2.

    +
    + +
    + Unbundled plug-ins + If necessary, legacy plug-ins may be re-installed from earlier DITA-OT + distributions, but they are no longer actively maintained or supported by the core toolkit committers. The + source code is available on GitHub for anyone interested in maintaining the plug-ins for use with future toolkit + versions. +
    + +
    + New subcommands in 3.5 +
    + +
    dita deliverables
    +
    Prints the list of deliverables in a project file
    +
    + +
    dita install
    +
    Installs or reloads plug-ins (replaces dita + --install)
    +
    + +
    dita plugins
    +
    Prints a list of installed plug-ins (replaces dita + --plugins)
    +
    + +
    dita transtypes
    +
    Prints a list of installed transformation types, or output formats (replaces + dita + --transtypes)
    +
    + +
    dita uninstall
    +
    Removes and deletes a plug-in (replaces dita + --uninstall)
    +
    + +
    dita version
    +
    Prints version information and exits (replaces dita + --version)
    +
    +
    +
    + +
    + Recommendations for upgrading DITA-OT customizations +

    When migrating customizations, identify the version of the toolkit you're + currently using (base version) and the version of the toolkit you want to migrate to (target version). Then, + review all of the migration changes described in all of the versions from the base through the target. + For instance, if you're currently on 2.2 and want to move to 3.3, you should review all of the changes in 2.3 + through 3.3. You may want to start at the oldest version and read forward so you can chronologically follow the + changes, since it is possible that files or topics have had multiple changes.

    +
    + +
    + Common format for generated text +
    +

    Prior to DITA-OT 3.7, there were two different XML structures for adding or modifying generated text + (gentext). The base plug-in org.dita.base and any custom overrides defined via the + dita.strings.xsl extension point used a root element strings, + with individual strings in str elements with name attributes. This + format was previously used for HTML, and all other output formats except PDF.

    + + Base strings file structure prior to DITA-OT 3.7 + <?xml version="1.0" encoding="utf-8"?> +<strings xml:lang="en-US"> + <str name="String1">English generated text</str> +</strings> + +

    The PDF plug-in org.dita.pdf2 used a root element vars with an XML namespace, + and strings in variable elements with id attributes.

    + + PDF2 strings file structure prior to DITA-OT 3.7 + <?xml version="1.0" encoding="UTF-8"?> +<vars xmlns="http://www.idiominc.com/opentopic/vars"> + <variable id="String1">English generated text</variable> +</vars> + +

    Starting with DITA-OT 3.7, these structures have been deprecated and replaced with a new unified format. All + files now use variables as the root element, with the + variable elements previously used in PDF strings. The new format supports the XSL + parameters used by the earlier PDF strings format to pass dynamic information such as chapter numbers or + figure titles.

    + + New common variable format as of DITA-OT 3.7 + <?xml version="1.0" encoding="UTF-8"?> +<variables> + <variable id="String1">English generated text</variable> +</variables> + +

    The old formats are still supported, but plug-in developers should update any generated text files to reflect + the new structure, as support for the old formats may be removed in a future release. + #3817 +

    +
    +
    + +
    + For details on the differences in + , see + , + , and + . +
    +
    +
    diff --git a/resources/site.ditaval b/resources/site.ditaval new file mode 100644 index 0000000..b620aa1 --- /dev/null +++ b/resources/site.ditaval @@ -0,0 +1,7 @@ + + + + + + + diff --git a/resources/source-files.ditamap b/resources/source-files.ditamap new file mode 100644 index 0000000..cf31aaa --- /dev/null +++ b/resources/source-files.ditamap @@ -0,0 +1,249 @@ + + + + + Source File Key Definitions + + Provides key definitions for each DITA topic in the repository. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/subjectscheme-deliverytarget.ditamap b/resources/subjectscheme-deliverytarget.ditamap new file mode 100644 index 0000000..053cb6a --- /dev/null +++ b/resources/subjectscheme-deliverytarget.ditamap @@ -0,0 +1,60 @@ + + + + + + + Controlled values for the @deliveryTarget attribute + Provides a set of values for use with the @deliveryTarget conditional-processing attribute. + + + + + Values for @deliveryTarget attributes + + + + Print-primary deliverables + + + + PDF + + + + + CSS for print + + + + + + Online deliverables + + + + HTML-based deliverables + + + + HTML + + + + HTML5 + + + + + Project website: dita-ot.org + + + + + + + + + + + diff --git a/resources/subjectscheme-outputclass.ditamap b/resources/subjectscheme-outputclass.ditamap new file mode 100644 index 0000000..2a7683e --- /dev/null +++ b/resources/subjectscheme-outputclass.ditamap @@ -0,0 +1,170 @@ + + + + + + + Controlled values for @outputclass on certain elements + + + + + + Bootstrap–specific classes + Used to pick up Bootstrap formatting in site output. + + + + Tables + Highlight rows on hover + + + + + + Phrases + + + + + + + + + + Codeblocks + + + + DITA-OT Processing Extensions + https://www.dita-ot.org/dev/reference/extended-functionality.html + + + + + + + + Syntax Highlights + Used to trigger syntax highlighting via https://prismjs.com. + + + + + + + + + + + + + + + + + + + + + + + + + + Code language + Used to define the programming language code in codeblocks. + + + + + + + + + Code phrases + <codeph> is used semantically three unique ways in the OT docs. Rather than using element + specialization this limits @outputclass on <codeph>, effectively creating semantic specialization without + needing to modify DTDs or schemas. How <codeph> is used: + https://github.com/dita-ot/docs/wiki/coding-guidelines#plug-ins + + + + + + + + + Filepath + Control multi-platform processing + + + + + + + Multi-platform examples + Enable multi-platform tabs in site output + + + + + + + Titles + Added by automated processes; not to be manually added by authors. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/subjectscheme.ditamap b/resources/subjectscheme.ditamap new file mode 100644 index 0000000..6ad1f36 --- /dev/null +++ b/resources/subjectscheme.ditamap @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/theme/.gitrepo b/resources/theme/.gitrepo new file mode 100644 index 0000000..e34c011 --- /dev/null +++ b/resources/theme/.gitrepo @@ -0,0 +1,12 @@ +; DO NOT EDIT (unless you know what you are doing) +; +; This subdirectory is a git "subrepo", and this file is maintained by the +; git-subrepo command. See https://github.com/ingydotnet/git-subrepo#readme +; +[subrepo] + remote = https://github.com/jelovirt/pdf-generator.wiki.git + branch = master + commit = 21ed9c285776ee1711a6b83e5a241f35b0590e7a + parent = 3a35331db3f1f2b47ef9479d6c2463cca8c98a67 + method = merge + cmdver = 0.4.6 diff --git a/resources/theme/Extending-themes.md b/resources/theme/Extending-themes.md new file mode 100644 index 0000000..b9c1376 --- /dev/null +++ b/resources/theme/Extending-themes.md @@ -0,0 +1,21 @@ +A theme can extend another theme using the `extends` key. The value of `extends` is a relative path from the current theme file to the theme being extended. + +`base.yaml` + +```yaml +brand: + primary-color: orange +page: + size: A4 +``` + +`product/theme.yaml` + +```yaml +extends: ../base.yaml +page: + size: Letter +style: + topic: + color: $brand-primary-color +``` diff --git a/resources/theme/FAQ.md b/resources/theme/FAQ.md new file mode 100644 index 0000000..489cf3c --- /dev/null +++ b/resources/theme/FAQ.md @@ -0,0 +1,5 @@ +# Why doesn't the generated plug-in use variable strings for different page headers and footers? + +The default page header (and footer) generation in PDF2 uses variable strings with a fixed set of available fields. While in some cases headers will require language specific processing, in most cases the output will be the same in all languages. Also, the PDF2 header implementation contains a lot of code duplication that makes it difficult to change the layout of the headers. + +That's why the generated plug-in overrides the header templates and single-sources the static content generation from the body header template. This makes it easier to change the contents and layout of the header. If language-specific processing is required, use the same approach as the PDF2 base templates. diff --git a/resources/theme/Header-and-footer.md b/resources/theme/Header-and-footer.md new file mode 100644 index 0000000..0626c52 --- /dev/null +++ b/resources/theme/Header-and-footer.md @@ -0,0 +1,30 @@ +The `content` key in `header` or `footer` can be used to add text to running header or footer content. Content can include static text, or reference variables using curly braces. + +The following variable fields are currently supported: + +- `title`: Map title +- `chapter`: Map chapter title +- `folio`: current page number +- `folio-with-total`: current page number with total number of pages +- `page-number`: current page number +- `page-count`: total number of pages +- `year`: current year + +```yaml +header: + content: '{title} — {chapter}' + border-after: solid 1pt black +``` + +To define separate headers or footers for recto (right) and verso (left) pages, use the `odd` and `even` keys. + +```yaml +header: + border-after: solid 1pt black + odd: + content: '{title}' + text-align: end + even: + content: '{chapter}' + text-align: start +``` diff --git a/resources/theme/Home.md b/resources/theme/Home.md new file mode 100644 index 0000000..61521be --- /dev/null +++ b/resources/theme/Home.md @@ -0,0 +1,17 @@ +# DITA-OT PDF Plug-in Generator + +The DITA-OT PDF plug-in generator is a TypeScript program that generates DITA-OT plug-ins that extend the default PDF2 plug-in. For development details, see . + +The Gradle build file generates the `com.elovirta.pdf` plug-in for DITA-OT. + +This plug-in extends the built-in PDF2 plug-in by adding support for the `theme` property. Custom theme files can be used to change the styling of the PDF2 output without needing to extend the transtype with XSLT. + +The following topics provide details on the theme file formats and supported configuration options. + +- [Theme](Theme) + - [Page settings](Page-settings) + - [Header and footer](Header-and-footer) + - [Styles](Styles) + - [Variables](Variables) + - [Extending themes](Extending-themes) + - [Syntactic sugar](Syntactic-sugar) diff --git a/resources/theme/How-to.md b/resources/theme/How-to.md new file mode 100644 index 0000000..d08fd53 --- /dev/null +++ b/resources/theme/How-to.md @@ -0,0 +1,120 @@ +# Configure header and footer + +Examples of theme files. + +## Page size + +```yaml +page: + size: A4 + top: 20mm + outside: 20mm + bottom: 20mm + inside: 20mm +``` + +## Simple header and footer + +```yaml +header: + content: '{title}' + start-indent: 10mm + end-indent: 10mm + border-bottom: solid 1pt black + text-align: center +footer: + content: '{folio-with-total}' + start-indent: 10mm + end-indent: 10mm + border-top: solid 1pt black + text-align: center +``` + +![](simplex.png) + +## Header and footer size and alignment + +```yaml +page: + size: A4 + # The body content starts 30 mm from top of page edge. + top: 30mm + outside: 20mm + # The body content ends 30 mm from bottom of page edge. + bottom: 30mm + inside: 20mm +header: + content: '{title}' + # The header starts directly from top of page edge and is 20 mm high. + extent: 20mm + # The header starts 20 mm from start/left of page edge + start-indent: 20mm + # The header content is vertically aligned to bottom of header. + display-align: after +footer: + content: '{folio-with-total}' + # The footer starts directly from bottom of page edge and is 20 mm high. + extent: 20mm + # The footer starts 20 mm from start/left of page edge + start-indent: 20mm + # The footer content is vertically aligned to top of footer. + display-align: before +``` + +If `extent` is not set, the value defaults to page `top` for header and page `bottom` for footer. + +## Duplex header and footer + +```yaml +# Generate duplex header and footer +mirror-page-margins: true +header: + start-indent: 10mm + end-indent: 10mm + padding-after: 6pt + border-bottom: solid 1pt black + odd: + content: '{title}' + # On odd/right/recto pages, horizontally align content to end/right side. + text-align: end + even: + content: '{chapter}' + # On even/left/verso pages, horizontally align content to start/left side. + text-align: start +footer: + start-indent: 10mm + end-indent: 10mm + padding-after: 6pt + border-bottom: solid 1pt black + odd: + content: '{folio-with-total}' + text-align: end + even: + content: '{folio-with-total}' + text-align: start +``` + +![](duplex.verso.png) ![](duplex.recto.png) + +## Header image + +```yaml +header: + content: 'DITA-OT' + # Text starts 25 mm from left page edge. + start-indent: 25mm + # Header starts 10 mm from top page edge. + space-before: 10mm + # Header height is 10 mm + line-height: 10mm + # Image left edge is 15 mm from left text edge (10 mm from left page edge) + padding-left: 15mm + text-align: start + font-family: Helvetica + dominant-baseline: middle + # 10 mm x 10 mm image + background-image: dita-ot-logo.svg + background-repeat: no-repeat +``` + +![](header-image.svg) diff --git a/resources/theme/Page-settings.md b/resources/theme/Page-settings.md new file mode 100644 index 0000000..dd2e776 --- /dev/null +++ b/resources/theme/Page-settings.md @@ -0,0 +1,32 @@ +Page size and orientation can be set with the `size` and `orientation` keys. Page margins are set with the `top`, `outside`, `bottom`, and `inside` keys. + +```yaml +page: + size: A4 + orientation: portrait + top: 20mm + outside: 20mm + bottom: 20mm + inside: 30mm + mirror-margins: true +``` + +The `size` key supports the following values: + +- `A3` +- `A4` +- `A5` +- `Executive` +- `JIS B5` +- `Tabloid` +- `Legal` +- `Letter` +- `PA4` + +If a required page size is not supported, `height` and `width` keys can be used to define the page size. + +Use the `mirror-margins` key to set up facing pages for double-sided documents. + +When this key is set to `true`, the margins of the left page are a mirror image of those on the right page. The `inside` margins of left and right pages are the same, and the `outside` margins of left and right pages are identical. + +The mirror margins setting defaults to `false`. diff --git a/resources/theme/Styles.md b/resources/theme/Styles.md new file mode 100644 index 0000000..6b1ed44 --- /dev/null +++ b/resources/theme/Styles.md @@ -0,0 +1,628 @@ +The presentation of various block and inline elements can be adjusted by setting `style` keys. Each category takes XSL-FO key definitions and keys specific to that style. + +While the style keys may look like CSS, the keys are XSL-FO properties and the underlying PDF2 plug-in does not use CSS compatibility properties. + +- Instead of `padding-top`, use `padding-before`. +- Instead of `margin-left`, use `start-indent`. Note that these two keys do not have matching semantics, see [XSL 1.1][refine-margin-space-indent]. + +[refine-margin-space-indent]: https://www.w3.org/TR/xsl11/#refine-margin-space-indent + +There is no default theme that defines base key values. Instead, a theme extends the PDF2 default styling. If you want to define common settings, create a theme file for shared settings, and use the [`extends` key](#extending-themes) in other themes to build on the common foundation. + +```yaml +style: + body: + font-family: serif + font-size: 12pt + space-after: 6pt + space-before: 6pt + start-indent: 25pt + topic: + font-family: sans-serif + font-size: 26pt + link: + color: blue + text-decoration: underline +``` + +## Block keys + +### `body` + +Default body text, for example `

    ` elements. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +### `shortdesc` + +Shortdesc and abstract styles. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +### `h1` + +First-level topic titles. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +- `title-numbering = boolean` + +### `h2` + +Second-level topic titles. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +- `title-numbering = boolean` + +### `h3` + +Third-level topic titles. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +- `title-numbering = boolean` + +### `h4` + +Fourth-level topic titles. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +- `title-numbering = boolean` + +### `cover` + +Cover page. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +### `cover-title` + +Cover page title. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +- `content = content-template` + +### `cover-titlealt` + +Cover page subtitle or alternative title. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +### `section` + +Section element. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +### `section-title` + +Section element title. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +### `dl` + +Definition list element. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +- `dl-type = 'table' | 'list' | 'html'` — Style definition list as bulleted list or indented list. + +### `example` + +Example element. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +### `example-title` + +Example element title. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +### `fig` + +Figure element. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +- `caption-number = 'chapter' | 'document'` — Number figures with chapter prefix or use whole document numbering. +- `caption-position = 'before' | 'after'` — Place figure caption before or after figure. + +### `fig-caption` + +Figure caption. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +- `content`: Contents of figure caption. Supported fields are: + - `number`: caption number + - `title`: caption contents + +### `note` + +Note element with `@type` `note` or without `@type`. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +### `note-label` + +Label for note elements. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +- `content` — Content template. + +### `note-` + +Note element with `@type`. Type values are: + +- `note` +- `tip` +- `fastpath` +- `restriction` +- `important` +- `remember` +- `attention` +- `caution` +- `notice` +- `danger` +- `warning` +- `trouble` +- `other` + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +### `note--label` + +Label for note elements with `@type`. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +- `content` — Content template. + +### `ol` + +Ordered list. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +### `ul` + +Unordered list. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +### `pre` + +Preformatted element. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +### `codeblock` + +Code block element. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +- `line-numbering = boolean` — Line numbering. +- `show-whitespace = boolean` — Show whitespace characters. + +### `table` + +Table element. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +- `caption-number = 'chapter' | 'document'` — Number figures with chapter prefix or use whole document numbering. +- `caption-position = 'before' | 'after'` — Place figure caption before or after figure. +- `table-continued = boolean` — Output "table continued" when table breaks across pages. + +### `table-caption` + +Table caption. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +- `content = content-template` — Contents of table caption. Supported fields are: + - `number`: caption number + - `title`: caption contents + +### `table-header` + +Table header row + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +### `toc-1` + +First-level TOC entry. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +### `toc-2` + +Second-level TOC entry. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +### `toc-3` + +Third-level TOC entry. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +### `toc-4` + +Fourth-level TOC entry. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +### `parml` + +Parameter list element. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +### `plentry` + +Parameter list entry element. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +### `pt` + +Parameter term element within a parameter list entry. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +### `pd` + +Parameter definition element within a parameter list entry. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +### `hazardstatement` + +Hazard statement element. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +### `hazardstatement-label` + +Hazard statement label element. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +### `hazardstatement--label` + +Label for hazard statement elements with `@type`. + +The styling properties that can be used are listed in [XSL fo:block](https://www.w3.org/TR/xsl11/#fo_block). + +## Inline keys + +### `link` + +Link elements. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +- `link-url = 'true' | 'false'` — Output URL for external links after explicitly defined link text. Defaults to `false`. +- `link-page-number = 'true' | 'false'` — Generate page number reference after link text. Defaults to `true`. +- `content = content-template` — Link text template. Supported fields are: + - `link-text`: link text + - `pagenum`: page number reference + +### `link-external` + +External link elements. + +- `content = content-template` — Link text template. Supported fields are: + - `link-text`: link text + - `url`: link URL + +### `tm` + +Trademark element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +- `symbol-scope = 'always' | 'chapter' | 'never'` — Output trademark symbol always, once per chapter, or never. + +### `keyword` + +Keyword element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `term` + +Term element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `codeph` + +Code phrase element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `filepath` + +File path element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `cmdname` + +Comment name element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `varname` + +Variable name element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `userinput` + +User input element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `systemoutput` + +System output element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `apiname` + +API name element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `option` + +Option element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `parmname` + +Parameter name element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `synph` + +Syntax phrase element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `syntaxdiagram` + +Syntax diagram element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `groupseq` + +Group sequence element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `groupchoice` + +Group choice element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `groupcomp` + +Group composite element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `fragment` + +Syntax fragment element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `fragref` + +Syntax fragment reference element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `synblk` + +Syntax block element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `synnote` + +Syntax note element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `synnoteref` + +Syntax note reference element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `kwd` + +Syntax keyword element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `var` + +Syntax variable element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `oper` + +Syntax operator element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `delim` + +Syntax delimiter character element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `sep` + +Syntax separator character element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `repsep` + +Syntax repeat separator character element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `b` + +Bold highlighting element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `i` + +Italic highlighting element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `u` + +Underline highlighting element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `tt` + +Teletype highlighting element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `sup` + +Superscript highlighting element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `sub` + +Subscript highlighting element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `line-through` + +Strikethrough highlighting element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `overline` + +Overline highlighting element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `markupname` + +Named markup token element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `uicontrol` + +User interface control element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `wintitle` + +Window or dialog title element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `menucascade` + +Menu cascade element used to document a series of menu choices. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `shortcut` + +Keyboard shortcut element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `screen` + +Screen element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `filepath` + +File path element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `xmlelement` + +XML element element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `xmlatt` + +XML attribute element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `textentity` + +XML text entity element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `parameterentity` + +XML parameter entity element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `numcharref` + +XML character reference element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `xmlnsname` + +XML namespace name element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). + +### `xmlpi` + +XML processing instruction element. + +The styling properties that can be used are listed in [XSL fo:inline](https://www.w3.org/TR/xsl11/#fo_inline). diff --git a/resources/theme/Syntactic-sugar.md b/resources/theme/Syntactic-sugar.md new file mode 100644 index 0000000..f8314aa --- /dev/null +++ b/resources/theme/Syntactic-sugar.md @@ -0,0 +1,86 @@ +Theme files can use [syntactic sugar](https://en.wikipedia.org/wiki/Syntactic_sugar) to make them easier to read and write. When theme files are read, any shorthand keys are “desugared” to their more verbose equivalents before they are passed to the stylesheet generator. + +## Content + +The authoring format of the `content` key is a [DSL](https://en.wikipedia.org/wiki/Domain-specific_language) that supports field and variable references mixed with text. + +You can reference DITA-OT variables by name by prefixing them with the number sign `#` and wrapping them in braces `{` `}.` For example: + +```yaml +content: '{#copyright} {year} ACME Corporation' +``` + +desugars to + +```yaml +content: + - kind: variable + value: copyright + - kind: text + value: ' ' + - kind: field + value: year + - kind: text + value: ' ACME Corporation' +``` + +which would result in a line like this: + +> © 2022 ACME Corporation + +## Page dimensions + +When page dimensions are defined using the `size` and `orientation` keys, they are desugared to `width` and `height` keys using a mapping table for known page sizes. + +```yaml +page: + size: A4 +``` + +desugars to + +```yaml +page: + width: 210mm + height: 297mm +``` + +## Header and footer + +Style keys for `header` and `footer` are collected under the `odd` and `even` keys. + +```yaml +header: + color: silver + odd: + font-weight: bold +``` + +desugars to + +```yaml +header: + odd: + font-weight: bold + color: silver + even: + color: silver +``` + +## Topic titles + +Style keys `h1`, `h2`, `h3`, and `h4` are desugared to `topic`, `topic-topic`, `topic-topic-topic`, and `topic-topic-topic-topic`, respectively. + +```yaml +style: + h2: + font-weight: bold +``` + +desugars to + +```yaml +header: + topic-topic: + font-weight: bold +``` diff --git a/resources/theme/Theme.md b/resources/theme/Theme.md new file mode 100644 index 0000000..18bb06f --- /dev/null +++ b/resources/theme/Theme.md @@ -0,0 +1,40 @@ +The `com.elovirta.pdf` plug-in for DITA-OT extends the built-in PDF2 plug-in by adding support for the `theme` property. The `theme` property takes a path to a theme file and changes the styling of the PDF2 output without needing to extend the transtype with XSLT. + +Themes can be used to adjust basic settings like cover page images, page sizes, numbering, font properties, background colors and borders, spacing, and running content like page headers and footers. + +To generate PDF output with a custom theme, pass the path to the theme file to the `dita` command with the `--theme` option: + +```shell +dita --project=samples/project-files/pdf.xml \ + --theme=/path/to/custom-theme-file.yaml +``` + +The following topics provide details on the theme file formats and supported configuration options. + +## Theme file + +A theme file can be written in either [JSON] or [YAML] format. + +The examples provided here are all in YAML format, which is generally more compact and readable than JSON. + +```yaml +page: + size: A4 +header: + content: '{title}' + border-after: solid 1pt black +footer: + content: '{folio}' + text-align: center +style: + body: + font-family: Times New Roman + topic: + font-family: Arial + font-size: 26pt + font-weight: bold + color: gray +``` + +[json]: https://json.org +[yaml]: https://yaml.org diff --git a/resources/theme/Variables.md b/resources/theme/Variables.md new file mode 100644 index 0000000..51968fa --- /dev/null +++ b/resources/theme/Variables.md @@ -0,0 +1,16 @@ +Theme key values can use variables to reference settings in other keys. Any previously defined key can be referenced in the value of another key. + +Variable references are text values that start with a dollar sign (`$`). Variable declarations are normal keys where the name of the key is a concatenated value of flattened key names separated with a hyphen. + +The example below shows how to set a custom color value and header font, and point to those values in `style` keys. + +```yaml +brand: + primary-color: orange + font: + header: Helvetica +style: + topic: + color: $brand-primary-color + font-family: $brand-font-header +``` diff --git a/resources/theme/duplex.recto.png b/resources/theme/duplex.recto.png new file mode 100644 index 0000000000000000000000000000000000000000..a176e1ad51f2559eadc28adfdcce6b46df7a6682 GIT binary patch literal 55414 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 literal 0 HcmV?d00001 diff --git a/resources/theme/header-image.svg b/resources/theme/header-image.svg new file mode 100644 index 0000000..891b043 --- /dev/null +++ b/resources/theme/header-image.svg @@ -0,0 +1,61 @@ + + + + + + + + + + start-indent: 25mm + + padding-left: 15mm + + + space-before: 10mm + + + line-height: 10mm + \ No newline at end of file diff --git a/resources/theme/simplex.png b/resources/theme/simplex.png new file mode 100644 index 0000000000000000000000000000000000000000..611a29a9cc8b7e148cb48ff6fd8aeaf9d92d632b GIT binary patch literal 56345 zcmd?Rc|4T;|35l~s6u_cMD*_T0zB8HFejR ziG2_VZhA012&6n||K@ED@LAN!&;ka5gh@ak zQGY=o8{kmXBm@$u0D(;3f4V;-dXJl=5?yV3~Ob8XE?z(7e ze4|+&VleVa#wuP$r)@U>Lwhfm3tQ2;cfyfOo7D7Y9}G(N?9XC;Y!-wT6l7UKA#=Lz}8j|uA^6H0pOZ z;C+cbuHG|HJh#XE)-{ihKKJ)Mtv_QM&olHvQOwX{9dK;L0wt1Y4glRP=@yt#mUn7yVQ{R)!`!w zLdjIhY0s5_ecy3q&zq}UAFzUYI( zk)3H0TumpNuIUyHsbNW7j=xERtGD8=187@RovstR0k zSoGO$h$lChe*Idy%kgvG!U=&~YQjiCnp%uf{t_gfqOSG0fv0ip&Nh*7 z5A9e(sif*JD=#GHCgikd~3! zK8JgAV2*b|-U-?_Mm+zij-BZ%qu6;j7?jR*%?;J`P(t+eYrLrv)U_%9T&Cc2493DX zW0^B@fioa1%snUTr}CqRre`CqUh);RH0PiG{(x7c3++uX3ZDOQhD?`C zbkfw;E`*Y&R_BHS)_xD)Bs_TVpg!n0WaN;~H7l!XkJAuHW&)IaCGxx%c0H(0`+C|3AHiJUEn*OKU5sq=_4W zbtWcO_xSvji@XRp&e~HKycJHeEEkmR%Aj_Z$qmnL zWHP^j9%U-+_xD;SlX?%vvT}Xe>(@!F9_-f(yuXNQ6w7N{+e)7oB;p?4o$xNV=}t_I zH0SS$phL|Hn?rMQa%?E8&@xS3U2A-QVh`m_vHRyZtfK0`i_Di(HKmB@iRo!4(EJgx zs4S`dF18lO;=n*4baG$MhpxKnhist?lF`P$4gXM@UkmS2 zR+x^D!g~G<^Q;AOTWAB2$QHuV45Zi}t!!K(JDj%51zyRCTcy&4} zzSIi-{R;9Z*WDj(EriD6G=nsspP)<>EiMNH3KCyR#$T@s{{0=-pwza8a{5NOK`5Qr z4Vof%k_)@%VBBrwWvsD+N-o(-!IGcD#rCp+`O`6VW$^jhC*l(K5s{ft%=!LDd4>ZY ziE+2@+LtEey*j$-Y=7@=&P&E$Y!Hy*is?XqCRG%G zVU3Wiy^c-&<5Mv-l|5$^+eNuquN+I!G6y{6RHx~Asde5d?Xo@6oDfhUr*SjOUzd9}Tq2V!9@aV(&1ZFcqz zFf{b{y-=5IIQ-dFvLHP80^rJG;Va@vh3X-5-2_aY4`X%#Z3scRlePMV<@ zHSB1e+!2G$(4(*po&iZxN}i-eP@u+x^7Jz-W13B-wXkxnsDw}HRHbyR6rc71p0pZ=Icdf1B3p{P#CXB=@n5taxi%ux*BUium-pGR%WE-JkKX zLMC5^bX`G=O{l{IL~5O#o$*5YX0gILuBvEr+l&^cf&)2MGF+6On?9i}X)I~sd)83< zVw$oaNWq3PU2MBNRr3ctZ@k{$z{6_PlZqK!Is7B(n%=?dbVj%fE-5n~SX$Y#WScwt zn|&sLl_^e5O}%--50}sg_7jNb3g<&Hnq>Wh?9))hrGxD0w9x6`?TB)lS5@#nt5pN@ z>sD4)3_{tg%9b1*s-shia*)d`o(1NwO>|WGc!#B&c^fpls~goC*fK@0I3q8@TJb|8 zS2-=i`5a}APG6K+n_KvdPQn$t3HVUgUZ9z<%I+T484GXJ~wa^CgS;yi1QXM{Uc8gE3!zM<3UgEYsj9>!kgFi%xBU0Q;`m($^Uq;}*v{flX52e)Lc>UQ8^kj{h_5 z!R=QWug2${EciKquPvSF#f&73J^K@~dNiJ8McTlvxEm#suJIcnYZH;bCN9;!xxs(` zs%6A>n>FF0zJB7^8=2}U!kBVs89%Lv)|r8|Cw#4V9G`d1_`bb&MJa1CkUlPIFZ@Nv z)p@|m;Ondu6(dy)a@3Mr?(zhT>%2Ta(oPGzkSxB}z`Say9ub)ijoXorq@gb7#9^?T zU$;~5rLOlJ>T=xN0l_kjIoN=rDf&2ipaOWMqWrk?A-jTq~I96{ms|58mFYRG!DCkDL$o)KwcXwfGv~G zyZ+q1>oQMNiufs_uY0A%47Rn>HsSL{hGL@A*Q;Q|^zXIy%QBPmf1aCbxe_pc%*v{8 zH|G|PFcnaYnLHhKqKRGaMMgIWB|yRgT>nEuS>4twv4}(Mc<~HcZQx~+a_T2iNa;)| zyN=+eg~tbJbD_fbZ@+5G#Y%xIDhEtB#03|WIV=UgFIYa>Tz)Prxm4@BMtB+EGfj+G#m+Hk<{|p zANtwg%S{shWQ0-Dwf~9FW&U+6|3vO`TlcW*$&uju5Kj@1ATinGr86VgG#f|wSjUEl zzBw%dR~`4rq5jS$-x~dwVtv&MDdP32(GM|%qjyx%Nbxxtk|d0h4q~4oU?uJe8Q5kh zqubM>%1yJe((}8e<1ao^cC&Srxni5aPdxu8$2`<&Ni9O$)QXhpQXWRvHJtMq=0%V$ zF{4XLYRp-A=pAIE(}z%Tqr5>Hmd+08)>BYX1coR;b2uT`4&;Wnk9mpDDZ_vxPG5%i z6^a|VPvo)!%&Zmd)4+Al)b+k^s}Lvp-XH`EK4_~b06E$`aQ*Yl{EYNiMWQd>qRfdi zT3|qxx+X=YR}U%KA;`;U<% zAf@Lrw+~DXNf;fvDRUHbO7`e}u`o@L-QxDVk&JhzExd4KrO+>2Z+uj^PFp9K*=FEw zeFz-BStn0e7empssJQ3NM4uO8WST#US_EQfuH8qtss}P@8XzCG%_w1)119_+yE|4A zX6d2}LKjxb`dWr`S0}e`cPZ%24j64wu5O0C4sddT@W5SC@fXvrFlD)?cgO-lJYSag zgIv5ifT3lZ6xN^sY)ys>$m;Lkws~zGktNe7EpnRf53k9&nAmceRv~gZz>8y>yf*2i0A6MSU#ue`{gEq zqdE_EuoNkcL`%EXu@Ckb^2ATSh2Y!AN^`()MP{xpe75=MGLhg6)~7*o@fFJkL#mN( zDCPy@B}JSY5Ns%k4RTaoW)>oc+*g1LNMc$=p? zA@AC*q#pwPrly&skEF+&b}8cLzEIpq{d;~ZbR470Y9$5V6S7Fy)?v<>mlQE1j{rl)wU!eCChqG*33BdE>*OLH-@Ekkj}zY6=Vu5BF@pq+5fNMQ>nnI&~RY6nmMY?&QoL z87qVf%br=;Zqx6cEUa~PU|sxcXWNONecxF5JIt*#zj=}Mbo)H9=4URbJ zmldyjSi3=eA<9_4TJO8+|Q|>}H}H zYW$F>y!paTvx2>?*HeK56vl=|*A+jqm1FkwXJ0{04Gr^30sAW(j}syu%gzBPrz{l) zpEl_z=pW=CLe$+|LkPg84DZ#26C*}1Bp@eKu85!?V92Q4%v%~GnR@Sj2#g;($Jdk5 zsS%Q*WE%GE%SzGOaUHXc#Kp(hs@87n05k;RdeG#_U-rGJU+OJ{uT6-434Q^#e1^;P z?m%3ZOZ&ffs|^Tm&se%f)Fl!*YR!_F4}SS2r0Iwwv2DPBoKmcU1ytpjN0@F+%>EoWek*w<^zlw-<6@!jPyS1tpHAjHf5ZYMzACx^!kE z&$CYNhFq}z*Ny&P^Rxd_8lxf>ijkJp!O9qeSX|}6d82Hs%BY=~h30L2Ge>82bo-4C zCs`=2_4CbJOPg>D{?GAq$nAc846;8QDuKu@Ee-)tqCOotvR@KumtQ@xQwql2Uh zCBPotRwH9v=n3E@5UF+e!!wtlj>-Fz1^92gT0`Z6ZdeT7%y5~@$&sRRnDTqOt`mJ_;1Y!%Yj<` zae+hezbmoI%R$uYO+{W|t>tC(bmCmbYRS-9XS-V|;^uQt*xVaL)T)gUNuDQ>6F--} z_$JL%AY^`0*Of%9!St#E7X~~pgJ5QqBFS9e2}5f^p`Np2_|;uvUnPN_a68v<`&iHdq%zsp{*Kov~j!eZbyf{Nj#^O#mhrBgR`74}S z#PU3Pah#IEJ|QiSIeqX}JSKj&U4ig@F;Nn!k2D=~;bQ|jAPmBOUGaCuyyrg=cgh9q z`AJT_TR9PZNJaCE!V}j9BIyi!MnOAmucdGB!< zo4&xLTE=$8 zaejo7t%SpC+SpE+!%eJpA8>MDQt<7&7jKQK^8m+`NZU2Jy~S*k!}L6@6!3#MtsfJ! z&>7ipkD*oB$b4BtWt$dBe}Es0tJX3arY;E%rAU%nj6^~)HHuNwssm3eL+ypPWk~1T zQ2l42&j#6((4ODOouuBhxHp%w5?dR?qfd(gi0}8TfaL&^Q95&_;k$%xP`Q(#9l||T z@qlIh{LKhEVMWx?`MP1`92RFbiF|p$PFJ;>bP8!9pR^fCvH9dfSWFFx)E6C|GFN~Wwp5BfwEMiPUS{q{bczsuMG2q8A_(KIOx zOP|oF@F#8EfK4hH`0c$9+@lagz! zgjiL*s52pc6S*I$ykgWK)Bs%Nb5aj65npa7T%-#r*wJ}z+Vfa(x9BZ^?QtzE%Tj&y z%?n)PLgHHKP?dKJ!y=9aA&(O0KdlQ6god7YUetBGwlU_RI}P383%5St98TDa*`R5i zCtQ+=zc}~uCpB~~my*JSk81$@_-uBFX1M0_;`;s?YJ{Ea@ks$)LjFYkO-2Ls%CA<^ z8|XbEZ7J0a>R&V@g#^P1@M6nK1MKVETv~0XuKn4rqNVo|C&xLWlkTkz2V1wb2%PM& zG`rM$N`C&WeBe$SeT7^HQNSa{o$7&v&<60KZ#+kFjADx)oS zXwAPV@UF@-&JqI2UqMAB2}$+Jvn%lge0HNtJrznA-9xAIZcT0PZ@NcV-> zdB&_oEy^6F+GG!Y&urYBxOuN@2#Z5Sk(%|ata?hHK!#$AFi6X9`UQK?a>3OC2OQ3g zL_1PNy|g&Z#_hFx5z@>Hj`i~H8pN0y=c-O+*WFP?jM8J!W6B5iWrm)!lha<1fe$TO zPkr2t>8vT4-9J;cm|)ZKa>4U9Mfk$r-BRD!U9nC3mWE|7t-ha?_G>*HB_Zc-H|4Qr zAWJ(q-mD4X=J+S6e7j4Cl|0^p^ed@|ZHn*L9j(9}_`dm5OG72nR_!qxILG91#a?z+ zMdJ?SY~+tQUCTHFz^Rpoa-_O9^t8P{2rL-&F7|_^ilORTjARLI@ZG#awbv z!n}<{jN|vBnWaUNCgXF!8@)4*7~;+$?foGpUGf&0uxT6L3#?>RIi~7SP6xhAT0qGQ6YwH^X^R7+b3OQtOuj6r60rcYh=W<9;*Fx*2M+Ta}$2J*`ESt z_^B-;5V%1g-&h@uaf`P3asLb(;QFYW?Ns~D2`8yNJU4BwBu(0mh{sA{%u@{8b+#LG zqJR1q9MTqX>S9v<^Kjs_#Yl?P`Zrj9p=|Y3!^ZS$>AG->@n>YWMW=`{{B;wW=#w?A zR@*ZX48i#)cWR&INlGS;4Zg{^uGd%13_t^TJU>4lUVjv{rr%?stAlS8f=x)-)S@kJP>C`Os5#komhi}NwV zYpJN+QB|aEqm$w$GBADpqmu9KV;1K8*ZDa(^xmdi0apUc9~9v-n3+>ddaVGb2rGmOcgws6>1`}k}8azP^l z`xm{HZok!N9D!ezLYx$+8@J@YU(r6UJH+UEP*;LgZJ%qoZoPD@FHkEf7(V@oGB&2O zTApN%p#j9D0*8C7h)R{+c-Q5e>e&ZFT@Vo&+<1%hJYVfCR@_tT)mWAO&^_>bnmn_( zWZp4QK}kgspe(MHStkG=Z~i1Jvthjy3bO?E0DL^4`ge{^^7s>bRP!7(NZ!}G9s_u8 zm_+K4dUb`-U3$DZA@0wL9y0{D(WXV?>Za|bP%`i*f$!~A$D$J(c>xF=9*Wt74SrzsF<2+-H-n*FDJrz*eK=L%oQ`oGRst0MF%U5e@P2%fv*3Qh-Kf)jAD}? zmT6UJt!0eX$r3}NNfSs((JM@~BfN)(RYY>y1>U9~d zX6Ll((#qS38}IHcmE*ispEP%sAyMxTp5;#-*wZAK8sE5MUX+{Qec$5d+1M@fm2$}} z9&+SEARM?)QGNaD0S*o3#}6q8hRMf9x(N^O(NGNKPPqc6S%^ii0WHODpDW410)mo@ za86#G95w1AUm}VAKFD{ZUiSBU{i?3fiO|xS;(8GZHy2;eCJ`S8_L&;bMG#$11>D^K zDIn7K1Q2pWf4Z(4wgC$)raoWvwLeO*Q?8DdSl_Og zA{8^ObP2cv(=K-_(m$(PuR?_VF z@PS|?N<{S8;4v)9&~GY1H|f6T<_3qA+@(*xZ}yz6ef*hiH>b@;F!c55ObCFh%EBk4 z-IJc>VBN+mFjHWi2y#zENIw#mTo5YJQ2^ZVE3MAb6_;WW%MGNeQOMK<>_E){AD`BU zsXM8kGTe^EoqL+GO;cU|ac{n){}fmfJ3kZTdv%N(CtW5jTcEP5pJv}sp!LamEcI8V&J^i*Gb8*5iPe{T z29Gd6A=2kCRLz$eEkl}YSECjT)p%2YHssMH;-FtxSn-KP@BzqM>LRu@0j+7y-xRP+8Jo>%nz*GiwGb@0g?IjRA>-i2J|ciQCgavFd} zo0~5M{s0UQ_}f#?!^&JVRs084wlM4$^fpM!3o@Xgl zra;Tyq{lv-WYBVpc9tBs_rrmp<>B-$R%-wgvVw;0fTsYhiU$p>GS%OWJKIc_6eT-J zD^^YRKquLUmdZ(P_v9c-%$Rq2?rwlZkk zVKzG2sdgfNZk!dX3#Cgmtn}KsFDO<=0~yV0m)m$tz^;`R4}ni*X^fU9Czq?sP%v%w z55d&OvShTHH<0;!x)k-bNXB?0R(C!2CNtg4?FRvc1}0NzhoZYhX;HmlK1~js(;VmNM1m>O1sqfv&qlU)E}*Yn3q4TyUPJ#U>iTb4vRe zy>{NmQLp-HLB5K-sT(&l?Y%SC2-}&>-KxBK@9w!w!TFG^G90F#>ZwM(yKw0O(#5l4 zLVo*mqv1S(>4mfhg9=|P7Yr_QY%~Qk1}{Hvl#;&DGn9to<<$G8j(^r7{M)+h{n9=# ztuI`6Se*n5qX;;PEfaZ)n=W(U2(^Ln3;hJ;xVrMX?LTp7)Z_pq8fMHdz~^v-qyB*- zyeq(sus_6c)ZjJ+8Rj^HfUmxc2sKI(dHa-iAZm03q4QR4k^~bFidfsf%0J7?d?)z9 zEYyJ=--BH%$Mm{5PFu@0FLBEs+PxWxO;C!zN}pu_5Ho=`5KmwQDvLIA7e)3 z{3rNaP-ZDh0L6XKWbR<9&UZOwl1Z2;s(NM>=1~I6cYhUk#6#%nz+>3-`BfL{^qAON z1iZ3*MO6MoeeaW0hVg+$_)xV`Vq#(t@?$y(D|pUNHJ9Yus`BG#Ri)ch9Yo0@Iunh- z951$ONxDO#w{(jLw#f}9JE!VRV7q>#mD*Bus%N6YA8*1Cvp3aDf61$C)(uwAgxNkI znAtmgQvAI?B->luqz+bhl%Ka?<1|j9UHx(&w?|h>1tP*|U{{9OE!(}g(a+x1$gUj< zatPm>U8+_%)HFp{__%+0eQ|6M-B8FQ)Hr{oPj*ag&rDdD1kjJLBz6sR!~8i&%Sdv; z=g+Fo0;)}roz4$%LNnR+s&jQZVW_1Xow>^y`L9>)?9kts!px@L2ieP_LmSsq=Qk4N zJ-r2l3@o$jA~oh!bK9yW)Ww)fugeI<8wCz)OC{4`xAK|z*Iv0l5<_#w{28A=SdcqZ zvDMXD4I-tlTM;Ljy|sjec1*arUuvXDAa7l47A{!;8^sw-5b7m`IE+$3Vqujb)R!(JPRS`Ya6E7uvj=@rJ zS2O3n-`~cRem)aP31oHbMp>9vuS#up)y&4^N(sfQx2Mk2<1k2h8J^hW7=B zcLp9Bs_HgDwxva8`d-1xQl6?tjGq=U-&Uy(MmxORwi6iEvDE4%YM3T9dY_;S4nB{V zt;^2AmwP{-NtmfqY3Nej=^qrH+yfF3(3jTz%UjH~Ct)}1baFmn4O}Qr6$s~0fGpgx z8ImR`26EoL_jRDajW~PJ1J;Ljuh7G=dXhd+pxt{zZtKZd{Wq#d*CC}T_kmd@#&vIE z7}~S#-YW-3yLwyenTitFWKhk@OP#QL`efFWEYk;D1Q6aLvMP3H#R=~vgx#R$m~`3u zJ0(nsovFsa&bi9!F|6j4CboKI{?wmV56>i&Xs-!1>S=LdRsTW+y@E+!&E=RX){{u8 zK}3L{So}ai&gZ(n+c)hLTY9N4=#5Tl=L7iUyoyj6lh8^~&COP>9bD>7n$ON`1v@oE zxq5HvFbs7U-q1i;`8qk4;5A?E(TB$t_6Fzt^bdg5V;5hx)<_H!1RTT5`_`Q+S}$h? zsl`dS9Y&SOJFRmnvmpt8F9gX{uRi8{V`Cog+QLxleHDbj&vZr|GEaxWtZpl>GjhzvZO}34*JL9>MCv9HO zvuu)gBy;Gh^*7&~BSM;Tm8EvBUBV=Kj?NB)d~(fn(Gv9r{W-|fF4AnR{ejN%sk+D= zLf7q7f*PW-{BoWbXXbrm@6h<@=~Q+T7RAo4e+|u(MCts|w^ezfstjTrHUiV+pXwr%)vO43``UebzoBu3w>3lV+4 z(BBU-as)D^xGy=?k}9qf0eA~yd?zHnzO+6?q{uSkOen_fYrc%JixPOe4+2*z3A8YY zW7mm9;t@V8fTnKY?d7D!iXXo6gVz9!kZ;cP_;>-}`In$&Vqz<0W9mHv16i8hwf4PT zkMdrD6Ch9*YP6AYU!81RtW6w~w0rmpuu!%}ERm6)U=g^@5~^_(&9n2nuJr1?T6@*O zQd)3CL}^>c_9&H1CQB22&k=pQ&#T(8Mvv5#ZvX2KMOi4y1#(mnwzOY20)4HlRQf}1 z$r`0x!_a^ZZfbn|uMCn45?}O)5pJrl4@BQz1qUMNsNCY>ys6tX&LamEZ?wvDBZ<&zt1sz zGSWfq+0OuV-rC2+Mp%(0V0D0$`0^GDY?{pm3W)ev9AGgMomNmO;_h*V0Peqeq0&rA z7U-zK_-2O!&<_9=pwnYIZ_h6&G4%5|{Wl2bz~v(qJ`=9k_&ku%1MxUeR!)^W@vmW<0_YzX_u*4_BSq1ZxG)m%~z{J(-~SU1f$)YTJXfb?r3Y?|QCQo9a@j z4Ibc=r4AO(VBm!s@_1;etF8F^$aqIf(bkHu>)M@^<7ki)2M(v7d55LeH8E2?Y5p7f z1r8HFfRiUpSfrP=u9gy#8$&SGEcBuT0hK_oCFjh(9(qwuiIt>1O>%Ku@r?i zhrvm1hMyVZqdE8pdBYjQx&{)p%f7bgZ(U*w`~QP^Ktj-y=SlCC&H3*ywvTf+KK~xT z-I$Ex7J9F$wISS>iS_%<=EMk-*+CWyx452M(R9_dIZG~|{;2Hm7)}lgt6va;WbOix zAJ}-XBFd3Y=R7z0HqVbN9Ov7{y=*K$d-US5h|eF6)kPzN4r(_j1Zj8)Ww#A*L_|+v zk4<|pVtUSR*5JYv2B72XFINWdmruJ6Ly52UM}(H@{QV54#8VLaGo=OJ79~Jo0f@bT z?MV3iF@!ro`ignM5B`oY0AT%yFbmjL;qcMUV6&I6J#fbo1t z)zwP8M40dM3|;B5o?09ujsvajJv@44pJT`f)os>ULs%)v&fQ3(q!l>` z;QiM@eTGLon`iUr=xAHWDTHWgR!__xq$L<0WLM5INmEV`HuQB6^vUXgr4$6oIf?_|mSJS4vy`0FO)#UR z0VM~Js@xy&72H@S>N-?r&V8ZV4;&$$zkk~hh+Jeuo^_O`Q_^lw7*PKfosmrwgg;z8 zF+W4wgpn2AP>KSgxoNwy!wo#>+03al7bAfAzc~E|ADR{`=__o#+yK9d4s^_FlTC74 z4x3An=fmyS-XZD1GV9JWuKijZYTO!9L2qRI>Gy_);I%z^x9lsNPC7&|TmakzM3=Pb zu~?k!!Q}J2sUjK;rL4{asgW4;-QsgKs`=IR-EFbbyx*ZwZ8gdC&u7T~Gcp1qXXT+- zmTCt`)8zWY&!1wkJ`!TZ150hvWv`Y8sjZ-v-|1dvr4NjD2u!u?UNBx3~o^hILuSU@fLt+OgWawa3RSm!~e{Vs!{7NNRAz3@4U~+@8JJL0~3~f1L`~ajbs>!jOpJ;an66(MGu;u&JGy zmD{Vtao#qg^A9_t8P@2@+A1ay0W^U z7Ix^Eh>BCAI#vN4FS&^l{^E$qyrb~7%=#;Gq}oysI1rxwIrEkOt^wij-lQvzzz;BY z$vb&f@Zggi9p6wk%q>BFih;-Ad2 ze8Wg_6qs{hAV5h6P+6kXvP>k6QhEU)K+PIPs;)}i!_cO8z!#gWK;HdD+~`hD)*nUy ztDe|1YxM^~)+GF`T*e~izC+0fph*T+EUOGl4UKz9NmE@6#vjLF{fF8{Lxq7h`=*1h zU|GM{IS)Gx5UNHs6ztA_`zP1}@D2C}VyTBfa{LN}C$9mK4kf<^|G*m{;s*W{#AHyi zC6EW%)Rx-azx^(ybf)ec@)wYQuiiVzUQJgw6DtPXC`-SbE$f+&li8?6wShW`IbbrS z0p2)8s=%io2Hokm#!v$lf(N*op8^&OIVEFs2%u)*(uWTxdrRy(CFm)3TP=w_K*Kj`w$>Of8WUD0HJM7=**?;?vkxt~4SS^-3!CGCofGN2fw z1ri%Mqp0+GAvJiz;)l(|H+mPzd4o`r!&&V>>o*c=3uoQhATytPZt17RU#dGrtSr2sz$WUB&c>WTl6vxmLB zefyRaB6Db_O*hVZRV#t(I+uU3NI z_})a$U0CC#kyZV3N9JM3i}D_}8K5X4z8x$*IUqCL4U8GT0jNa-d7@DY$P@pjmIlj# zf^L5Z&|V&Equaw5Or9mC3y6gJ`U*Y(`c-3ja24SB)>C)E!7?PB$Bw}m{)%lYkB^vyEs0Sl#6Aoy*Pn$>pasx-(r?5FVPO%HdXXQhLL>1&+Ov(4sRsoWhJ zvXD!^pAT4%3uDtmzpj@G#y^noj>8Y&lapyN4`OBP~eERwz$!VCQ-Le{# zU_11vl^AyK{Ou(^8VGd3MA&8=Z={g!7$>-$M&i+fCYIV?6kEgIGRlolrXkRSf8okB z5@SJL(ew&z^<7IBy8=%AEIh&(h@0zI;AYj?0utrz^lnG}N|}5>dW40eOTx0s;Psb* zz}|h2{>Msne8O2uu$hTRTq$9yByNiHnr5vc<6o) zD8cLocA6u>)SC0V@4cUC6LRzvkW=1P6!LD%jiiw)zJidxK_2@;0%lq5IQ=~M$N67G zGtWhfXAS}=&&{6#jd$OO{BWc6L}Yo}W}NfJ2#r$5=evm5)t{l53fnz~U02?JZCPoV zNHxY+e65h_D|2)-G9Em&7OYZzd@rZo`!_|Ik0?Mw9zg35a?(<$)^qqVHsQE>+nj&7 zP#*PYd!lhOvs(4`w1@pR@JMjpMf?}U+Sn}1HGoiUAV+jChes2#BFDg7`B$K&8#stFB#AmWJfv9<%Df8cQTw`x#{ z05sTR=Py0=Hgr@=Iz=0t9S9;g4X{JrWnVyhivt==J+YPk-r>$0iCs632Dh^ugw>tu z%^iSb00sq==v31Ih9t@bTzR2ehWMit{?Yx)MMNb>;1p@0z4P&TqSQ6ujsi`N#eseu zF?boH%Rrk767}`lTnX38A0q!F11xJBt^0jd!v$l{la=_F8?Ap8N(MT&Ba#N@&YPwf zNB;Z!Oo4u3;uI2b?kv+x*qZ--+mQ2N@-;v0>4~(UNS1=}N|G>+TI=PEP9qqm6u1Us zXwr(x*zkZIpX2s@NNC3m5eZ$t3xjEmUo(-e=e^;?G92`K%X+Zg(66ADmAl1Ckft7X zCCk%%#PcA{y>jJBLq}!1=Hg?1$Fwo^8v>88P#|hygqLP;Ym-llSqSV7)f?F#2+9#^ zKP?M!-ua`$e+g|cajGrK zM*eKVE+)au3(pI8OBnrd5oy@6e5aU$2^~PB@;#U^5TEJ`3Mz;64uWER@Z$m%o#Dy$+_#O9T?Ja6E51~@A`RAnFb1|k;gN3 z9)7Vg)z&qQb(3H5Gj@cAEgKe|Nm7|OP5I@tqByBKNmS{1usk+8`m$UHJ$+@v#_^^n z9qolKLC&m%jI}&D0;E*)4c)wuck6l=5Y*zH>TAOf>TO&>i{$j4KHF@~#x$7k2puSh& zXg{`UoZ`0xjqrHqm1+dFi66fDyb=38AmD@j7SuA!^J2^9$xNJ)v$a{i*_Po+B+*bS zKma|KD(`5&H`+L1l0j$_9LQW9tD~wJ6yhbl~wZv)JQiioJXxA#*`YZ8jRjs2^1p_ z*CG$;cpYj;r)7C6KH{9YQ&SgGCM*946E_8IFo9icfg1$D5CJ73!j@u`64|4@@p`c(# z;B;-7k$cklCAnvu;pp}Ae4QY31U0E>4LeqaSvg>x9@R`=tVW8}z&@74@@kf#sW6Gf zTkzQ%gS`f~`qKWFMj;UaI1#%6XKh2R^}HVv(?eHg-@){2VS=?rF9vSxAoIvbyvn1i zYwa~SP=P3?3ryo3?w4btT%aP!&M_MonGw4Yt~0-BVFX0=Pd|~a;1A4iyfLsYw@2i| z)bUcXp+5j+YRwuHwMWB2)plmh0T>6Y#Hq1Tv3k66UAI|Z#gxD*wr)x~=z9&EJ33RZ zeo!p~iK25r?1cb@e@v?P>T*C5$Gl_mJ>?KGzhi(~{PFD0<`XXTH6w9x^SH*o}Q^7BJoKQeU~OC1oX zyHy(TZ)>p1b-hVmV_Ng?D=m0)_UN_}E3NRXc6lyQG=F|kjdr!%Qe#-{;}2d;ihxqi zP*q>L!MRRe`~tDpSx}}5=aDk2w561PS(-B?f7B(Zeh|oP{A%6V2TJb&sB`Zj!M^XP za_B*uOvYvibo0GE1o^1}Xdq>Hye- zGXIcmC%^q+-Trq!vEohyaVz-w3xG7a&)W|2&*;4D4iavx)g~#%kM-Zo$df!VVITCQ zouCusW{baZV)J(yjOj+58OiG>nBgIiAQO(DL|SP2Jkze#V>rAnhuF?4eg=dRAZpGF z2L}c9KI`zS6)br_Q*dT3l~yw_{MiwP`0IARR&F4w90$dJP~EKbu#4+whxF@&kh=}v zHc3ejuj%Oowaf2Yh5~DYYq$-nkXGXEg5=LG%XaBLHKxPcI1>Tj0YHsjozuz~7^!(M z6ACJ#3rtLcRMH<*e+#+%8mK5^E;RJq-0rBf0g;0sar#Wb=C8>LnI1HuFxRYJE8yL%i*0F|7TJHr z6=`ZIpI=3H5@8owR6q!!cM{5(!S{WC=Z<^Ez2lVo#~ou2w^EX4W+FmSFHVggrAY;yGOv(vMUjLBMqJ3|73t-@EAvGbqSrjZ-kN|RhjL)B0SB^Sku3s-yP z=`P{2syq)1TQNXR?!!@}|Ml=b)H~sfl{Y9Nd6<~4hx@Dt6EfdNZ=e=@yHu^5g3;%H z5KrU3?39@JbKFh%?M}%vewVFtFZl1EdzWUpso|%6k(bm>x9ldQ6iI$x)rMpnJpLk)|g1oS^wFd5Nh&Gq`y zQ6dU#EBckwFjR&;#g8DM1V?6 zX{GQ>wU={em{emy*E7oklHxk*@l-7=@ihVJi?nohqpeZWP@0Q86l~n_Cn~5Ke8XjL5?Bg;`rdpKjjE?d{+Xs(v<>$6y}wZjArI zai4d22UPFyN-R?#FF1JnZ5Sf-?Gjhm61j4%orJKsd?Uur=p7*~Yur{@p^z^KJLVcS zAIs{+GwqMab*$z0490GZfADSUYVJ9&1bmkNgX8^vNqgiwYr_VoatCWu-!AtZ+Ic5d zc!TW$IeTe~DC1{=8Y##dF_;Updf&Q)xpKmrbTmwZULFrGANf^Kq{m_xcAL6jk;A6J z)7padk`G<>M0Si}2m9m7r8hmIHJe>I)^)1LrLj1R)Vcd&jN`kQ)O{I>K`R`}pQ-8-Wu zE40Nbawr{V1Z`h7pp7d=?wRw=?2>v5xd@wa~Gmt;d)T>(Jewoy|T+OUfWO zz7sAq6WNd&UQYcS;l11D(AnR9eP?ISwM07aSpoqR)=f;~7VZ3{%^tMR?iKA_N*BM# z@J5|2wcHZ*u3&3aq@JVq{;!>zGwsS}efrw#h)=C_X?k{@D~{8NeZud1wF4l-=BBSu z6-;iIuqA?a)qHAya=n|S!d4aX^gA`1D8;gd1?DVgXe$~?=a|7Rg;Ns0=xDT+kWqSG zt1m&V(>rkU3X~Q1Ft-UPh}X(L+3lO5&1JUjaM{*_OhmC->}$feTAwE-o2_x5?UA?h zk-rLr)r(LlEi}5mM>A}$AGgW%@n73$&4)x^(1assnIz)2LiTo3 zF>@brOw=@!L%C| zedsd%QiOAr-bdmaJ38E25&BkcYnT2hKV7+_V{;YCYbx5ZlR)Si*lunmbb?F5A)nY? z!dvKWwBmziw_2^O(%0A~^ylYE53h5=$1ZQja*OQDD+5NS#D0m^hLvBM*{gM}9b3I- zu*Oi&>PK$;BCKJ9yI;8P#|pKJWWTQf>eKcHIIdg?1ev=rQ*AD5zqBc?yKvtF`6m~d zOIP1m3HW`7Akk(&%$T(}N+8}uElP1(>ETCB-0m+`?)`O774wrE%rSHOFLt&qj{8z26ie`ah%uw01bFKS!KfbV5 z_-J3om~QY&*BZ;pnIv1f*N8}@9DiM~% zRh)>hVP2lXxbRX3+kX60#uD4Bv359}Az^tohU@7Bvu1)^DE+yBNr)!- z#W%hy81sty;(p8O&^1Z^H-Xl&kU*BcmU0d2aV)hCJL>(&YT$kIx&5Z9=hBPT;1S zrp0cJS6a0gyeYEw$gw_S$~E&>E7XnyD+)a(i+LSlFUSNPWp)Wv24e9(qBNoHBSkAkLCAjn zuKCv5Afu{b?|R0URj1sfGw_}b6iHK!Am^DcDZ=qq!SY5(n>@fFz$9gsgTz zmvgFl6|^I>=IId1yW2%{Smpi~U)p3zdH$>Xb2+*hY&FrLX%)hAZvB|)cY`Mxsk5%i zoyKZ$k@<`H=UU4KJJPKS!gY0p_p<7mgwq0YF1M@zVXkM_ zLEA=8nB1|Me(&n~pw-&j^}W{$6(x8~K#doaQ`Vn9mJz;!_iw@69x0IF!&peom4d0H zzPMd?*QUm1;Ulv_DeO#xs$n!c$7*FnXG!t>5bi=%6(R$a@v6?}KLkC5Q@A1*<8av3 zMTtnBjU+NeO(PsEhWuM5IL{yuot-92?%mxn-i`iZGpp=Cx+LFpE%t@z@HJf>Q^PZ< z`=h;ZMM^DF(VopwV@~TgyNYomYFnl2UM$iy-K{YPS<{CXE=Xg)#s&}WDNZ-Q#Eo{M z+h>F>mG;Ta*c8_qn^fg}Ika;%msakIBlNgBXX2G&bm#GEon=+I&eh|4je_NSJ|S?^ zj-oimy?iUud6%L$P3oADN0GOJg9gu8nHAC?DM>r!J^4|}1vvp0=fuVh^BlYM?oAu6 zU)O?~igPk$dh7Q$vm#EU96=nU10Ad+u;+@^FpgBol$>-0k(|gZk3OxMDvCS71}Qoz z%o1%~I8SQ0LNuTUOjJ=P{CgL&3M7V?tSWra4%u_au>@=^k>w>O#5*V12G?n`ex1?7 z$?TZx>PaCNv#Pu7KPjy;oN`18)+;`uKkumF#jElMx!4fx1`DtI0i2R~@AU8B$Xa?l58c4e{+NrIb`)L`eL}T5q>))bI8MaLlt>CIGd z{r)y1hlh!tt3`CL--lrKSebdpcn00p?BG&Bl(`!sw#!pXWbJLHJrK`kMtB(356_h^TGeu#cB{g zlv|8b1+2GE*8VdwDk+O0AFg*F%5Z&$x##yPM45JZ8dD>O42VRQLY^3#s14AZe|fr3yLh7d~q|I zSF#2*PuM;$^l!58hb>;5`u6<||66tKf9V4M-(SO`+**|4$q{s((jH^4i$`42{4yPN zAk`rpwH3@lBmg>%uo0l&gzst@-e?;tnWG>SgN<%F#`}O(pP=;quV-ks);#D{?q_lo zzyu_e2<#34M3}8cE_yzcXcyNACZ9PsP8H@HLOug3FO6Nzmm(KeWTw` z(9R4W)bAmAAUxU&&3ISk!gN6xRTn2i9bx`nlIiwl02JITEYPj`LbRqq^`S`YI&oBi z&=QlGWMa54J0fGODB_@6#Edxk8m9gWeV672t`DbEh_}W5#V^b``?OssxE@|=_e)k6 zNRUBFyzODi?J|&y0O}B~?|eS<=8SNv=#EeDZ{V2%e9aWBe#=8Me%G%@D}}=MIJ#w! z(ijom=bN98NNat?U@pOr<@BF#f|qwsP|xfqx;F8nT3w6iK(ClcVK7#Iso0ry`z9O^q6Cu%i|m!LW~(3{9_bj!Q!UWGbk^E z1pj95WGl6y;fZKCiLYq^1L~vS4h@jH&CZ5u3@xWFoQ;qsJ2`IUxHCK1HO zczezR0v5y3(XaQCvMgCLxF%o=gJl|&j9o#mW`>8amU64U=;XdwZjdWRt~&-u=?}F( z8=LjyYic%2s!u(NsRnQiP&0Ium&+YvG+d>Ic-x?SW)@TW{L8Yr;XYU$fRa<%kiac$ zIo;pH1P0iqTgzsam40c;lIIy9yxFrji#!8>TfA4f?VS*Z$M7J73Vwes!?CO*d}n6V zsVCDJV&{^{2JLfpKsrD!!1FR)q*}R@fPGzF^~G~a2Xr*=H;wwYbrM<>)MeAr7rGSq z*`(^C2k{C?%p+gC@AbbYiLl_wKzCY-9RToU2e@^A2S9zV$gyXpa{Yl*SGVdJ5L2HC z^>OMR9c2fhqwdkYy3fE=4LqUnnKtqRo=Ou5njdoRc8;l|tlM%7ZlEW#Qls~E%(B=T zW$tPy@9;EmIE`1RE+07y`}_AtjiU*-{yKXvG)(9*9UC~KVp=SS`sumYv56^Tq9iSxnm0cI78` z2JNC`P(d?F)!${b_vo~h_^c{%G*L%t9v8Xxp@aH1$xu+N9qm6AhPk;u5FihEBA+Sx z#yXVlg$@vc(%|z6PT9GHl=UGUI?CrSe_#5i2<$ zaB9SuX%`n40*|)-%f$`_=|4&D>s$ zeVwsrXuaBVAWQeo_H^5%B0cbWl=Cl@JNMWowYvI=VZ+ZjM~~2t`}}$FE>O>x`jC zVW4?}%HmM0eZ@V$mIVw)57i#U+5Z?o?OVe?)OF-$gDx*CqY-o%cjbnfe6Aud>VNt- zcF2GC8RyZs(bs++W>E1Xr%rofi!gIJR;UIeDq7SO)C#LFCe2%y9!k!1l20=K;Wpm+ z%xssrdT3h=$;R9)A)fXTbj4==gr$ETI<2doDLpZT`>_Egxydbl%y9m zW82h7Ai%x5#Nk7#+^BcggF*rz122j{a($AtStpQ(qU#HF@2SO&ANdc9-1%Cp9QaZ= zH9EXPr5>P(kNf19pZ!>n=Vo{fKGfG7+1Ok^<&fmQH2GLP*9B09TV*`C&SG!fIB?mj z)mFpq{JC2GZV1u59KPjZP8t6u(|;o_nzq_-;75>u9? zf6p;L53X}g>t?Hadi=-KIJDo4<0~HzXuZ5iY%J2l z{64L_`aC)J75mF#EGV+Ch(Gp7T9#B7sORs7T>_dl?9&1uafjF^$(2?~4$e4B$>{#E zndPqzYH7_wha{KEb$e3J-h?^TM6M`OK?F-3y(1tfm_Lw*)hgJ#^T54OLzq#k?U`!V zX9Og98&5l$?JVzV9@qIJ(L z3$3RE{~7XwV)U!6w^o#+T*8<{o!34BKuG~DP|ZFb58(b1;}stA4NCBg$!m(+P)lv z;}?_^SDK48Wj=r&6NWuhcr0(ndswg6C^MD9m1GF4uK?^~L(1805W63+ZID|$x)i*# zUGbRgW^~bxY2RL7z#bd!Ym7YF-CzT;mk%*t7gU4&=>>yRNkfMoJs#Av*|q8U-07Jg zHj78i5K$O{3IyyLQrH%dHg&bSSqu@;Mf$YHzKqK6LFE!Gux9tls3uC-z4W`wBB+7Y zBiVCqKDBFi)G2N86%dqxW^Cue8Ka7h8Q1Ady*Brwu-s;lNj68`OS=0h3V~He?Wde= zwT-&MQp8WQsk2W_SYB;6j$samzL~P9>SfFwBd2Fl6fzLW3Z^vPA?(g@({=?Vy1E3c}yjO}y!~6Rk65nwN9z@hBMQa&kzsKJnLvjQa zr_QU$!(&Y6tQp<_xQU+0kdpNM2KJw0!foFu(kmu08SXt%JaPb)Ys_Ic$M8E4!-sE%b8~tub2X}ZiZ`tx@_Q((ACBt6blxmoBfk&7FMt5^eF!X*P|5Y)LGw6F`Srz9 zl_D$AJ7vA6UK-9Q<6h;L8Y*^?ZcO%W^;K*(m6)3P@p`DdF~osS@k1NAo;yP2F;6Uq zUfYOQZULCQZ?*sVjEQ^JL$elLsPmUU^3SbrA8%zm{dx=tJu<7{{F;kfdw48GjBGOf zf`dIF7_|@#>0->B>1X%l*QPiZS zA>`N#hacqz>5e*p9X%NO{A2$zt}jTB@So2@{)ET*XJPGY0`+ge)hYk2v?k=VWRvy) zr|rVXLkTQmU=Q>SI!B*Ey|makpe(r>42vq+k|iLLc}w|lGi- zg8rer268gDF_s+a!hqNVkw|=zcT)(thRhonXimj2oXFoiE2yfr$?d!7xdHiE5yXT~ z=mkh;l}KqQ*5>LePjVzTDqfO=LlQI_u_o=T<0iKvb4h+PeR_2T+UlBI6 zjz1XH2cZt7iZ6biRwA)~dJY`>FkdMC%+X+Xru)oqWdC^;=g%SBk_~`naH#bS9ybR>Q5WG-%w&S;nYiXld(^fIDWoiEeIHKW2lIHpDTvI`G0%n?d*09bF*2M zzI*-8>(tIL(f7itk7_-fy828UrG4~;UDW(ts}reI z%ag09g(rOzvBGqY7@~u3f!`>Z5ItxbG-&EnKQa_gO|<0mkMm~72ljRD^rIi4d~d*5 z3ad9N$#rC?nGD-8jIj9W`%UhDdIm`x@mOn7nrxTgd+%X0sP!FoVAThAiR1!a4X#oM3s$V$oNvzxak#P`U4CdEDLK z;|)K0>;;huNoa$YIE5P7fx0EsG5XX);s(=4s0C%NdBDAKwnZ-P|1L>Im4+Sqh_-3h zwp0GZseoi#J&ABa`$2zm8^>=bFZIzA=!S2r-5JOUodUP7s|2_BkP3UFF;5&dly--W zJ+#S489xyvjS4v)bo!x65M6F=-po8ZQrJwWDo>bKHg(MH?!;b;GJ%S%0t9LKCZbe{ zx{qTUW{y>N8(vNS&^+U^s|%uIzAOvfojHaZ@kp+Rae^2BV|q`9v!i?F4^x4=?@n4J ziFm*EN|fxp$9gHWw42pgMzX`CDHh)l<2Y?ccz?4BiTG%3Wj)uT&aoEn^ms2a)$4=a zpj#{H)kI+HT%(JUUn^c%pd2zItogEPRDeTtLzjgRG;$g#{(5O4GXIu+HqTOGKDjep zt4qtspi4e#J~!>mownuHl@wZM1~5Hwa!oEiF2(ANtk*;w`mh&)IG$SEX<}7W?P1lg zrlh&IJzcpQf4*BwvMv4mooq=)ri2nkm^Qn-*n6wUqLqZ${1{2V(7I*PdvRWJc0m2v z8$Y|ju8$QkOI&2ifcg;)1%&c<{GJeC0n~J7s>NA{bWZv=JblhT%(?npRjlpjMX6U*IxN530y(B+Pb`} zN<1pq>$${yPX3DBv{uvslqs@GnD-OO{~@ADGD=8qEH}>*xhj)^F1Ep~7TcYjz4(a(WZ>3v~XHI4$Xe71Gp$Lg*cN7G9XIKz1s1bJ~G#x?6 zrHz;Kc2h~nHQ+GUORwdf&UJl@)ly)LQEv(I83F)3fZ_QkmIV zUB)qghSAF>Oe3~C^9z;r6y~koDJpcP6*^9qGIG7MBvEwFFyT8^y)|n7afl|3Dw3DF zcMGGqV|OO|NcGf_bAzp8=Ds@)=8Q%5jMM728&NT|pk!v7-Nu^s&~Iteh%p(|6-F(; zRf&_#Tn9_G#q=?RfG}ulSQ4rtEBFcw`7U-_EM53$vVt%__i~2w|!v>>P`$ zA~6VB-8VU=O}#MNCJKXIb%hFzk~5kWiDV@q;+q*c%8CR_e1ieXi$zS&!Rk_&)KX{X z=NoWN>`PQk6bcz6m@_UZOR1WtIv0#l!^m6)1x5P3lFJ_@zj0cgWoBlAy9WYyD8hNI zu)H(4z2Q&RM}E?Uf~xt$0D=1NSXIfZjAWB!4%-OYqv4Ch*4agF7^XRR!Y*j0lh&4p z)ZGG$71cX@+4E>3hK&Fo6)Mr8=yB#F_-xADpp-LO5wt?27J!JG!;Rt)vfvVC0bWv? zteL#K0(erOIr~0PB$lQ?4~!b`tJ39U2q^)ZAul**Ib?KRAdhg{ zQj5?^OSJ!#id)8LQGQsMW$?-zRqfDx+|hgQ)i~m^7r@U>Zv~BbU+~(>{x#_OhRPr_ z0BP@jw2i?K0Vfh?JRAblB7h+WX~6vYFNoLde_&Ci(<=8SturJBK44&Y0Cnhz8Y&lE zV=x@k#z+%Km^z)C**}YuS8@vzOFMFA3tWXV1vWisi9j!0F-tB&&UobX`4CG2stShZ zmurNUHEb}d0I`Cr^%ezOKL_9v?FOgwu@G97%H#U&RcpYw`a9$FLVH7{3mWOBUL-~! zp{JwT#Rr4h?DUjXRps&IxokFzX|?7rp3G@6V_W3?mEd;RJhUXB-aXf5jh{5RnN@1V zE{!gkBUby({MMUlXKy5Rb#7AnQ!Q*icgNpEdO3DwQ_e0!*?`4InJo$YWrM}GA*^`O|(9r5rh9h+9% zRWSy49$LC|9-5G_q0u-0r?UMowgIRzM_v_9u&!b?LR|0ou}09(Gbp9V#De24MZ7Zs zb#+&R>1^r^3xeAA55gCuyc-T?N0vCQh#vy$Nl%=nwMPN;m{aA7Y8AJy5i@#M{pkH6>@BZiFRrLj_Eycc3jJSr%rqzq}Q z&} zDV!)DC3wr|2oLm_159Xc&Sv{o%1GLkjNneXdF%B6-OPgg*ZEpq={&Xk^Ad;k(Tw=U z_HlnO;Bbm{?;sZ}RtlW^zkKBSAJ=5xjN6<{H5KUS}L5OOv zmOCy*zE`cV)C=}kW?$10mpNZ`a-<p=v&@!ZLRKH%`@NM^!RXW1^1*_{9Lm-x|3(9N9Xt(l_DV*>@t_`Av^kz6!T95_)fYP`mr^70dg;%uEuJKyjeQ0r)2JL1`k*ui8Qc1PK=LvPzHpr zUX@-|;*OsDC?y=JXBS4fDi79Y01T#=_4(^={);7zJnTYWYWB@#J%k9w3j*d7BX~E5 z5jX!T&*XlYnQ80F>MeH}%6Db~fo(!u&* zTBB4}A+dU=)vS%l%nW8_no<`5Hs#i_Ve=2s5Dp|sDgG+0^W$OVYUG{lu~a=9hKqb5 zAL(#7n9H{ep$aGB!)fC*_BbDxg!1|m7Ppg5IMCU>G@<n-|kcha%c#4=;{80Jf zS#Z}$?Ep&8w2Fb_=RZC8CfM?hVe7^>FssAqH}$MjeFObT66&rVV$z*68OGd#anOke zU>al@JFJM6zG+!4@N5FtYp7@87$`x@5~6fB>T5a?C<`m`>Ds2r)IjU$jP&rt^>(P) zfvwHZFd%NuYfc5}=iY-0bkvbt$IOB?8r}A%X~MH^>YW%ndE|M>XrF^-LSXVUED}~Z zSlnIUB8j3MuD)Qc%hTdXZqXUAd2W*VxM?_o~SW|21pnIg)+x zmHJK|FFj04=YjXlw7OkpYV#{E5Xadeqw4rV+uooLgN{sYnc$_w@eqQ$-&aIhq_+Q& z7Im^a-mx;u&dEuZ;J%Jtxe7TdxK~gGhgucD0U#AGaGv5RpW>bgcx4zrIP;Vw_>|UD zEm?y#zp_XZZB+paCJ}#{(g>W3uu0>UN#uml1Bwxct&i55F%o9!t>sPB164DRMUu8mCuR14oOg7(rB)>p9j|?%p4&L;nN) zXIJSl8s)$?_q(4>A_n|=5J}Err(})ZI+*>SMQ$_wcbl+KY+%E)TbYhqYF>wmNSdkP zB%#|hKmxCpM-++WGzE53-)^19mb_su`3Eql1b8=kEGg@IpvDOf9R@)yb~P`9kHLvD zWAad8zN*BCLbo?aR{Lh0iA2}5s|nN_%HG3IKW`CcbxV$owDA#VH<$+uPEYgRYs1QqjdEcHC6ow5I1n4FB&0KvgEPXhuV6FN@*L=HTMTeKIHqzC;V9$+F8jr z`2j&k{Ao8c$M1!{2+P%|C!%|8BNL(%C_|mg>4_k+%NeBCCgr1ZvLq3uo1yE)kqTr< zBE3u~*L*`Q+ln0U%0L6JSr)UP?dQ+qa588eQd>CBX=Mxn|K#M~gD>$S&=NUY z`Ou1Dk}C-Uc34vY5nG*t|Czz-Ry7x+^EhmngS%~;P`Ub@gfaI%Yebacg-->zvgejK zJ(oE^Tj*Y*Pz;gwe~5hwefL5DRSV<-&dH&-DxmA;Jm->>NwB@G(`kP<;Y6E+lcy77 zns|h*WGaQSo0|W13Q=DeT0OclKC$ZB)C{b{4q-5L4X%{~1@Pu!e5EU$l;={oG!2r% zP8o>%IisZn%@;#IXYjYQOI*bJLpYrQCgcUoppD}vI2mO~a1s26GIq{SL42QAC51*a zCnvwfu5v$M!>dMUuxC!|k4g|t68sI&$C80^maw>KLZbu019~av9U^wk? zfI}3kGNF>W4XSG@l<4OwHhVWc@P5{c|xL5~0VUZ$~}r;5o%^xBoB>maCJ+WJU{8bsA$Pc)EII zM^)HlMZv7<$xFjD!eYL^5r2|5m1trA^URjV9}Q~JPu0+GvI22;_Tp?uFFd^yOx@8f z9ves0oK)Lgo=`|(JPhA#C0AE@Yz}P>rQ*ywL=6$0xPY_hT)lOUE=>Kb#f{#w>-fJ| z`kRveg8<3W{h~y)v$+$)+fni=-iw{WkIoXXRE`5NEaZ8l(5-5&xnsjFe#Ri+_=6@~!pE3DpH=L3uzEa|8=K!LcAUV*NfiC&;q9qJjSDLyh zuS%1`9)7JdJ*Su{{?r#TE97qDyuh&Va`T6wjFS8YiJ|48B_2qsh$>Nq0u9*4nzr@%VYnZ^t_}0Fuk*w z?;BLg3*;CYI(qbCu~193ECU37)zTEHXm$m^+GX2@pFNEnEOi|088LBF_t;VRT$U)Q zH}7)M#`t&36^9p$kr4cJX@{M;V3EK=mb&@*8&9vY>f2o_Miw7{_d|XUzebr}mzYfj zWS=R4zhy^`MhQl(Rw12rE$_N08T$Ld(dgQQLDy>;$JY$1B|-p_cB$ZhO(l*%s4k*7Ye9luZ-o`)4 z-~ZBV_3Si532noeD0Tek-Ep_1r$ig0Z6qW!XI15j9Ez*k)uw3E7TZqi5th4*tBVj$ z)R55S7m|xE&_xjj-z@0%3ZZX4_7^OoFfi!_5kgX&hAk2gU3+#l6-iKUjq-pXMMBrNqRk~}>tQ2=?0Adz!$lP3^6bsTQNE$m^9xB*!&vEFBg?+D# zlpyZgUo;+xhrbV&2ruA}ofNG*$+X!kLWr#Weup^grTcy_@`rmCbr+rv-@X%Zi|By3;h7F}+7Mx7L*0h|*w6n<_dg$7 zDEB(l>Gy*bTLIoW)JFruCi`OQ8vC7glMKKj`8OE_d_8zrXZhmC{CGcHCziXvWhko! z^VT$`>aS1l=GWBhy8p311dQ3u1~bpY+B0Ps7rk4`qJ}tKP&i%)lPXbM^FFfeQ9;3M z%Jg>xMp?}s)ue$bPS0m_XmN)hx-`*fY>(qZQ-f@rrF>eR$U3gfwO9`ru&7~-m{w1v0Y`HciX{f^@j}B8#&_Lay-iIOVD7n z>9cCzj<{Aze?M`UCVfec=QI&-%8wB>IutsL>WN^aomL=hvBBvl|3PYv>p6rm+U4;eI)wqN0M5K6MZtrt|I2RQ*H%4P)UOXpaZQL|&|eXlJ9 zWf-SR8G7z7CI=;hd)}fu)7{RPnRA~oP|Ui zbXk{lI7b<%uP_XJTa8PWwAYX<^HuLcE5e{;&{Vkm5w9xntruDN_x6-pFOzjwEOyBu2%p&CuSUrkkkm#s*q(mDQP}RSmj()}hNFRSls5H<2fEwTm)oh&=rVq0JY^H zvCYd|^ThTFYhR=JLenQWwKEr%*VeV=x%0}wSi3{ek4i~V5iHNQcewl!!g0uRz^&jQ z?w;c>Ty0i_Q(Yr+R_;AuPa#iGY=RuLrt1suUB}D;*spHct_Sqrz%uf-05u!QL9q#I z>HkDHszHaNk>pDI8+9w}?Rr~y%OSwxdFL;C9?b-+eHKWA1L;;vs!vZa7p9?k>2=HH zM4->9@P|KAnqOWH98?5^GpIe5VnM2$vt$E|XI4tqQNw+Q&>bMA1^J5)n?#TG;isEk zzYa>TgBam;d_dig#w|wV!Pa{Z+%9bqyLHe6vL`^7HUkp7mS!}Qc>TI+RV*lvr*BAL zIn?PncDB<_yka%zy}^q$t@n0sOra1&fXj={UqN9-D@g?Qi zShP=f<8MX%{h_z^YrT{o%O@3N>ui1j&}(p9*Yd9?!k%q@D01n=t$4Ga;ROkYejbAp zzzCofeWtqF3Ns`fx8Y}dWZMd5!fx5#Z9AaHQJdd7c+;UqQOZ%Y99(JyXD9J1kn-%KXQWNE93BavReS`Q zHgtR@aqeHJhh2z>-^&ik{K}sAVMd)Ntqx7oDi^uiy~W?U_4MD;OIKK7R=5v?F}OKz zXegKVPywh1b#u}ovH7I3%@}xz4>v3rnM;eCUxS`IY4#Ua3i?1AtGMgza4?fJ;Q5z~ zb*sZ0Jp&@+l=ej+IYQ;iI&cKJ#ROTC8n|Zy6zia>7>4k(hP!a-G+#(Aiv?CgEFD@DuFINM(t~V(dg^Utqa^ga2*WES=zE zO0USz34}hC)3rpmB95Z%aL?S%Ma+-I#T%+R2GqTQFhyZzmS$GN{CYld5nKuL##ERA zV-1Qy@y+v?wzfc4n*(8D@Z9D_-=NbMu%;JEs!nF>E)AUfYnYOx`I^B|#>Bi4foZ59 zFyxmswIAfJTpxBF^Ah`UraNp@R_Yb-r@)Q#I@a+rFp^6(4{XvvGMi^t4!%PHCVAH; zo$m@yQ}x;9z^zn$R8NvZ+m=P2B+JMbmyJg~N2-nd3Q&_k8o`_rZUuoU7fkIe-A&;e zq37g7yb6T@ftaQyl(i2hf8=l>F9h$>L!B64Zoen|WML2EW(a(Z>mZo0u+N~mH_)y$ zr}m)sY5kQBU%tgPG-0Y~yMm((0oy;K-=&uT zOXqIG{hMm2jtPm0*ENly8^H1kEa7?6-i7GG8_)?LcTo-$M_)la4y|rsl9!G4W@;Li z+)f7azel-oy-Vt9y;zx8NJ+q7;kBuMaJ5HDzq7ZL+0YldSePTRBUp7=(+m<g}ah`WXq7p%=$Jzv%7Eyj5Jy>67}_R}f8r()D@+**9mO8e0Ol z4%(%L9)}tYAdX=BT?!uT+=q-HL#*ua+U6%^DrQtf@H_`6@yUJiXo zsHs^FDMBu)O3+crBq(*Etz)*k(J9EAleu&}; z-YXzv-b@|%@CaM9Xt5Mvq=Y8GYMC0?@L(Go$|5ZAbmN!D6n8>Ya_iup-G*T7IQ8VF z}ZTR3PF3rRucb!O(08(5_Qv?m)AJk)J<)To7Mj)EJwiJe6F6fmQ(c zRH>MNL}IjGF&!od?8`sm?GBxfxCCjr5sigH_~eBz;^XilRh&*e6RW+|MuRVg*rWm~ z069(q+cfyRwQErbJ25LCDc6%n+f^?OIc@mm)`9tBZt27qcoBfbHP#He&UoXH$RXN@ z>4b9;aD$+<;lH$>OKM|9(qS4;L}cW1@+}T36xDUTjp^YRj@@PeO-V`>4E{L{bb<$>T;?ewC$$ks460p#2tHgA*p_xU-a zFLgtN1K2Tb(9`1DNp?b{bPu$q=vWvPTK#U)b$!mo>@xKi7`A+T?8O$qz2n#532()5 zf0@K2Q{8GVcNA*p!kza$7j^TZEShAgi^1uWkqaRVxv!%=1GzQxv zIqF=cS|&ad7n4(tl#4D5|1(~~`IXqUNukwClGPiz;7DmaH@fjGPffPJPfH?Y2;!6N z#DO0K~_z7JtT2Xh*BeoMQu3_8ORaeL+!(ZuN>p&d3zp;th$z4m{_q|v4_W`GLCF| zApeeWyG(HSuCguNy($^v7TCZvp2*czXq635t)>C?(Y+qS zvMMoM$m?@vgU`Da566o!6!)VxN(sqLh$A597cU2}WKvAO9gpSeYtADve|O3kviD#d z)IEy#XgqzTSGZiP*3Y|_Cxe}tm)}$H6*lE|j~CyMoF+G|j+vJs@3M+k0ch(j82aX> z$L|b!;S2VM_r2877vxyL_!;UN!X3@`nb{j>VOm*I=e-}gbmOr4v=_Pw&|{ACKJ`eu z*O*#cBXd+<@mf}a)dsHq`_@nI41VmJ7vS^2+YG3st2xGQQSM`&Y8#wbqRhvZh@cJ` z4-?`d+=}zIVhpwc%8BcNL~BjiM>%@R1I5AQ6ure$}o91K-mhi zG*B4;6>-M*qjzWXXu^u(J1y+u6V_l*#$bXVH9DLXrgx7{Vv^w#>#$6RJwL*xUk#yO z5Z;Ti^NS>UmKX{hb@b@bvjKzBDq#z80>3KtYMxu_uaZR0 zLL-liEUPf6HG#24)0k#UFU?;n{$pvAxE-hwRSyUZ_~hROr=87K&G@467v<^KAx~Jb z=O?vH_0Ty50xHU-ppYxP0pxF|wi0yO+^!0whGy3>83;%&-|g|Myd&EGw@}_CE6xM- zv$1+Z?>@O6QkP`Xw8-J0^dufx+Sk`fTh?+iYlfy!(vsqO>%CG+D{e-uB=FJSKsgy) ztm5X>he~n!IJEF$suVzhz#RC8$_nm80HkjgWz{}`K5r&K$5C~6*yidoXS@Ajx&FPl zGwVj(#<~XEREbVJ(K&~idiG!OUi%}fX2ez6`|r$7^j-^x(Rw+gBSeBNEiF&!iU#0l zYy)<;alkJnX>slO(n~=xva&_u-7ZeWv`uAX#faOR4hp3B$#^ssUO8XwaZ!WfMLHFL}tdf(XJ zFcQ3eJ^0X>%zDR}%Xf-g`l3sE?0fuM@ zMBMtx`QXNXCqXP&rYGOw1v!BufzLU^(p~~1ReK_h^Y3mo)1Mpu`j7u){(mA%(jK7EFnutwve4+_?_wfdcS|)&vkvjpX+;l z|M+yx72~`Igdx1WZ#CwZqqE|)8iClhb&juu#LvJZ&xmlYlOuIjI4{P zkNA!zX=ASr^Nrwc1KdZzjWFzVZ{w@GBOrb7AeOK>od|38wtKPD{#p;mR^_2mLK*zDmr%4UI9kB*$@<@-eVil zT=TjEEC8@A=nM|RKd|N*#B}sIULaP=Ey}aITzWprZ2PCg-}D6_vVu4Ioe-+@4{)$9 zxO0ru@MnOG|C~XlogDvLlb*okuva=?nsXNWY44Wx-8TSSJWCFpdZB|RPupY(_O1}b8*B6@sNfFWV~_9$(c#!o4QE| z5kke(XdfO$GIw`J`^fY^91DKkffxe7pXWFnp{9|vkh+huOY8_np>ti?5?WJ;*P)g@ z_S(b}4e)l+$K^Cqfy&6!m+&WSO^yF9Uf$nzJ0Q7rQ>7=?#R6Ny%R*(2T)Qyus zmH-J7FfO?~dAIz<``CnhpqFRF|b%LW=;V}Ovx0MSX-_;cXF)rBQg#? zmZ!Lie97e%03}8D2)O;#;0$0`X!4vOtPTlyZp@LgGFm{($`8GSFpU}9D_=14cn=Tjg-$`IYLDxZy%Wqd+;?{m^O_u<{9bDDbd z`jR2PyJXP(r<(H8; z`3`U&;Px$c=O6&-C1-h2qQ=<4Ha;~)89LQ$)bTe4 zSz;VaC3*E9^*;iB0#(wqKbcfm8V@TQi0|dsscZhLmc=raJ-_bjhjD3i6e9PmW0c97 zzL@byP)tLsuVCC~(R9ElM=3L3_7lvDwchEDM@|ciY4amz9VF8o+s!u)rioP7_H-@j z8JU|ej)=K=3D(Ufi=u0wf4TU$uU~`tMDEeW zKu@Dg4u}cNAT`+6AFN|S@tDob~;6IbwxzX^0TK0<8y~I*zI;} zqwN*kte-RP0pXIoyhVlj&6n2(IBJj^>0_KfE#*EiAI@05xE(seCDt|5UK&_@!8(rX zT;Qg~$%EKm7jY1O?u)bVY7T^@Y{Jp;UlU(R#azU}+FM=hSH7nxts{zZy* z5B%`;bnP0-bmL$2LHzq(&V-j`sVj)>uAjc9x6Line%~%UdZ`mpRU|r@sI4*F=JR%E zu}-);Wp_|&F?FuV9vActvTWm*wpmOWs`u|+YS?NPLlE*`ar`hA}@z?j-n;WWUC5C>!mJZwB@UWu$lRcHurD{1FtqW9kBh42n@Cr5)o)u+ij5gxZ?db1~Sa#zw z-sF@6=Bf?8Q-wMQ+dE$Dd`$LPo@nS$I`umSize7r%zC)y?~9i%()=gK@&6|xl9sIN z(`S3sz-ojT#Um8*z27{RyH(fSaDVJHgvtQnhiSGbueywAhLtYXHq&{o6UW(CyVfr; z;^|nOU=7P&^fd;uTMj_Sd$RrU67L)htfyQ zDGot3xfX7y-1%-rwB_2Lb7|e&0Gd9yX+pF_)js4GkrOPj>lGlh7v~MBFQFrTu>!)z zNpcL_Y3 ztFod15#Dr|;*Kd9QxJu5Q7gh|A<_#n$^FM6npQnZ-YZ}4J#qG>>u}1e=WeMkD<*O2 z$KwtqWPk`lrl3pXf8MncHRC(vb@UC|Lt!qcZ~b%a3}5wjX4$V{Huty65EiOiY@?v) zW`iVshBvgSw?_J2vAq|4^`T{;t@a4f5w@J3z5^U&AS;!sqXn_M4Tr2c|8wX|A15WM zvZEZmP>ynPu=F7TkHhOv|3L>rydcL;|KG?)-Icfw2dP%YOv(aRQt$Bmdsv&^tb~~g zcKYp*8+L2yOM#B%U%r5GA_k$$f2Dtks~Suldyj4d-cBgNbMA}gtIC2RTvWae71_D4P z8l}^|3qXPd95UbmN(}*A2syplq@>Q;YWH?b4sN?LprjIwJjg=`WC!O079c*3C}0)3mA4B4g~4JEw&uP0^sdG#vgp-lM<=NUi99#zw&;m#l(zOU4=VQ-2j z6I<|yK;|PcCU#QkKGjjhq^@cC?M{e(f}aDSf8YC(T|oT^yIXUY6$cW-AE1wZcml=K zl!@ADT}d0e8}9oE($`p$Nr{EUEyc~5nFzQD2bnnlg#%;__my%5NX-{bF2G*)Vif8( z1jUSZ&wj6S2R|)cEk`X9utuDh-BigmK4gFQr_cLJHz>kBdc5njXWIAGwY#|}w??Z? z)W#jQa~KSd9dg$Hlill*l$C@9OT1mXInt`@a*W*+&4xOeWMwfHqj0sBn6&R+s2`{6 zhJK$I*1`N+_ma;^^-SPGFN+0;-%r(ca@ND2F4}`UJUa)210hiGQzSHh2@ptMTNSVP zXB63a1{T z=mqDl;Qgijbg1kXVh--AURBERwV)T>es8}r2ocDxRS20Dp@1gnRv6*O&_|fjnxR?V z5}tmq zPF(oawVO66>ta;yTK5e1CfZ~B&1mv2!Cn{EhrB{!7)gc^2}}ciV=TU=BzR_uu#Ck4 zvH40(31=-YX(T@JvuHiJt9~9`G!E>M5;1MxMKuseS%Zykclp`2Z-wq?q~am}^`Wg( zi8*KZz-X$?iuH+V$&D)a6WFY4!A|V~U&#GqY~`=sf%t6GW+a9k9&w-n2Ky(W2?b~W zq#yG=e<`7Z@`RZ0^5Y}p50^c@F>QS#BZYxAm_oc!6UYm95KqE8qa%B~iZj9=Tt201 z3Q*JLrG(XI_jr;Lf~T7zLlrjif|AP1Va1 z&s*x28j5;l(Muovjo$cU=?HmeotKx2e`a!>O=5Ovzyt*EZh6>^p;}ifdKu`t zlJ9i87Sf~`8}EDK(1rTgAuab4yOubg<(Zzd>l`(Qx9bFh3172z)U#?X#YL;--0t-| z6uNU?5P9jBN7|Fgn6;VEPN4TDmamT& z<<^MBS)vyfB=7#KT)Sy1{BlrI-8{C_PX94!Mn<=FwYjBwR}N9v#=Pb@im2&4@zVIz zT6hs)3R0OXFM8B|@^_1>NYr4t)ZDq#QT?uT?~xTa`;)(S=?L;vWf`4d+QM$8^DjVu zN^1VoekJXk7}%#+oonWPXUjYIgOqWBLb?q~UJ(zdk8#S7To6p=3hOdKuFvzpQxD`d1}%TyGi`7%ZD5X?zcQCVu0flW6k#X1AbQ5fr)SEprT4eg(CtcBw~|KGcK*U9|7feX*Y{dt*Fa0-&gfDv z!~P!znGGhkYRogSbH8ezlInEXo;q*zD^q^}u3$(&GuA|(LBm8|v^;g{Epstz_-KVy(%CsENQ_c zZPZfg$jGZt!{zB>`(>^-yel5jydx8PW({j6Yr2+e&R-w4C!l_YggZ7z9C_8P9ng}x@pQKKrsb=Ff#v2}sj511g9sW#&!mhcM$6Zzt+M%TyJ{Tv%*A&? z#_z(CRUa>_ZXO-_*MFq^vb*D@r*>!hR7MFJoJq`OpxJ_Civ- ztt$aldlRpC%jK*k77F3WBt`MIbbmWKdf_aG`6%QemHoV|#(bM&e->>KGgQ5bG7H5| z+Ba54S71l3a&f4o@$;H+!4gRIcXm+!SE74bNa!(f_S>O5Ur!Id>kAT7Njr4wy6*%T z3gK8qEOQwacU&~;0Pl;lSz_i^UfK)3<0De#p|w;=k<(TIP`crRrv6ILz@=z0^rTi7 zVCsMuaJ=e_jjlx1IM$ueL_bGw!T%q=r~i<|yz4vV$n|On@fly$D*AFCky$cetm~G4 zW%Rmb<0Fe;yUL^WN-YMl*x~7~#2CvVH7?dimIKp<)a2{v(AC%nT>V^GTmw_zc=p(Y zuFJ<~)`sIJiF1+1`t#We=W9wf8quhB@2?N7UVKT*w~FPr>`w1-{ZRVrbrR}18tOx(he|Rl3$BH9KwITC$S%+lss85{2 zZhGIT%Gp~fZU9Q@uGob?CNREyZoC(no;+%VSsSmpY$ZPG=Af=WHT zy?Ok4kH%)XX1H5KM)JZI0;O25u-b@n$BY~9$ZX%(d}uX>58`fpUOlj^;H3JPIdX{_pRuW`Qb0gZq^#c+Jh^S zL)_~nIbn&VZf8 zqg(5>eeeGD$|{m&P4H+eUa=^trhw~eqcn$OTTz)0PVks%%lO{H`0cfAxpgNO9JJp2 za`(KJm-}Gb>e~`#EO0 zKA}xn($QLXdmq&>V>TwSG8almi*}aU4jje&eiYPDP&(XVZ|>hxxQVd-3Y|1PyHF|I zy)nWL7D{FA{47z^y^*vL#h+fQL>ai^2pCf z)~wSZE&)U6Y|gx+>khQEmJ8KTo-jDT5RqTin7lGqH0r3Onpp99dVV0g0E=)|nww6W zD@1E2Zd6D2V_Rs`#9;YE@UBYFtLc&;^0FMV8a`b7(c`V8-|uJ8L4Mnh#U9{~;V0%^ zx-W299IJJ4&cZG-`=v4zH~ISSRO1yl;$J=g;cMyp=Oxc;_TR2MG{<N=Fv%BHw*E zX>u<#5u0`(aVds%{;AcQw}&Wt_Ns#^BDxhffkT=cg!!-FI#k+_z#q?eqjHZRx|UR( z8!C-o>}N^!KyN%YWq!F=gWaoMo7*rQgw!}9)Gt5!Y9;C1d;N#Z;&JJDByjUMyK!7d zvu^3FzxgI9lYCjRIWvBxooF4-Gwpt@tTc85B6PnmLQS?>>MNWVTCkwz;|#0TzT04wxW4)$8s{wLYUoWer-fTu7@PtI5sD zTwXaNXNeZIW6w$>`JNJW`B4Q3QZ9dor1L%_hX`z!EJ&tV|9r$dB!I3pwrp#jZQNaH z50#$GQ2<~OQU9xT=v2FEA9Xb?#)O0M=v4P=%+qn-{-TS{iL=|YtoPBw-dx+CG#(GT zqK54t)h`zE>?2Eub=BlhK7G-tEy3M+rAiUBoEJEY$26_b8vV0v^^l=I{mfob{wG&HF7MmFT_OX!q z3$()-)v_D9AB;-9rK!CK`Z*!qX&IsbF!Jh5FlqLSioUg0bE#NvCX?aHXbyh-;lOKY z99dOvU;FnJ{$_JS-D!@|A?LW#>}EN`-ILaUCUP(KcA93LHZqK~LME^PUQolmw;FBu zfMy4GVdlL3@ZhcRHI3jkjp(3fJCWK!3EsS$jIi}7^>%npW&GO4cZT5Py^h9h8R39< z*)lQg>@~pmGIp~cU$x>@;G&P$MqjBOl8q_Bc)tuAQLZC4R)@sFO5O{atjHA^0#?J+4*ii~R zyjh`htO}Q8UrY>M0DNTSAmL`J~kCF1ISI0NjC zuZ42$h5(f4QqTAnTX5*!&(91qb>mpv9)L{j>qJySM}+v4Q<9>Vk#EYn$-!hUVt05% z#EkX+d@u^R9f#E9BF$*bCIxRN&4#!nz)>_&zsv`Q{hX_Ty>%}ZWC^yWFnF4QD*@< zgbXPG%U}b;QxKHp0)DR(#CHrqN`r+0YvX&tu@b`n8WN!5e9WM@6$0oySfY9GynE07 z7T11gM)2OO)>52+ZhoNldqY}Xps6x>D9kXuUiUrvy(10ErCs6a43zqam-+4}P%n8HFmNm2IKpT=3XIgk$p zx)OqgOh{JB47s|iT)PM~T(7!x zm~Q0Rgf&OCzsx}rvyqZ`v{tr=$>iJM`I?|dK`R2mo`a%f9ojezp~Q(`()gZC7FQrH z=nn~*yQHwsUVmL7FDQ;un=P=I?m;PVkB{&Ek|FyiWSL?``OJZJzm z?tfJQvjRrs!BPc{wLOLg-Tn6cm9j|s47Lnz1#jVa^e=X zS<^&ysqTKVr4*_kN$cRHVZHR*w2fOyTq%T)VaP(&>X`yHtr`%pC{dqgv$=abfZ-iA z+n1O4i$m)7wKd#cJk_ZkIoE*`y}nQQ99~gnKC(_v)?d zYyD3Qxt-S2vP^fW8M(twZ;ti`js|e6BCmr(Eodz z-j+u4L%*N%{m~~)SP-0hSIp#^T zpvulsy}ma7{`~<_%i0I7gQed~YR2A^J17>p=hv;_z)~wVFaN+cLMJcOsw^BnBog-b z;$l|6%Xa|7l$DqN=-aqsX>xi$udEf!Kn`+amg|IU6f68 zb3#94ISW|}s&F7>hz+48ak_OyAl_l5VAKdHyuw$#u(`7ZLK_?GvIX46b}h+MlJ=hq z+Pf5Y=!{D(Qie<-A|iC&i%TE;d{DyBP$0$*G^FtzU@|;l+*(O$q-*t{kbfS1sH6|zE7ov20{_LE&CeZMlUzLdq-(QyPM`a{*W|rX{36YT#7rh zWlj8HefA19&zHVqD|wMwwAE;?d5$%dYmX&s6Scntt4#$7na0AY&3|AHi(Oo zp^3pmP3fq{?O$oN_r6JWR21O^{4-?w?kGBUoEPMyzWH{0(4G4g4IxaN?&Fh?K$GdX3GR=R>(|n&WBP4m53#qxjPQp_0W0e~ZfuS9K7?b1jesF> zZIm)gSgrr=%nYqEBX?Q{=TXx(ct48g{t{g|_Gd3W2z@;mZfg=TshE`?`-z&`O;+c0 z%<7*>8Po~3;7yU;?XKXK-CcPYph}M6=s_`qVT|h?UU@8j}kU4A-3|nTMrp&KQJbVS%)#+ zbkcl~8RB#Q=bAktO}%EM8E9ZLe*9j?fQE+HveXXkf%Tj5sf)0C;Xs?bdPY9UKWL`v z&7Jd1OqTX^`ubU^AEtl(`UCULcgQW;nh0emhga$EZ{PaCjEn_rR|cTh`A9Cc-F%b< zoi>pjtEkdA9*!Q_>P>2pl2Z3Q?#=h@+qVNDTgp!)V;-KA?$57|&7$>SpI0o^$;+n7 zoXgYGkGXM@C#_>{WGKHuq$(oc<(2WIrd7J5=|HHu_Q9K!YVSh?Imhm7%a?JUT@0K2a(3RnJEl(j?5X!ZDq012d292@ zqQ@Qf_#ijkZaZ@4(Bw`@lcn0iin1_rYG@f`}(RX4{j z(osPeDST4a@d)4OZC@w#b^9jPddzha_V#W11s`)7dGDonKdW0eq&dC}6%LJs*iwK; zaOQHSK)p6>ecfP%5#~lwQc2hxC~Mf`2fE=uyQ^LEf|WjX3MZfUB?M{0=&~F+Yg}ff zFpw1g+nCkzHYJO8S$cJR#}%WjW+Fa;0umu_86W zgW5)Gcd=%lA?yyLo%ktPx#mwJLySy4>aAd2JXm-hC_QGm=}g%fO3~+1b!U5JDzgPW z;m61S=GFTdGlRH7RAFI`is4E1Je~f-JmqiS0%3RLyjVS*Al*j~TAo9hs4IuKwLeNy z(?vdBm=Qj?1Qt8V+MjZ@h5e?6&GNI$PDTurR68LSD%N4;2Ps-r@(4hjdB*vLYm2ze zW6R?BV>4=MUOf_^^q#47EDz3BE$TInbJa2}%O*O!6Q_gBZ=0YXPQ3G6?g^dLT7Bc; z0^wgRqxWxpQzUn~^UxCy>JR1IA8i`H&ZtJP(7aQym!!{;ex21VPWKjkfbt785yS|) zqcJ?(bv!DqEx|it$alfJJNwj^V<>G^4?H;#a`^2Q(fT_|Rh~Y<;}~wQ>jmv)puWI9QFI1iY3LMdB*77eqv6)g@4bk6>wGQoPWv zQa4Jr$lt!PW9l>Z^bK?Sup}L}JjMe%;WVKVt)YAjeaj!judr;C&(*>-MQmxOIHaF| zzn8x*_?y}4&=1=8;*5v6~ZAC!L(wLhu+#lhwX)f1L)YL|}F*51o7W9JZX_tJ)W z_RO>{UTs~XKzP7nuvxh5?fshZAT}~|Ct&OpsD5~@m}!4@%jRjj$+*%s7*o9SO=oA# zOMw2)0Lx0iW9rt}jZGnp?yB{zz z-a6Ds3=dYKqgn_E2oblXj6j{>P28H~QVjV-S7^MVY}J;Eu%VTWx$CxY!6+Y8%eiTP zMOWFA#COUpXlG>nW^gdfk{3ip!BLrjSy#@(|A5VP%4d3Wr`q~ib#9y_>+XVFdQ1>{ zefRYwC#M%vGq$++!tB9IBJC<)V{MVI%dFX{5~n8iNCAv0+;)yV3Uf`8hw3fEY$w_h zgkLlNe*eaYWBDD={Q=G_8W}5}#y^MXmzJ{aI&GJ%LK6B7S!^GeTxI9e4mD*sa=K{^b&J}`s!h-1E#GlV`H3P%xP?1H~t2wFoiw`4t$ei(0s?&uY6(T} z7TQX~GyT0I%CI}lOHt@tXGe$fk(oBbmY1zY9XTvxOZ$67tkM-(IXRW0eiimsH(3GR zth^(QRd{W~Xh1p4EJC_CKk(>(e$Mcoo}q|$087<<;tVRRpH;u<&QjmZ%?zs0@#$kP z&_`IF9u}mLxs@TsFWv8$$`5*WQ;?C3|Fjx)1WlPRhB1?hg^8%rM1Rocs29fas$loA zvunhs^m?Ducuz1fDID{Y9*@sgdiJ(g^bPN}sS(lW`&H=zUE+;--GV#b`+Ha~ISz32 zGKL-dZ`V*NSqu90R)223a_ocByF^=Fm^TYqzk=HYm04}5D34t6uq*Cw!=rHqzexS%e=P7$&H zhVpWvY{WsuUEDrLL_kPH53zOsq2i$g>8poFs)2N3kw)LJ=A2cB2H7m+ZR52qIr0v? z*VK2K=JO}m3-XCtH^_Tv^}v`0aC~u`wsm}7ktw_#@bZ#ni>Vs^Ae$1)*ufv1wWk>$ z`FllQkgPwQvD7m2KIH5n5|CmktMIzic=-9rw#SBnZdZtFE7*SKgo@7a#M82u z3eN2m_bpAnN4=br!hGqmD;SKNWJ%YV{@QyuARu7op#)t~><1E6adEM>yx1u^!(8-O zs_I_r{waFm45_G$!Y5+NDx!Uy)HU-_qn!C=Q{$d5Hyu7IqwsX(13$E6xjMS}0e8@*0?;OANqd%kjHzrHJu#JjtzjjUqO;3H@ zWvZbN7+7^cj@w3It3Sl5)q;Xvk|6^*B23Hkrxh~ZJ&^QZc?4qMhNg)Rg^f#}k1XpP zwRb$`Hd(E|`9Z(av#fD7@hvls)zP!3Q#Pieu5RbkyZDF*Co>j&=a7H!cbw1L%7(ES z@N<4Zmeb+3sg>&|wkN4;G!4rux4`{ZtZqxR==?5hy&bi9%RdHfSzq+%||wq1XD z7-{-Y3z+Hj=Em-)X#eW-E`#;mt$T#PF78uT*<0^9r>ZJweg5O6cgO$v^|-f8t4LM*l~?|EBN5%{0ks0E=|==b8jz4I;}$hGxmA1sOu@1jA9tL$fX?< zb92IXXFEG8z}!|$vU7KHn}F0u`0Iz^VO9X7d&o_DT`1vtfkDRC?Qc+N-3X|EGB-+$ zC@EZBUGw{0VgtXla=2HSH4hIDpSYw;@fwh;5eUSZe^Hmjwm*5P_FjCQI$n#f&qdnJ z-TlL=JVoeSIEI}i(78x#&cje7*Q_K9K0QuKT9G9sB3liyxV^Q!d;=lX9e6RV-1}O& zS;88h?FL<>Np-BTg^~$cxtVicpmi(T@@6HcbK*ZuuR=rqV7Xwmu=>`{@VWiL_Dw82 z(xAwY8mLel!s*86W)Vaiz<(cbbu!a$sCtpI#mAJ2{VbalOU;7N(m{8taCR;T8M|Gtfl z4UC*Ta`3Pc5CjY6#z$XKtt}N+=!$z|p##5|mm~rWs@#Y(Rr*{Nur{=x8j`ik%#Xqmf^tMppT{T=||0Wb{tp+ z`L4K(X-$fkJx-6Y)^SUlrq#Nf0pF%&iLWtbeg5DmgHbxM?obqjkdaxx`%pz0lOa%3 zQ?s752{?-vNqmhB4WdUMzW+K|Z6-pR!pT=3;f$L0C$c~r4m=qd8NrO()9O=Znp~Ju z$~zD*XC(RM+^I+E^}(6fyE9eN_d7dd=-JcK(%|`@u4GF{jTsf?QuRTXaS~=s;>rqQ zL~{F-oxbhVR#s-WX2oQ`pUGM14@i)Y{fYZ55#R2>@ddg$C;k~BaJtw+G~49DO*=a~ zCstk5yX}V9K*d;Q>p&*xI$gf0)or_0J%Zho=b6iwFMk~xx;O0)V-0j`7~HMO!{eLl z1_`P6JuR6Vma?y(Z}PUJ=q^JNH*ZxIc?6dOEyH3t60{Bipbq9{ zy$eJx*KCvJfZ-?8Li8-IYZ5RtY420Kv7j%VzZnp~2JOt4ezz(QvcSPl9yz-Ley8>3 zlJ_A;Y=u7ME4{!(7WNCtcd3ddu^o|DW~6(F$JCcnX?fP!+g#g_F1Ul=fSSNNmd2a1 zQ>*^a4__Oh36-jMafFC&~>a^XZbnI9zNO&>QlsLAQQlVetLsB5*`rKhsEXUX< zdTpjOwT=%9sSDb47^zJxEt>}h2EMk%X9=l&#%knsQp{+5HZ2lyJX1Dbdm=UuKi7h~ z5wm#t_S@{GR%ibDv24!i;*r=G)A~KlrNiJw2C(37FD`*v0B*-M%V+Z0=SIIYiF2E!{8cTE$w}Klkx&{@^@ui6Acn#$TgZ{jyj{f4?CJ zf*a^=E4(K72O}eniZQjp<8jp$756$iP*Q0qH#ax=UY35@v=08cbvc+eKi(yqkTw?SgHh9-gL1%oEYaRc$uX88T6Bj=&p z4TN}bT?_|V2fe@7mS!N1-lynyIrUJ5Qkn6EQ4#3L{N%LfrTVfXhVXd544OgjSi>;T z0?#+>M;_iUElfvrLi5+xy*Yk9>*C|%GA`SPbb~CTqIcew&_R9~GV{R)U{D{wyrmG* zcyg|N*Q2rTQ8O=jatc%ozL1~amaw!_J68z`0;c-+@81wDjX8J9f?~!7QQMK~B2W^F+rB)VCm_@?+T)#jx)rA0-iLJ|23{jbuA`l!l+v9r?k#zF~<)bF~xa0R?Cn;@tDK0ZgikbzijZvh121k{=KpDwHO>!jR~8Bv{t?^+MX#e zDloWy;k2Uy9mM~_JW^vbv~u+h!_?ebih+<|D#8dqQ;>ss**VOu3w@aLZ|Qed{Gaqu z{wMsRV&}#Qa0=$uiN#%MFum-lXbR>LF)BJcr^rs)-u*kNvGDW%+C6jP*UCK(YJ0t? zzeTZZARELwS5FhUxTC0*`)qF+%LUGsGUFFwe8kL|W-uoD#(#&Y0z~j+e7siffv!~w zy7vaTdOcmzX{ev8{_p{BWYGI**EIM~j#x7g>6^*CSq1IWt9LA!DXyPC8I}Pg#d7B; zm0)_nG+aMV_fT*>P&5hL<*XENGP6=(;`{pbYsk`$YV4p(l^vx^@80JHm}fo;s)G9- z2@dEjUUHV7>(SDA`q8qBrf4}$Fce1pAPQu^G_}A&6!={zV5WqMR{c#tYuGeoV(K^! zW)Niw7NfwRS0D5Fx&gH1eSGR6ZKJX)d0Ty}#Rg107ia}@pRaRA%nV%=WfX)t5mZR^ zR1pCjt@!pSQ`~7Lg;21yGb)()jC@Qzeb*|dU?3AyI`cpN@Yjp~Hx~E5HOK$u;BK(s zLSahJ{e!u%Q^@C~ZsKKc>*XM4=ji}HC?v%tB}Bw!M8pvW;<9qmm*ga5gvG_>#KpfE zM>+kM3()TN&bR#k&li*&k?eyDc>X@YPLBML|Mg@EiNAN35*EJ*cVBzHp9CkL`RC+Y z?w)8{FACc`cif!qY`vV_Z;Rcrzr}g4@*SMS^v_9dwznOfb1y6orE) z{yFI7?B(V_VR+ZUlUu{v+1^1RX_p@kpC=!NTghE@)^oV4;_iLh-ubqpin||$^d)Ig zNf~KBSt$uoS=md%;= + + An Ant build that calls the dita command + + + + Pre-processing steps + + + Build the CHM and PDF with the dita command + + + + + + Postprocessing steps + + diff --git a/samples/ant_sample/build-chm-pdf.xml b/samples/ant_sample/build-chm-pdf.xml new file mode 100644 index 0000000..807191b --- /dev/null +++ b/samples/ant_sample/build-chm-pdf.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/ant_sample/dita-cmd.xml b/samples/ant_sample/dita-cmd.xml new file mode 100644 index 0000000..3b42814 --- /dev/null +++ b/samples/ant_sample/dita-cmd.xml @@ -0,0 +1,32 @@ + + + + + Defines a dita-cmd macro you can use in your Ant builds. See build-chm-pdf-hybrid.xml for + usage. + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/ant_sample/sample_all.xml b/samples/ant_sample/sample_all.xml new file mode 100644 index 0000000..faf07cc --- /dev/null +++ b/samples/ant_sample/sample_all.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + diff --git a/samples/ant_sample/sample_eclipsehelp.xml b/samples/ant_sample/sample_eclipsehelp.xml new file mode 100644 index 0000000..34dfb5b --- /dev/null +++ b/samples/ant_sample/sample_eclipsehelp.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/samples/ant_sample/sample_html5.xml b/samples/ant_sample/sample_html5.xml new file mode 100644 index 0000000..dba869d --- /dev/null +++ b/samples/ant_sample/sample_html5.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/samples/ant_sample/sample_htmlhelp.xml b/samples/ant_sample/sample_htmlhelp.xml new file mode 100644 index 0000000..9ea28de --- /dev/null +++ b/samples/ant_sample/sample_htmlhelp.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/samples/ant_sample/sample_pdf.xml b/samples/ant_sample/sample_pdf.xml new file mode 100644 index 0000000..8696b8d --- /dev/null +++ b/samples/ant_sample/sample_pdf.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/samples/ant_sample/sample_xhtml_plus_css.xml b/samples/ant_sample/sample_xhtml_plus_css.xml new file mode 100644 index 0000000..dbfe802 --- /dev/null +++ b/samples/ant_sample/sample_xhtml_plus_css.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/ant_sample/template_eclipsehelp.xml b/samples/ant_sample/template_eclipsehelp.xml new file mode 100644 index 0000000..4384a38 --- /dev/null +++ b/samples/ant_sample/template_eclipsehelp.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/samples/ant_sample/template_htmlhelp.xml b/samples/ant_sample/template_htmlhelp.xml new file mode 100644 index 0000000..fba0bcc --- /dev/null +++ b/samples/ant_sample/template_htmlhelp.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/samples/ant_sample/template_pdf.xml b/samples/ant_sample/template_pdf.xml new file mode 100644 index 0000000..a0106ce --- /dev/null +++ b/samples/ant_sample/template_pdf.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/samples/concepts/garageconceptsoverview.xml b/samples/concepts/garageconceptsoverview.xml new file mode 100644 index 0000000..fe3a440 --- /dev/null +++ b/samples/concepts/garageconceptsoverview.xml @@ -0,0 +1,9 @@ + + + + + + Garage Concepts + A well-stocked garage can be the envy of the neighborhood. + + diff --git a/samples/concepts/lawnmower.xml b/samples/concepts/lawnmower.xml new file mode 100644 index 0000000..74aba62 --- /dev/null +++ b/samples/concepts/lawnmower.xml @@ -0,0 +1,11 @@ + + + + + + Lawnmower + The lawnmower is a machine used to cut grass in the yard. + +

    Lawnmowers can be electric, gas-powered, or manual.

    + + diff --git a/samples/concepts/oil.xml b/samples/concepts/oil.xml new file mode 100644 index 0000000..f08eccc --- /dev/null +++ b/samples/concepts/oil.xml @@ -0,0 +1,14 @@ + + + + + + Oil + Motor oil keeps your car's engine running smoothly. + +

    Oil should be changed every 6000 kilometers.

    +
    + + + +
    diff --git a/samples/concepts/paint.xml b/samples/concepts/paint.xml new file mode 100644 index 0000000..2ae24be --- /dev/null +++ b/samples/concepts/paint.xml @@ -0,0 +1,14 @@ + + + + + + Paint + Paint is useful for refreshing the look of rooms and furniture. + +

    Store unused paint in the garage.

    +
    + + + +
    diff --git a/samples/concepts/shelving.xml b/samples/concepts/shelving.xml new file mode 100644 index 0000000..525ab5c --- /dev/null +++ b/samples/concepts/shelving.xml @@ -0,0 +1,14 @@ + + + + + + Shelving + Wooden or metal shelving is useful for storing things in the garage. + +

    Shelving also keeps things neat and organized.

    +
    + + + +
    diff --git a/samples/concepts/snowshovel.xml b/samples/concepts/snowshovel.xml new file mode 100644 index 0000000..885b28c --- /dev/null +++ b/samples/concepts/snowshovel.xml @@ -0,0 +1,15 @@ + + + + + + Snow shovel + Use the snow shovel to clear the drive way and side walk of snow in the winter. + +

    A good snow shovel has a straight, wide scoop and a strong handle. To help snow come off the scoop, spray the + scoop with cooking spray.

    +
    + + + +
    diff --git a/samples/concepts/toolbox.xml b/samples/concepts/toolbox.xml new file mode 100644 index 0000000..9ac741a --- /dev/null +++ b/samples/concepts/toolbox.xml @@ -0,0 +1,15 @@ + + + + + + Tool box + A tool box contains many compartments for organizing tools and hardware. + +

    Keep the tool box handy for all sorts of jobs around the house.

    +
    + + + + +
    diff --git a/samples/concepts/tools.xml b/samples/concepts/tools.xml new file mode 100644 index 0000000..45f81cb --- /dev/null +++ b/samples/concepts/tools.xml @@ -0,0 +1,28 @@ + + + + + + Tools + Invest in a good set of tools for doing all kinds of tasks around the house. + +

    Useful tools include the following items:

    +
      +
    • Hammer
    • +
    • Screw driver set
    • +
    • Wrench set
    • +
    • Nails and screws
    • +
    • Level
    • +
    • Saws
    • +
    • Drill
    • +
    • Air pressure gauge
    • +
    • Spade
    • +
    • Rake
    • +
    +

    Keep your tools organized in a tool box.

    +
    + + + + +
    diff --git a/samples/concepts/waterhose.xml b/samples/concepts/waterhose.xml new file mode 100644 index 0000000..843b946 --- /dev/null +++ b/samples/concepts/waterhose.xml @@ -0,0 +1,14 @@ + + + + + + Water hose + A water hose is useful for cleaning and gardening projects around the yard. + +

    Keep the hose coiled on a large hook near a water spout.

    +
    + + + +
    diff --git a/samples/concepts/wheelbarrow.xml b/samples/concepts/wheelbarrow.xml new file mode 100644 index 0000000..e508b30 --- /dev/null +++ b/samples/concepts/wheelbarrow.xml @@ -0,0 +1,9 @@ + + + + + + Wheel barrow + A good wheel barrow will save your back from extensive trauma when you garden. + + diff --git a/samples/concepts/workbench.xml b/samples/concepts/workbench.xml new file mode 100644 index 0000000..7896ea7 --- /dev/null +++ b/samples/concepts/workbench.xml @@ -0,0 +1,12 @@ + + + + + + Workbench + Use the workbench for storing tools and hardware, and for doing small projects. + + + + + diff --git a/samples/concepts/wwfluid.xml b/samples/concepts/wwfluid.xml new file mode 100644 index 0000000..96ce6f0 --- /dev/null +++ b/samples/concepts/wwfluid.xml @@ -0,0 +1,12 @@ + + + + + + Windshield washer fluid + Windshield washer fluid is required to keep your windshield wipers functioning properly. + +

    Keep your car's windshield washer fluid topped up so you will have a clean windshield whatever the weather or + insect population.

    +
    +
    diff --git a/samples/css/style.css b/samples/css/style.css new file mode 100644 index 0000000..a050d1c --- /dev/null +++ b/samples/css/style.css @@ -0,0 +1,95 @@ +/** + * This file is part of the DITA Open Toolkit project. + * See the accompanying LICENSE file for applicable license. + * + * This file uses a few simple settings to create a new look and feel + * for the generated XHTML output. Note that most elements are still + * styled based on the toolkit's default CSS file, while this CSS + * file only provides a few overrides to that core style. + * + * For a sample build that uses this CSS file, see the following Ant + * build file within the DITA-OT installation directory: + * `docsrc/samples/ant_sample/sample_xhtml_plus_css.xml` + */ + +* { + margin: 0; + padding: 0; + top: auto; +} + +.topictitle1 { + font-size: 2.5em; +} + +body { + background: #fff; + background: linear-gradient(to bottom, #eee 0%, #fff); + color: #666; + float: left; + font-family: 'Trebuchet MS', 'Times New Roman', Times, serif; + font-size: 0.9em; + margin: 30px 0; + padding: 0 5px 0 30px; + text-align: left; + width: 640px; +} + +h1, +h2, +h3 { + font-family: Arial, Helvetica, sans-serif; + margin-bottom: 15px; + padding-bottom: 10px; + text-transform: uppercase; +} + +p, +ul, +ol, +dl { + margin-top: 1.5em; +} + +ul, +ol, +dl { + margin-left: 3em; +} + +dt { + font-weight: bold; +} + +dd { + margin-left: 3em; +} + +blockquote { + font-style: italic; + margin-left: 3em; + margin-right: 3em; +} + +a { + color: #70a300; + text-decoration: none; +} + +a:hover { + border: 0; + color: #70a300; +} + +/* Inline Table of Contents */ +nav.toc { + border-left: 1px solid #70a300; + float: right; + font-size: small; + margin-left: 1em; + max-width: 200px; +} + +nav.toc > ul { + margin-top: 0; +} diff --git a/samples/docker/Dockerfile b/samples/docker/Dockerfile new file mode 100644 index 0000000..ae54da5 --- /dev/null +++ b/samples/docker/Dockerfile @@ -0,0 +1,8 @@ +# Use the latest DITA-OT image ↓ as parent: +FROM ghcr.io/dita-ot/dita-ot:4.2.3 + +# Install a custom plug-in from a remote location: +RUN dita --install https://github.com/infotexture/dita-bootstrap/archive/master.zip + +# Install from the registry at dita-ot.org/plugins: +RUN dita --install org.dita-community.pdf-page-break diff --git a/samples/github-actions/build-using-a-project-file.yaml b/samples/github-actions/build-using-a-project-file.yaml new file mode 100644 index 0000000..947fbdf --- /dev/null +++ b/samples/github-actions/build-using-a-project-file.yaml @@ -0,0 +1,19 @@ +name: CI +'on': + push: + branches: + - master +jobs: + build-dita: + name: Build DITA using a project file + runs-on: ubuntu-latest + steps: + - name: Git checkout + uses: actions/checkout@v2 + - name: Build HTML5 + Bootstrap + uses: dita-ot/dita-ot-action@master + with: + plugins: | + fox.jason.extend.css + net.infotexture.dita-bootstrap + project: html.xml diff --git a/samples/github-actions/build-with-commands.yaml b/samples/github-actions/build-with-commands.yaml new file mode 100644 index 0000000..f7d2eea --- /dev/null +++ b/samples/github-actions/build-with-commands.yaml @@ -0,0 +1,21 @@ +name: CI +'on': + push: + branches: + - master +jobs: + build-dita: + name: Build DITA + runs-on: ubuntu-latest + steps: + - name: Git checkout + uses: actions/checkout@v2 + - name: Build PDF using DITA-OT commands + uses: dita-ot/dita-ot-action@master + with: + install: | + dita install fox.jason.extend.css + dita install org.doctales.xmltask + dita install fox.jason.prismjs + build: | + dita -i document.ditamap -o out -f pdf --filter=filter1.ditaval diff --git a/samples/github-actions/dita-ot-pipeline.yaml b/samples/github-actions/dita-ot-pipeline.yaml new file mode 100644 index 0000000..f28e162 --- /dev/null +++ b/samples/github-actions/dita-ot-pipeline.yaml @@ -0,0 +1,50 @@ +name: CI +'on': + push: + branches: + - master +jobs: + build-dita: + name: Build DITA + runs-on: ubuntu-latest + steps: + - name: Git checkout + uses: actions/checkout@v2 + - name: Build HTML5 + Bootstrap + uses: dita-ot/dita-ot-action@master + with: + plugins: | + net.infotexture.dita-bootstrap + input: document.ditamap + transtype: html5-bootstrap + output-path: out + + - name: Build PDF + uses: dita-ot/dita-ot-action@master + with: + install: | + # Run some arbitrary installation commands + apt-get update -q + apt-get install -qy --no-install-recommends nodejs + nodejs -v + + # Install plugins + dita install fox.jason.extend.css + dita install org.doctales.xmltask + dita install fox.jason.prismjs + build: | + # Use the dita command line + dita -i document.ditamap -o out -f pdf --filter=filter1.ditaval + + - name: Upload DITA Output to a ZIP file + uses: actions/upload-artifact@v2 + with: + name: dita-artifact + path: 'out' + + - name: Deploy DITA Output to GitHub Pages + uses: JamesIves/github-pages-deploy-action@3.7.1 + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + BRANCH: gh-pages # The branch the action should deploy to. + FOLDER: out # The folder the action should deploy. diff --git a/samples/github-actions/install-using-bash-script.yaml b/samples/github-actions/install-using-bash-script.yaml new file mode 100644 index 0000000..b787bdb --- /dev/null +++ b/samples/github-actions/install-using-bash-script.yaml @@ -0,0 +1,19 @@ +name: CI +'on': + push: + branches: + - master +jobs: + build-dita: + name: Build DITA + runs-on: ubuntu-latest + steps: + - name: Git checkout + uses: actions/checkout@v2 + - name: Build HTML5 using DITA-OT + uses: dita-ot/dita-ot-action@master + with: + install: install.sh # This is a script in the root of the repository + input: document.ditamap + transtype: html5 + output-path: out diff --git a/samples/github-actions/install-using-commands.yaml b/samples/github-actions/install-using-commands.yaml new file mode 100644 index 0000000..f7d2eea --- /dev/null +++ b/samples/github-actions/install-using-commands.yaml @@ -0,0 +1,21 @@ +name: CI +'on': + push: + branches: + - master +jobs: + build-dita: + name: Build DITA + runs-on: ubuntu-latest + steps: + - name: Git checkout + uses: actions/checkout@v2 + - name: Build PDF using DITA-OT commands + uses: dita-ot/dita-ot-action@master + with: + install: | + dita install fox.jason.extend.css + dita install org.doctales.xmltask + dita install fox.jason.prismjs + build: | + dita -i document.ditamap -o out -f pdf --filter=filter1.ditaval diff --git a/samples/github-actions/install-using-plugins.yaml b/samples/github-actions/install-using-plugins.yaml new file mode 100644 index 0000000..31cfff9 --- /dev/null +++ b/samples/github-actions/install-using-plugins.yaml @@ -0,0 +1,20 @@ +name: CI +'on': + push: + branches: + - master +jobs: + build-dita: + name: Build DITA + runs-on: ubuntu-latest + steps: + - name: Git checkout + uses: actions/checkout@v2 + - name: Build HTML5 + Bootstrap + uses: dita-ot/dita-ot-action@master + with: + plugins: | + net.infotexture.dita-bootstrap + org.doctales.xmltask + input: document.ditamap + transtype: html5-bootstrap diff --git a/samples/github-actions/minimal-action.yaml b/samples/github-actions/minimal-action.yaml new file mode 100644 index 0000000..1784255 --- /dev/null +++ b/samples/github-actions/minimal-action.yaml @@ -0,0 +1,18 @@ +name: CI +'on': + push: + branches: + - master +jobs: + build-dita: + name: Build DITA + runs-on: ubuntu-latest + steps: + - name: Git checkout + uses: actions/checkout@v2 + - name: Build PDF + uses: dita-ot/dita-ot-action@master + with: + input: document.ditamap + transtype: pdf + output-path: out diff --git a/samples/hierarchy.ditamap b/samples/hierarchy.ditamap new file mode 100644 index 0000000..6ffa4b7 --- /dev/null +++ b/samples/hierarchy.ditamap @@ -0,0 +1,28 @@ + + + + + + Working in the garage + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/image/carwash.jpg b/samples/image/carwash.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7a74b42afe9bf5235a3b8fec183f17517cf8cae6 GIT binary patch literal 8121 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 literal 0 HcmV?d00001 diff --git a/samples/plugins/com.example.html5-custom-css/build_html5-custom-css.xml b/samples/plugins/com.example.html5-custom-css/build_html5-custom-css.xml new file mode 100644 index 0000000..c381df2 --- /dev/null +++ b/samples/plugins/com.example.html5-custom-css/build_html5-custom-css.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + diff --git a/samples/plugins/com.example.html5-custom-css/css/custom.css b/samples/plugins/com.example.html5-custom-css/css/custom.css new file mode 100644 index 0000000..d529cf1 --- /dev/null +++ b/samples/plugins/com.example.html5-custom-css/css/custom.css @@ -0,0 +1,5 @@ +/* These custom styles extend or override DITA Open Toolkit default styles. */ + +body { + color: #F00; +} diff --git a/samples/plugins/com.example.html5-custom-css/plugin.xml b/samples/plugins/com.example.html5-custom-css/plugin.xml new file mode 100644 index 0000000..9232cbd --- /dev/null +++ b/samples/plugins/com.example.html5-custom-css/plugin.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/samples/plugins/com.example.html5-javascript/build_html5-javascript.xml b/samples/plugins/com.example.html5-javascript/build_html5-javascript.xml new file mode 100644 index 0000000..69ca393 --- /dev/null +++ b/samples/plugins/com.example.html5-javascript/build_html5-javascript.xml @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/samples/plugins/com.example.html5-javascript/include/javascript.ftr.xml b/samples/plugins/com.example.html5-javascript/include/javascript.ftr.xml new file mode 100644 index 0000000..7478c58 --- /dev/null +++ b/samples/plugins/com.example.html5-javascript/include/javascript.ftr.xml @@ -0,0 +1,15 @@ +
    + + + +
    diff --git a/samples/plugins/com.example.html5-javascript/plugin.xml b/samples/plugins/com.example.html5-javascript/plugin.xml new file mode 100644 index 0000000..c13f5c2 --- /dev/null +++ b/samples/plugins/com.example.html5-javascript/plugin.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/samples/plugins/com.example.html5-webfont/build_html5-webfont.xml b/samples/plugins/com.example.html5-webfont/build_html5-webfont.xml new file mode 100644 index 0000000..07587fa --- /dev/null +++ b/samples/plugins/com.example.html5-webfont/build_html5-webfont.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/samples/plugins/com.example.html5-webfont/css/custom.css b/samples/plugins/com.example.html5-webfont/css/custom.css new file mode 100644 index 0000000..f9e131b --- /dev/null +++ b/samples/plugins/com.example.html5-webfont/css/custom.css @@ -0,0 +1,3 @@ +body { + font-family: 'Noto Sans', sans-serif; +} diff --git a/samples/plugins/com.example.html5-webfont/include/webfont.hdf.xml b/samples/plugins/com.example.html5-webfont/include/webfont.hdf.xml new file mode 100644 index 0000000..bdb5cad --- /dev/null +++ b/samples/plugins/com.example.html5-webfont/include/webfont.hdf.xml @@ -0,0 +1,3 @@ +
    + +
    diff --git a/samples/plugins/com.example.html5-webfont/plugin.xml b/samples/plugins/com.example.html5-webfont/plugin.xml new file mode 100644 index 0000000..0449d7b --- /dev/null +++ b/samples/plugins/com.example.html5-webfont/plugin.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/samples/plugins/com.example.print-pdf/cfg/catalog.xml b/samples/plugins/com.example.print-pdf/cfg/catalog.xml new file mode 100644 index 0000000..22e0648 --- /dev/null +++ b/samples/plugins/com.example.print-pdf/cfg/catalog.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/samples/plugins/com.example.print-pdf/cfg/common/vars/en.xml b/samples/plugins/com.example.print-pdf/cfg/common/vars/en.xml new file mode 100644 index 0000000..61ae1d4 --- /dev/null +++ b/samples/plugins/com.example.print-pdf/cfg/common/vars/en.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/samples/plugins/com.example.print-pdf/cfg/fo/attrs/custom.xsl b/samples/plugins/com.example.print-pdf/cfg/fo/attrs/custom.xsl new file mode 100644 index 0000000..ba98f59 --- /dev/null +++ b/samples/plugins/com.example.print-pdf/cfg/fo/attrs/custom.xsl @@ -0,0 +1,7 @@ + + + + 210mm + 297mm + diff --git a/samples/plugins/com.example.print-pdf/cfg/fo/xsl/custom.xsl b/samples/plugins/com.example.print-pdf/cfg/fo/xsl/custom.xsl new file mode 100644 index 0000000..a1b6930 --- /dev/null +++ b/samples/plugins/com.example.print-pdf/cfg/fo/xsl/custom.xsl @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + diff --git a/samples/plugins/com.example.print-pdf/integrator.xml b/samples/plugins/com.example.print-pdf/integrator.xml new file mode 100644 index 0000000..8beaac4 --- /dev/null +++ b/samples/plugins/com.example.print-pdf/integrator.xml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/samples/plugins/com.example.print-pdf/plugin.xml b/samples/plugins/com.example.print-pdf/plugin.xml new file mode 100644 index 0000000..98477ca --- /dev/null +++ b/samples/plugins/com.example.print-pdf/plugin.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/samples/project-files/all.xml b/samples/project-files/all.xml new file mode 100644 index 0000000..0e40635 --- /dev/null +++ b/samples/project-files/all.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/samples/project-files/common.json b/samples/project-files/common.json new file mode 100644 index 0000000..d06a78a --- /dev/null +++ b/samples/project-files/common.json @@ -0,0 +1,11 @@ +{ + "contexts": [ + { + "id": "html", + "input": "../../userguide.ditamap", + "profiles": { + "ditavals": ["../../resources/html.ditaval"] + } + } + ] +} diff --git a/samples/project-files/common.xml b/samples/project-files/common.xml new file mode 100644 index 0000000..bce8bf9 --- /dev/null +++ b/samples/project-files/common.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/samples/project-files/common.yaml b/samples/project-files/common.yaml new file mode 100644 index 0000000..3d4d041 --- /dev/null +++ b/samples/project-files/common.yaml @@ -0,0 +1,7 @@ +--- +contexts: + - id: 'html' + input: '../../userguide.ditamap' + profiles: + ditavals: + - '../../resources/html.ditaval' diff --git a/samples/project-files/distribution-docs.xml b/samples/project-files/distribution-docs.xml new file mode 100644 index 0000000..fe49566 --- /dev/null +++ b/samples/project-files/distribution-docs.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/samples/project-files/html.json b/samples/project-files/html.json new file mode 100644 index 0000000..e4c7b7d --- /dev/null +++ b/samples/project-files/html.json @@ -0,0 +1,51 @@ +{ + "includes": ["common.json"], + "deliverables": [ + { + "name": "HTML5", + "context": {"idref": "html"}, + "output": ".", + "publication": { + "transtype": "html5", + "params": [ + { + "name": "args.copycss", + "value": "yes" + }, + { + "name": "args.css", + "value": "dita-ot-doc.css" + }, + { + "name": "args.csspath", + "value": "css" + }, + { + "name": "args.cssroot", + "path": "../../resources" + }, + { + "name": "args.gen.task.lbl", + "value": "YES" + }, + { + "name": "args.hdr", + "href": "../../resources/header.xml" + }, + { + "name": "args.rellinks", + "value": "noparent" + }, + { + "name": "html5.toc.generate", + "value": "no" + }, + { + "name": "nav-toc", + "value": "partial" + } + ] + } + } + ] +} diff --git a/samples/project-files/html.xml b/samples/project-files/html.xml new file mode 100644 index 0000000..12e9a3c --- /dev/null +++ b/samples/project-files/html.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/samples/project-files/html.yaml b/samples/project-files/html.yaml new file mode 100644 index 0000000..3660671 --- /dev/null +++ b/samples/project-files/html.yaml @@ -0,0 +1,29 @@ +--- +includes: + - 'common.yaml' +deliverables: + - name: 'HTML5' + context: + idref: 'html' + output: '.' + publication: + transtype: 'html5' + params: + - name: 'args.copycss' + value: 'yes' + - name: 'args.css' + value: 'dita-ot-doc.css' + - name: 'args.csspath' + value: 'css' + - name: 'args.cssroot' + path: '../../resources' + - name: 'args.gen.task.lbl' + value: 'YES' + - name: 'args.hdr' + href: '../../resources/header.xml' + - name: 'args.rellinks' + value: 'noparent' + - name: 'html5.toc.generate' + value: 'no' + - name: 'nav-toc' + value: 'partial' diff --git a/samples/project-files/htmlhelp.xml b/samples/project-files/htmlhelp.xml new file mode 100644 index 0000000..adac1bf --- /dev/null +++ b/samples/project-files/htmlhelp.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/samples/project-files/param-override.xml b/samples/project-files/param-override.xml new file mode 100644 index 0000000..54c848e --- /dev/null +++ b/samples/project-files/param-override.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/samples/project-files/pdf.xml b/samples/project-files/pdf.xml new file mode 100644 index 0000000..e4ea760 --- /dev/null +++ b/samples/project-files/pdf.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/samples/properties/chm.properties b/samples/properties/chm.properties new file mode 100644 index 0000000..fa9a401 --- /dev/null +++ b/samples/properties/chm.properties @@ -0,0 +1,2 @@ +output.dir = out/chm +args.gen.task.lbl = YES diff --git a/samples/properties/pdf.properties b/samples/properties/pdf.properties new file mode 100644 index 0000000..77a168c --- /dev/null +++ b/samples/properties/pdf.properties @@ -0,0 +1,3 @@ +output.dir = out/pdf +args.gen.task.lbl = YES +args.rellinks = nofamily diff --git a/samples/properties/sequence-html5.properties b/samples/properties/sequence-html5.properties new file mode 100644 index 0000000..86d61e8 --- /dev/null +++ b/samples/properties/sequence-html5.properties @@ -0,0 +1,14 @@ +# Directory that contains the custom .css file: +args.cssroot = ${args.input.dir}/css/ + +# Custom .css file used to style output: +args.css = style.css + +# Copy the custom .css file to the output directory: +args.copycss = yes + +# Location of the copied .css file relative to the output: +args.csspath = branding + +# Generate a full navigation TOC in topic pages: +nav-toc = full diff --git a/samples/sequence.ditamap b/samples/sequence.ditamap new file mode 100644 index 0000000..20c0703 --- /dev/null +++ b/samples/sequence.ditamap @@ -0,0 +1,24 @@ + + + + + + Working in the garage + + + + + + + + + + + + + + + + + + diff --git a/samples/taskbook.ditamap b/samples/taskbook.ditamap new file mode 100644 index 0000000..79563dd --- /dev/null +++ b/samples/taskbook.ditamap @@ -0,0 +1,77 @@ + + + + + + + Retro Tools + Product tasks + Tasks and what they can do + + + Howe Tuduit + + 071271271X + SG99-9999-00 + + Retro Tools + + + + + + 2004 + + + 2007 + + + Retro Tools, Inc. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/taskbook/closeprograms.dita b/samples/taskbook/closeprograms.dita new file mode 100644 index 0000000..08eef7e --- /dev/null +++ b/samples/taskbook/closeprograms.dita @@ -0,0 +1,32 @@ + + + + + + Close all of your programs + You need to shut down everything else before installing major programs + + + + Close programs + web server + database + + + + + + + If you are on a Windows system, click the X in the corner of each program. + + + If you are on a Linux system, type kill -9 [PID] for each of your programs. + You might want to save your data first. + + + If you are on a Macintosh, you will have to ask someone else. I have a wonderful little iPod, but that is + the limit of my experience with Apple products. + + + + diff --git a/samples/taskbook/configuredatabase.dita b/samples/taskbook/configuredatabase.dita new file mode 100644 index 0000000..e9a1a34 --- /dev/null +++ b/samples/taskbook/configuredatabase.dita @@ -0,0 +1,30 @@ + + + + + + Configuring a Database + Follow these instructions to properly configure your database. + + + + configure + database + + + + + In this instance, the technical writer knows nothing about his subject. + + + Read the product documentation. It will tell you what options are available. + + + Read further in the product documentation. It will tell you how to change these options. + + + Make sure you store the product documentation in an easy-to-find location when you are done. + + + + diff --git a/samples/taskbook/configurestorage.dita b/samples/taskbook/configurestorage.dita new file mode 100644 index 0000000..d17f628 --- /dev/null +++ b/samples/taskbook/configurestorage.dita @@ -0,0 +1,35 @@ + + + + + + Configuring hard storage devices + Most hard disks do not need any configuring. If they do, the instructions are relatively + simple. + + + + hard drive + configure + + + + + First check the documentation that came with your storage device. If the device requires configuring, + follow the steps below. + + + If your system recognizes the device, it may be able to configure it without help. If so, do not try and + stop it. + + + Otherwise, your drive should come with software. Use this software to format and partition your + drive. + + + Once your drive is configured, restart the system. Just for fun. But be sure to remove any vendor software + from your system before doing so. + + + + diff --git a/samples/taskbook/configurewebserver.dita b/samples/taskbook/configurewebserver.dita new file mode 100644 index 0000000..eae931b --- /dev/null +++ b/samples/taskbook/configurewebserver.dita @@ -0,0 +1,38 @@ + + + + + + Configuring your Web Server + Configuring your Web Server can be as complex or as simple as you want it to be. + + + + web server + configure + + + + + In this instance, the technical writer knows nothing about his + subject. + + + Turn on the web server + + + Go to the Options menu + + + Follow that to "Web Server Preferences" + + + Make sure all of the right buttons are checked, or else you will never get it to work + + + Go to your site library and check out a book; any book, even about COBOL, is likely to be more helpful than + I am. + + + + diff --git a/samples/taskbook/configuring.dita b/samples/taskbook/configuring.dita new file mode 100644 index 0000000..93d63c3 --- /dev/null +++ b/samples/taskbook/configuring.dita @@ -0,0 +1,12 @@ + + + + + + Configuring + You configure components to set up or refine your solution. + +

    You don't have to get the best configuration the first time. Instead, you might start with a simple configuration + and then refine it gradually as needed.

    + +
    diff --git a/samples/taskbook/databasetrouble.dita b/samples/taskbook/databasetrouble.dita new file mode 100644 index 0000000..ec328e8 --- /dev/null +++ b/samples/taskbook/databasetrouble.dita @@ -0,0 +1,32 @@ + + + + + + Troubleshooting a database + Databases rarely have problems, but this may be helpful if you find some. + + + + troubleshooting + database + + + + + + + If performance is slow, try removing several thousand records. + + + If none of your commands work, make sure they are SQL commands and not SEQUEL commands. + + + If you cannot get anything to work at all, try uninstalling and reinstalling. + + + For more detailed troubleshooting help, see the online documentation shipped with your database. + + + + diff --git a/samples/taskbook/drivetrouble.dita b/samples/taskbook/drivetrouble.dita new file mode 100644 index 0000000..6a324e4 --- /dev/null +++ b/samples/taskbook/drivetrouble.dita @@ -0,0 +1,42 @@ + + + + + + Troubleshooting your hard disk + Follow these steps to try and fix any problems with your hard drive. + + + + troubleshooting + hard drive + + + + + + + Run scandisk on the drive. This may solve all of your problems. + + + Try defragmenting the drive. This could help with retrieval times. + + + If the drive is still slow, try deleting old or useless information. + + + If the drive cannot access anything, there are some expensive tools at Best Buy that my help you save some + of your information. But, you're probably out of luck. + + + If the drive makes funny clicking noises, back everything up as soon as possible. + You probably have some important data stored in bad sectors. This is going to be painful to fix. Make sure + you have a copy of your Operating System CDs. + + + If all else fails, you can always try calling technical support. However, this can be very expensive, + unless you call within 13 hours of your purchase. + + + + diff --git a/samples/taskbook/insertdrive.dita b/samples/taskbook/insertdrive.dita new file mode 100644 index 0000000..c93fd10 --- /dev/null +++ b/samples/taskbook/insertdrive.dita @@ -0,0 +1,35 @@ + + + + + + Attach the drive to the system + The drive needs to be attached to power cables and other cables inside the computer. + + + + hard drive + + + + + You must be grounded before doing this. + + + Find an empty bay for your drive. + + + Remove the drive from its electrostatic bag. + + + Screw the drive in to the frame. + + + Attach the multi-colored power cord to the drive. + + + Attach the cable that connects your hard drive to the motherboard. + + + + diff --git a/samples/taskbook/installdb.dita b/samples/taskbook/installdb.dita new file mode 100644 index 0000000..f63734d --- /dev/null +++ b/samples/taskbook/installdb.dita @@ -0,0 +1,18 @@ + + + + + + Installing your own Database + Installing a Database may sound tricky, but it is quite simple if you follow our instructions. + + + + Overview + database + install + + + + + diff --git a/samples/taskbook/installing.dita b/samples/taskbook/installing.dita new file mode 100644 index 0000000..a920c60 --- /dev/null +++ b/samples/taskbook/installing.dita @@ -0,0 +1,13 @@ + + + + + + Installing + You install components to make them available for your solution. + +

    Usually, you can install the components once and then forget about the details of this task. Before installing + the components, you should make a plan for what you need to accomplish and the components that will support these + goals. After installing the components, you will probably want to perform some preliminary configuration.

    + +
    diff --git a/samples/taskbook/installstorage.dita b/samples/taskbook/installstorage.dita new file mode 100644 index 0000000..e6c7f2b --- /dev/null +++ b/samples/taskbook/installstorage.dita @@ -0,0 +1,20 @@ + + + + + + Installing hard drives or other storage + A simple guide to installing hard drives. + + + + Overview + hard drive + install + + + + + First purchase a hard drive at your local electronics store or from a qualified representative. + + diff --git a/samples/taskbook/installwebserver.dita b/samples/taskbook/installwebserver.dita new file mode 100644 index 0000000..b69aa10 --- /dev/null +++ b/samples/taskbook/installwebserver.dita @@ -0,0 +1,19 @@ + + + + + + Installing your own Web Server + Installing a Web Server may sound tricky, but it is quite simple if you follow our + instructions. + + + + Overview + web server + install + + + + + diff --git a/samples/taskbook/maintaindatabase.dita b/samples/taskbook/maintaindatabase.dita new file mode 100644 index 0000000..fb35be7 --- /dev/null +++ b/samples/taskbook/maintaindatabase.dita @@ -0,0 +1,29 @@ + + + + + + Maintaining a database + Maintaining a database does not take much work. + + + + database + maintain + + + + + + + If the database crashes, restart it. + + + If the database is slow, tell people not to put so much in it. + + + Try to limit the number of records in your database. Too many records leads to confusion. + + + + diff --git a/samples/taskbook/maintaining.dita b/samples/taskbook/maintaining.dita new file mode 100644 index 0000000..301430e --- /dev/null +++ b/samples/taskbook/maintaining.dita @@ -0,0 +1,11 @@ + + + + + + Maintaining + You maintain your solution to ensure that all components are operating at maximum efficiency. + +

    Maintenance is a task that you perform along with configuration to get the most from your solution.

    + +
    diff --git a/samples/taskbook/maintainserver.dita b/samples/taskbook/maintainserver.dita new file mode 100644 index 0000000..6b0cb9d --- /dev/null +++ b/samples/taskbook/maintainserver.dita @@ -0,0 +1,31 @@ + + + + + + Maintaining a Web Server + Maintaining a web server is really quite easy. + + + + Web Server + maintain + + + + + + + If the web server crashes, restart it. + + + Limit the number of connections to your server. + This will make it run faster. + + + Make sure you do not put confidential material on your server. + It should be kept in a separate folder named "Private." + + + + diff --git a/samples/taskbook/maintainstorage.dita b/samples/taskbook/maintainstorage.dita new file mode 100644 index 0000000..634ff9a --- /dev/null +++ b/samples/taskbook/maintainstorage.dita @@ -0,0 +1,36 @@ + + + + + + Maintaining your hard drive + Here are a few tips for maintaining your hard drive. + + + + hard drive + maintain + + + + + There is really not much to do to maintain a hard drive. However, if you want to keep it running for the + next 10 years or so, you should follow these suggestions. + + + If your drive has a low-power mode, make sure this comes on when your drive is sitting idle. + It will not get worn out as quickly if it is not needlessly spinning. + + + Every once in a while, shake your computer. + This will cause the bits to fall more comfortably in to place. + + + Run Scandisk on the drive at least once a day. + This way you will ensure that problems with the drive are found quickly. If you share the drive with + others, it will also ensure that they are less likely to use it, because it will be so busy all of the + time. + + + + diff --git a/samples/taskbook/notices.dita b/samples/taskbook/notices.dita new file mode 100644 index 0000000..d2874d5 --- /dev/null +++ b/samples/taskbook/notices.dita @@ -0,0 +1,29 @@ + + + + + + Notice + This information was developed for products and services offered in the U.S.A. + +

    This product is meant for educational purposes only. Some of the trademarks mentioned in this product appear for + identification purposes only. Not responsible for direct, indirect, incidental or consequential damages resulting + from any defect, error or failure to perform. Any resemblance to real persons, living or dead is purely + coincidental. Void where prohibited. Some assembly required. Batteries not included. Use only as directed. Do not + use while operating a motor vehicle or heavy equipment. Do not fold, spindle or mutilate. Do not stamp. No + user-serviceable parts inside. Subject to change without notice. Drop in any mailbox. No postage necessary if + mailed in the United States. Postage will be paid by addressee. Post office will not deliver without postage. Some + equipment shown is optional. Objects in mirror may be closer than they appear. Not recommended for children. Your + mileage may vary.

    +

    No other warranty expressed or implied. This supersedes all previous notices.

    +
    + COPYRIGHT LICENSE: +

    This information contains sample application programs in source language, which illustrate programming + techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any + form without payment to IBM, for the purposes of developing, using, marketing or distributing application + programs conforming to the application programming interface for the operating platform for which the sample + programs are written. These examples have not been thoroughly tested under all conditions. Retro Tools, + therefore, cannot guarantee or imply reliability, serviceability, or function of these programs.

    +
    +
    +
    diff --git a/samples/taskbook/replacecover.dita b/samples/taskbook/replacecover.dita new file mode 100644 index 0000000..cc20730 --- /dev/null +++ b/samples/taskbook/replacecover.dita @@ -0,0 +1,29 @@ + + + + + + Replace the cover of your system. + The cover needs to be put back on to reduce problems from dust. + + + + hard drive + Computer cover + + + + + + + Retrieve the computer's cover from its safe place. Put it back on. + + + Retrieve the screws from the safe place. Put them back in. + + + Put away your screwdriver before you lose it. + + + + diff --git a/samples/taskbook/restart.dita b/samples/taskbook/restart.dita new file mode 100644 index 0000000..7aa837a --- /dev/null +++ b/samples/taskbook/restart.dita @@ -0,0 +1,39 @@ + + + + + + Restart your system + This is standard procedure after installing any new software. + + + + Restarting + web server + database + + + + + + + If you are on a Windows system, go to the start menu. + + + Go to Start -> Shut Down... + + + Select "Restart" and hit OK. + + + + + If you are on a Linux system, contact your system administrator for assistance. You may not need to + restart. + + + If you are on a Macintosh, go to Special -> Restart. + + + + diff --git a/samples/taskbook/runsetup.dita b/samples/taskbook/runsetup.dita new file mode 100644 index 0000000..2e333c6 --- /dev/null +++ b/samples/taskbook/runsetup.dita @@ -0,0 +1,38 @@ + + + + + + Run Setup.exe + As with any major program, you will need to run setup in order to install it. + + + + Setup + web server + database + + + + + Setup.exe can be found in the root directory of the CD-ROM with your software. + + + Insert the CD-ROM. + + + Navigate to it from a typescript, DOS, or other command window. + + + Type setup.exe and hit enter. + + + Follow all of the prompts that appear. + + + It is suggested that you follow all of the defaults, but you may select an alternate directory for the + install. + + + + diff --git a/samples/taskbook/task_appendix.dita b/samples/taskbook/task_appendix.dita new file mode 100644 index 0000000..73dd39d --- /dev/null +++ b/samples/taskbook/task_appendix.dita @@ -0,0 +1,11 @@ + + + + + + Sample Appendix + This appendix describes things that you rarely need to know. + +

    You can consult this section when you need detailed information about a specific component.

    + +
    diff --git a/samples/taskbook/task_preface.dita b/samples/taskbook/task_preface.dita new file mode 100644 index 0000000..3b73306 --- /dev/null +++ b/samples/taskbook/task_preface.dita @@ -0,0 +1,13 @@ + + + + + + Sample Preface + This book explains each tasks separately. You can jump in anywhere, get the information you need, and + complete your work. + +

    You can use this book to master tasks if you wish or just keep it handy as a resource so you can focus on other + issues.

    + +
    diff --git a/samples/taskbook/taskbook-abstract.dita b/samples/taskbook/taskbook-abstract.dita new file mode 100644 index 0000000..768e0a5 --- /dev/null +++ b/samples/taskbook/taskbook-abstract.dita @@ -0,0 +1,10 @@ + + + + + + Abstract + +

    A brief summary of all operational knowledge including the evolution of human culture.

    +
    +
    diff --git a/samples/taskbook/trademarks.dita b/samples/taskbook/trademarks.dita new file mode 100644 index 0000000..4a2a081 --- /dev/null +++ b/samples/taskbook/trademarks.dita @@ -0,0 +1,19 @@ + + + + + + Trademarks + The following terms are trademarks of the Retro Tools in the United States, other countries, or + both: + + + RetroWrench + +

    The following terms are trademarks of other companies:

    +

    Red, Orange, Yellow, Green, Blue, Indigo, and Violot are registered trademarks of Rainbow Corporation and/or its + affiliates.

    +

    Linux is a trademark of Linus Torvalds in the United States, other countries, or both.

    +

    Other company, product, or service names may be trademarks or service marks of others.

    + +
    diff --git a/samples/taskbook/troubleshooting.dita b/samples/taskbook/troubleshooting.dita new file mode 100644 index 0000000..c6e7ebd --- /dev/null +++ b/samples/taskbook/troubleshooting.dita @@ -0,0 +1,12 @@ + + + + + + Troubleshooting + The troubleshooting tasks explain how to diagnose the cause of and recover from problems. + +

    To fix a problem, you often have to configure or maintain a component. The troubleshooting tasks help you + determine what to work on to get back to normal operations.

    + +
    diff --git a/samples/taskbook/unscrewcover.dita b/samples/taskbook/unscrewcover.dita new file mode 100644 index 0000000..7dc96bb --- /dev/null +++ b/samples/taskbook/unscrewcover.dita @@ -0,0 +1,31 @@ + + + + + + Remove the cover of your system + This is a simple task requiring a screwdriver. + + + + hard drive + Computer cover + + + + + First be sure you are grounded. + Perform the operation in a well ventilated room. + + + Unscrew the screws that hold the cover to your system. + + + Store them in a safe place. + + + Remove the cover and place it in a safe place as well. + + + + diff --git a/samples/taskbook/webtrouble.dita b/samples/taskbook/webtrouble.dita new file mode 100644 index 0000000..cc649f3 --- /dev/null +++ b/samples/taskbook/webtrouble.dita @@ -0,0 +1,33 @@ + + + + + + Troubleshooting Web Server problems + There are several things to try if your Web Server is not functioning properly. + + + + troubleshooting + web server + + + + + + + If others cannot connect to your server, try turning off their firewalls. + + + If your server is running slowly, try limiting it to 2 or 3 connections. + + + If your server keeps creating pop-up ads when people access it, please turn them off and things will run + faster. + + + If these directions are not helpful, please contact your service representative. + + + + diff --git a/samples/tasks/changingtheoil.xml b/samples/tasks/changingtheoil.xml new file mode 100644 index 0000000..f3e7c12 --- /dev/null +++ b/samples/tasks/changingtheoil.xml @@ -0,0 +1,37 @@ + + + + + + Changing the oil in your car + Once every 6000 kilometers or three months, change the oil in your car. + + +

    Changing the oil regularly will help keep the engine in good condition.

    + + To change the oil: + + Remove the old oil filter. + + + Drain the old oil. + + + Install a new oil filter and gasket. + + + Add new oil to the engine. + + + Check the air filter and replace or clean it. + + + Top up the windshield washer fluid. + + +
    + + + + +
    diff --git a/samples/tasks/garagetaskoverview.xml b/samples/tasks/garagetaskoverview.xml new file mode 100644 index 0000000..1cd252b --- /dev/null +++ b/samples/tasks/garagetaskoverview.xml @@ -0,0 +1,9 @@ + + + + + + Garage Tasks + When you go into the garage, be prepared to get your hands dirty! + + diff --git a/samples/tasks/organizing.xml b/samples/tasks/organizing.xml new file mode 100644 index 0000000..76de596 --- /dev/null +++ b/samples/tasks/organizing.xml @@ -0,0 +1,9 @@ + + + + + + Organizing the workbench and tools + Keep your garage neat by organizing the things you keep in the garage. + + diff --git a/samples/tasks/shovellingsnow.xml b/samples/tasks/shovellingsnow.xml new file mode 100644 index 0000000..48cd24e --- /dev/null +++ b/samples/tasks/shovellingsnow.xml @@ -0,0 +1,27 @@ + + + + + + Shovelling snow + Keep your driveway and sidewalks clear of snow and ice by shovelling after any snowfall. + + + + Get the shovel out of the garage + + + Shovel the driveway, starting at the garage door and working out to the street. + + + Shovel the sidewalk in front of your house. + + + Shovel the walk to your front door. + + + + + + + diff --git a/samples/tasks/spraypainting.xml b/samples/tasks/spraypainting.xml new file mode 100644 index 0000000..e7c6088 --- /dev/null +++ b/samples/tasks/spraypainting.xml @@ -0,0 +1,32 @@ + + + + + + Spray painting + When paint is applied using a spray nozzle, it is referred to as spray painting. + + +

    The garage is a good place to spray paint.

    + + + Move the car out of the garage to avoid getting paint on it. + + + Place newspaper, cardboard, or a drop-cloth on the garage floor. + + + Place the object to be painted on the covered area. + + + Follow the directions on the paint can to paint the object. + + + Let the paint dry thoroughly before you move the object. + + +
    + + + +
    diff --git a/samples/tasks/takinggarbage.xml b/samples/tasks/takinggarbage.xml new file mode 100644 index 0000000..e72e4c8 --- /dev/null +++ b/samples/tasks/takinggarbage.xml @@ -0,0 +1,23 @@ + + + + + + Taking out the garbage + Regular garbage removal is necessary for the proper functioning of a home. + + +

    Your municipality collects garbage from homes once a week, usually early in the morning.

    + + + Find out from the town what day of the week garbage is collected in your neighborhood. + + + The night before collection, place the garbage cans on the curb. + + + After the garbage has been collected, move the cans back into your garage. + + +
    +
    diff --git a/samples/tasks/washingthecar.xml b/samples/tasks/washingthecar.xml new file mode 100644 index 0000000..449ef88 --- /dev/null +++ b/samples/tasks/washingthecar.xml @@ -0,0 +1,40 @@ + + + + + + Washing the car + Keep your car looking great by washing it regularly. + + + + Move the car onto the driveway. + + + Attach the water hose to a spout and pull the free end over to the car. + + + Fill a bucket with soapy water. + + + Use a sponge to apply the soapy water to the car and scrub off the dirt. + + + Rinse the car by spraying clean water from the hose. + + + Dry the car using a dampened chamois. + + + +

    + + washing the car + +

    +
    +
    + + + +
    diff --git a/samples/themes/dita-ot-docs-theme.yaml b/samples/themes/dita-ot-docs-theme.yaml new file mode 100644 index 0000000..d5da288 --- /dev/null +++ b/samples/themes/dita-ot-docs-theme.yaml @@ -0,0 +1,220 @@ +# Sample PDF theme +# +# https://www.dita-ot.org/dev/topics/sample-pdf-theme.html + +# ↓ add-brand-colors ↓ +brand: + color: + primary: '#1d365d' + secondary: '#6c757d' + tertiary: '#bac8d1' + inverse: '#e9ecef' + links: '#3563ab' + note: + background: + attention: '#fff3cd' + caution: '#f8d7da' + info: '#dce4f0' + tip: '#d1e7dd' + xml-domain: '#639' +# ↑ end-brand-colors ↑ + +# ↓ add-font-stacks ↓ +pdf2: + font: + sans: 'Helvetica, Arial Unicode MS, Tahoma, Batang, SimSun' + serif: 'Times New Roman, Times, Arial Unicode MS, Tahoma, Batang, SimSun' + monospaced: 'Courier New, Courier, Arial Unicode MS, Tahoma, Batang, SimSun' +# ↑ end-font-stacks ↑ + +# ↓ add-page-settings ↓ +page: + size: PA4 + mirror-margins: true +# ↑ end-page-settings ↑ + +# ↓ add-header-setup ↓ +header: + color: $brand-color-secondary + display-align: before + end-indent: 10mm + font-family: $pdf2-font-sans + padding-after: 6pt + padding-before: 12pt + start-indent: 10mm + odd: + content: '{chapter}' + text-align: end + even: + content: '{title}' + text-align: start +# ↑ end-header-setup ↑ + +# ↓ add-footer-setup ↓ +footer: + color: $brand-color-secondary + end-indent: 10mm + font-family: $pdf2-font-sans + padding-after: 12pt + padding-before: 6pt + start-indent: 10mm + odd: + content: '{folio}' + font-weight: bold + text-align: end + even: + content: '{folio}' + font-weight: bold + text-align: start +# ↑ end-footer-setup ↑ + +style: + body: + font-family: $pdf2-font-serif + font-size: 11pt + line-height: 1.3 + start-indent: 50pt + cmdname: + color: $brand-color-primary + font-weight: bold + codeblock: + background-color: $brand-color-inverse + border: solid 1pt $brand-color-tertiary + font-family: $pdf2-font-monospaced + font-size: 8pt + keep-together.within-page: always + space-after: 8pt + codeph: + color: $brand-color-secondary + # ↓ set-cover-page ↓ + cover: + background-image: dita-ot-logo-inverse.svg + background-repeat: no-repeat + height: 25.7cm + cover-title: + color: $brand-color-primary + font-size: 36pt + font-weight: bold + line-height: 1.5 + space-before: 195mm + # ↑ end-cover-page ↑ + example-title: + color: $brand-color-secondary + fig: + caption: + color: $brand-color-secondary + font-size: 9pt + font-style: italic + font-weight: normal + filepath: + color: $brand-color-secondary + h1: + border-after: solid 2pt $brand-color-inverse + color: $brand-color-primary + font-size: 18pt + space-before: 0pt + padding-top: 0pt + space-after: 9pt + font-weight: bold + title-numbering: true + h2: + border-after: solid 1pt $brand-color-inverse + color: $brand-color-primary + font-size: 16pt + font-style: italic + space-before: 16pt + space-after: 8pt + title-numbering: true + h3: + color: $brand-color-primary + font-size: 14pt + font-weight: bold + space-before: 21pt + space-after: 7pt + h4: + font-size: 12pt + font-style: italic + space-before: 12pt + li: + label: + color: $brand-color-secondary + link: + color: $brand-color-links + note: + background-color: $brand-color-note-background-info + border: solid 1pt $brand-color-tertiary + keep-together.within-page: always + label: + font-family: $pdf2-font-sans + space-end: 2pt + padding-start: 6pt + start-indent: '6pt + from-parent(start-indent)' + padding-end: 6pt + end-indent: '6pt + from-parent(end-indent)' + space-before: 6pt + space-after: 12pt + attention: + background-color: $brand-color-note-background-attention + caution: + background-color: $brand-color-note-background-caution + important: + background-color: $brand-color-note-background-attention + notice: + background-color: $brand-color-note-background-attention + restriction: + background-color: $brand-color-note-background-attention + tip: + background-color: $brand-color-note-background-tip + warning: + background-color: $brand-color-note-background-caution + option: + color: $brand-color-secondary + font-family: $pdf2-font-monospaced + font-weight: bold + parmname: + color: $brand-color-primary + font-family: $pdf2-font-monospaced + font-weight: bold + section-title: + color: $brand-color-secondary + shortdesc: + color: $brand-color-secondary + font-size: 13pt + line-height: 1.3 + table: + caption: + color: $brand-color-secondary + font-size: 9pt + font-style: italic + font-weight: normal + font-family: $pdf2-font-sans + font-size: 9pt + header: + background-color: $brand-color-inverse + toc-1: + color: $brand-color-primary + font-family: $pdf2-font-sans + start-indent: 0 + toc-2: + color: black + space-before: 4pt + start-indent: 20pt + toc-3: + color: black + space-before: 2pt + start-indent: 42pt + toc-4: + color: black + space-before: 2pt + start-indent: 64pt + varname: + color: $brand-color-secondary + font-family: $pdf2-font-monospaced + font-style: italic + font-weight: bold + xmlatt: + color: $brand-color-xml-domain + xmlelement: + color: $brand-color-xml-domain + xmlnsname: + color: $brand-color-xml-domain diff --git a/samples/themes/dita-ot-docs_A4.yaml b/samples/themes/dita-ot-docs_A4.yaml new file mode 100644 index 0000000..bd64bd0 --- /dev/null +++ b/samples/themes/dita-ot-docs_A4.yaml @@ -0,0 +1,4 @@ +# Sample PDF theme that changes page size for printing on A4 paper +extends: ./dita-ot-docs-theme.yaml +page: + size: A4 diff --git a/samples/themes/dita-ot-docs_Letter.yaml b/samples/themes/dita-ot-docs_Letter.yaml new file mode 100644 index 0000000..28617d7 --- /dev/null +++ b/samples/themes/dita-ot-docs_Letter.yaml @@ -0,0 +1,4 @@ +# Sample PDF theme that changes page size for printing on US Letter paper +extends: ./dita-ot-docs-theme.yaml +page: + size: Letter diff --git a/samples/themes/dita-ot-logo-inverse.svg b/samples/themes/dita-ot-logo-inverse.svg new file mode 100644 index 0000000..333e6f4 --- /dev/null +++ b/samples/themes/dita-ot-logo-inverse.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..ce884bd --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'docs' diff --git a/site.ditamap b/site.ditamap new file mode 100644 index 0000000..bbac282 --- /dev/null +++ b/site.ditamap @@ -0,0 +1,9 @@ + + + + + DITA Open Toolkit <keyword keyref="release"/> + + + + diff --git a/topics/Test.dita b/topics/Test.dita new file mode 100644 index 0000000..9c6893e --- /dev/null +++ b/topics/Test.dita @@ -0,0 +1,14 @@ + + + + Prakash Chand Rajwar + + Prakash Rajwar + + + + + +

    Testing 1

    + +
    diff --git a/topics/adding-new-languages.dita b/topics/adding-new-languages.dita new file mode 100644 index 0000000..886a403 --- /dev/null +++ b/topics/adding-new-languages.dita @@ -0,0 +1,98 @@ + + + + + Adding new languages + Extend the toolkit’s generated text capabilities by adding new language files. + + + + + languages + adding support for + generated text + gentext + + + + + + + Copy this file to your plug-in. + + non-PDF output: plugins/org.dita.base/xsl/common/strings.xml + PDF output: plugins/org.dita.pdf2/cfg/common/vars/strings.xml + + + + In your plug-in, edit strings.xml to contain references to the language files for + which you are providing custom strings. + +

    + <?xml version="1.0" encoding="UTF-8"?> +<!-- Provide new languages for Gaelic and Vietnamese. --> +<langlist> + <lang xml:lang="ga" filename="strings-ga-ga.xml"/> + <lang xml:lang="ga-GA" filename="strings-ga-ga.xml"/> + <lang xml:lang="vi" filename="strings-vi-vn.xml"/> + <lang xml:lang="vi-VN" filename="strings-vi-vn.xml"/> +</langlist> +

    +
    +
    + + Copy this file to your plug-in into the same directory as step + . + + non-PDF output: plugins/org.dita.base/xsl/common/strings-en-us.xml + PDF output: plugins/org.dita.pdf2/cfg/common/vars/en.xml + + + + Rename the file to match the language you wish to add (for instance, + strings-vi-vn.xml). + + + Without changing the id value, replace the generated text string for each variable. + + <variables> + <variable id="Figure">Hình</variable> + <variable id="Table">Bảng</variable> + <variable id="Next topic">Chủ đề tiếp theo</variable> + [...] + <variable id="Copyright">Bản quyền</variable> + <variable id="a11y.and-then"/> +</variables> + + + + Repeat step + to step + for each language. + + + Update your plugin.xml file to extend the strings available. + + <plugin id="com.example.your-plugin"> + <feature extension="dita.xsl.strings" file="xsl/common/strings.xml"/> +</plugin> + + Your custom language strings are available to your stylesheets. For example, if processing in a + context where the xml:lang value is vi-VN, the following call returns + “Chủ đề tiếp theo” because it was defined as the text for the variable with + id value of Next topic in step + . + <xsl:call-template name="getVariable"> + <xsl:with-param name="id" select="'Next topic'"/> +</xsl:call-template> + + +
    +
    +
    diff --git a/topics/adding-new-strings.dita b/topics/adding-new-strings.dita new file mode 100644 index 0000000..04d6bf0 --- /dev/null +++ b/topics/adding-new-strings.dita @@ -0,0 +1,121 @@ + + + + + Adding new strings + Add new generated strings to your plug-in for the toolkit to include in your output. + + + + generated text, adding new + gentext + + + + + + + Copy this file to your plug-in. + + non-PDF output: plugins/org.dita.base/xsl/common/strings.xml + PDF output: plugins/org.dita.pdf2/cfg/common/vars/strings.xml + + + + In your plug-in, edit strings.xml to contain references to the language files for + which you are providing custom strings. + +

    The en-US language must be present; other language files are optional.

    +

    + <?xml version="1.0" encoding="UTF-8"?> +<!-- Provide strings for my plug-in; this plug-in supports + English, Icelandic, and Russian. --> +<langlist> + <lang xml:lang="en" filename="my-added-strings-en-us.xml"/> + <lang xml:lang="en-US" filename="my-added-strings-en-us.xml"/> + <lang xml:lang="is" filename="my-added-strings-is-is.xml"/> + <lang xml:lang="is-IS" filename="my-added-strings-is-is.xml"/> + <lang xml:lang="ru" filename="my-added-strings-ru-ru.xml"/> + <lang xml:lang="ru-RU" filename="my-added-strings-ru-ru.xml"/> +</langlist> +

    +
    +
    + + In xsl/common or cfg/common/vars, create a new file called + my-added-strings-en-us.xml. + + <?xml version="1.0" encoding="UTF-8"?> +<variables> + +</variables> + + + + For each new string you want, add a variable element with an id + attribute and the text you want the toolkit to use. + The id attribute value must be unique in the file and should reflect the purpose of the + generated text. +

    The toolkit uses the text found inside the element when inserting generated text.

    + <?xml version="1.0" encoding="UTF-8"?> +<variables> + <variable id="String1">English generated text</variable> + <variable id="Another String">Another string in English</variable> +</variables> +
    +
    + + Repeat step + and step + for each language. + + + Update your plugin.xml file to extend the strings available. + + <plugin id="com.example.your-plugin"> + <feature extension="dita.xsl.strings" file="xsl/common/strings.xml"/> +</plugin> + + Your custom strings are available to your stylesheets. For example, if processing in a context where + the xml:lang value is en-US, the following call returns “Another + string in English” because it was defined as the text for the variable with id value + of Another String in step + . + <xsl:call-template name="getVariable"> + <xsl:with-param name="id" select="'Another String'"/> +</xsl:call-template> +

    You can also use the same strings in multiple languages by assigning a file with common strings to each + language in addition to the language-specific custom strings files. + <?xml version="1.0" encoding="UTF-8"?> +<langlist> + <lang xml:lang="en" filename="my-added-strings-en-us.xml"/> + <lang xml:lang="en-US" filename="my-added-strings-en-us.xml"/> + <lang xml:lang="en" filename="my-added-strings-mul.xml"/> + <lang xml:lang="en-US" filename="my-added-strings-mul.xml"/> + <lang xml:lang="is" filename="my-added-strings-is-is.xml"/> + <lang xml:lang="is-IS" filename="my-added-strings-is-is.xml"/> + <lang xml:lang="is" filename="my-added-strings-mul.xml"/> + <lang xml:lang="is-IS" filename="my-added-strings-mul.xml"/> + <lang xml:lang="ru" filename="my-added-strings-ru-ru.xml"/> + <lang xml:lang="ru-RU" filename="my-added-strings-ru-ru.xml"/> + <lang xml:lang="ru" filename="my-added-strings-mul.xml"/> + <lang xml:lang="ru-RU" filename="my-added-strings-mul.xml"/> +</langlist> +

    +
    +
    +
    +
    +
    diff --git a/topics/adding-plugins.dita b/topics/adding-plugins.dita new file mode 100644 index 0000000..92efb6d --- /dev/null +++ b/topics/adding-plugins.dita @@ -0,0 +1,25 @@ + + + + + Adding and removing plug-ins + + Adding plug-ins + + You can extend DITA-OT with additional plug-ins to change the default output types in various ways, add + entirely new kinds of output formats, or implement DITA specializations. A variety of open source plug-ins are + available from the plug-in registry at + . + + + + DITA + specializations + plug-ins + plug-ins + working with + + + + + diff --git a/topics/ant.dita b/topics/ant.dita new file mode 100644 index 0000000..6cd3128 --- /dev/null +++ b/topics/ant.dita @@ -0,0 +1,30 @@ + + + + + Ant + Ant is a Java-based, open-source tool that is provided by the Apache Foundation. It can be used to declare + a sequence of build actions. It is well suited for both development and document builds. The toolkit ships with a + copy of Ant. + + + + Ant + overview + build.xml + files + build.xml + XSLT + Ant + Java + Ant + + + + +

    DITA-OT uses Ant to manage the XSLT scripts that are used to perform the various transformation; it also uses Ant + to manage intermediate steps that are written in Java.

    +

    The most important Ant script is the build.xml file. This script defines and combines common + pre-processing and output transformation routines; it also defines the DITA-OT extension points.

    +
    +
    diff --git a/topics/building-output.dita b/topics/building-output.dita new file mode 100644 index 0000000..404bf07 --- /dev/null +++ b/topics/building-output.dita @@ -0,0 +1,8 @@ + + + + + Building output + You can use the dita command-line tool, Ant, or the Java API to transform DITA content + to the various output formats that DITA Open Toolkit supports. + diff --git a/topics/building-with-ant.dita b/topics/building-with-ant.dita new file mode 100644 index 0000000..975e9ae --- /dev/null +++ b/topics/building-with-ant.dita @@ -0,0 +1,61 @@ + + + + + Building output using Ant + You can build output by using an Ant build script to provide the DITA-OT parameters. + + + + default + macOS + Ant + Linux + Ant + Windows + Ant + Ant + publishing with + + + + + + + + + + Issue the following command: + + + Linux or macOS  + + bin/ant + + build-script + target + + + + Windows + + bin\ant + + build-script + target + + + + where: +
      +
    • build-script is name of the Ant build script.
    • +
    • target is an optional switch that specifies the name of the Ant target that you want + to run. +

      If you do not specify a target, the value of the default attribute for the Ant project + is used.

      +
    • +
    +
    +
    +
    +
    diff --git a/topics/configuring-proxies.dita b/topics/configuring-proxies.dita new file mode 100644 index 0000000..ea2bb14 --- /dev/null +++ b/topics/configuring-proxies.dita @@ -0,0 +1,73 @@ + + + + + Configuring proxies + Certain commands, for example, the dita install command, use a network connection to + install plug-ins from the configured registry or process remote referenced resources. In environments where an HTTP + proxy is used to establish a network connection, you can provide the proxy configuration via the + ANT_OPTS environment variable. + + + + macOS configuring proxies + Linux configuring proxies + Windows configuring proxies + command line configuring proxies + proxies + HTTP proxies + operating system + Linux + macOS + Windows + Java network + ANT_OPTS + Java + ANT_OPTS + metadata + network connection error + metadata + connection timed out + + + + + + + To configure the proxy for a specific session, from the command prompt, issue the + following command: + + + Platform + Command + + + Linux or macOS  + export ANT_OPTS="-Dhttp.proxySet=true \ + -Dhttps.proxyHost=<HTTPS proxy IP address> \ + -Dhttp.proxyHost=<HTTP proxy IP address> \ + -Dhttp.proxyPort=<HTTP proxy port> \ + -Dhttps.proxyPort=<HTTPS proxy port>" + + + Windows + set ANT_OPTS=%ANT_OPTS% -Dhttp.proxySet=true ^ + -Dhttps.proxyHost=<HTTPS proxy IP address> ^ + -Dhttp.proxyHost=<HTTP proxy IP address> ^ + -Dhttp.proxyPort=<HTTP proxy port> ^ + -Dhttps.proxyPort=<HTTPS proxy port> + + + + + To persistently change the value, change the value allocated to the + ANT_OPTS environment variable on your system. + + + If a command has previously failed due to a connection timeout, issue the command + again. For + example:dita install <plug-in> + + + diff --git a/topics/creating-an-ant-build-script.dita b/topics/creating-an-ant-build-script.dita new file mode 100644 index 0000000..11ec26f --- /dev/null +++ b/topics/creating-an-ant-build-script.dita @@ -0,0 +1,106 @@ + + + + + Creating an Ant build script + Instead of typing the DITA-OT parameters at the command prompt, you might want to create an Ant build + script that contains all of the parameters. + + + + link + name + default + Ant + build script + relationship tables + PDF + + + + + + + Create an XML file that contains the following content: + + <?xml version="1.0" encoding="UTF-8" ?> +<project name="%project-name%" default="%default-target%" basedir="."> + + <property name="dita.dir" location="%path-to-DITA-OT%"/> + + <target name="%target-name%"> + <ant antfile="${dita.dir}/build.xml"> + <property name="args.input" value="%DITA-input%"/> + <property name="transtype" value="html5"/> + </ant> + </target> + +</project> + + You will replace the placeholder content (indicated by the % signs) with content applicable to your + environment. + + + Specify project information: + + + Set the value of the name attribute to the name of your project. + + + Set the value of the default attribute to the name of a target in the build + script. + If the build script is invoked without specifying a target, this target will be run. + + + + + Set the value of the dita.dir property to the location of the DITA-OT + installation. + This can be a fully qualified path, or you can specify it relative to the location of the Ant build script + that you are writing. + + + Create the Ant target: + + + Set the value of the name attribute. + + + Specify the value for the args.input property. + + + Specify the value of the transtype property. + + + + + Save the build script. + + + +

    The following Ant build script generates CHM and PDF output for the sample DITA maps.

    +

    +

    +

    In addition to the mandatory parameters (args.input and transtype), + the chm and pdf targets each specify some optional parameters: +

      +
    • The args.gen.task.lbl property is set to YES, which ensures that headings are + automatically generated for the sections of task topics.
    • +
    • The output.dir property specifies where DITA-OT writes the output of the + transformations.
    • +

    +

    The pdf target also specifies that related links should be generated in the PDF, but only those links that are + created by relationship tables and link elements.

    +

    Finally, the all target simply specifies that both the chm and pdf target should be run.

    +
    + Another resource for learning about Ant scripts are the files in the /ant_sample/ directory. This + directory contains sample Ant build files for common output formats, as well as templates that you can use to + create your own Ant scripts. +
    +
    diff --git a/topics/creating-docker-images.dita b/topics/creating-docker-images.dita new file mode 100644 index 0000000..f99ee0c --- /dev/null +++ b/topics/creating-docker-images.dita @@ -0,0 +1,122 @@ + + + + + Installing plug-ins in a Docker image + + Custom images + + To install custom plug-ins or make other changes based on the DITA-OT parent image, you can create your own + Dockerfile and specify the official DITA-OT image as the basis for your image. + + + + plug-ins + installing in Docker images + Docker images + + + + + +

    Each subsequent declaration in the Dockerfile modifies this parent image, so you can start with the official + image, and add custom plug-ins or other commands as required to create a custom Docker image that includes + everything you need to publish your content.

    + + + Create a new Dockerfile and specify the official DITA-OT image in the + FROM directive. + + + + + + You can extend your image with a RUN declaration that runs the dita + command from the container to install a custom plug-in, and specify the filename or URL of the plug-in’s + distribution ZIP file. + + + + + + You can also install custom plug-ins from the main DITA-OT plug-in registry at + , or from your company plug-in registry. + + + + + + +

    The docsrc/samples folder in the DITA-OT installation directory contains a complete + example:

    + + Sample Dockerfile with custom plug-ins: <filepath conkeyref="conref-task/samples-dir"/><filepath + >/docker/Dockerfile</filepath> + + +
    + + Building a new image +

    You can build a Docker image from this example by running the following command from the directory:

    + $ docker image build -t sample-docker-image:1.0 docker/ +[+] Building 81.5s (4/6) + => [internal] load build definition from Dockerfile 0.0s + => => transferring dockerfile: 367B 0.0s + => [internal] load .dockerignore 0.0s + => => transferring context: 2B 0.0s + => [internal] load metadata for ghcr.io/dita-ot/dita-ot: + => [1/3] FROM ghcr.io/dita-ot/dita-ot:@sha256:<hash> + => => resolve ghcr.io/dita-ot/dita-ot:@sha256:<hash> +Step 2/3 : RUN dita --install https://github.com/infotexture/dita-bootstrap/archive/master.zip + ---> Running in d510f874cae0 +Added net.infotexture.dita-bootstrap +Removing intermediate container d510f874cae0 + ---> 63deb8e15b5b +Step 3/3 : RUN dita --install org.dita-community.pdf-page-break + ---> Running in b4ef2fcad916 +Added org.dita-community.pdf-page-break +Removing intermediate container b4ef2fcad916 + ---> 402885636b7f +Successfully built 402885636b7f +Successfully tagged sample-docker-image:1.0 + +

    Docker steps through each instruction in the Dockerfile to build the sample image. In this case, the + dita command provides feedback on each installed plug-in.

    +
    + + Running the new container +

    You can then start a container based on your new image:

    + $ docker container run --rm \ + -v /path/to/dita-ot-dir/docsrc:/src sample-docker-image:1.0 \ + -i /src/userguide.ditamap \ + -o /src/out/dita-bootstrap \ + -f html5-bootstrap -v +

    This command sequence specifies the following options: +

      +
    • mounts the docsrc subfolder of the DITA-OT directory on your host + machine and binds it to the /src volume in the container
    • +
    • specifies /userguide.ditamap as the input map file
    • +
    • writes the output to /out/dita-bootstrap
    • +
    • sets the output format to the Bootstrap template, and
    • +
    • displays build progress messages with verbose logging
    • +
    +

    +

    When the build is finished, you should find a copy of the DITA-OT documentation under /out/dita-bootstrap, styled with the basic Bootstrap + template from the custom plug-in.

    +
    +
    +
    diff --git a/topics/creating-plugins.ditamap b/topics/creating-plugins.ditamap new file mode 100644 index 0000000..50c6ef8 --- /dev/null +++ b/topics/creating-plugins.ditamap @@ -0,0 +1,8 @@ + + + + + Creating plug-ins + + + diff --git a/topics/custom-plugins.dita b/topics/custom-plugins.dita new file mode 100644 index 0000000..47c881a --- /dev/null +++ b/topics/custom-plugins.dita @@ -0,0 +1,26 @@ + + + + + Creating custom plug-ins + + Creating plug-ins + + In addition to adding plug-ins from the plug-in registry at + , you can create custom DITA-OT plug-ins of your own to modify the default + output, add new output formats, support new languages, or implement DITA topic specializations. + + + + DITA + specializations + plug-ins + + + + +

    A plug-in consists of a directory, typically stored within the plugins/ subdirectory of the + DITA-OT installation. Every plug-in is controlled by a file named plugin.xml, which is + located in the root directory of the plug-in.

    +
    +
    diff --git a/topics/customizing.dita b/topics/customizing.dita new file mode 100644 index 0000000..95a6243 --- /dev/null +++ b/topics/customizing.dita @@ -0,0 +1,41 @@ + + + + + Customizing DITA Open Toolkit + + Customizing DITA-OT + + There are several ways to customize and extend the toolkit. You can adjust various aspects of the default + output by setting parameters or using custom stylesheets. For more complex customizations, use custom DITA-OT + plug-ins to override other parts of processing. + + + + plug-ins + best practices + upgrading + default plug-ins + + + + +
    +

    A single XSL file can be used as an override by passing it in as a parameter. For example, when building XHTML + content, the XSL parameter allows users to specify a single local XSL file (inside or outside of the toolkit) + that is called in place of the default XHTML code. Typically, this code imports the default processing code, and + overrides a couple of processing routines. This approach is best when the override is very minimal, or when the + style varies from build to build. However, any extension made with this sort of override is also possible with a + plug-in.

    +

    Creating a plug-in can be very simple to very complex, and is generally the best method for changing or + extending the toolkit. Plug-ins can be used to accomplish almost any modification that is needed for toolkit + processing, from minor style tweaks to extensive, complicated new output formats.

    +

    Editing DITA-OT code directly is strongly discouraged. Modifying the code directly significantly increases the + work and risk involved with future upgrades. It is also likely that such modifications will break plug-ins + provided by others, limiting the functions available to the toolkit.

    + Any changes made directly in the code would be overwritten when upgrading to newer versions + of DITA-OT, so users that have customized their toolkit installation in this way are often “stuck” on older + versions of the toolkit and unable to take advantage of improvements in recent versions of DITA-OT. +
    +
    +
    diff --git a/topics/determining-version-of-ditaot.dita b/topics/determining-version-of-ditaot.dita new file mode 100644 index 0000000..7018e42 --- /dev/null +++ b/topics/determining-version-of-ditaot.dita @@ -0,0 +1,43 @@ + + + + + Checking the DITA-OT version number + + Checking the version + + You can determine the DITA Open Toolkit version number from a command prompt. + + + + macOS + DITA-OT version + Linux + DITA-OT version + Windows + DITA-OT version + command line + checking DITA-OT version + installing + check current version + + + + + + + + + + Issue the following command: + + --version + + + + +

    The DITA-OT version number appears on the console:

    + DITA-OT version +
    +
    +
    diff --git a/topics/dita-and-dita-ot-resources.dita b/topics/dita-and-dita-ot-resources.dita new file mode 100644 index 0000000..15598a8 --- /dev/null +++ b/topics/dita-and-dita-ot-resources.dita @@ -0,0 +1,11 @@ + + + + + DITA and DITA-OT resources + + Resources + + In addition to the DITA Open Toolkit documentation, there are other resources about DITA and DITA-OT that + you might find helpful. + diff --git a/topics/dita-command-help.dita b/topics/dita-command-help.dita new file mode 100644 index 0000000..adee8fd --- /dev/null +++ b/topics/dita-command-help.dita @@ -0,0 +1,50 @@ + + + + + Accessing help for the dita command + + Command line help + + You can access a list of subcommands and supported parameters for the dita command by + passing the --help option on the command line. + + + + macOS + help + Linux + help + Windows + help + command line + help + dita command + help + + + + + + + + + + Issue the following command: + + --help + + + + For details on the arguments and options available for each subcommand, pass the + --help option after the subcommand name. + For example: dita install + --help. + + + +

    A brief usage summary appears in the command-line window, along with a list of subcommands, arguments, and + options.

    +
    +
    +
    diff --git a/topics/dita-ot-day-2014.ditamap b/topics/dita-ot-day-2014.ditamap new file mode 100644 index 0000000..8c6b1ba --- /dev/null +++ b/topics/dita-ot-day-2014.ditamap @@ -0,0 +1,129 @@ + + + + + DITA-OT Day 2014 + + + 2014 Munich + Munich 2014 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/topics/dita-ot-day-2015.ditamap b/topics/dita-ot-day-2015.ditamap new file mode 100644 index 0000000..52319cd --- /dev/null +++ b/topics/dita-ot-day-2015.ditamap @@ -0,0 +1,151 @@ + + + + + DITA-OT Day 2015 + + + 2015 Munich + Munich 2015 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/topics/dita-ot-day-2016.ditamap b/topics/dita-ot-day-2016.ditamap new file mode 100644 index 0000000..7c0313b --- /dev/null +++ b/topics/dita-ot-day-2016.ditamap @@ -0,0 +1,136 @@ + + + + + DITA-OT Day 2016 + + + 2016 Munich + Munich 2016 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/topics/dita-ot-day-2017.ditamap b/topics/dita-ot-day-2017.ditamap new file mode 100644 index 0000000..244dd47 --- /dev/null +++ b/topics/dita-ot-day-2017.ditamap @@ -0,0 +1,138 @@ + + + + + DITA-OT Day 2017 + + + 2017 Berlin + Berlin 2017 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/topics/dita-ot-day-2018.ditamap b/topics/dita-ot-day-2018.ditamap new file mode 100644 index 0000000..3139fda --- /dev/null +++ b/topics/dita-ot-day-2018.ditamap @@ -0,0 +1,152 @@ + + + + + DITA-OT Day 2018 + + + 2018 Rotterdam + Rotterdam 2018 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/topics/dita-ot-day-2019.ditamap b/topics/dita-ot-day-2019.ditamap new file mode 100644 index 0000000..b183b9b --- /dev/null +++ b/topics/dita-ot-day-2019.ditamap @@ -0,0 +1,140 @@ + + + + + DITA-OT Day 2019 + + + 2019 Brussels + Brussels 2019 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/topics/dita-ot-day-2022.ditamap b/topics/dita-ot-day-2022.ditamap new file mode 100644 index 0000000..93dec32 --- /dev/null +++ b/topics/dita-ot-day-2022.ditamap @@ -0,0 +1,118 @@ + + + + + DITA-OT Day 2022 + + + 2022 Rotterdam + Rotterdam 2022 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/topics/dita-ot-day-2024.ditamap b/topics/dita-ot-day-2024.ditamap new file mode 100644 index 0000000..4df73b6 --- /dev/null +++ b/topics/dita-ot-day-2024.ditamap @@ -0,0 +1,33 @@ + + + + + DITA-OT Day 2024 + + + 2024 Helsinki + Helsinki 2024 + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/topics/dita-ot-day-videos-intro-2014.dita b/topics/dita-ot-day-videos-intro-2014.dita new file mode 100644 index 0000000..8705fb2 --- /dev/null +++ b/topics/dita-ot-day-videos-intro-2014.dita @@ -0,0 +1,17 @@ + + + + + DITA-OT Day Conference – Munich 2014 + November 20, 2014 in Munich, Germany. + + + + DITA-OT Day 2014 videos + + + + +

    + + diff --git a/topics/dita-ot-day-videos-intro-2015.dita b/topics/dita-ot-day-videos-intro-2015.dita new file mode 100644 index 0000000..a37188a --- /dev/null +++ b/topics/dita-ot-day-videos-intro-2015.dita @@ -0,0 +1,17 @@ + + + + + DITA-OT Day Conference – Munich 2015 + November 15, 2015 in Munich, Germany. + + + + DITA-OT Day 2015 videos + + + + +

    + + diff --git a/topics/dita-ot-day-videos-intro-2016.dita b/topics/dita-ot-day-videos-intro-2016.dita new file mode 100644 index 0000000..7126e04 --- /dev/null +++ b/topics/dita-ot-day-videos-intro-2016.dita @@ -0,0 +1,17 @@ + + + + + DITA-OT Day Conference – Munich 2016 + November 13, 2016 in Munich, Germany. + + + + DITA-OT Day 2016 videos + + + + +

    + + diff --git a/topics/dita-ot-day-videos-intro-2017.dita b/topics/dita-ot-day-videos-intro-2017.dita new file mode 100644 index 0000000..8e4cab9 --- /dev/null +++ b/topics/dita-ot-day-videos-intro-2017.dita @@ -0,0 +1,17 @@ + + + + + DITA-OT Day Conference – Berlin 2017 + October 29, 2017 in Berlin, Germany. + + + + DITA-OT Day 2017 videos + + + + +

    + + diff --git a/topics/dita-ot-day-videos-intro-2018.dita b/topics/dita-ot-day-videos-intro-2018.dita new file mode 100644 index 0000000..005b4f2 --- /dev/null +++ b/topics/dita-ot-day-videos-intro-2018.dita @@ -0,0 +1,17 @@ + + + + + DITA-OT Day Conference – Rotterdam 2018 + November 4, 2018 in Rotterdam, Netherlands. + + + + DITA-OT Day 2018 videos + + + + +

    + + diff --git a/topics/dita-ot-day-videos-intro-2019.dita b/topics/dita-ot-day-videos-intro-2019.dita new file mode 100644 index 0000000..6784846 --- /dev/null +++ b/topics/dita-ot-day-videos-intro-2019.dita @@ -0,0 +1,18 @@ + + + + + DITA-OT Day Conference – Brussels 2019 + November 9, 2019 in Brussels, Belgium. + + + + DITA-OT Day 2019 videos + videos + + + + +

    + + diff --git a/topics/dita-ot-day-videos-intro-2022.dita b/topics/dita-ot-day-videos-intro-2022.dita new file mode 100644 index 0000000..9c3adbb --- /dev/null +++ b/topics/dita-ot-day-videos-intro-2022.dita @@ -0,0 +1,17 @@ + + + + + DITA-OT Day Conference – Rotterdam 2022 + November 13, 2022 in Rotterdam, Netherlands. DITA-OT Day was not held in 2020 or 2021. + + + + DITA-OT Day 2022 videos + + + + +

    + + diff --git a/topics/dita-ot-day-videos-intro-2024.dita b/topics/dita-ot-day-videos-intro-2024.dita new file mode 100644 index 0000000..c56fa86 --- /dev/null +++ b/topics/dita-ot-day-videos-intro-2024.dita @@ -0,0 +1,17 @@ + + + + + DITA-OT Day Conference – Helsinki 2024 + February 11, 2024 in Helsinki, Finland. DITA-OT Day was not held in 2023. + + + + DITA-OT Day 2024 videos + + + + +

    + + diff --git a/topics/dita-ot-day-videos.dita b/topics/dita-ot-day-videos.dita new file mode 100644 index 0000000..6286bf1 --- /dev/null +++ b/topics/dita-ot-day-videos.dita @@ -0,0 +1,13 @@ + + + + + DITA-OT Day conference recordings + + DITA-OT Day Videos + + All video recordings from each DITA-OT Day conference from 2014 onward. + +

    + + diff --git a/topics/dita-ot-day-videos.ditamap b/topics/dita-ot-day-videos.ditamap new file mode 100644 index 0000000..0d9ee3d --- /dev/null +++ b/topics/dita-ot-day-videos.ditamap @@ -0,0 +1,17 @@ + + + + + DITA-OT Day Videos + + + + + + + + + + + + diff --git a/topics/dita-resources.ditamap b/topics/dita-resources.ditamap new file mode 100644 index 0000000..9ff1246 --- /dev/null +++ b/topics/dita-resources.ditamap @@ -0,0 +1,51 @@ + + + + + DITA and DITA-OT resources + + + + DITA-OT project website: dita-ot.org + The DITA-OT project website at dita-ot.org provides information about the latest toolkit releases, + including download links, release notes, and documentation for recent DITA-OT versions. + + + + + DITA-OT Discussions + The DITA-OT Discussions forum on GitHub is a collaborative communication platform that allows members + of the community to ask questions, share suggestions, upvote discussions to signal support, and mark questions + as answered. + + + + + DITA Users group + The original dita-users group was founded in 2004 as a Yahoo! Group and moved to Groups.io in November + 2019. The mailing list addresses the needs of DITA users at all levels of experience, from beginners to experts, + and serves as a vital resource for the DITA community. + + + + + DITA-OT Users group + General interest DITA-OT mailing list, for questions on any aspect of the toolkit — from installation + and getting started to specific overrides, plug-ins, and customizations. + + + + + Home page for the DITA Technical Committee + The OASIS DITA Technical Committee develops the DITA standard. + + + + + DITA-OT project archive + The DITA-OT project archive at dita-archive.xml.org provides news about earlier toolkit releases, and + release notes for legacy versions. + + + + diff --git a/topics/dita-xml-input.dita b/topics/dita-xml-input.dita new file mode 100644 index 0000000..3558306 --- /dev/null +++ b/topics/dita-xml-input.dita @@ -0,0 +1,16 @@ + + + + + Standard DITA XML + DITA Open Toolkit supports all released versions of the OASIS DITA specification, including 1.0, 1.1, 1.2, + and 1.3. As of release , DITA-OT also provides an initial preview of features for the + latest draft of the upcoming DITA 2.0 standard. + +

    The DITA specification “defines a set of document types for authoring and organizing topic-oriented information, + as well as a set of mechanisms for combining, extending, and constraining document types.” The + is the authoritative source of information on authoring DITA content in XML.

    + For details on how DITA Open Toolkit processes DITA XML content, see + . + + diff --git a/topics/dita2dita.dita b/topics/dita2dita.dita new file mode 100644 index 0000000..99ac17e --- /dev/null +++ b/topics/dita2dita.dita @@ -0,0 +1,67 @@ + + + + + Normalized DITA + The dita transformation generates normalized topics and maps from DITA input. The + normalized output includes the results of DITA Open Toolkit pre-processing operations, which resolve map references, + keys, content references, code references and push metadata back and forth between maps and topics. + + + + dita command + normalized DITA + transformations + normalized DITA + DITA + normalized + metadata + map + metadata + topic + plug-ins + dita2dita + dita2dita + relationship tables + normalized DITA + converting lightweight formats to DITA + + + + + +

    In comparison to the source DITA files, the normalized DITA files are modified in the following ways:

    +
      +
    • References from one DITA map to another are resolved
    • +
    • Map-based links, such as those generated by map hierarchy and relationship tables, are added to the + topics.
    • +
    • Link text is resolved.
    • +
    • Map attributes that cascade are made explicit on child elements.
    • +
    • Map metadata such as index entries and copyrights are pushed into topics.
    • +
    • Topic metadata such as navigation titles, link text and short descriptions are pulled from topics into the + map.
    • +
    • XML comments are removed.
    • +
    +
    + Applications +

    Normalized output may be useful in situations where post-processing of DITA content is required, but the + downstream systems are limited in their ability to resolve DITA references.

    + You can also use the normalized DITA transformation to convert + Markdown or + Lightweight DITA formats to DITA XML. You can then copy the generated DITA + files from the output folder to your project and replace references to the lightweight topics with their XML + equivalents. +
    +
    + Generating normalized DITA output +

    Run the dita command and set the value of the output --format option to + :

    + --input=input-file --format= +

    where:

    +
      +
    • +
    +
    + +
    diff --git a/topics/dita2eclipsehelp.dita b/topics/dita2eclipsehelp.dita new file mode 100644 index 0000000..25597d2 --- /dev/null +++ b/topics/dita2eclipsehelp.dita @@ -0,0 +1,64 @@ + + + + + Eclipse help + The transformation generates XHTML output, CSS files, and the control files + that are needed for Eclipse help. + + + + transformations + Eclipse Help + Eclipse Help + transformations + plug-ins + dita2eclipsehelp + dita2eclipsehelp + CSS + Eclipse Help + table of contents + Eclipse Help + + + + +

    In addition to the XHTML output and CSS files, this transformation returns the following files, where + mapname is the name of the root map.

    + + + File name + Description + + + plugin.xml + Control file for the Eclipse plug-in + + + mapname.xml + Table of contents + + + index.xml + Index file + + + plugin.properties + + + + META-INF/MANIFEST.MF + + + +

    To run the Eclipse help transformation, set the transtype parameter to + , or pass the --format= option to + the dita command line.

    + --input=input-file --format= +

    where:

    +
      +
    • +
    +
    +
    diff --git a/topics/dita2html5.dita b/topics/dita2html5.dita new file mode 100644 index 0000000..fa5a7cc --- /dev/null +++ b/topics/dita2html5.dita @@ -0,0 +1,47 @@ + + + + + HTML5 + The transformation generates HTML5 output and a table of contents (TOC) + file. + + + + nav + languages + right-to-left + HTML + HTML5 + HTML5 + transformations + transformations + HTML5 + plug-ins + dita2html5 + dita2html5 + CSS + HTML5 + HTML5 + CSS + table of contents + HTML5 + + + + +

    The HTML5 output is always associated with the default DITA-OT CSS file (commonltr.css or + commonrtl.css for right-to-left languages). You can use toolkit parameters to add a custom + style sheet that overrides the default styles, or generate a nav element with a + navigation TOC in topic pages.

    +

    To run the HTML5 transformation, set the transtype parameter to , or + pass the --format= option to the dita command + line.

    + --input=input-file --format= +

    where:

    +
      +
    • +
    +
    +
    diff --git a/topics/dita2htmlhelp.dita b/topics/dita2htmlhelp.dita new file mode 100644 index 0000000..280a7d7 --- /dev/null +++ b/topics/dita2htmlhelp.dita @@ -0,0 +1,71 @@ + + + + + HTML Help + The transformation generates HTML output, CSS files, and the control files that + are needed to produce a Microsoft Compiled HTML Help (.chm) file. + + + + transformations + HTML Help + HTML Help + transformations + CHM + HTML Help + Microsoft HTML Help Workshop + .hhc + .hhk + .hhp + plug-ins + dita2htmlhelp + dita2htmlhelp + CSS + HTML Help + index + HTML Help + table of contents + HTML Help + + + + +

    In addition to the HTML output and CSS files, this transformation returns the following files, where + mapname is the name of the root map.

    + + + File name + Description + + + mapname.hhc + Table of contents + + + mapname.hhk + Sorted index + + + mapname.hhp + HTML Help project file + + + mapname.chm + +

    Compiled HTML Help file

    + The compiled file is only generated if the HTML Help Workshop is installed on the build system. +
    +
    +
    +

    To run the HTML Help transformation, set the transtype parameter to + , or pass the --format= option to the + dita command line.

    + --input=input-file --format= +

    where:

    +
      +
    • +
    +
    +
    diff --git a/topics/dita2markdown.dita b/topics/dita2markdown.dita new file mode 100644 index 0000000..0d6b862 --- /dev/null +++ b/topics/dita2markdown.dita @@ -0,0 +1,61 @@ + + + + + Generating Markdown output + + Markdown + + Along with , DITA-OT provides three transformation types to convert DITA + content to Markdown, including the original syntax, GitHub-Flavored Markdown, and GitBook. + + + + Markdown + transformations + Markdown + GitHub-Flavored Markdown + GitBook + plug-ins + dita2markdown + dita2markdown + table of contents + Markdown + + + + + +

    The new output formats can be used to feed DITA content into Markdown-based publishing systems or other workflows + that lack the ability to process DITA XML.

    +

    Markdown output can be generated by passing one of the following transformation types to the dita command with + the --format option:

    +
      +
    • +

      To publish Markdown DITA files, use the transtype.

    • +
    • +

      To generate + files, use the transtype.

      + Since the GitHub format does not support definition lists, they are converted to unordered lists with bold + terms. Attribute blocks with IDs, class names, and other custom attributes are also omitted, as GitHub does + not support Pandoc header attributes or PHP Markdown Extra special attributes.
    • +
    • +

      To publish GitHub-Flavored Markdown and generate a SUMMARY.md table of contents file for + publication via + or + , use the transtype.

      +
    • +
    +

    Run the dita command and set the value of the output --format option to + the desired format, for example:

    + --input=input-file --format= +

    where:

    +
      +
    • +
    + The MDITA format is not yet supported when generating output. To publish DITA + content to Markdown, use one of the formats listed above. + +
    diff --git a/topics/dita2pdf.dita b/topics/dita2pdf.dita new file mode 100644 index 0000000..25dfb73 --- /dev/null +++ b/topics/dita2pdf.dita @@ -0,0 +1,35 @@ + + + + + PDF + The transformation generates output in Portable Document Format. + + + + PDF + transformations + transformations + PDF + PDF + plug-in, history of + plug-ins + dita2pdf + dita2pdf + + + + +

    This transformation was originally created as a plug-in and maintained outside of the main toolkit code. It was + created as a more robust alternative to the demo PDF transformation in the original toolkit, and thus was known as + PDF2. The plug-in was bundled into the default toolkit distribution with release 1.4.3.

    +

    To run the PDF transformation, set the transtype parameter to , or pass + the --format= option to the dita command line.

    + --input=input-file --format= +

    where:

    +
      +
    • +
    +
    +
    diff --git a/topics/dita2xhtml.dita b/topics/dita2xhtml.dita new file mode 100644 index 0000000..6101f37 --- /dev/null +++ b/topics/dita2xhtml.dita @@ -0,0 +1,43 @@ + + + + + XHTML + The transformation generates XHTML output and a table of contents (TOC) file. This + was the first transformation created for DITA Open Toolkit, and originally served as the basis for all HTML-based + transformations. + + + + languages + right-to-left + transformations + XHTML + XHTML + transformations + HTML + plug-ins + dita2xhtml + dita2xhtml + CSS + XHTML + table of contents + XHTML + + + + +

    The XHTML output is always associated with the default DITA-OT CSS file (commonltr.css or + commonrtl.css for right-to-left languages). You can use toolkit parameters to add a custom + style sheet to override the default styles.

    +

    To run the XHTML transformation, set the transtype parameter to , or + pass the --format= option to the dita command + line.

    + --input=input-file --format= +

    where:

    +
      +
    • +
    +
    +
    diff --git a/topics/enabling-debug-mode.dita b/topics/enabling-debug-mode.dita new file mode 100644 index 0000000..4a4d055 --- /dev/null +++ b/topics/enabling-debug-mode.dita @@ -0,0 +1,55 @@ + + + + + Enabling debug mode + Debug logging prints considerably more additional information. The debug log includes all information from + the verbose log, plus details on Java classes, additional Ant properties and overrides, pre-processing filters, + parameters, and stages, and the complete build sequence. The debug log can help you determine the root cause of a + problem. + + + + property + command line + debugging + dita command + debugging + debugging + args.debug + environment variables + stack trace + args.debug + Ant + args.debug + + + + + + + From the command prompt, add the following parameters: + + + Application + Parameters + + + dita command + --debug, -debug, or -d + + + Ant + -v -Dargs.debug=yes + + + +

    You also can add a property element to an Ant target in your build file, for + example: <property name="args.debug" value="yes"/>

    + Debug logging requires additional resources and can slow down the build process, so it + should only be enabled when further details are required to diagnose problems. +
    +
    +
    +
    +
    diff --git a/topics/error-messages-details.xml b/topics/error-messages-details.xml new file mode 100644 index 0000000..dbff89e --- /dev/null +++ b/topics/error-messages-details.xml @@ -0,0 +1,872 @@ + + + + + DITA-OT error messages + This topic lists each error message generated + by the toolkit and provides additional information that might be helpful in understanding and resolving the error + condition. If your toolkit installation includes custom plug-ins that define additional messages, you can add to + this list by rebuilding the DITA-OT documentation. + +
    +

    Each message ID is composed of a message prefix, a message number, and a letter that indicates the severity + level (I, W, E, or F).

    +

    The toolkit uses the following severity scale:

    +
    + +
    Info (I)
    +
    Informational messages highlight the progress of transformation and call attention to conditions of which + you should be aware. For example, draft comments are enabled and will be rendered in the output.
    +
    + +
    Warning (W)
    +
    The toolkit encountered a problem that should be corrected. Processing will continue, but the output might + not be as expected.
    +
    + +
    Error (E)
    +
    The toolkit encountered a more severe problem, and the output is affected. For example, some content is + missing or invalid, or the content is not rendered in the output
    +
    + +
    Fatal (F)
    +
    The toolkit encountered a severe condition, processing stopped, and no output is generated.
    +
    +
    +

    Plug-ins may be used to add additional messages to the toolkit; for more information, see + .

    +
    + + + + + Individual cells in this table may be used to push additional explanations for any existing error + message into the generated message topic error-messages.xml. + + + + + To add additional explanation to any message, add the explanation to this table in a single cell, and + set the following attributes on the stentry tag: +
      +
    • conkeyref="error-messages/MESSAGEID-extra" -- for example, use the following to add + additional info to message DOTX001F: conkeyref="error-messages/DOTX001F-extra"
    • +
    • conaction="pushreplace"
    • +
    +
    + + Default transformation types that + ship with the toolkit include dita, eclipsehelp, html5, htmlhelp, markdown variants, pdf (or pdf2), and + xhtml. Additional transformation types may be available if toolkit plug-ins are installed. + + + The input parameter was not + specified, so there is no DITA or DITAMAP file to transform. Ensure the parameter is set properly; see + DITA-OT common parameters (args.input) if you are unsure how to + specify the input file. + DITA maps + input file + + + + An alternate stylesheet was + specified to run in place of the default XSLT output process, but that stylesheet could not be loaded. + Correct the parameter value to specify a valid stylesheet. + XSLT + stylesheet error + + + This optional parameter is used to + set an extension for DITA topic documents in the temporary processing directory. Only "dita", ".dita", + "xml", or ".xml" are allowed. + + + If the CSSPATH uses an absolute + path, it should be one that can still be accessed after the files are moved to another system (such as + http://www.example.org/). Absolute paths on the local file system will be broken if the + content is moved to a new system. + + + The running footer file, which + contains content to be added to the bottom of each XHTML output topic, cannot be located or read. This is + usually caused by a typo in the parameter value. You should also make sure the value is not specified with + file: as a prefix. + + + The running header file, which + contains content to be added to the top of each XHTML output topic, cannot be located or read. This is + usually caused by a typo in the parameter value. You should also make sure the value is not specified with + file: as a prefix. + + + The running heading file, which + contains content to be added to the head section of each HTML output topic, + cannot be located or read. This is usually caused by a typo in the parameter value. You should also ensure + that the value is not specified with file: as a prefix. + + + An alternate stylesheet was + specified to run in place of the default XSL-FO output process, but that stylesheet could not be loaded. + Correct the parameter value to specify a valid stylesheet. + + + + According to the OASIS DITA + Specification, the index-see element should be ignored if the parent + indexterm contains other indexterm children. + + + According to the OASIS DITA + Specification, the index-see-also element should be ignored if the parent + indexterm contains other indexterm children. + + + Make sure the input file path and + file name were entered correctly. + + + + + + The transformation was unable to + create certain files; results may not be as expected. + + + This message may indicate an + invalid input (such as a PDF accidentally specified as input rather than a DITA map file), an input file + that uses elements that are not allowed, or a DITA file that has errors and cannot be parsed as XML. You + could also be using a specialized DITA document type that needs external plug-ins to be parsed correctly. + The message issued by the XML parser should provide additional information to help diagnose the + cause. + + + This message may indicate a + reference to an invalid file (such as a PDF or unknown XML file referenced as if it was DITA), a file that + uses elements that are not allowed, or a DITA file that has errors and cannot be parsed as XML. You could + also be using a specialized DITA document type that needs external plug-ins to be parsed correctly. The + message issued by the XML parser should provide additional information to help diagnose the cause. + + + An empty + indexterm element was found, and will appear in the index as + ***. This index term should be removed from the source. + + + This message appears when one + plug-in requires another to function correctly, but the required dependency is not found. The installed + plug-in will be ignored. + + + This may appear if filter + conditions on the root element of a topic cause the entire topic to be filtered out. To remove this + message, move any filter conditions to the topic reference to prevent the build from accessing this + resource. + + + To remove this message, update the + filtering conditions in the input file or the DITAVAL file to permit access to the content, or move filter + conditions to the topic reference to prevent the build from accessing this resource. + + + Check whether the image exists in + the source location or already exists in the output directory. + image + + + + This message should only appear in + the following cases: +
      +
    • Earlier errors in the build prevented this step of the transformation from running; correct any + errors and try the build again.
    • +
    • An Ant build or plug-in is directly calling the toolkit’s topic merge module, and is doing so + improperly; in this case the Ant build or plug-in needs to be fixed.
    • +
    • In the past, problems have been encountered when calling this module with an absolute path; this + should no longer be an issue, but may be fixed in older releases by updating the Ant build or + plug-in.
    • +
    +
    + + This message should only appear if + an Ant build or plug-in is directly calling the toolkit’s topic merge module, or if earlier errors + resulted in problems with some of the content. If the topic merge module is called correctly, then this + indicates a program error that should be reported to the DITA-OT development team via the + . + + + When referencing a non-DITA file, + the format attribute should indicate the type of file referenced (such as + html for HTML topics or pdf for PDF files). Otherwise, the toolkit may + attempt to parse the referenced document as a DITA topic. + + + The domains + attribute is used in specialized DITA documents to help determine which domain elements are legal. This + message will only appear if a DITA specialization was not defined properly. + + + All specialized DITA elements must + define a class attribute to provide ancestry information. This message will only appear + if a specialized DITA element did not define a class attribute, or if non-DITA elements + are included in a DITA context. + + + This informational message is + intended to help you catch filter conditions that may have been specified improperly; if the value is + correct, no action is needed. + + + + + + DITA processing is based on + class attributes defined for every element. Usually these are defaulted in the DTD or + schema; if no DTD or schema is used, the class attributes must be explicitly included in + the map or topic. + + + This message appears when a topic + is outside the scope of the map; for example, if the main input map references + "../other-directory/some.dita". The result would cause an output file to be created + outside of the output directory. See + DITA-OT common parameters (outer.control and + generate.copy.outer) for details. + generate.copy.outer + + + + This message appears when a topic + is outside the scope of the map; for example, if the main input map references + "../other-directory/some.dita". The result would cause an output file to be created + outside of the output directory. If you do not want to see the warning message, use the + outer.control parameter and set the value to . Otherwise, + move the referenced file into the input directory. See + DITA-OT common parameters (outer.control and generate.copy.outer) + for details. + generate.copy.outer + + + DITA processing is based on + class attributes defined for every element. Usually these are defaulted in the DTD or + schema; if no DTD or schema is used, the class attributes must be explicitly included in + the map or topic. + + + This appears to indicate an error + in creating specialized metadata elements. Check that the document type you are using is complete + and complies with DITA specialization rules. + metadata + specialization error + + + + See + Conref Push in the DITA specification for details on expected + syntax for this function. + + + See + Conref Push in the DITA specification for details on expected + syntax for this function. + + + The conref + attribute must be a URI reference to a DITA element. See + URI-based addressing in the DITA specification for details on the + expected syntax. + + + The conref push function was used + to replace a single element with two or more alternatives. Only one element may directly replace another + using conref push. For more information about the conref pushreplace action, see + The conaction attribute in the DITA specification. + + + The target for a conref push action + does not exist; make sure that the syntax is correct and that the target exists. See + URI-based addressing in the DITA specification for details on the + expected syntax. If the syntax is correct, it is possible that the target was filtered out of your build + using a DITAVAL file. + + + For details on the expected + syntax for this function, see + The conaction attribute in the DITA specification. + + + This informational message is + intended to help you catch catch duplicate key definitions; if the keys are defined as expected, no action + is needed. + + + See + the conkeyref definition for details on expected syntax and + usage. + + + This message is intended to help + you locate incorrectly specified keys; if the key was specified correctly, this message may be + ignored. + + + A DITA Subject Scheme map was used + to limit values that are available to the specified attribute. Correct the attribute value so that it + uses one of the allowed values. + + + The Eclipse index will contain a + value such as "See also otherEntry", but otherEntry does not exist in this index. The index reference will + be broken unless this plug-in is always loaded into Eclipse with another plug-in that defines + otherEntry as an index term. + + + The target for a + coderef element, which specifies an external text-based file, could not be + located or loaded. Make sure the reference is correct. +

    For security reasons, references to code samples outside of the scope of the map directory are not + supported by default, as this could allow a reference to access and display any restricted or hidden + file on the system. If you are certain that the path is valid and the file should be loaded, the current + workaround is to set a parameter to allow these references. See + DITA-OT common parameters (outer.control and generate.copy.outer) + for details. + generate.copy.outer

    +
    + + DITA-OT supports a special syntax + on coderef elements to specify the character set of the target document. See + for details on the expected syntax. + + + By default, DITA-OT supports the + .dita and .xml file name extensions for DITA topics, as + mandated by the DITA specification. Make sure your topics use one of these extensions, or configure the + toolkit to allow additional extensions. + + + This message indicates that the + href value specified in %1 does not use proper URI syntax. This may + occur when href includes characters that should be escaped (such as the space character, + which should be %20 when in a URI). In strict processing mode this will cause a build + failure; in other processing modes the build will continue using the value in + %2. + + + A conref mark + action has been used to mark a target element without a corresponding content reference target. This may + occur when the order of the marked element and the pushed element is reversed. + + + +

    A circular reference was found in key definitions: a series of key references where the last key + references the first.

    +

    This may occur if a topicref element contains both a key name in the + keys attribute and a reference to the same key in the keyref + attribute, or if a keyref attribute points to a key that refers back to the referencing + element.

    +

    To resolve this issue, change the target of the keyref so the key is defined by + pointing to a resource other than itself.

    +
    +
    + + +

    When a class attribute does not use the expected syntax, this usually indicates that + class has been explicitly set on a DITA element. The attribute should be removed from + the document so that the expected default value can be automatically used.

    +

    If this is a non-DITA element, it needs to be placed inside a foreign element + so that is not validated against DITA rules. + validate +

    +
    +
    + + Make sure the DITAVAL file exists. + If more than one DITAVAL file is specified, ensure that the paths are delimited using the file path + separator character appropriate for your operating system (semicolon ‘;’ on Windows, or + colon ‘:’ on macOS or Linux). + + + This build uses generated text, + such as the phrase “Related information” (which is generated above many link groups). The + toolkit was unable to locate the string %1 for your specified language, so the text + will appear in the default language. This generally indicates that the toolkit’s strings need to be + updated to support your language, or that your language setting is incorrect. + + + The Eclipse help system requires a + title in the project files generated from your map. Add a title to your input map to get valid + Eclipse help output. + + + Eclipse uses anchor references to + connect with other TOC files. For this to work in content generated from a DITA map, the anchorref element + must reference either an existing Eclipse TOC XML file, or another DITA map (which will presumably also be + converted to an Eclipse TOC). + table of contents + Eclipse Help + + + + Eclipse builds use DITA’s + navref element to pull in other Eclipse TOC files. The build found a + navref element that does not reference any other file; the element will be + ignored. + + + To remove this message, provide a + navigation title for the referenced object in the map or topic, or make sure you are referencing a valid + local DITA target. + + + Set the format + attribute to identify the format of the file. If the reference is to a DITA document, make sure the + document uses a valid DITA extension. By default, DITA-OT supports the .dita and + .xml file name extensions for DITA topics, as mandated by the DITA + specification. + + + The HTML Help compiler will only + include some types of information in the compiled CHM file; the current reference will not be + included. + + + + + + + To fix the table of contents, + specify a navigation title in your map or make sure the referenced file is local and can be accessed. + table of contents + navigation title + table of contents + DOTX008W + + + + No title was found in the specified + topic, so the table of contents will use the indicated fallback value for this topic. + table of contents + DOTX009W + table of contents + no title + + + + The conref + attribute must be a URI reference to an existing DITA element. See + URI-based addressing in the DITA specification for details on the + expected syntax. The name of the file in this message may have been changed to + use a standard DITA topic file name extension (.dita or .xml) + instead of the original extension used by the file; it may also include a path to the temporary + directory rather than to the original. +

    If the target element exists in your source file, check to make sure it is not filtered out of the + build with a DITAVAL file (which will remove the target before conref processing runs).

    +

    This message may also appear if the path to either the source file or the content reference target + exceeds the platform’s maximum path length in bytes.

    +
    +
    + + When pulling content with a + conref attribute, you may only pull from a single element, but the target ID appears + twice in the referenced topic. + + + This message is deprecated and + should no longer appear in any logs. + + + This may appear if (for example) + you have a ph element that references another phrase, but that phrase itself + contains a reference to the original. The toolkit will stop following the conref trail when this is + detected; you will need to correct the reference in your source files. + + + The conref + attribute must be a URI reference to a DITA element. See + URI-based addressing in the DITA specification for details on the + expected syntax. + + + The conref + attribute must be a URI reference to a DITA element. See + URI-based addressing in the DITA specification for details on the + expected syntax. + + + This warning is intended to catch + instances where a non-DITA format setting unexpectedly cascades to a DITA topic, which will prevent the + topic from being processed. To remove this message, set the format attribute directly on + the indicated reference. + + + Found a value such as + <xref href="">link text</xref>. The empty href attribute value + is not serving a purpose and has caused problems with some tools in the past; you should remove the + attribute entirely or specify a value. + + + The type attribute + in DITA is intended to describe the type of the target; for example, a reference to a concept topic may + use type="concept". Generally, this attribute is optional, and the DITA-OT build will + automatically determine the value during processing. In this case, the type attribute + lists a more general type than what is actually found. This is not an error, but links to this topic may + not be sorted as expected. + + + The type attribute + in DITA is intended to describe the type of the target; for example, a reference to a concept topic may + use type="concept". Generally, this attribute is optional, and the DITA-OT build will + automatically determine the value during processing. In this case, the specified type + value does not match the target, so links to this topic may not be sorted as expected. + + + DITA-OT is only able to dynamically + retrieve titles when the target is a local (not peer or external) DITA resource. + navtitle + + + + DITA-OT is only able to dynamically + retrieve titles when the target is a local DITA resource. + + + The build was unable to get a title + from the referenced topic; instead, a navigation title will be created based on the content of the + linktext element in topicmeta. + + + If the target is a local DITA + topic, make sure the reference is correct and the topic is available. Otherwise, provide a navigation + title, and ensure the scope and format attributes are set + appropriately. + + + DITA-OT can only retrieve titles + and link text when the target is a local DITA resource (not a peer topic). + + + DITA-OT can only retrieve titles + and link text when the target is a local DITA resource (not peer or external). + + + The reference to this document did + not specify any link text for generated map-based links; the navigation title will be used as + fallback. + + + The referenced file did not specify + any link text for generated map-based links, and no fallback text could be located. Any links generated + from this reference will have incorrect link text. + + + The link or cross reference has no + target specified and will not generate a link. + + + The type attribute + in DITA is intended to describe the type of the target; for example, a reference to a concept topic may + use type="concept". Generally, this attribute is optional, and the DITA-OT build will + automatically determine the value during processing. In this case, the type attribute + lists a more general type than what is actually found. This is not an error, but links to this topic may + not be sorted as expected. + + + The type attribute + in DITA is intended to describe the type of the target; for example, a reference to a concept topic may + use type="concept". Generally, this attribute is optional, and the DITA-OT build will + automatically determine the value during processing. In this case, the specified type + value does not match the target, so links to this topic may not be sorted as expected. + + + The build attempted to access the + specified file to retrieve a title or short description, but the file could not be found. If the file + exists, it is possible that a DITAVAL file was used to remove the file’s contents from the build. Be aware + that the path information above may not match the link in your topic. + + + When a link or cross reference does + not have content, the build will attempt to pull the target’s title for use as link text. If the target is + unavailable, be sure to set the scope attribute to an appropriate value. If the target + does not have a title (such as when linking to a paragraph), be sure to provide link text inside the cross + reference. + + + An xref + element specifies type="li", which indicates a link to a list item, but the item number + could not be determined to use as link text. Specify link text inside the reference, or make sure you are + referencing an available list item. + + + The cross reference goes to a list + item in an unordered list. The process could not automatically generate link text because the list item is + not numbered. Provide link text within the cross reference. + + + An xref + element specifies type="fn", which indicates a link to a footnote, but the footnote + number could not be determined to use as link text. Specify link text inside the reference, or make sure + you are referencing an available footnote. + + + An xref + element specifies type="dlentry", which indicates a link to a definition list entry, but + the term could not be located to use as link text. Specify link text inside the reference, or make sure + you are referencing an available definition list entry. + + + No title was found for the current + document, so the HTML output file will set the title to ***. + This value generally appears in the title bar at the top of a browser. + + + The object + element in HTML does not support longdescref for accessibility. To make the object + accessible, you may need to add text before or after the element. You may also be able to handle it with a + param element inside the object. + + + This message is generated when + creating draft output to help you locate all topics that need to be cleaned up; the cleanup items + will appear in your output with styling that makes it stand out. The content will be hidden when the draft + parameter is not active. + + + This message is generated when + creating draft output to help you locate all topics that have draft comments. Each comment will appear in + your HTML output; the comments will be hidden when the draft parameter is not active. + + + Because of the way XML and DITA are + defined, it is generally not possible to prohibit adding a second title to a section during editing (or to + force that title to come first). However, the DITA specification states that only one title should be used + in a section. When multiple titles are found, only the first one will appear in the output. + + + If it is important to flag this + piece of information, try placing a flag on the block element that contains your phrase. If you just want + to have an image next to the phrase, you may place an image directly into the document. + + + DITA-OT is able to remove duplicate + links in most cases. However, if two links to the same resource use different attributes or link text, it + is possible for them to appear together. For example, if the same link shows up with + role="next" and again with no specified role, it may show up as both the “Next + topic” link and as a related link. Note that links generated from a + reltable in a DITA map will have the role attribute set to + friend. + reltable + relationship tables + + + + The area + element in an image map must provide a link target for the specified area. Add an + xref element as a child of area and make sure it + specifies a link target. + image map + + + Cross reference text inside the + area element is used to provide accessibility for screen readers that can + identify different areas of an image map. If text cannot be retrieved automatically by referencing a DITA + element, it should be specified directly in the cross reference. + + + The specified value was passed + as-is through to the area element in the HTML. + + + The area + element is intended to define a region in an image map; coordinates must be specified to define that + region. + + + The build will not look for peer or + external topics before compiling your CHM file, so they may not be included. If you are referencing an + actual HTML file that will not be available, it cannot be included in the project, and you should set the + toc attribute to on the topicref element. + Otherwise, make sure the HTML file was included in the CHM; if it was not, you will need to place it in + the correct location with your other output files and recompile. + table of contents + HTML Help + + + + The PDF, ODT, and RTF output + processes cannot automatically convert non-DITA content into DITA to merge it with the rest of your + content. The referenced items are ignored. + + + Eclipse requires that an ID be + specified when creating an Eclipse Help project; the toolkit expects to locate that ID on the root element + of your input map. + + + The toolkit is attempting to add + generated text, such as the string “Related information” that appears above links. The + requested string could not be found in any language. Your output may contain a meaningful string, or it + may contain a code that was intended to map to a string. This likely indicates an error in a plug-in or + XSL override; either the string was requested incorrectly, or you will need to provide a mapping for the + string in all of the languages you require. + + + This will occur if a map references + another map, and then that second map (or another further nested map) references the original map. Correct + the chain of map references to remove circular references. + + + This will occur when a DITAVAL file + contains multiple styling rules that apply to the same element. + + + The flagit named + template was deprecated in DITA-OT version 1.4, when the OASIS standard formalized the DITAVAL syntax. The + template was removed in DITA-OT 1.6. Any stylesheets that use this template must be updated. + + + The build attempted to access the + specified file to retrieve a title or short description, but the file could not be found. If the file + exists, it is possible that a DITAVAL file was used to remove the file’s contents from the build. Another + possibility is that the file is located outside of the scope of the main input directory, and was not + available because the + onlytopic.in.map parameter was specified. Be aware that the path + information above may not match the link in your topic. + + + The link appears to use valid + syntax to reference a DITA element, but that element cannot be found. Check that the element + exists, and is not removed from the build by DITAVAL filtering. + + + Processing for terms, acronyms, or + abbreviated forms associates the key from the element’s keyref attribute with a glossary + entry topic. This message appears if the key is defined, but not associated with a + glossentry element. The process will try to use the best available fallback + (usually the title of the referenced topic). + + + Processing for abbreviated form + elements associates the key from the element’s keyref attribute with a glossary entry + topic. This message appears if the key is defined, but not associated with a + glossentry element. This element is only supported with keys that are + associated with glossary topics; the element will not generate any output. Correct the reference, or use a + different element to reference your topic. + + + According to the DITA + specification, references from maps should either point to DITA maps, DITA topics, or non-DITA resources. + References below the topic level should only be made via xref cross references + within topics. For details, see the href attribute description in the + topicref element definition. + + + This message appears when + generating PDF or ODT output that includes a link to a local topic, but the referenced topic is not part + of the map itself. This will result in a broken link. You should include the topic in your map or remove + the link from the build. + + + Make sure that all + copy-to attributes define unique names. + + + Two different topics are copied to + the same location using copy-to attributes. To prevent data loss, only the first instance + will be applied. To create multiple copies, make sure that all copy-to attributes define + unique names. + + + This message indicates that your + custom XSLT or plug-ins rely on templates that will be removed in an upcoming release. Typically this + occurs when a named template has been converted to a mode template; any code that uses the deprecated + template should be updated. + + + This PDF build uses generated text, + such as the phrase “Related information” (which is generated above many link groups). The + toolkit was unable to locate the string %1 for your specified language, so the text + will appear in the default language. This generally indicates that the toolkit’s strings need to be + updated to support your language, or that your language setting is incorrect. + + + +
    +
    + Additional explanation for messages in the <filepath>org.dita.pdf2</filepath> plugin + + + + + The PDF index process relies on + pre-defined letter headings when sorting terms. The specified term does not begin with a character that + can be mapped to an existing heading. Typically this term would be placed in a “Special + characters” group, but the current language did not specify such a group when setting up the + index sort process. + + + The PDF index process relies on + pre-defined letter headings when sorting terms. The specified term does not begin with a character that + can be mapped to an existing heading, so it has been placed under a heading for terms that begin with + special characters such as punctuation. If this term should be sorted under a new or existing letter + heading, open an issue in the DITA-OT + to correct the sort. + + + Found an + index-see element as a child of a term that also exists as a standalone index + term, or as a term that also uses index-see-also. When using + index-see with an index term, that term should not be used to create page + references and should not reference additional terms. Treating the index-see as + index-see-also. + + + + navtitle + + + +
    +
    +
    +
    diff --git a/topics/globalization-languages.dita b/topics/globalization-languages.dita new file mode 100644 index 0000000..81080b8 --- /dev/null +++ b/topics/globalization-languages.dita @@ -0,0 +1,331 @@ + + + + + Supported languages + The following languages are supported for PDF and HTML-based output. + + + + xml:lang + Arabic + Bosnian + Belarusian + Bulgarian + Catalan + Chinese + Croatian + Czech + Danish + Dutch + English + Estonian + Finnish + French + German + Greek + Hebrew + Hungarian + Hindi + Icelandic + Indonesian + Italian + Japanese + Kazakh + Korean + Latvian + Lithuanian + Malay + Montenegrin + Norwegian + Polish + Portuguese + Romanian + Russian + Serbian + Slovak + Slovenian + Spanish + Swedish + Thai + Turkish + Ukrainian + Urdu + Vietnamese + languages + supported, list of + language codes + strings + generated text + index + sorting + + + + + + While language codes listed below use the conventional capitalization style of "aa-BB" and "aa-Script-BB", + DITA-OT processing is not case sensitive when reading these values from the xml:lang + attribute. + + + Supported languages + + + + + + + Language + Language code + Notes + + + + + العربية (Arabic) + ar or ar-EG + Defaults to right-to-left presentation. + + + Беларуская (Belarusian) + be or be-BY + + + + Bosanski (Bosnian) + bs or bs-BA + + + + Български (Bulgarian) + bg or bg-BG + + + + Català (Catalan) + ca-ES + + + + 简体中文 (Simplified Chinese) + zh-CN or zh-Hans + PDF index is not properly collated by default. + + + 繁體中文 (Traditional Chinese) + zh-TW or zh-Hant + PDF index is not properly collated by default. + + + Hrvatski (Croatian) + hr or hr-HR + + + + Čeština (Czech) + cs or cs-CZ + + + + Dansk (Danish) + da or da-DK + + + + Nederlands (Dutch) + nl or nl-NL + Subset of generated text also available for Belgian Dutch (nl-BE) + + + English (US) + en or en-US + Subset of generated text also available for British English (en-GB) and Canadian English + (en-CA) + + + Eesti (Estonian) + et or et-EE + + + + Suomi (Finnish) + fi or fi-FI + + + + Français (French) + fr or fr-FR + Subset of generated text also available for Belgian French (fr-BE), Canadian French (fr-CA), and + Swiss French (fr-CH) + + + Deutsch (German) + de or de-DE + Subset of generated text also available for Swiss German (de-CH) + + + Ελληνικά (Greek) + el or el-GR + + + + עברית (Hebrew) + he or he-IL + Defaults to right-to-left presentation. + + + हिन्दी (Hindi) + hi or hi-HI + + + + Magyar (Hungarian) + hu or hu-HU + + + + Íslenska (Icelandic) + is or is-IS + + + + Bahasa Indonesia (Indonesian) + id or id-ID + + + + Italiano (Italian) + it or it-IT + Subset of generated text also available for Swiss Italian (it-CH) + + + 日本語 (Japanese) + ja or ja-JP + PDF index is not properly collated by default. + + + Қазақша (Kazakh) + kk or kk-KZ + + + + 한국어 (Korean) + ko or ko-KR + + + + Latviešu (Latvian) + lv or lv-LV + + + + Lietuvių (Lithuanian) + lt or lt-LT + + + + Македонски (Macedonian) + mk or mk-MK + + + + Bahasa Melayu (Malay) + ms or ms-MY + + + + Crnogorski (Montenegrin) + sr-Latn-ME + + + + Norsk (Norwegian) + no or no-NO + + + + Polski (Polish) + pl or pl-PL + + + + Português (Portuguese) + pt or pt-PT + + + + Português do Brasil (Brazilian Portuguese) + pt-BR + + + + Română (Romanian) + ro or ro-RO + + + + Русский (Russian) + ru or ru-RU + + + + Српски (Serbian - Cyrillic script) + sr, sr-CS, sr-RS, or sr-SP + + + + Srpski (Serbian - Latin script) + sr-Latn-RS + + + + Slovenčina (Slovak) + sk or sk-SK + + + + Slovenščina (Slovenian) + sl or sl-SI + + + + Español (Spanish) + es or es-ES + Also supported using es-419 (Latin American Spanish). + + + Svenska (Swedish) + sv or sv-SE + + + + ภาษาไทย (Thai) + th or th-TH + + + + Türkçe (Turkish) + tr or tr-TR + + + + Українська (Ukrainian) + uk or uk-UA + + + + اردو (Urdu) + ur or ur-PK + Defaults to right-to-left presentation. + + + Tiếng Việt (Vietnamese) + vi or vi-VN + + + + +
    +
    +
    diff --git a/topics/globalization-support.dita b/topics/globalization-support.dita new file mode 100644 index 0000000..7437dfd --- /dev/null +++ b/topics/globalization-support.dita @@ -0,0 +1,67 @@ + + + + + Globalization support + + Globalization support + + DITA Open Toolkit supports globalization with generated text strings, index sorting, and bi-directional + text. + + + + dir + index:lang + languages + index sorting + languages + right-to-left + languages + bi-directional + English + strings + index + sorting + bi-directional languages + generated text + CSS + bi-directional languages + right-to-left languages + + + + +

    +

    + +
    Generated text
    +
    Generated text is text that is rendered automatically in the output that is generated by + DITA-OT; this text is not located in the DITA source files. The following are examples of generated text: +
      +
    • The word “Chapter” in a PDF file.
    • +
    • The phrases “Related concepts”, “Related tasks”, and “Related + reference” in HTML output.
    • +
    +
    + +
    Index sorting
    +
    DITA-OT can use only a single language to sort indexes.What does the ICU for Java provide? Does index sorting occur if ICU for Java is NOT + installed?
    +
    + +
    Bi-directional text
    +
    DITA-OT contains style sheets (CSS files) that support both left-to-right (LTR) and right-to-left (RTL) + languages in HTML-based transformations. PDF supports both LTR and RTL rendering based on the document + language. The dir attribute can be used to override the default rendering direction.
    +
    +
    When DITA-OT generates output, it takes the first value that it encounters for the xml:lang + attribute, and uses that value to create generated text, sort index entries, and determine which default CSS file + is used. If no value for the xml:lang attribute is found, the toolkit defaults to U.S. English. + You can use the + to change the default language.

    +
    +
    diff --git a/topics/globalization.dita b/topics/globalization.dita new file mode 100644 index 0000000..ede0aee --- /dev/null +++ b/topics/globalization.dita @@ -0,0 +1,24 @@ + + + + + Globalizing DITA content + The DITA standard supports content that is written in or translated to any language. In general, DITA Open + Toolkit passes content through to the output format unchanged. DITA-OT uses the values for the + xml:lang and dir attributes that are set in the source content to provide + globalization support. You can create custom plug-ins to support additional languages. + + + + dir + index:lang + languages + supported + translating + localizing + globalizing + strings + + + + diff --git a/topics/globalizing.ditamap b/topics/globalizing.ditamap new file mode 100644 index 0000000..df90c7b --- /dev/null +++ b/topics/globalizing.ditamap @@ -0,0 +1,15 @@ + + + + + Globalizing DITA content + + + + + + + + + + diff --git a/topics/html-customization-css.dita b/topics/html-customization-css.dita new file mode 100644 index 0000000..1d5a4ee --- /dev/null +++ b/topics/html-customization-css.dita @@ -0,0 +1,70 @@ + + + + + Adding custom CSS + To modify the appearance of the default HTML output that DITA Open Toolkit generates, you can reference a + custom Cascading Style Sheet (CSS) file with the typography, colors, and other presentation aspects that define your + corporate identity. + + + + cascading style sheet + CSS + CSS + adding custom + HTML + CSS + HTML5 + CSS + transformations + HTML5 + + + + + +

    You can use this approach when you need to adjust the look and feel of the default output for a single project, + but don’t want to create a custom DITA-OT plug-in.

    +

    You can version the CSS file along with the DITA source files in your project, so stylesheet changes can be + tracked along with modifications to topic content.

    +

    You may also find this approach useful as you develop a custom stylesheet. Once the CSS rules stabilize, you + can bundle the CSS file in a custom DITA-OT plug-in to ensure consistent HTML output across + projects.

    + + + Create a custom CSS file and store it in your project along with your DITA source files. + + As a starting point, you can use the CSS file that is used for the DITA-OT documentation. This file is + available in the installation folder under docsrc/resources/dita-ot-doc.css. + + + + Set the args.css parameter to the name of your custom CSS file. + +

    The value of this parameter should be only the file name. You can specify the absolute path to the file + with args.cssroot.

    +
    + + Set the args.copycss parameter to . + +

    This setting ensures that your custom CSS file will be copied to the output directory.

    +
    + + Set args.cssroot to the absolute path of the folder that contains your custom CSS file. + + + Set args.csspath to specify the location of the CSS file in the output folder. + +

    If args.csspath is not set, the custom CSS file will be copied to the root level of + the output folder. To copy the CSS file to a subfolder named css, set + args.csspath to .

    +
    +
    + + For an example of HTML output generated using this method, see the HTML5 version of the DITA-OT + documentation included in the installation folder under doc/index.html. + +
    +
    diff --git a/topics/html-customization-header.dita b/topics/html-customization-header.dita new file mode 100644 index 0000000..0e3f994 --- /dev/null +++ b/topics/html-customization-header.dita @@ -0,0 +1,76 @@ + + + + + Adding custom headers and footers + + Headers and footers + + You add a custom header to include a publication title, company logo, or other common branding elements in + HTML output. A custom footer can also be added with copyright information, legal boilerplate, or other fine + print. + + + + header + footer + div + HTML header + HTML footer + role + HTML5 + headers + HTML5 + footers + CSS + adding custom + CSS + HTML5 + HTML5 + CSS + + + + + +

    In HTML5 output, the contents of the header file will be wrapped in an HTML5 header + element with the role attribute set to . The footer file contents are + wrapped in an HTML5 footer element with the role attribute set to + .

    +

    For example, the DITA-OT documentation includes a simple header banner with the publication title and a + horizontal rule to separate the header from the generated topic content:

    +

    +

    + Header and footer files should be specified using absolute paths and must contain valid XML. A common + practice is to place all content into a div element. +
    + + + Set args.hdr to include an XML file as a running header that appears above the page + content. + + + + Set args.ftr to include an XML file as a running footer that appears below the page + content. + + + Add custom CSS rules to style headers and/or footers. + +

    For example, the DITA-OT documentation stylesheet includes the following header rules:

    +

    +

    +
    +
    +
    + + For an example of HTML output generated using this method, see the HTML5 version of the DITA-OT + documentation included in the installation folder under doc/index.html. + +
    +
    diff --git a/topics/html-customization-navigation.dita b/topics/html-customization-navigation.dita new file mode 100644 index 0000000..da34941 --- /dev/null +++ b/topics/html-customization-navigation.dita @@ -0,0 +1,68 @@ + + + + + Adding navigation to topics + + Adding navigation + + In HTML5 output, you can set a parameter to include table-of-contents navigation in the + nav element of each page. The navigation can be rendered in a sidebar or menu via + CSS. + + + + nav + HTML5 + navigation, adding + transformations + HTML5 + CSS + adding custom + nav-toc + HTML5 + nav-toc + table of contents + HTML5 + table of contents + nav-toc + + + + + +

    Earlier versions of DITA-OT used the TocJS transformation to render a JavaScript-based table of contents in an + XHTML frameset for topic navigation. Recent toolkit versions provide a modern HTML5 navigation alternative.

    +

    As of DITA-OT 2.2, the nav-toc parameter can be used in HTML5 transformations to embed + navigation directly in topics using native HTML5 elements without JavaScript or framesets.

    +
    + + + Set the nav-toc parameter to one of the following options: + + The option creates a table of contents with the portion of the navigation + hierarchy that contains the current topic (along with its parents, siblings and children). + The option embeds the complete navigation for the entire map in each + topic. + + + + Add custom CSS rules to style the navigation. + +

    For example, the DITA-OT documentation stylesheet includes the following rules to place the table of + contents on the left side of the browser viewport and highlight the current topic in bold:

    +

    + +

    +
    +
    +
    + + For an example of HTML output generated using this method, see the HTML5 version of the DITA-OT + documentation included in the installation folder under doc/index.html. + +
    +
    diff --git a/topics/html-customization-parameters.dita b/topics/html-customization-parameters.dita new file mode 100644 index 0000000..f5d6176 --- /dev/null +++ b/topics/html-customization-parameters.dita @@ -0,0 +1,20 @@ + + + + + Setting parameters for custom HTML + + Setting HTML parameters + + For simple branded HTML pages, you can adjust the look and feel of the default output to match your company + style by setting parameters to include custom CSS, header branding, or table-of-contents navigation in topics. + (These changes do not require a custom plug-in.) + + + + HTML + parameters + + + + diff --git a/topics/html-customization-plugin-bundle-css.dita b/topics/html-customization-plugin-bundle-css.dita new file mode 100644 index 0000000..dd405ff --- /dev/null +++ b/topics/html-customization-plugin-bundle-css.dita @@ -0,0 +1,130 @@ + + + + + Bundling CSS in a custom HTML plug-in + + Bundling custom CSS + + You can create a DITA-OT plug-in that provides a custom stylesheet with the typography and colors that + define your corporate identity. Coworkers can install this plug-in to ensure consistent HTML output across projects + without having to copy the stylesheet to each project. + + + + require + HTML + custom plug-in + HTML + CSS + CSS + HTML transforms + + + + + +

    This scenario walks through the process of creating a very simple plug-in + (com.example.html5-custom-css) that creates a new transformation type: + .

    +

    The transformation includes a custom CSS file and sets four parameters to + integrate the custom stylesheet in the generated HTML5 output. These parameter settings make the following + changes:

    +
      +
    • +

      Specify the css subfolder of the plug-in as the source directory for custom CSS with + args.cssroot.

    • +
    • +

      Specify the name of the custom CSS file with args.css.

      +

      The value of this parameter tells DITA-OT to use the custom.css file provided by the + plug-in.

    • +
    • +

      Ensure that the CSS file is copied to the output directory by setting args.copycss to + .

    • +
    • +

      Set the destination path for CSS files in the output folder with args.csspath.

      +

      CSS files are copied to the root level of the output folder by default. Setting this parameter places CSS + files in a dedicated css subfolder.

    • +
    +

    All four parameters are set in the Ant script (build_html5-custom-css.xml).

    +
    + + + In the plugins directory, create a directory named + com.example.html5-custom-css. + + + In the new com.example.html5-custom-css directory, create a plug-in configuration file + (plugin.xml) that declares the new transformation and + its dependencies. + + + Sample <filepath>plugin.xml</filepath> file + + + This plug-in will extend the default HTML5 transformation, so the require + element explicitly defines org.dita.html5 as a dependency. + + + + In the com.example.html5-custom-css directory, create a subdirectory named + css. + + + In the new css subdirectory, create a file named custom.css with + your custom CSS rules. + + + Sample <filepath>custom.css</filepath> file + + + When you first create the plug-in, you may want to include a rule in your custom stylesheet + that makes it readily apparent when the custom styles are applied (the example above will change body text + to “red”). Once you have verified that the plug-in works as intended, replace the placeholder rule with your + own custom styles. + + + + In the com.example.html5-custom-css root directory, add an Ant script + (build_html5-custom-css.xml) to define the transformation type. + + + Sample build file: <filepath>build_html5-custom-css.xml</filepath> + + + + + + + The files for this sample plug-in are included in the DITA-OT installation directory under + docsrc/samples/plugins/com.example.html5-custom-css/ and on + GitHub. +

    The plug-in directory has the following layout and files:

    + com.example.html5-custom-css +├── build_html5-custom-css.xml +├── css +│   └── custom.css +└── plugin.xml +
    + +
      +
    1. +
    2. Build output with the new transformation type to verify that the plug-in works as intended. + --input=my.ditamap --format= +
    3. +
    4. Refine the styles in your custom.css file as necessary.
    5. +
    +
    +
    +
    diff --git a/topics/html-customization-plugin-javascript.dita b/topics/html-customization-plugin-javascript.dita new file mode 100644 index 0000000..f330c2b --- /dev/null +++ b/topics/html-customization-plugin-javascript.dita @@ -0,0 +1,139 @@ + + + + + Inserting JavaScript in generated HTML + + Inserting JavaScript + + JavaScript code can be bundled in a custom plug-in and automatically inserted into the generated HTML pages + to enable web analytics or dynamic content delivery. + + + + footer + require + head + HTML5 + JavaScript, adding + + + + + +

    This scenario walks through the process of creating a very simple plug-in + (com.example.html5-javascript) that creates a new transformation type: + .

    +

    The transformation includes a custom page footer file with a JavaScript + tracking snippet and sets the args.ftr parameter to integrate the script content in the + HTML5 footer element of the generated pages.

    + This example inserts a tracking snippet for Google Analytics, but the basic approach is the same for other + analytics platforms or similar use cases that require custom JavaScript. +
    + + + In the plugins directory, create a directory named + com.example.html5-javascript. + + + In the new com.example.html5-javascript directory, create a plug-in configuration file + (plugin.xml) that declares the new transformation and + its dependencies. + + + Sample <filepath>plugin.xml</filepath> file + + + This plug-in will extend the default HTML5 transformation, so the require + element explicitly defines org.dita.html5 as a dependency. + + + + In the com.example.html5-javascript directory, create a subdirectory named + include. + + + In the new include subdirectory, create a file named + javascript.ftr.xml with your custom JavaScript code. + + + Sample <filepath>javascript.ftr.xml</filepath> file + + +

    The division wrapper will be discarded when generating HTML files, and the contents will be inserted into + the footer element of each page.

    +

    The file contents must be well-formed XML. If your JavaScript snippets include attributes without values + (such as the async script attribute), use valid XML syntax to define the empty + attribute:

    +

    Instead of: + <script> + <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> +</script> +

    +

    use: + <script> + <script id="MathJax-script" async="" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> +</script> +

    +
    +
    + + In the com.example.html5-javascript root directory, add an Ant script + (build_html5-javascript.xml) to define the transformation type and set the path to the + JavaScript footer file created in the previous step. + + + Sample build file: <filepath>build_html5-javascript.xml</filepath> + + + + + When defining the path to the footer file from the Ant script, use the plug-in directory property with + the plugin-id as shown in the example above: + ${dita.plugin.plugin-id.dir}. + + +
    + + The files for this sample plug-in are included in the DITA-OT installation directory under + docsrc/samples/plugins/com.example.html5-javascript/ and on + GitHub. +

    The plug-in directory has the following layout and files:

    + com.example.html5-javascript +├── build_html5-javascript.xml +├── include +│   └── javascript.ftr.xml +└── plugin.xml +
    + +
      +
    1. +
    2. Build output with the new transformation type to verify that the plug-in works as intended. + --input=my.ditamap --format=
    3. +
    4. Open one of the generated HTML topic files in a modern web browser and check the JavaScript + Console. When the page is loaded, Adding Google Analytics tracker will + appear on the console to verify that the sample script is loaded.
    5. +
    6. Remove the console.log debugging message from the sample JavaScript code, and replace the + 'UA-XXXXX-Y' placeholder string with the tracking ID of the Google Analytics property you + wish to track.
    7. +
    + This example places the JavaScript code in the page footer to ensure that page display is not + delayed while the script is loaded. If your JavaScript code supports pre-loading and your application targets + modern browsers that recognize the async script attribute, you may prefer to insert the + JavaScript snippet in the head element of the generated HTML files using the + args.hdf parameter instead. +
    +
    +
    diff --git a/topics/html-customization-plugin-webfont.dita b/topics/html-customization-plugin-webfont.dita new file mode 100644 index 0000000..0023e93 --- /dev/null +++ b/topics/html-customization-plugin-webfont.dita @@ -0,0 +1,163 @@ + + + + + Embedding web fonts in HTML output + + Embedding web fonts + + A custom plug-in can be created to generate HTML output that uses custom fonts for enhanced typographic + features, extended character sets or a unique corporate identity. + + + + require + link + head + HTML + custom plug-in + HTML + fonts + CSS + web fonts + fonts + HTML + web fonts + fonts + custom.css + build_html5-webfont.xml + plugin.xml + org.dita.html5 + + + + + +

    This scenario walks through the process of creating a very simple plug-in + (com.example.html5-webfont) that creates a new transformation type: + .

    +

    The transformation includes a custom CSS file and sets five parameters to + integrate font links and a custom stylesheet in the generated HTML5 output. These parameter settings make the + following changes:

    +
      +
    • +

      Specify a file that links to the font from the document head with args.hdf.

    • +
    • +

      Specify the css subfolder of the plug-in as the source directory for custom CSS with + args.cssroot.

    • +
    • +

      Specify the name of the custom CSS file with args.css.

      +

      The value of this parameter tells DITA-OT to use the custom.css file provided by the + plug-in.

    • +
    • +

      Ensure that the CSS file is copied to the output directory by setting args.copycss to + .

    • +
    • +

      Set the destination path for CSS files in the output folder with args.csspath.

      +

      CSS files are copied to the root level of the output folder by default. Setting this parameter places CSS + files in a dedicated css subfolder.

    • +
    +

    All five parameters are set in the Ant script (build_html5-webfont.xml).

    +
    + + + In the plugins directory, create a directory named + com.example.html5-webfont. + + + In the new com.example.html5-webfont directory, create a plug-in configuration file + (plugin.xml) that declares the new transformation and + its dependencies. + + + Sample <filepath>plugin.xml</filepath> file + + + This plug-in will extend the default HTML5 transformation, so the require + element explicitly defines org.dita.html5 as a dependency. + + + + In the com.example.html5-webfont directory, create a subdirectory named + include. + + + In the new include subdirectory, create a file named + webfont.hdf.xml with your custom font links. + + + Sample <filepath>webfont.hdf.xml</filepath> file + + +

    This example uses the + font. You can use multiple fonts by creating additional + link references in this file. The division wrapper will be discarded when + generating HTML files, and the contents will be inserted into the head element of + each page.

    +
    +
    + + In the com.example.html5-webfont directory, create a subdirectory named + css. + + + In the new css subdirectory, create a file named custom.css with + the stylesheet rules that apply the custom font-family to the desired elements. + + + Sample <filepath>custom.css</filepath> file + + +

    This example uses + for all body content. In practice, you would normally use different fonts + for headings, body content, tables, etc. by creating additional rules in your CSS file.

    +
    +
    + + In the com.example.html5-webfont root directory, add an Ant script + (build_html5-webfont.xml) to define the transformation type. + + + Sample build file: <filepath>build_html5-webfont.xml</filepath> + + + + +
    + + The files for this sample plug-in are included in the DITA-OT installation directory under + docsrc/samples/plugins/com.example.html5-webfont/ and on + GitHub. +

    The plug-in directory has the following layout and files:

    + com.example.html5-webfont +├── build_html5-webfont.xml +├── css +│   └── custom.css +├── include +│   └── webfont.hdf.xml +└── plugin.xml +
    + +
      +
    1. +
    2. Build output with the new transformation type to verify that the plug-in works as intended. + --input=my.ditamap --format= +
    3. +
    4. Refine the styles in your custom.css file to adjust the font usage as necessary.
    5. +
    +
    +
    +
    diff --git a/topics/html-customization-plugins.dita b/topics/html-customization-plugins.dita new file mode 100644 index 0000000..569c3fe --- /dev/null +++ b/topics/html-customization-plugins.dita @@ -0,0 +1,33 @@ + + + + + Custom HTML plug-ins + In addition to the basic modifications that can be made with parameter settings and property files, you can + create custom HTML plug-ins that bundle custom fonts, JavaScript, and stylesheets; modify the HTML markup, or + override other aspects of HTML processing. + + + + HTML + custom plug-in + HTML + fonts + HTML + JavaScript + HTML + CSS + HTML + markup, adding + CSS + HTML + fonts + HTML + + + + + These examples are not intended to be used as-is, but illustrate basic techniques you can use in your own + plug-ins. In practise, custom plug-ins often combine several of these approaches. + + diff --git a/topics/html-customization-properties-file.dita b/topics/html-customization-properties-file.dita new file mode 100644 index 0000000..2b6bdf1 --- /dev/null +++ b/topics/html-customization-properties-file.dita @@ -0,0 +1,63 @@ + + + + + Customizing HTML with a <filepath>.properties</filepath> file + + Using a properties file + + You can also use a .properties file to reference a set of build parameters when + building output with the dita command. The DITA-OT documentation uses a + .properties file to include custom CSS, header branding, and table-of-contents navigation in + the HTML5 output. + + + + dita command + .properties file + HTML + build properties + CSS + .properties file + .properties file + + + + + + + + Create a .properties file to store the parameter settings for your + customization. + + You can use one of the sample .properties files from the DITA-OT + documentation as a starting point for your own customizations. These files are available in the installation + folder under docsrc/samples/properties/. + + +

    For example:

    + + The <filepath>docsrc/samples/properties/sequence-html5.properties</filepath> file + + +
    +
    + + Reference your .properties file with the dita command when building + your output. + + dita --input=my.ditamap --format= --propertyfile=my.properties + + + +
    + + For an example of HTML output generated using this method, see the HTML5 version of the DITA-OT + documentation included in the installation folder under doc/index.html. + +
    +
    diff --git a/topics/html-customization.dita b/topics/html-customization.dita new file mode 100644 index 0000000..3c12466 --- /dev/null +++ b/topics/html-customization.dita @@ -0,0 +1,23 @@ + + + + + Customizing HTML output + + Customizing HTML + + You can modify the look and feel of your HTML output by changing parameter settings + to include custom CSS, headers and footers, or table-of-contents navigation in topics. + + + + HTML + customizing + transformations + HTML + plug-ins + HTML5 + + + + diff --git a/topics/html-customization.ditamap b/topics/html-customization.ditamap new file mode 100644 index 0000000..76f8d3c --- /dev/null +++ b/topics/html-customization.ditamap @@ -0,0 +1,26 @@ + + + + + Customizing HTML output + + + + + + + + + + Bi-directional links + + + + + + + + + + + diff --git a/topics/implement-saxon-collation-uri-resolvers.dita b/topics/implement-saxon-collation-uri-resolvers.dita new file mode 100644 index 0000000..0349c2b --- /dev/null +++ b/topics/implement-saxon-collation-uri-resolvers.dita @@ -0,0 +1,102 @@ + + + + + Implementing custom Saxon collation URI resolvers + + Custom collation URI resolvers + + Plug-ins can provide custom URI resolvers that provide collators for specific collation URIs. + + + + Saxon + service + Ant + jar + xsl:sort + Chinese + I18N + plug-in + XSLT + URI resolver + + + + +

    To do custom sorting and grouping in XSLT, you identify collators using URIs that Saxon resolves to collator + implementations. You implement the mapping from collation URIs to collators through custom collation URI + resolvers.

    +

    For example, the DITA Community I18N plugin provides a custom collator for doing dictionary-based sorting and + grouping of Simplified Chinese.

    +

    To allow multiple plug-ins to contribute collation URI resolvers, DITA-OT defines a superinterface of Saxon’s + CollationUriResolver interface, + org.dita.dost.module.saxon.DelegatingCollationUriResolver, that takes a base resolver.

    +

    Implementations of DelegatingCollationUriResolver should delegate to their base resolver if they + do not resolve the URI specified on the resolve request. When multiple plug-ins provide resolvers it results in a + chain of resolvers, ending with the built-in Saxon default resolver.

    + The order in which plug-ins will be processed during collation URI resolver configuration is variable, so two + plug-ins should not try to resolve the same collation URI. In that case the first one configured will be used at + run time. +

    A typical delegating collation URI resolver looks like + this:public class DCI18nCollationUriResolver implements DelegatingCollationUriResolver { + + public static final String DITA_COMMUNITY_I18N_ZH_CNAWARE_COLLATOR = + "http://org.dita-community.i18n.zhCNawareCollator"; + public static final String LANG_URI_PARAM = "lang"; + + private CollationURIResolver baseResolver; + + public DCI18nCollationUriResolver() { + super(); + this.baseResolver = StandardCollationURIResolver.getInstance(); + } + + + public net.sf.saxon.lib.StringCollator resolve(String uri, Configuration configuration) + throws XPathException { + ZhCnAwareCollator collator = resolveToZhCnAwareCollator(uri, null, configuration); + if (null == collator) { + return baseResolver.resolve(uri, configuration); + } + return (StringCollator) collator; + } + + + @Override + public void setBaseResolver(CollationURIResolver baseResolver) { + this.baseResolver = baseResolver; + } + + /* ... Code to evaluate the collation URI and provide the appropriate collator goes here */ +}

    +

    To implement a custom collation URI resolver: +

      +
    1. Add your plugin’s JAR file in the DITA-OT class path as described in + .
    2. +
    3. Implement an instance of org.dita.dost.module.saxon.DelegatingCollationUriResolver as + described above.
    4. +
    5. Include a file named org.dita.dost.module.saxon.DelegatingCollationUriResolver in the + directory META-INF/services in the compiled JAR that your plug-in provides. Each line of + the file must be the name of a class that implements + org.dita.dost.module.saxon.DelegatingCollationUriResolver:org.example.i18n.saxon.MyCollationUriResolver +

      You can create the services file using service elements in an Ant + jar + task:<jar destfile="${basedir}/target/lib/example-saxon.jar"> + [...] + <service type="org.dita.dost.module.saxon.DelegatingCollationUriResolver"> + <provider classname="org.example.i18n.saxon.MyCollationUriResolver"/> + </service> + [...] +</jar>

    6. +
    7. To use the collator in XSLT style sheets, specify the collation URI on xsl:sort elements + (or anywhere a collator URI can be + specified):<xsl:apply-templates select="word"> + <xsl:sort collation="http://org.example.i18n.MyCollator"/> +</xsl:apply-templates>
    8. +

    + +
    diff --git a/topics/implement-saxon-customizations.dita b/topics/implement-saxon-customizations.dita new file mode 100644 index 0000000..a218f1b --- /dev/null +++ b/topics/implement-saxon-customizations.dita @@ -0,0 +1,71 @@ + + + + + Adding Saxon customizations + + Saxon customizations + + Plug-ins can contribute XSLT extension functions and collation URI resolvers. These customizations are + automatically configured to work with Saxon when transformations are run using the DITA-OT + pipeline task with custom XSLT. + + + + Saxon + service + Ant + jar + Ant + pipeline + Ant + xslt + Saxon + Ant + Ant + Saxon + I18N + plug-in + plug-ins + Saxon + XSLT + Saxon + pre-processing + extension points, Saxon + Java + ServiceLoader + + + + +

    Plug-ins can provide the following Saxon extensions: +

      +
    • Extension functions
    • +
    • Collation URI resolvers
    • +

    +

    Extensions are declared in plug-in-provided JAR files using the Java ServiceLoader feature that looks for + service-declaring files in JAR files and loads classes. This requires adding one or more files in the + META-INF/services directory in plug-in-provided JAR files.

    +

    You can create the file manually or generate it dynamically using service elements in + Ant jar tasks. See the topics for the different extension types for details.

    +

    These extensions use the DITA Open Toolkit Ant pipeline element to wrap + xslt elements. You can do this in plug-ins as shown in this excerpt from the DITA + Community I18N plugin’s build.xml + file:<target name="org.dita-community.i18n-saxon-extension-test"> + <pipeline message="Test the DITA Community i18n Saxon extension functions" + taskname="i18n-extension-function-test"> + <xslt + in="${dita.plugin.org.dita-community.i18n.dir}/test/xsl/data/test-data.xml" + style="${dita.plugin.org.dita-community.i18n.dir}/test/xsl/test-extension-functions.xsl" + out="${basedir}/out/extension-function-test-results.xml" + > + </xslt> + </pipeline> +</target>

    +

    Normal XSLT extensions to built-in transformation types will automatically have the extensions available to + them.

    +

    The dynamic Saxon configuration is implemented in the class org.dita.dost.module.XsltModule, + which backs the pipeline/xslt element.

    +

    + +
    diff --git a/topics/implement-saxon-extension-functions.dita b/topics/implement-saxon-extension-functions.dita new file mode 100644 index 0000000..f7a6c90 --- /dev/null +++ b/topics/implement-saxon-extension-functions.dita @@ -0,0 +1,63 @@ + + + + + Implementing Saxon extension functions + + Saxon extensions + + Plug-ins can contribute Saxon extension functions for use in XSLT transformations run by DITA Open + Toolkit. + + + + Saxon + service + Ant + jar + XSLT + Saxon + Java + extension functions + + + + +

    Starting with Saxon 9.2, the mechanism for implementing extension functions has changed such that Saxon HE, in + particular, can no longer use the older “reflexive” mechanism for finding Java extension functions using a magic + URL. Instead, you implement extension functions and then register them directly on the Saxon Configuration object. + DITA-OT provides a dynamic mechanism to perform this registration for plug-in-provided extension functions.

    +

    To implement extension functions, you must do the following: +

      +
    1. Add your plug-in’s JAR file in the DITA-OT class path as described in + .
    2. +
    3. For each function, implement a class that extends + net.sf.saxon.lib.ExtensionFunctionDefinition. This class provides the namespace name and + function name for the function as well as details about its arguments and so on. See + in the Saxon documentation.
    4. +
    5. Include a file named net.sf.saxon.lib.ExtensionFunctionDefinition in the directory + META-INF/services in the compiled JAR that your plug-in provides. Each line of the file + must be the name of a class that implements net.sf.saxon.lib.ExtensionFunctionDefinition: com.example.saxon.functions.Add +com.example.saxon.functions.Subtract +

      You can create the file using service elements in an Ant + jar + task:<jar destfile="${basedir}/target/lib/example-saxon.jar"> + [...] + <service type="net.sf.saxon.lib.ExtensionFunctionDefinition"> + <provider classname="com.example.saxon.functions.Add"/> + <provider classname="com.example.saxon.functions.Subtract"/> + </service> + [...] +</jar>

    6. +
    7. In your XSLT transformations, declare the namespace the functions are bound + to:<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:xs="http://www.w3.org/2001/XMLSchema" + xmlns:eg="http://example.com/saxon-extensions" + version="2.0">
    8. +

    +

    You should then be able to use the extension functions as you would any other + function:<xsl:variable name="test" select="eg:add(1, 2)"/>

    + +
    diff --git a/topics/increasing-the-jvm.dita b/topics/increasing-the-jvm.dita new file mode 100644 index 0000000..396f14a --- /dev/null +++ b/topics/increasing-the-jvm.dita @@ -0,0 +1,66 @@ + + + + + Increasing Java memory allocation + + Increasing Java memory + + If you are working with large documents with extensive metadata or key references, you will need to + increase the memory allocation for the Java process. You can do this from the command-line prompt for a specific + session, or you can increase the value of the ANT_OPTS environment variable. + + + + macOS + increase Java memory + Linux + increase Java memory + Windows + increase Java memory + command line + increase Java memory + operating system + Linux + macOS + Windows + Java + memory + ANT_OPTS + Java + ANT_OPTS + metadata + processing time, effect on + memory + + + + + + + To change the value for a specific session, from the command prompt, issue the following command: + + + Platform + Command + + + Linux or macOS  + export ANT_OPTS=$ANT_OPTS -Xmx1024M + + + Windows + set ANT_OPTS=%ANT_OPTS% -Xmx1024M + + + +

    This increases the JVM memory allocation to 1024 megabytes. The amount of memory which can be allocated is + limited by available system memory and the operating system.

    +
    + + To persistently change the value, change the value allocated to the ANT_OPTS environment + variable on your system. + +
    +
    +
    diff --git a/topics/input-formats.dita b/topics/input-formats.dita new file mode 100644 index 0000000..90ae372 --- /dev/null +++ b/topics/input-formats.dita @@ -0,0 +1,30 @@ + + + + + Authoring formats + In addition to standard DITA XML, DITA-OT supports several alternative input formats, including Markdown + and the proposed XDITA, MDITA and HDITA authoring formats currently in + development for Lightweight DITA. + + + + Lightweight DITA + LwDITA + Lightweight DITA + MDITA + Lightweight DITA + XDITA + Lightweight DITA + HDITA + Lightweight DITA + authoring formats + input formats + authoring formats + formats + authoring formats + transformations + + + + diff --git a/topics/input-formats.ditamap b/topics/input-formats.ditamap new file mode 100644 index 0000000..895b70f --- /dev/null +++ b/topics/input-formats.ditamap @@ -0,0 +1,13 @@ + + + + + + Input formats + + + + + + + diff --git a/topics/installing-client.dita b/topics/installing-client.dita new file mode 100644 index 0000000..45a6ec8 --- /dev/null +++ b/topics/installing-client.dita @@ -0,0 +1,63 @@ + + + + + Installing DITA Open Toolkit + + Installing DITA-OT + + The DITA-OT distribution package can be installed on Linux, macOS, and Windows. It + contains everything that you need to run the toolkit except for Java. + + + + macOS + installing DITA-OT + Linux + installing DITA-OT + Windows + installing DITA-OT + dita command + installing + installing + DITA-OT + Java + Java Development Kit (JDK) + Java Runtime Environment (JRE) + + + + + +
      +
    • +

      Ensure that you have a Java Runtime Environment (JRE) or Java Development Kit (JDK).

      +

    • +
    • If you want to generate HTML Help, ensure that you have HTML Help + Workshop installed. +

      You can download the Help Workshop from + .

    • +
    +
    + + + + + + Extract the contents of the package to the directory where you want to install DITA-OT. + + + Add the absolute path for the bin folder of the DITA-OT installation directory to the + . + + This defines the necessary environment variable that allows the + dita command to be run from any location on the file system without typing the path to + the command. + dita command + PATH environment variable + + + + +
    +
    diff --git a/topics/installing-via-homebrew.dita b/topics/installing-via-homebrew.dita new file mode 100644 index 0000000..074a4c0 --- /dev/null +++ b/topics/installing-via-homebrew.dita @@ -0,0 +1,90 @@ + + + + + Installing DITA-OT via Homebrew + + Installing via Homebrew + + An alternative installation method can be used to install DITA-OT via + , one of the most popular open-source package managers on macOS and Linux. + + + + macOS + dita command + Homebrew + installing + Homebrew + + + + + +

    The steps below assume you have already installed + according to the instructions at + brew.sh.

    + Verify that your + begins with the bin subfolder of the Homebrew installation directory + Homebrew’s default installation location depends on the operating system architecture: +
      +
    • /usr/local on macOS Intel
    • +
    • /opt/homebrew on macOS ARM
    • +
    • /home/linuxbrew/.linuxbrew on Linux
    • +
    +
    to ensure that Homebrew-installed software + takes precedence over any programs of the same name elsewhere on the system.
    +
    + + + Update Homebrew to make sure the latest package formulas are available on your system: + $ brew update +Already up-to-date. + +

    Homebrew responds with a list of any new or updated formulæ.

    +
    + + Check the version of DITA-OT that is available from Homebrew: + $ brew info dita-ot +dita-ot: stable +DITA Open Toolkit is an implementation of the OASIS DITA specification +https://www.dita-ot.org/ +/opt/homebrew/Cellar/dita-ot/ (number of files, package size) * + Poured from bottle using the formulae.brew.sh API on YYYY-MM-DD at hh:mm:ss +From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/dita-ot.rb +License: Apache-2.0 +==> Dependencies +Required: openjdk ✔ + + +

    The version of the DITA-OT formula is shown, along with basic information on the package.

    +
    + + Install the dita-ot package: + $ brew install dita-ot +Downloading… + +

    Homebrew will automatically download the latest version of the toolkit, install it in a subfolder of the + local package Cellar and symlink the dita command to the bin + subfolder of the Homebrew installation directory.

    +
    +
    + + Verify the installation: + $ which dita +/opt/homebrew/bin/dita + +

    The response confirms that the system will use the Homebrew-installed version of DITA-OT.

    +
    + + Check the DITA-OT version number: + $ dita --version +DITA-OT version + The DITA-OT version number appears on the console. + +
    + +

    You can now run the dita command to transform DITA content.

    +
    +
    diff --git a/topics/installing.ditamap b/topics/installing.ditamap new file mode 100644 index 0000000..e0bfb1a --- /dev/null +++ b/topics/installing.ditamap @@ -0,0 +1,32 @@ + + + + + Installing + + Prakash Rajwar + + + + + + + + + + + + + First build + + + + first-build- + + + + + + + diff --git a/topics/logging.dita b/topics/logging.dita new file mode 100644 index 0000000..f7d296d --- /dev/null +++ b/topics/logging.dita @@ -0,0 +1,146 @@ + + + + + Logging build information + + Logging + + When you run DITA-OT, key information is logged on the screen. This information can also be written to a + log file. If you encounter a problem, you can analyze this information to determine the source of the problem and + then take action to resolve it. + + + + Apache FOP + log files + dita command + logging + logging + verbose logging + Ant + logging + debugging + logging + Java + logging + + + + +

    The logging behavior varies depending on whether you use the dita command or Ant to invoke a + toolkit build.

    +
    + +
    dita command
    +
    +

    By default, only warning and error messages are written to the screen.

    +
      +
    • +

      For more information, enable verbose logging with dita + --verbose.

      +

      Verbose logging prints additional information to the console, including directory settings, effective + values for Ant properties, input/output files, and informational messages to assist in + troubleshooting.

    • +
    • +

      To enable debug logging, use dita + --debug.

      +

      Debug logging prints considerably more additional information. The debug log includes all information + from the verbose log, plus details on Java classes, additional Ant properties and overrides, + pre-processing filters, parameters, and stages, and the complete build sequence.

      + Debug logging requires additional resources and can slow down the build process, so + it should only be enabled when further details are required to diagnose problems. +
    • +
    • +

      To write the log to a file, use dita + --logfile=file and specify the path to the log file.

      +

      Unless an absolute path is specified, the value will be interpreted relative to the current + directory.

    • +
    +
    + +
    Ant
    +
    By default, status information is written to the screen. If you issue the -l parameter, + the build runs silently and the information is written to a log file with the name and location that you + specified.
    +
    +
    +
    + Using other Ant loggers +

    You also can use other Ant loggers; see + Listeners & + Loggers in the Ant documentation for more information.

    +

    For example, you can use the AnsiColorLogger to colorize the messages written on the screen.

    +
    + +
    dita command
    +
    +

    To use a custom Ant logger with the dita command, add the logger to the + ANT_ARGS environment variable by calling the following command before calling the + dita command:

    + export ANT_ARGS="-logger org.apache.tools.ant.listener.AnsiColorLogger" +

    Now you will get colorized messages when the dita command runs.

    + Environment variables can also be set permanently. See + How do I set or + change the PATH system variable? for information on how to set the + . You can set the ANT_ARGS environment variable in the same + way. +
    +
    + +
    Ant
    +
    +

    If you prefer to launch DITA-OT directly from Ant, you can also add the logger to the + ANT_ARGS environment variable, as explained above. You can also set the logger with the + -logger parameter when calling Ant.

    + ant -logger org.apache.tools.ant.listener.AnsiColorLogger +
    +
    +
    +
    +
    + FOP debug logging + logback.xml + classpath + logging +

    In PDF processing with Apache FOP, DITA-OT uses the Simple Logging + Facade for Java (SLF4J) for better control and formatting of FOP log messages. To reduce noise on the console, + all FOP messages are set to the Info level and hidden by default.

    +

    To enable debug logging, modify the config/logback.xml file or add your own + logback.xml to the classpath with a higher priority to override the default settings. For + more information, see the + Logback + configuration documentation.

    + Enabling FOP debug logging will dramatically increase the size of generated log + files. +
    + + + +
    +
    diff --git a/topics/lwdita-input.dita b/topics/lwdita-input.dita new file mode 100644 index 0000000..c4f3ec9 --- /dev/null +++ b/topics/lwdita-input.dita @@ -0,0 +1,112 @@ + + + + + Preview support for Lightweight DITA + + Lightweight DITA + + DITA-OT provides preview support for the authoring formats proposed for + , or “LwDITA”. The XDITA, MDITA and HDITA + formats are alternative representations of DITA content in XML, Markdown and HTML5. + + + + topicref + format + authoring formats + Lightweight DITA + metadata + Lightweight DITA + DITA 1.3 + Lightweight DITA + converting lightweight formats to DITA + + + + + + Since + has not yet been released as a formal specification, the implementation for + XDITA, MDITA and HDITA authoring formats is subject to change. Future + versions of DITA Open Toolkit will be updated as LwDITA evolves. +
    + XDITA +

    XDITA is the LwDITA authoring format that uses XML to structure information. XDITA is a subset of + DITA, with new multimedia element types added to support interoperability with HTML5. XDITA is designed for + users who want to write DITA content but who do not want (or need) the full power of DITA.

    +

    The XDITA parser included in the org.lwdita plug-in provides preliminary support for XDITA + maps and XDITA topics.

    +

    To apply XDITA-specific processing to topics in an XDITA map or a full DITA 1.3 map, set the + format attribute on a topicref to xdita:

    +

    + <map> + <topicref href="xdita-topic.xml" format="xdita"/> +</map> +

    + For examples of cross-format content sharing between topics in XDITA, + HDITA, extended-profile MDITA, and DITA 1.3, see the LwDITA sample files in the + DITA-OT installation directory under plugins/org.oasis-open.xdita.v0_2_2/samples. +
    +
    + MDITA +

    MDITA is the LwDITA authoring format based on Markdown. It is designed for users who want to write + structured content with the minimum of overhead, but who also want to take advantage of the reuse mechanisms + associated with the DITA standard and the multi-channel publishing afforded by standard DITA tooling.

    +

    Recent proposals for LwDITA include two profiles for authoring MDITA topics:

    +
      +
    • The “Core profile” is based on + and includes elements that are common to many other Markdown implementations.
    • +
    • The “Extended profile” borrows additional features from other flavors of Markdown to represent + a broader range of DITA content with existing plain-text syntax conventions.
    • +
    +

    The MDITA parser included in the org.lwdita plug-in provides preliminary support for these + profiles and additional Markdown constructs as described in the + .

    +

    To apply the stricter LwDITA-specific processing to Markdown topics, set the format attribute + to mdita:

    +

    + <map> + <topicref href="mdita-topic.md" format="mdita"/> +</map> +

    +

    In this case, the first paragraph in the topic will be treated as a short description, for example, and + additional metadata can be specified for the topic via a YAML front matter block.

    + +
    + +
    + HDITA +

    HDITA is the LwDITA authoring format based on HTML5, which is intended to support structured + content authoring with tools designed for HTML authoring. HDITA also uses custom data attributes to provide + interoperability with DITA.

    +

    The HDITA parser included in the org.lwdita plug-in provides preliminary support for these + constructs.

    +

    To apply LwDITA-specific processing to HTML topics, set the format attribute to + hdita:

    +

    + <map> + <topicref href="hdita-topic.html" format="hdita"/> +</map> +

    + The HDITA map format is not yet supported. To include HDITA content, use an XDITA map or a + DITA 1.3 map. +
    +
    + Using conditional processing in MDITA and HDITA +

    When you set up conditional processing in MDITA and HDITA, use the data-props attribute in the + element that will have the conditional processing applied. In the .ditaval file, however, + use the props attribute.

    +
    +
    + Converting lightweight formats to DITA XML +

    When you add LwDITA topics to a DITA publication, the content is temporarily converted to DITA in the + background when generating other output formats like HTML or PDF, but the source files remain unchanged.

    +

    If you prefer to maintain this content in DITA in the future, you can generate DITA output by passing the + --format= option on the command line.

    +

    This converts all input files (both LwDITA formats and DITA XML) to + Normalized DITA. You can then copy the generated DITA files from the output + folder to your project and replace references to the lightweight topics with their DITA equivalents.

    +
    + +
    diff --git a/topics/markdown-input.dita b/topics/markdown-input.dita new file mode 100644 index 0000000..ce08173 --- /dev/null +++ b/topics/markdown-input.dita @@ -0,0 +1,74 @@ + + + + + Markdown input + + is a lightweight markup language that allows you to write using an easy-to-read plain text + format and convert to structurally valid markup as necessary. + + + + format + authoring formats + Markdown + Markdown + CommonMark + converting lightweight formats to DITA + + + + +

    In the words of its creators:

    + + “The overriding design goal for Markdown’s formatting syntax is to make it as readable as possible. The idea is + that a Markdown-formatted document should be publishable as-is, as plain text, without looking like it’s been + marked up with tags or formatting instructions.” + +

    DITA Open Toolkit allows you to use Markdown files directly in topic references and export DITA content as + Markdown.

    + +

    These features enable lightweight authoring scenarios that allow subject matter experts to contribute to DITA + publications without writing in XML, and support publishing workflows that include DITA content in Markdown-based + publishing systems.

    + +
    + Adding Markdown topics +

    In 2015, the original DITA-OT Markdown plug-in introduced a series of conventions to convert + Markdown content to DITA, and vice-versa. This Markdown flavor was called + Markdown DITA. The markdown format adds several + complementary constructs to represent DITA content in Markdown, beyond those proposed for the + MDITA format in the + Lightweight DITA specification drafts.

    + +

    To add a Markdown topic to a DITA publication, create a topic reference in your map and set the + format attribute to markdown so the toolkit will recognize the source file + as Markdown and convert it to DITA:

    +

    <?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE map PUBLIC "-//OASIS//DTD DITA Map//EN" "map.dtd"> +<map> + <topicref href="markdown-dita-topic.md" format="markdown"/> +</map>

    +

    When you add Markdown topics to a DITA publication as described above, the content is temporarily converted to + DITA in the background when generating other output formats like HTML or PDF, but the Markdown source files + remain unchanged.

    + This approach is recommended in cases where simple content is authored collaboratively over + multiple versions, as Markdown topics can be edited by a wide range of authors and combined as necessary with + more complex content maintained in DITA XML. +
    +
    + Converting Markdown to DITA +

    In cases where the Markdown input is a one-off contribution, members of the DITA authoring team can use the + Markdown file as raw material that is easily converted to DITA and enriched with conditional processing + attributes, conkeyrefs or other more complex semantics that have no equivalent in limited formats like + Markdown.

    +

    If you prefer to maintain this content in DITA in the future, you can generate DITA output by passing the + --format= option on the command line.

    +

    This converts all input files (both DITA XML and Markdown) to + Normalized DITA. You can then copy the generated DITA files from the output + folder to your project and replace references to the Markdown topics with their DITA equivalents.

    +
    + +
    diff --git a/topics/migrating-ant-to-dita.dita b/topics/migrating-ant-to-dita.dita new file mode 100644 index 0000000..24aaf99 --- /dev/null +++ b/topics/migrating-ant-to-dita.dita @@ -0,0 +1,123 @@ + + + + + Migrating Ant builds to use the <cmdname>dita</cmdname> command + + Migrating Ant builds + + Although DITA Open Toolkit still supports Ant builds, switching to the dita command + offers a simpler command interface, sets all required environment variables and allows you to run DITA-OT without + setting up anything beforehand. + + + + Ant + exec + Ant + dita-cmd + dita command, benefits of + dita-cmd + dita command + migrating Ant scripts + classpath + dita command + + + + + +

    Building output with the dita command is often easier than using Ant. In particular, you can + use .properties files to specify sets of DITA-OT parameters for each build.

    +

    You can include the dita command in shell scripts to perform multiple builds.

    + Add the absolute path for the bin folder of the DITA-OT installation + directory to the + to run the dita command from any location on the file system without + typing the path. +
    + + + In your Ant build file, identify the properties set in each build target. + + Some build parameters might be specified as properties of the project as a whole. You can refer to a + build log to see a list of all properties that were set for the build. + + + + Create a .properties file for each build and specify the needed build parameters, one + per line, in the format name = value. + + + Use the dita command to perform each build, referencing your + .properties with the --propertyfile=file + option. + + + + Example: Ant build +

    Prior to DITA-OT 2.0, an Ant build like this was typically used to define the properties for each target.

    +

    Sample build file: dita-ot-dir/docsrc/samples/ant_sample/build-chm-pdf.xml +

    + + Example: <filepath>.properties</filepath> files with <cmdname>dita</cmdname> command +

    The following .properties files and dita commands are equivalent to the + example Ant build.

    +

    Sample .properties file: /properties/chm.properties

    +

    +

    +

    Sample .properties file: /properties/pdf.properties

    +

    +

    +

    Run from :

    + dita --input=sequence.ditamap --format= \ + --propertyfile=properties/chm.properties +dita --input=taskbook.ditamap --format= \ + --propertyfile=properties/pdf.properties +
    + + Example: Call the <cmdname>dita</cmdname> command from an Ant build +

    In some cases, you might still want to use an Ant build to implement some pre- or post-processing steps, but + also want the convenience of using the dita command with .properties + files to define the parameters for each build. This can be accomplished with Ant’s exec + task.

    +

    This example uses a dita-cmd Ant macro defined in the /ant_sample/dita-cmd.xml file:

    +

    +

    +

    You can use this macro in your Ant build to call the dita command and pass the + input, format and propertyfile parameters as + follows: + <dita-cmd input="sample.ditamap" format="pdf" propertyfile="sample.properties"/> +

    +

    This approach allows you to use Ant builds to perform additional tasks at build time while allowing the + dita command to set the classpath and ensure that all necessary JAR libraries are + available.

    + The attributes defined in the Ant macro are required and must be supplied each time the task is run. To set + optional parameters in one build (but not another), use different .properties files for + each build. +

    Sample build file: /ant_sample/build-chm-pdf-hybrid.xml

    +

    + +

    +
    +
    +
    diff --git a/topics/migrating-to-1.5.4.dita b/topics/migrating-to-1.5.4.dita new file mode 100644 index 0000000..0f13471 --- /dev/null +++ b/topics/migrating-to-1.5.4.dita @@ -0,0 +1,197 @@ + + + + + + Migrating to release 1.5.4 + + To 1.5.4 + + + DITA-OT 1.5.4 adds new extension points to configure behavior based on file extensions, declare print + transformation types and add mappings to the PDF configuration catalog file. PDF output supports mirrored page + layout and uses new font family definitions. Support for several new languages was added for PDF and XHTML + output. + + + + + deprecated features + print_transtypes + deprecated features + page-margin-left + deprecated features + page-margin-right + languages + supported + Finnish + Hebrew + Indonesian + Kazakh + Malay + Romanian + Russian + Swedish + I18N + org.dita.pdf2.i18n.enabled + + + + + +
    + Configuration properties file changes +

    In previous versions, the lib/configuration.properties file was generated by the + integration process. Integration has been changed to generate + lib/org.dita.dost.platform/plugin.properties and the role of the old + lib/configuration.properties has been changed to contain defaults and configuration + options, such as default language.

    +

    The dita.plugin.org.dita.*.dir properties have been changed to point to the DITA-OT base + directory.

    +

    To allow access to configuration files, the lib directory needs to be added to the Java + classpath.

    +
    +
    + New plug-in extension points +

    New plug-in extension points have been added allow configuring DITA-OT behavior based on file extensions.

    + + + + + + + + Extension point + Description + Default values + + + + + dita.topic.extension + DITA topic + .dita, .xml + + + dita.map.extensions + DITA map + .ditamap + + + dita.html.extensions + HTML file + .html, .htm + + + dita.resource.extensions + Resource file + .pdf, .swf + + + +
    +

    Both HTML and resource file extensions are used to determine if a file in source is copied to output.

    +

    A new plug-in extension point has been added to declare transformation types as print types.

    + + + + + + + Extension point + Description + + + + + dita.transtype.print + Declare transformation type as a print type. + + + +
    +

    The print_transtypes property in integrator.properties has been + deprecated in favor of dita.transtype.print.

    +
    +
    + Plugin URI scheme +

    Support for the plugin URI scheme has been added to XSLT stylesheets. Plug-ins can refer to + files in other plug-ins without hard-coding relative paths, for example:

    + <xsl:import href="plugin:org.dita.pdf2:xsl/fo/topic2fo_1.0.xsl"/> +
    +
    + XHTML +

    Support for the following languages has been added:

    +
      +
    • Indonesian
    • +
    • Kazakh
    • +
    • Malay
    • +
    +
    +
    + PDF +

    Support for mirrored page layout was added. The default is the unmirrored layout. The following XSLT + configuration variables have been deprecated:

    +
      +
    • page-margin-left
    • +
    • page-margin-right
    • +
    +

    The following variables should be used instead to control page margins:

    +
      +
    • page-margin-outside
    • +
    • page-margin-inside
    • +
    +

    The args.bookmap-order property has been added to control how front and back matter are + processed in bookmaps. The default is to reorder the frontmatter content as in previous releases.

    +

    A new extension point has been added to add mappings to the PDF configuration catalog file.

    + + + + + + + Extension point + Description + + + + + org.dita.pdf2.catalog.relative + Configuration catalog includes. + + + +
    +

    Support for the following languages has been added:

    +
      +
    • Finnish
    • +
    • Hebrew
    • +
    • Romanian
    • +
    • Russian
    • +
    • Swedish
    • +
    +

    PDF processing no longer copies images or generates XSL FO to output directory. Instead, the temporary + directory is used for all temporary files and source images are read directly from source directory. The legacy + processing model can be enabled by setting org.dita.pdf2.use-out-temp to + in configuration properties; support for the legacy processing model may be removed in + future releases.

    +

    Support for FrameMaker index syntax has been disabled by default. To enable FrameMaker index syntax, set + org.dita.pdf2.index.frame-markup to in configuration + properties.

    +

    A configuration option has been added to disable internationalization (I18N) font processing and use + stylesheet-defined fonts. To disable I18N font processing, set org.dita.pdf2.i18n.enabled + to false in configuration properties.

    +

    The XSLT parameters customizationDir and fileProfilePrefix have been + removed in favor of the customizationDir.url parameter.

    +

    A new shell stylesheet has been added for FOP and other shell stylesheets have also been revised. Plug-ins + which have their own shell stylesheets for PDF processing should make sure all required stylesheets are + imported.

    +

    Font family definitions in stylesheets have been changed from Sans, Serif, and Monospaced to sans-serif, serif, + and monospace, respectively. The I18N font processing still uses the old logical names and aliases are used to + map the new names to old ones.

    +
    +
    +
    diff --git a/topics/migrating-to-1.6.dita b/topics/migrating-to-1.6.dita new file mode 100644 index 0000000..6d37819 --- /dev/null +++ b/topics/migrating-to-1.6.dita @@ -0,0 +1,208 @@ + + + + + + Migrating to release 1.6 + + To 1.6 + + + In DITA-OT 1.6, various demo plug-ins were removed along with many deprecated + properties, targets, templates and modes. The PDF2 transformation no longer supports the beta version of DITA from + IBM, the "bkinfo" demo plug-in, or layout-masters.xml configuration. + + + + + deprecated features + demo folder + deprecated features + workdir processing instruction + deprecated features + workdir processing instruction + deprecated features + topic pull templates, list of + deprecated features + "bkinfo" demo plug-in + deprecated features + layout-masters.xml + deprecated features + PDF2 templates, list of + deprecated features + XHTML templates, list of + deprecated features + ODT templates, list of + + + + + +
    +

    Support for the old DITAVAL format (used before OASIS added DITAVAL to the standard in 2007) has been + removed.

    +

    The demo folder has been deprecated and the following plug-ins have been moved to the + plugins folder:

    + + + + + + + old path + new path + + + + + demo/dita11 + plugins/org.dita.specialization.dita11 + + + demo/dita132 + plugins/org.dita.specialization.dita132 + + + demo/eclipsemap + plugins/org.dita.specialization.eclipsemap + + + demo/fo + plugins/org.dita.pdf2 + + + demo/tocjs + plugins/com.sophos.tocjs + + + + demo/h2d + plugins/h2d + + + demo/legacypdf + plugins/legacypdf + + + +
    +

    The remaining plug-ins in the demo folder have been moved to a separate repository at + github.com/dita-ot/ext-plugins.

    +
    +
    +

    The deprecated property dita.input.valfile should be replaced with the new argument property + args.filter.

    +

    The dita-preprocess target has been removed and dependencies should be replaced with a target + sequence build-init, preprocess.

    +

    Support for the args.message.file argument has been removed as message configuration has + become static configuration.

    +

    The workdir processing instruction has been deprecated in favor of + workdir-uri. The only difference between the two processing instructions is that + workdir-uri contains a URI instead of a system path.

    +
    +
    + Pre-processing +

    The following deprecated templates and modes have been removed in topic pull stylesheets:

    +
      +
    • inherit
    • +
    • get-stuff
    • +
    • verify-type-attribute
    • +
    • classval
    • +
    • getshortdesc
    • +
    • getlinktext
    • +
    • blocktext
    • +
    • figtext
    • +
    • tabletext
    • +
    • litext
    • +
    • fntext
    • +
    • dlentrytext
    • +
    • firstclass
    • +
    • invalid-list-item
    • +
    • xref
    • +
    +
    +
    + PDF2 +

    The following deprecated items are no longer supported in the PDF transform:

    +
      +
    • Support for the beta version of DITA, available from IBM before the OASIS standard was created in 2005.
    • +
    • Support for the "bkinfo" demo plug-in, used to support book metadata before OASIS created the BookMap format + in 2007.
    • +
    • Support for layout-masters.xml configuration. Plug-ins should use the + createDefaultLayoutMasters template instead.
    • +
    +

    The following extension-points have been added:

    +
      +
    • dita.conductor.pdf2.param to add XSLT parameters to XSL FO transformation.
    • +
    +

    Custom PDF2 shell stylesheets need to be revised to not include separate IBM and OASIS DITA stylesheets. The + *_1.0.xsl stylesheets have been removed and their imports must be + removed from shell stylesheets.

    +

    The following template modes have been deprecated:

    +
      +
    • toc-prefix-text
    • +
    • toc-topic-text
    • +
    +

    The following named templates have been removed:

    +
      +
    • processTopic
    • +
    • createMiniToc
    • +
    • processTopicTitle
    • +
    • createTopicAttrsName
    • +
    • processConcept
    • +
    • processReference
    • +
    • getTitle
    • +
    • placeNoteContent
    • +
    • placeImage
    • +
    • processUnknowType
    • +
    • insertReferenceTitle
    • +
    • buildRelationships
    • +
    • processTask
    • +
    +

    The main FO generation process now relies on the merging process to rewrite duplicate IDs. The default merging + process did this already in previous releases, but now also custom merging processes must fulfill the duplicate + ID rewrite requirement.

    +
    +
    + XHTML +

    The following named templates have been deprecated:

    +
      +
    • make-index-ref
    • +
    +

    The following deprecated templates have been removed:

    +
      +
    • revblock-deprecated
    • +
    • revstyle-deprecated
    • +
    • start-revision-flag-deprecated
    • +
    • end-revision-flag-deprecated
    • +
    • concept-links
    • +
    • task-links
    • +
    • reference-links
    • +
    • relinfo-links
    • +
    • sort-links-by-role
    • +
    • create-links
    • +
    • add-linking-attributes
    • +
    • add-link-target-attribute
    • +
    • add-user-link-attributes
    • +
    +

    The removed templates have been replaced by other templates in earlier releases and plug-ins should be changed + to use the new templates.

    +
    +
    + ODT +

    The following deprecated templates have been removed:

    +
      +
    • revblock-deprecated
    • +
    • revstyle-deprecated
    • +
    • start-revision-flag-deprecated
    • +
    • end-revision-flag-deprecated
    • +
    +

    The removed templates have been replaced by other templates in earlier releases and plug-ins should be changed + to use the new templates.

    +
    +
    +
    diff --git a/topics/migrating-to-1.7.dita b/topics/migrating-to-1.7.dita new file mode 100644 index 0000000..e93917a --- /dev/null +++ b/topics/migrating-to-1.7.dita @@ -0,0 +1,110 @@ + + + + + + Migrating to release 1.7 + + To 1.7 + + + In DITA-OT 1.7, a new pre-processing step implements flagging for HTML-based output formats. PDF processing + was corrected with regard to shortdesc handling, and a new XSLT template mode was introduced for + HTML TOC processing. Several stylesheets were moved to plug-in specific folders and deprecated properties and XSLT + variables were removed. + + + + + deprecated features + dita.input + deprecated features + dita.input.dirname + deprecated features + dita.extname + deprecated features + XHTML, flagging-related templates + deprecated features + page-margin-left + deprecated features + page-margin-right + + + + + +
    +

    A new job status file .job.xml has been introduced and replaces + dita.list and dita.xml.properties as the normative source for job + status. If you have custom processing which modifies the job properties, you should change your code to modify + .job.xml instead.

    +

    Support for the following deprecated properties has been removed:

    +
      +
    • dita.input
    • +
    • dita.input.dirname
    • +
    • dita.extname
    • +
    +

    Stylesheets for the following transformation types have moved to plug-in specific folders:

    +
      +
    • +
    • +
    • +
    • +
    +

    If custom plug-ins have hard coded paths to these stylesheets, update references to use either + plugin URIs in xsl:import instructions or use dita.plugin.* + Ant properties.

    +

    The integration process has been changed to use strict mode by default. For old plug-ins which are not valid, + lax processing mode can still be used.

    +

    Plug-ins that use the MessageUtils Java class must use getInstance method to + access the MessageUtils instance, as getMessage methods have been changed to + instance methods.

    +
    +
    + Pre-processing +

    The pre-processing Ant dependency chain has been cleaned up. Tasks no longer depend on the previous task in the + default chain, but rather the whole preprocess dependency chain is defined by the preprocess + task.

    +
    +
    + HTML +

    Core TOC generation has been moved to a separate XSLT stylesheet + xsl/map2htmtoc/map2htmlImpl.xsl and the new templates use the mode toc. + Plug-ins which override HTML TOC processing should change the map processing templates to toc + mode.

    +
    +
    + HTML and extended transformation types +

    Flagging logic has been pulled out of the core X/HTML code and moved to a preprocess step. This significantly + simplifies and optimizes the X/HTML code, while making flagging logic available to any other transformation + type. The new preprocess step implements all flagging logic; for each active flag, it adds a DITA-OT specific + hint into the intermediate topics (implemented as a specialization of the DITA <foreign> element). As part + of this change, all flagging-related templates in the XHTML code (such as start-flagit and gen-style) are + deprecated.

    +

    If you override the X/HTML transforms, you may need to update your overrides to use the new flagging logic. In + most cases this just means deleting calls to the deprecated templates; in some cases, the calls can be replaced + with 2 lines to process flags in new places. You should compare your override to the updated XHTML code and + update as needed. See + for details.

    +

    Plug-ins that provide support for new transforms need to ensure that they properly support the DITA + <foreign> element, which should be ignored by default; if so, this change will have no immediate impact. + Support for flagging new transformation types may be more easily added based on this update, because there is no + need to re-implement flagging logic, but this is not required. See + for details on how to add flagging support.

    +
    +
    + PDF +

    The following deprecated XSLT variables have been removed:

    +
      +
    • page-margin-left
    • +
    • page-margin-right
    • +
    +

    XSLT stylesheets have been split to separate specialization topic code and new xsl:import + instructions have been added to topic2fo.xsl. Plug-ins which define their own shell + stylesheet should be revised to import all the required stylesheet modules.

    +

    PDF processing used to replace topic shortdesc with map shortdesc, but this + behavior was incorrect and was removed to comply with the DITA specification.

    +

    A new #note-separator variable string was added to facilitate customization.

    +
    +
    +
    diff --git a/topics/migrating-to-1.8.dita b/topics/migrating-to-1.8.dita new file mode 100644 index 0000000..553cf9f --- /dev/null +++ b/topics/migrating-to-1.8.dita @@ -0,0 +1,139 @@ + + + + + + Migrating to release 1.8 + + To 1.8 + + + In DITA-OT 1.8, certain stylesheets were moved to plug-in specific folders and various deprecated Ant + properties, XSLT stylesheets, parameters and modes were removed from the XHTML, PDF and ODT + transformations. + + + + + deprecated features + dita.script.dir + deprecated features + dita.resource.dir + deprecated features + dita.empty + deprecated features + args.message.file + deprecated features + ImgUtils + deprecated features + artwork-preprocessor.xsl + deprecated features + otdita2fo_frontend.xsl + deprecated features + insertVariable.old + deprecated features + XSLT mode, layout-masters-processing + deprecated features + XSLT mode, toc-prefix-text + deprecated features + XSLT mode, toc-topic-text + deprecated features + args.fo.include.rellinks + deprecated features + Legacy PDF + deprecated features + args.odt.include.rellinks + deprecated features + disableRelatedLinks + + + + + +
    +

    Stylesheets for the following transformation types have moved to plug-in specific folders:

    +
      +
    • +
    • +
    • +
    • +
    • +
    +
    +
    + Pre-processing +

    The following deprecated Ant properties have been removed:

    +
      +
    • dita.script.dir, use ${dita.plugin.id.dir} instead
    • +
    • dita.resource.dir, use ${dita.plugin.org.dita.base.dir}/resource + instead
    • +
    • dita.empty
    • +
    • args.message.file
    • +
    +
    +
    + XHTML +

    XSLT Java extension ImgUtils has been removed from stylesheets and been replaced with + pre-processing module ImageMetadataModule. The old ImgUtils Java classes are + still included in the build.

    +
    +
    + PDF + args.rellinks + PDF + related links + args.rellinks +

    The following deprecated XSLT stylesheets have been removed:

    +
      +
    • artwork-preprocessor.xsl
    • +
    • otdita2fo_frontend.xsl
    • +
    +

    The following deprecated XSLT templates have been removed:

    +
      +
    • insertVariable.old
    • +
    +

    The following deprecated XSLT modes have been removed:

    +
      +
    • layout-masters-processing
    • +
    • toc-prefix-text, use tocPrefix mode instead
    • +
    • toc-topic-text, use tocText mode instead
    • +
    +

    Link generation has been simplified by removing deprecated arguments in favor of + args.rellinks. The following deprecated Ant properties have been removed:

    +
      +
    • args.fo.include.rellinks
    • +
    +

    The following XSLT parameters have been removed:

    +
      +
    • antArgsIncludeRelatedLinks
    • +
    • disableRelatedLinks
    • +
    +

    A call to a named template pullPrologIndexTerms.end-range has been added to + processTopic* templates to handle topic wide index ranges.

    +
    +
    + Legacy PDF +

    The following deprecated XSLT stylesheets have been removed:

    +
      +
    • dita2fo-shell_template.xsl
    • +
    • topic2fo-shell.xsl
    • +
    +
    +
    + ODT +

    Link generation has been simplified by removing deprecated arguments in favor of + args.rellinks. The following deprecated Ant properties have been removed:

    +
      +
    • args.odt.include.rellinks
    • +
    +

    The following XSLT parameters have been added:

    +
      +
    • include.rellinks
    • +
    +

    The following XSLT parameters have been removed:

    +
      +
    • disableRelatedLinks
    • +
    +
    +
    +
    diff --git a/topics/migrating-to-2.0.dita b/topics/migrating-to-2.0.dita new file mode 100644 index 0000000..9296082 --- /dev/null +++ b/topics/migrating-to-2.0.dita @@ -0,0 +1,78 @@ + + + + + + Migrating to release 2.0 + + To 2.0 + + + In DITA-OT 2.0, XSLT templates were converted to XSLT 2.0, variable typing was implemented, and some older + templates were refactored or removed. In addition, the dita command simplifies distribution of + plugins by allowing installation from a URL. + + + + + as + dita command + plug-ins + uninstalling + removing + uninstalling + deinstalling + uninstalling + XSLT + 2.0 + Customization directory + + + + + +
    + This topic provides a summary of changes in DITA-OT 2.0 that may require modifications to custom stylesheets + or plug-ins. For more information on changes in this release, see the + . +
    + +
    + All transformations — variable typing +

    XSLT stylesheets were converted to XSLT 2.0. With that change, variable types were also implemented. Plug-ins + that change template variable values will need to make the following changes:

    +
      +
    • Declare the same types defined in the default templates with as.
    • +
    • Ensure that the generated values conform to the declared type.
    • +
    +
    + +

    For example:

    + <xsl:variable name="urltest"> +<xsl:variable name="urltest" as="xs:boolean"> +
    +
    + All transformations — refactoring +

    Much of the toolkit code was refactored for release 2.0. Customization changes that were based on a specific + template in a previous version of the toolkit might not work because the modified template is no longer used. + If this is the case, the changes will need to be reimplemented based on the new XSLT templates.

    +
    +
    +
    + HTML5 +

    A new transformation type has been added. Customizations that previously modified the + XHTML output to generate valid HTML5 should still work, but basing your customization on the new transformation + type might simplify the customization and reduce the work required to maintain compatibility with future + versions of the toolkit.

    + The transformation was refactored with release 2.2. Before basing your customization + on the changes in release 2.0, consider whether you might want to move to release 2.2 instead. See + . +
    +
    + Plug-in installation and distribution +

    Plug-ins can now be installed or uninstalled from a ZIP archive using the new dita command. + Plug-ins can also be installed from a referenced URL. See + .

    +
    +
    +
    diff --git a/topics/migrating-to-2.1.dita b/topics/migrating-to-2.1.dita new file mode 100644 index 0000000..0e7c326 --- /dev/null +++ b/topics/migrating-to-2.1.dita @@ -0,0 +1,190 @@ + + + + + + Migrating to release 2.1 + + To 2.1 + + + In DITA-OT 2.1, the insertVariable template was deprecated for PDF transformations and + should be replaced with the getVariable template. Various dita.out.map.* + targets have been deprecated in favor of updated dita.map.* equivalents. + + + + ph + keyword + cite + dt + term + indexterm + href + deprecated features + help build target + deprecated features + imagefile + deprecated features + image.list + deprecated features + htmlfile + deprecated features + html.list + deprecated features + copy-subsidiary target + deprecated features + copy-subsidiary-check target + deprecated features + depend.preprocess.copy-subsidiary.pre extension points + deprecated features + PDF, insertVariable template + deprecated features + keydefs variable + deprecated features + KEYREF-FILE + deprecated features + displaytext + deprecated features + keys + deprecated features + target + deprecated features + pull-in-title template + deprecated features + common-processing-phrase-within-link template + deprecated features + dita.out.map.xhtml.toc target + deprecated features + dita.out.map.htmlhelp.* targets + deprecated features + dita.out.map.javahelp.* targets + deprecated features + args.odt.img.embed + + + + +
    + This topic provides a summary of changes in DITA-OT 2.1 that may require modifications to custom stylesheets + or plug-ins. For more information on changes in this release, see the + . +
    + +
    +

    The customFileUtils code used to handle input and output in earlier versions of + DITA-OT has been replaced with the + Apache Commons + IO utilities library.

    +
    + +
    + Deprecated targets +

    The following build targets have been deprecated and will be removed in an upcoming release:

    +
      +
    • The help target that includes a reference to the current DITA-OT version during the build + process.
    • +
    +
    + +
    + Pre-processing +

    The following Ant properties and generated list files have been deprecated:

    +
      +
    • imagefile property and image.list file
    • +
    • htmlfile property and html.list file
    • +
    +

    The following pre-processing targets and extension points have been deprecated:

    +
      +
    • The copy-subsidiary target used to copy subsidiary files
    • +
    • The copy-subsidiary-check target used to check for subsidiary files
    • +
    • The depend.preprocess.copy-subsidiary.pre extension point used to insert an Ant target + before the copy-subsidiary step in the pre-processing stage.
    • +
    +

    A newdita.parser extension point has been added to allow plug-ins to contribute a + custom parser for DITA files. If a custom DITA parser is defined, the pre-processing routines will use it during + the gen-list and debug-filter stages to output DITA XML.

    +
    + +
    + PDF +

    The following template has been deprecated:

    +
      +
    • insertVariable, use getVariable instead
    • +
    +

    Calls to that template will result in warnings in the build log.

    +

    To update your plug-in, make the following changes:

    + <xsl:call-template name="insertVariablegetVariable"> + <xsl:with-param name="theVariableIDid" select="var-id"/> + <xsl:with-param name="theParametersparams"> + params + </xsl:with-param> +</xsl:call-template> +
    + +
    + HTML-based output formats +

    The keydefs variable and the following XSL parameters have been deprecated: +

      +
    • KEYREF-FILE
    • +
    • displaytext
    • +
    • keys
    • +
    • target
    • +
    +

    +

    The following template modes have been deprecated: +

      +
    • pull-in-title
    • +
    • common-processing-phrase-within-link
    • +
    +

    +
    + +
    + XHTML + keydef +

    The dita.out.map.xhtml.toc target has been deprecated and should be replaced with the + updated dita.map.xhtml.toc equivalent.

    +

    Keydef processing has been removed from the XHTML rendering code. Keys are now resolved in one pre-processing + step, whereas in earlier versions of DITA-OT, the XHTML code returned to the keydef.xml + file to look up targets for phrase elements and pull in text when needed.

    +

    This change affects non-linking elements that can’t take href attributes, such as + ph, keyword, cite, + dt, term, and indexterm (when + $INDEXSHOW is active).

    +
    + +
    + HTMLHelp +

    The dita.out.map.htmlhelp.* targets have been deprecated and should be replaced with + the updated dita.map.htmlhelp.* equivalents:

    +
      +
    • dita.out.map.htmlhelp.hhp, use dita.map.htmlhelp.hhp instead
    • +
    • dita.out.map.htmlhelp.hhc, use dita.map.htmlhelp.hhc instead
    • +
    • dita.out.map.htmlhelp.hhk, use dita.map.htmlhelp.hhk instead
    • +
    +
    +
    + JavaHelp + JavaHelp +

    The dita.out.map.javahelp.* targets have been deprecated and should be replaced with + the updated dita.map.javahelp.* equivalents:

    +
      +
    • dita.out.map.javahelp.toc, use dita.map.javahelp.toc instead
    • +
    • dita.out.map.javahelp.map, use dita.map.javahelp.map instead
    • +
    • dita.out.map.javahelp.set, use dita.map.javahelp.set instead
    • +
    • dita.out.map.javahelp.index, use dita.map.javahelp.index instead
    • +
    +
    + +
    + OpenDocument Text +

    Support for the args.odt.img.embed parameter has been removed from OpenDocument Text + transformations. The previous default behavior was to embed images as Base64-encoded text, but editors do not + use this as a default. Instead, office packages such as LibreOffice will convert embedded images into linked + images on opening and saving an ODT file.

    +
    +
    +
    diff --git a/topics/migrating-to-2.2.dita b/topics/migrating-to-2.2.dita new file mode 100644 index 0000000..ea8c71c --- /dev/null +++ b/topics/migrating-to-2.2.dita @@ -0,0 +1,89 @@ + + + + + + Migrating to release 2.2 + + To 2.2 + + + In DITA-OT 2.2, the transformation was refactored as its own plug-in and separate + plug-ins were created for each of the rendering engine-specific PDF transformations. + + + + + toc + preface + frontmatter + bookmap + deprecated features + .notetitle classes + deprecated features + user.input.file + deprecated features + user.input.dir + deprecated features + InputMapDir + RenderX + plug-in + Antenna House + plug-in + Apache FOP + plug-in + table of contents + PDF + + + + + +
    + This topic provides a summary of changes in DITA-OT 2.2 that may require modifications to custom stylesheets + or plug-ins. For more information on changes in this release, see the + . +
    +
    + HTML5 +

    The transformation introduced in release 2.0 as part of the + plug-in has been moved to a separate plug-in. Customizations that extended the previous + HTML5 output under the plug-in will probably need to be refactored on the new HTML5 + plug-in.

    +

    Note title processing has been revised to use a common note__title class for note elements of + all types. The legacy {$type}title classes (such as + .notetitle, .cautiontitle, .tiptitle, etc.) are included + for backwards compatibility, but are deprecated and will be removed in an upcoming release. Stylesheets that + apply formatting overrides to note titles should be revised to replace the deprecated class selectors with the + equivalent descendant selectors, for example .note_note .note__title, .note_caution + .note__title, .note_tip .note__title, etc.

    +
    +
    + PDF +

    Processing specific to Apache FOP, Antenna House Formatter, and RenderX XEP has been separated into separate + plug-ins for each of those rendering engines. Customizations that extended this processing might need to extend + the new org.dita.pdf2.fop, org.dita.pdf2.axf, or + org.dita.pdf2.xep plug-ins.

    +

    PDF customizations that are not specific to a rendering engine can continue to extend the + org.dita.pdf2 plug-in as before.

    +

    The default format for page numbers in the table of contents (toc) was switched to + roman to align with preface and ensure consistent numbering styles for all + frontmatter components in bookmap. This prevents numbering + from switching back and forth between styles in bookmaps where the Preface follows the table of contents. + Earlier versions of DITA-OT produced numbering sequences like 1,2,3,4,v,vi,7,8 in this use + case.

    +
    +
    + Deprecated properties +

    The following Ant properties have been deprecated: +

      +
    • user.input.file, use user.input.file.uri instead to specify the + input file system path
    • +
    • user.input.dir, use user.input.dir.uri instead to specify the + input directory system path
    • +
    • InputMapDir, use InputMapDir.uri instead to specify the input + map directory system path
    • +

    +
    +
    +
    diff --git a/topics/migrating-to-2.3.dita b/topics/migrating-to-2.3.dita new file mode 100644 index 0000000..01a9a5c --- /dev/null +++ b/topics/migrating-to-2.3.dita @@ -0,0 +1,168 @@ + + + + + + Migrating to release 2.3 + + To 2.3 + + + In DITA-OT 2.3, table processing has been refactored to use HTML5 best practices and + improved CSS properties. In PDF output, table heads and key columns no longer include shading, and unused + localization variables have been deprecated. The template for generated error messages has been updated to use a + single id variable that contains the entire message ID. + + + + languages + supported + Chinese + English + Indonesian + Korean + I18N + PDF processing + metadata + chunking, effect of + tables + HTML5 + tables + PDF + + + + +
    + This topic provides a summary of changes in DITA-OT 2.3 that may require modifications to custom stylesheets + or plug-ins. For more information on changes in this release, see the + . +
    +
    + HTML5 +

    The table processing has been refactored to use valid HTML5 markup, HTML5 best + practices, and better CSS properties for styling. + BEM-style CSS classes are + now generated with the name of the containing element, the name of the attribute, and the value of the + attribute.

    +

    Common CSS files are now generated using separate modules for each DITA domain, implemented as + partials to better support extensions with CSS frameworks, custom plug-ins and future + toolkit versions.

    +
    +
    + HTML-based formats + div + div.shortdesc + p + abstract + simpletable + properties + choicetable + deprecated features + tm-area named template +

    The XSLT tm-area named template, which used to toggle rendering of trademark symbols in US + English and Asian languages (Japanese, Korean, and both Chinese) but ignore them in all other languages, has + been deprecated. Trademark symbols are now rendered uniformly for all languages and the template will be removed + in an upcoming release.

    +

    In previous releases, short descriptions in abstract elements were rendered + as division elements (div), rather than paragraphs (p). + Processing has been revised to ensure that short descriptions are consistently rendered as paragraphs, + regardless of whether they appear in abstract elements. Users who have previously + implemented custom CSS rules to style div.shortdesc like paragraphs should be able to remove + these rules.

    +
    +
    + PDF + deprecated features + tm-area named template + deprecated features + PDF localization variables + deprecated features + conreffile + deprecated features + conref-check target + deprecated features + coderef target +

    The antiquewhite background color has been removed from table heads and key column contents in + simpletable and properties tables to synchronize + presentation with choicetable and provide a more uniform customization baseline between + PDF output and HTML-based formats.

    +

    PDF: The I18N Java and XSLT processing code has been merged into single task. This eliminated the + need for a stage3.fo file in the temporary directory; instead, + topic.fo is generated directly from stage2.fo. If custom plug-ins + were implemented to handle stage3.fo, they would need to be updated.

    +

    Localization variables that are no longer used in PDF processing have been deprecated and will be removed in an + upcoming release. PDF customization plug-ins that make use of these variables should plan to refactor + accordingly: +

      +
    • Back button title
    • +
    • Contents button title
    • +
    • Forward button title
    • +
    • Index button title
    • +
    • Index multiple entries separator
    • +
    • Main page button title
    • +
    • Next page button title
    • +
    • Online help prefix
    • +
    • Online Help Search Method And
    • +
    • Online Help Search Method Field
    • +
    • Online Help Search Method Or
    • +
    • Previous page button title
    • +
    • Search button title
    • +
    • Search Case Sensitive Switch
    • +
    • Search Excluded Stop Words Message
    • +
    • Search Highlight Switch
    • +
    • Search index button title
    • +
    • Search index field title
    • +
    • Search index next button title
    • +
    • Search Search Give No Results Message
    • +
    • Search Search in Progress Message
    • +
    • Search Stopped Message
    • +
    • Search text button title
    • +
    • Search text field title
    • +
    • Search title
    • +
    • Search Whole Words Switch
    • +
    • Untitled section
    • +
    +

    + Most of these variables were never used by the PDF process, and most were not supported (or localized) for + any language other than English. +
    +
    + Deprecated properties and targets +

    The following Ant properties have been deprecated: +

      +
    • conreffile
    • +
    +

    +

    The following pre-processing targets have been deprecated: +

      +
    • conref-check
    • +
    • coderef
    • +
    +

    +
    +
    + Pre-processing +

    The order of the chunk and move-meta-entries pre-processing stages + has been switched so that chunk comes first. This ensures that metadata is properly pulled or + pushed into the chunked version of DITA topics.

    +
    +
    + Generating error messages +

    Previously, the XSLT output-message named template for generating error messages combined a + global msgprefix variable and two parameters to determine the actual message ID. This function + has been updated to use a single id variable that contains the entire message ID.

    +

    Plug-ins that make use of the output-message function should be updated to use the single + id variable, as + in:<xsl:call-template name="output-message"> + <xsl:with-param name="id" select="'FULLMESSAGENUMBER'"/> + <xsl:with-param name="msgparams">optional-message-parameters</xsl:with-param> +</xsl:call-template> +

    +

    The msgprefix XSL variable (“DOTX”) has been deprecated and will be removed in an upcoming + release.

    +
    +
    +
    diff --git a/topics/migrating-to-2.4.dita b/topics/migrating-to-2.4.dita new file mode 100644 index 0000000..04d5265 --- /dev/null +++ b/topics/migrating-to-2.4.dita @@ -0,0 +1,116 @@ + + + + + + Migrating to release 2.4 + + To 2.4 + + + In DITA-OT 2.4, the transformation was refactored as an independent plug-in that no + longer depends on the plug-in. + + + + + deprecated features + .notetitle classes + GitHub + + + + + +
    + This topic provides a summary of changes in DITA-OT 2.4 that may require modifications to custom stylesheets + or plug-ins. For more information on changes in this release, see the + . +
    +
    + HTML5 +
      +
    • +
      +

      The transformation introduced in release 2.0 as part of the + plug-in was moved to a separate plug-in in release 2.2, but that version of the + transformation still depended on the plug-in for certain + common processing.

      +

      In release 2.4, all dependencies between and have been + removed to ensure that HTML5 processing can be further refactored in the future without affecting XHTML + output, or other HTML-based transformations such as , + or .

      +
      +

      Customizations that extended the previous HTML5 output under the plug-in (as + provided in releases 2.0 and 2.1) or the plug-in that shipped with release 2.2 will + need to be refactored to build on the new HTML5 plug-in.

    • +
    • +

      Note title processing was revised in release 2.2 to include a common note__title class for + note elements of all types. The legacy {$type}title classes (such as + .notetitle, .cautiontitle, .tiptitle, etc.) were + included in release 2.2 for backwards compatibility, but have now been removed in release 2.4.

      +

      Stylesheets that apply formatting overrides to note titles should be revised to replace the deprecated + class selectors with the equivalent descendant selectors, for example:

      +
        +
      • .note_note .note__title
      • +
      • .note_caution .note__title
      • +
      • .note_tip .note__title
      • +
      +
    • +
    +
    +
    + Legacy plug-ins removed + DocBook + Eclipse Content + OpenDocument Text + RTF + plug-ins + DocBook + plug-ins + Eclipse Content + plug-ins + OpenDocument Text + plug-ins + RTF +

    DITA-OT 2.4 no longer includes the following legacy transformation plug-ins in the default distribution:

    + + Legacy plug-ins + + + + + + Plug-in + Source code location + + + + + DocBook + + + + + Eclipse Content + + + + + OpenDocument Text + + + + + Word RTF + + + + + +
    + +
    + +
    +
    diff --git a/topics/migrating-to-2.5.dita b/topics/migrating-to-2.5.dita new file mode 100644 index 0000000..ef20b6c --- /dev/null +++ b/topics/migrating-to-2.5.dita @@ -0,0 +1,103 @@ + + + + + + Migrating to release 2.5 + + To 2.5 + + + In DITA-OT 2.5, several frequently-overridden legacy style settings were removed from the default PDF + plug-in. A separate plug-in can be used to restore the original settings. + + + + example + PDF + org.dita.pdf2.legacy + languages + right-to-left + + + + +
    + This topic provides a summary of changes in DITA-OT 2.5 that may require modifications to custom stylesheets + or plug-ins. For more information on changes in this release, see the + . +
    +
    + Deprecated logging parameters +

    The args.debug and args.logdir properties have been deprecated and will be + removed in an upcoming version of DITA-OT.

    +
      +
    • +

      To enable debug logging, use dita + --debug.

      + Debug logging requires additional resources and can slow down the build process, so it + should only be enabled when further details are required to diagnose problems. +
    • +
    • +

      To write the log to a file, use dita + --logfile=file or ant + -l + file and specify the path to the log file.

      +

      Unless an absolute path is specified, the value will be interpreted relative to the current + directory.

    • +
    +
    +
    + Default PDF style improvements + tables + indentation +

    Several legacy styles have been modified or removed in the default PDF plug-in org.dita.pdf2, + including the following:

    +

    +

      +
    • In task topics with only a single step, the step is now rendered as a simple block (rather than as a list + item without a label).
    • +
    • Table containers now inherit the initial indentation (start-indent) from the parent + elements.
    • +
    • Borders and indentation have been removed from example elements.
    • +
    • Links are no longer italicized.
    • +
    • Titles for related link lists have been standardized to use the common.title attribute + set (which applies the sans-serif font-family) and bold font weight.
    • +
    • Several remaining occurrences of left/right borders, margins, padding, and text alignment now use the + corresponding start/end equivalents to better support right-to-left languages.
    • +
    +

    +
    + External plug-in for legacy PDF styling +

    If you have a custom PDF plug-in that explicitly depends on the previous default settings for the + aforementioned styles, the org.dita.pdf2.legacy plug-in can be used to restore the pre–2.5 + styles.

    + + + + + + + Plug-in + Source code location + + + + + org.dita.pdf2.legacy + + + + + +
    +

    To install the legacy PDF plug-in, run the following command:

    + dita --install=https://github.com/dita-ot/org.dita.pdf2.legacy/archive/2.5.zip + Only install the legacy PDF plug-in if you have a custom PDF plug-in that requires the + pre–2.5 styles. If your plug-in was designed for DITA-OT 2.4 and does not override these settings, there is no + need to install the legacy PDF plug-in. +
    + +
    +
    diff --git a/topics/migrating-to-3.0.dita b/topics/migrating-to-3.0.dita new file mode 100644 index 0000000..a9d10e3 --- /dev/null +++ b/topics/migrating-to-3.0.dita @@ -0,0 +1,89 @@ + + + + + + Migrating to release 3.0 + + To 3.0 + + + DITA-OT 3.0 adds support for Markdown, normalized DITA output, and the alternative + authoring formats proposed for Lightweight DITA. The map-first pre-processing approach provides a modern + alternative to the default preprocess operation. + + + + + Lightweight DITA + GitHub + + + + + +
    + This topic provides a summary of changes in DITA-OT 3.0 that may require modifications to custom stylesheets + or plug-ins. For more information on changes in this release, see the + . +
    + +
    + +
    + Legacy plug-ins removed + JavaHelp + deprecated features + JavaHelp plug-in + plug-ins + JavaHelp +

    DITA-OT 3.0 no longer includes the following legacy transformation plug-ins in the default distribution:

    + + Legacy plug-ins + + + + + + Plug-in + Source code location + + + + + JavaHelp + JavaHelp + + + + + +
    + +

    To re-install the JavaHelp plug-in, run the following command:

    + dita --install=https://github.com/dita-ot/org.dita.javahelp/archive/2.5.zip +
    + +
    + Map-first pre-processing +

    +

    + See + for information on how to use (or test) map-first pre-processing, or revert to + the legacy preprocess target. +

    + +
    + New <codeph>ant.import</codeph> extension point +

    A new extension point has been added to make it easier to add new targets to the Ant processing pipeline.

    +

    Earlier versions of DITA-OT use the dita.conductor.target.relative to call a wrapper file with + a dummy task that imports the Ant project file. This approach is still supported for backwards compatibility, + but the simpler ant.import approach should be used for all new customizations.

    + See + for details. +
    + + diff --git a/topics/migrating-to-3.1.dita b/topics/migrating-to-3.1.dita new file mode 100644 index 0000000..b643c70 --- /dev/null +++ b/topics/migrating-to-3.1.dita @@ -0,0 +1,101 @@ + + + + + + Migrating to release 3.1 + + To 3.1 + + + DITA-OT 3.1 includes support for DITA 1.3 SVG domain elements, enhanced + codeblock processing, and incremental improvements to Lightweight DITA processing and + PDF output. + + + + codeblock + param + if:set + unless:set + if + outputclass + deprecated features + dost.class.path property + deprecated features + xml.catalog.files property + deprecated features + dost.class.path + Lightweight DITA + XSLT + Ant + DITA 1.3 + SVG domain + SVG + catalog + xml.catalog.files + xml.catalog.path + + + + +
    + This topic provides a summary of changes in DITA-OT 3.1 that may require modifications to custom stylesheets + or plug-ins. For more information on changes in this release, see the + . +
    + +
    + Custom if/unless attributes in Ant scripts +

    Ant scripts for DITA-OT builds now make use of if:set and unless:set + attributes in the Ant namespace, which can be used to control whether parameters are passed to XSLT modules. + These attributes replace custom implementations of if and unless logic + introduced before Ant had this capability.

    +

    If your plug-ins include Ant scripts that use if or unless on + param elements that pass XSLT parameters, add the following namespace attributes to + the root project: +

      +
    • xmlns:if="ant:if"
    • +
    • xmlns:unless="ant:unless"
    • +

    +

    In custom Ant build files and in any files that supply parameters to existing DITA-OT XSLT modules, replace all + occurrences of if="property" on param elements with + if:set="property" (and unlessunless:set + respectively).

    +

    <root xmlns:if="ant:if" xmlns:unless="ant:unless"> + <param name="antProperty" expression="${antProperty}" + if:set="antProperty"/> +</root>

    +

    For more information on passing parameters to existing XSLT steps, see + .

    +
    + +
    + Deprecated properties + + +

    As of DITA-OT 3.1, the Java class path is managed automatically, meaning you do not (and should not) use + explicit references to Java class paths in your build scripts. In particular, the old + dost.class.path property has been deprecated and should not be used. If you are migrating + older plug-ins that manage their class path directly, you should remove any explicit class path configuration. + If your plug-in was not already using the dita.conductor.lib.import extension point to + integrate its JAR dependencies you must add it.

    +

    The effective DITA-OT class path is the combination of the JAR files in the main lib/ + directory and the plug-in-contributed JARs, which are listed in config/env.sh. The + env.sh file is updated automatically when plug-ins are installed or removed.

    +
    +

    The xml.catalog.files property has been deprecated and should not be used. Replace any such + references with the xml.catalog.path instead.

    +
    + +
    + PDF – Enabling line numbers in codeblocks +

    The codeblock.generate-line-number template mode default has been changed to check for the + show-line-numbers keyword in the outputclass attribute. Earlier versions of + DITA-OT required custom PDF plug-ins to override the template mode to return true().

    +
    + +
    +
    diff --git a/topics/migrating-to-3.2.dita b/topics/migrating-to-3.2.dita new file mode 100644 index 0000000..3a96c0e --- /dev/null +++ b/topics/migrating-to-3.2.dita @@ -0,0 +1,62 @@ + + + + + + Migrating to release 3.2 + + To 3.2 + + + DITA-OT 3.2 includes new command-line options, support for RELAX NG parsing and + validation, preliminary processing for the XDITA authoring format proposed for Lightweight DITA, and a plug-in + registry that makes it easier to discover and install new plug-ins. + + + + + deprecated features + configuration-jar Ant target + Lightweight DITA + command line + RELAX NG parsing + security + TLS + registry + targets + deprecated + classpath + configuration-jar + + + + + +
    + This topic provides a summary of changes in DITA-OT 3.2 that may require modifications to custom stylesheets + or plug-ins. For more information on changes in this release, see the + . +
    + +
    + Deprecated targets +

    The configuration-jar Ant target used during the plug-in integration process has been + deprecated and may be removed in an upcoming release. This was previously used to package additional + configuration files and properties into lib/dost-configuration.jar, but recent versions of + DITA-OT include the config directory in the classpath for this purpose, so the + configuration JAR is no longer necessary.

    +
    + +
    + Secure connections to the plug-in registry + To ensure data integrity during the plug-in installation process, Transport Layer Security + (TLS) will soon be required to access the plug-in registry. If you are using DITA-OT 3.2 or 3.2.1 and are unable + to upgrade to the latest version, modify the registry key in the + config/configuration.properties file to switch the URI schema to + https://, so the entry reads https://plugins.dita-ot.org/. +

    For more information, see + .

    +
    + +
    +
    diff --git a/topics/migrating-to-3.3.dita b/topics/migrating-to-3.3.dita new file mode 100644 index 0000000..7880fdd --- /dev/null +++ b/topics/migrating-to-3.3.dita @@ -0,0 +1,121 @@ + + + + + + Migrating to release 3.3 + + To 3.3 + + + DITA-OT 3.3 includes new attribute sets for HTML5 customization, support for custom + integration processing, rotated table cells in PDF output, and hazard statements in HTML output. + + + + security + TLS + registry + tables + PDF + + + + +
    + This topic provides a summary of changes in DITA-OT 3.3 that may require modifications to custom stylesheets + or plug-ins. For more information on changes in this release, see the + . +
    + +
    + Secure connections to the plug-in registry + To ensure data integrity during the plug-in installation process, Transport Layer Security + (TLS) will soon be required to access the plug-in registry. If you are using DITA-OT 3.3, 3.2, or 3.2.1 and are + unable to upgrade to the latest version, modify the registry key in the + config/configuration.properties file to switch the URI schema to + https://, so the entry reads https://plugins.dita-ot.org/. +

    For more information, see + .

    +
    + +
    + Base plug-in files moved to <filepath>plugins</filepath> directory + xsl:include + xsl:import +

    Various XSLT files and other resources have been moved from the root of the DITA-OT installation directory to + the base plug-in directory plugins/org.dita.base.

    + There is no longer an xsl/ directory in the installation root. +

    If your plug-ins use the plugin URI scheme as recommended in the + , this change should not require any modifications to custom plug-in + code:

    + +

    In XSLT, use the plugin URI scheme in xsl:import and + xsl:include to reference files in other plug-ins.

    +

    Instead of:

    +

    <xsl:import href="../../org.dita.base/xsl/common/output-message.xsl"/>

    +

    use:

    +

    <xsl:import href="plugin:org.dita.base:xsl/common/output-message.xsl"/>

    +

    As with the plug-in directory property in Ant, this allows plug-ins to resolve to the correct directory even + when a plug-in moves to a new location. The plug-in is referenced using the syntax + plugin:plugin-id:path/within/plugin/file.xsl.

    +
    +
    + +
    + Relocated catalog + nextCatalog + catalog + location +

    + Along with the other base plug-in files, the catalog-dita.xml file has + been moved from the root of the DITA-OT installation directory to plugins/org.dita.base. + External systems that rely on this catalog should be updated with the new location. Ant scripts and DITA-OT + plug-ins should use the plug-in directory property to refer to the file as + ${dita.plugin.org.dita.base.dir}/catalog-dita.xml. A placeholder with a + nextCatalog entry is provided in the original location for backwards compatibility, + but this file may be removed in an upcoming release.

    + + Legacy catalog placeholder content + <nextCatalog catalog="plugins/org.dita.base/catalog-dita.xml"/> + +
    + +
    + Deprecated properties + template + deprecated features + plugin.xml, templates key +

    The templates key in configuration properties has been deprecated in favor + of the template element in plugin.xml.

    +
    + +
    + New attribute sets for HTML5 customization + Bootstrap + CSS + HTML5 + HTML5 + CSS +

    A series of new attribute sets has been added to the default HTML5 transformation to + facilitate customization with additional ARIA roles, attributes, or CSS classes. Attribute sets are provided + for: +

      +
    • article
    • +
    • banner
    • +
    • footer
    • +
    • main
    • +
    • navigation
    • +
    • toc
    • +
    If you have previously copied XSL templates (or template modes) to custom plug-ins only to add classes + required by web frameworks such as Bootstrap or Foundation (or your company CSS), you may be able to simplify + your customizations by using the new attribute sets instead of overriding the default templates.

    +
    +
    +
    diff --git a/topics/migrating-to-3.4.dita b/topics/migrating-to-3.4.dita new file mode 100644 index 0000000..eb996c4 --- /dev/null +++ b/topics/migrating-to-3.4.dita @@ -0,0 +1,98 @@ + + + + + + Migrating to release 3.4 + + To 3.4 + + + DITA-OT 3.4 includes an official Docker container image, a separate plug-in for PDF + indexing, a new option to skip HTML5 cover pages, and initial support for project files that allow you to define + multiple deliverables in advance, and publish them all at once. + + +
    + This topic provides a summary of changes in DITA-OT 3.4 that may require modifications to custom stylesheets + or plug-ins. For more information on changes in this release, see the + . +
    + +
    + New indexing plug-in + +

    DITA-OT 3.4 extracts the PDF indexing code to a separate org.dita.index plug-in, and + adds a new depend.org.dita.pdf2.index extension point that can be used to add custom index + processing targets to PDF output.

    +

    The built-in index processing has been disabled and deprecated. If you have overridden index processing via + the transform.topic2fo target in the past, you can set the new + org.dita.index.skip property to and re-enable the + transform.topic2fo.index target with feature + extension="depend.org.dita.pdf2.index" value="transform.topic2fo.index"/ in your plug-in + configuration.

    +
    + + New plug-ins + + + + + + Plug-in + Source code location + + + + + org.dita.index + + + + + +
    +
    + +
    + Legacy plug-ins removed + TocJS + deprecated features + TocJS plug-in + plug-ins + TocJS +

    DITA-OT 3.4 no longer includes the following legacy transformation plug-ins in the default distribution:

    + + Legacy plug-ins + + + + + + Plug-in + Source code location + + + + + TocJS + + + + + troff + + + + + +
    + +

    To re-install the plug-in(s) from the plug-in registry at + , run the following command(s):

    + dita --install=com.sophos.tocjs +dita --install=org.dita.troff +
    +
    +
    diff --git a/topics/migrating-to-3.5.dita b/topics/migrating-to-3.5.dita new file mode 100644 index 0000000..2e8b133 --- /dev/null +++ b/topics/migrating-to-3.5.dita @@ -0,0 +1,156 @@ + + + + + + Migrating to release 3.5 + + To 3.5 + + + DITA-OT 3.5 includes support for additional input resources, an alternative subcommand + syntax for the dita command, and an initial preview of features for the latest draft of the + upcoming DITA 2.0 standard. + + +
    + This topic provides a summary of changes in DITA-OT 3.5 that may require modifications to custom stylesheets + or plug-ins. For more information on changes in this release, see the + . +
    + +
    + New subcommands +

    The dita command line interface has been refactored to support subcommands for common + operations.

    + The new subcommands supersede the deprecated X-Toolkit–style single-hyphen keyword variants + (such as -install), and the corresponding GNU-style option keywords preceded by two hyphens + (such as --install). +
    + +
    +
    + +
    + The double-hyphen option syntax has been retained for backwards compatibility, so if you use + commands like dita + --install in scripts, they will still work, but you may want to migrate your scripts to the + new subcommand syntax. +
    +
    + Legacy constructs removed +

    DITA-OT 3.5 no longer includes the following legacy properties, list files, and targets, which were deprecated + in previous releases. These constructs were no longer used in recent releases, and have now been removed + entirely.

    +

    The following Ant targets have been removed from the pre-processing pipeline:

    +
      +
    • mappull and mappull-check, which were used to pull metadata (such as + navtitle) into the map from referenced topics prior to DITA-OT 2.2 (merged with + move-meta-entries)
    • +
    • conref-check, deprecated since 2.3
    • +
    • coderef, which was used to resolve code references in input files prior to 2.3 (merged with + topic-fragment)
    • +
    • copy-subsidiary and copy-subsidiary-check, which were used to copy files + to the temporary directory prior to 2.1
    • +
    +

    Recent DITA-OT versions provide alternative mechanisms to achieve the same results, such as the + ditafileset element to select resources in the temporary directory.

    +

    Along with the obsolete targets, the following Ant properties have been removed:

    +
      +
    • canditopicsfile
    • +
    • canditopicslist
    • +
    • conreffile
    • +
    • conreflist
    • +
    • conreftargetsfile
    • +
    • conreftargetslist
    • +
    • copytosourcefile
    • +
    • copytosourcelist
    • +
    • fullditamapandtopicfile
    • +
    • fullditamapandtopiclist
    • +
    • fullditamapfile
    • +
    • fullditamaplist
    • +
    • fullditatopicfile
    • +
    • fullditatopiclist
    • +
    • hrefditatopicfile
    • +
    • hrefditatopiclist
    • +
    • hreftargetsfile
    • +
    • hreftargetslist
    • +
    • htmlfile
    • +
    • htmllist
    • +
    • imagefile
    • +
    • imagelist
    • +
    • outditafilesfile
    • +
    • outditafileslist
    • +
    • resourceonlyfile
    • +
    • resourceonlylist
    • +
    • subjectschemefile
    • +
    • subjectschemelist
    • +
    • subtargetsfile
    • +
    • subtargetslist
    • +
    • user.input.file.listfile
    • +
    • user.input.file
    • +
    +

    The following obsolete list files are no longer generated in the temporary directory:

    +
      +
    • canditopics.list
    • +
    • conref.list
    • +
    • conreftargets.list
    • +
    • copytosource.list
    • +
    • fullditamap.list
    • +
    • fullditamapandtopic.list
    • +
    • fullditatopic.list
    • +
    • hrefditatopic.list
    • +
    • hreftargets.list
    • +
    • html.list
    • +
    • image.list
    • +
    • outditafiles.list
    • +
    • resourceonly.list
    • +
    • subjectscheme.list
    • +
    • subtargets.list
    • +
    • user.input.file.list
    • +
    • usr.input.file.list
    • +
    +

    For example, if your plug-in previously used the fullditatopicfile to select resources in the + temporary directory like this:

    + <xslt basedir="${dita.temp.dir}" + destdir="${output.dir}" + includesfile="${dita.temp.dir}${file.separator}${fullditatopicfile}" + style="${args.xsl}"> + [...] +</xslt> +

    With DITA-OT 2.4 or newer, use the ditafileset element instead:

    + <xslt basedir="${dita.temp.dir}" + destdir="${output.dir}" + style="${args.xsl}"> + <ditafileset format="dita" processingRole="normal"/> + [...] +</xslt> +

    If your plug-in previously used the user.input.file.listfile to process the start map like + this:

    + <xslt [...] + includesfile="${dita.temp.dir}${file.separator}${user.input.file.listfile}"/> +

    Use the ditafileset element as follows:

    + <xslt [...] > + <ditafileset input="true" format="ditamap"/> +</xslt> +
    +
    + Adjusting output file names +

    Two new parameters can be used to dynamically adjust the names and locations of output files in transformations + that use the map-first pre-processing routine (preprocess2).

    +

    These parameters can be passed on the command line, or included in a custom plug-in via + property elements in an Ant script as described in + . +

      +
    • Use result.rewrite-rule.class to rewrite filenames with a Java class that implements + the org.dita.dost.module.RewriteRule interface
    • +
    • Use result.rewrite-rule.xsl to rewrite via an XSLT stylesheet
    • +
    +

    +
    +
    +
    diff --git a/topics/migrating-to-3.6.dita b/topics/migrating-to-3.6.dita new file mode 100644 index 0000000..f585c20 --- /dev/null +++ b/topics/migrating-to-3.6.dita @@ -0,0 +1,110 @@ + + + + + + Migrating to release 3.6 + + To 3.6 + + + DITA-OT 3.6 includes performance enhancements such as processing in parallel and in + memory, support for PDF changebars with Apache FOP, and an updated preview + of features for the latest draft of the upcoming DITA 2.0 standard, including the audio + and video elements, and the new emphasis domain. + + +
    + This topic provides a summary of changes in DITA-OT 3.6 that may require modifications to custom stylesheets + or plug-ins. For more information on changes in this release, see the + . +
    + +
    + Parallel processing + parallel processing +

    Pre-processing module code can now be run in parallel by setting the parallel parameter to + . The performance benefits this option provides depend heavily on the source file set, + the DITA features used in the project, and the computer doing the processing, but under the right circumstances, + you may see notable improvements when this option is enabled.

    +
    + +
    + In-memory processing + in-memory processing +

    DITA-OT 3.6 introduces a new Store API with preview support for in-memory processing. The Cache Store can be + activated by setting the store-type parameter to . + In-memory processing provides performance advantages in I/O bound environments such as cloud + computing platforms, where processing time depends primarily on how long it takes to read and write temporary + files. For more information, see + .

    +
    + +
    + Caching DITA class instances +

    The DITA-OT Java code uses a new caching DitaClass.getInstance(cls) factory method rather than + generating DitaClass instances directly. This allows previously created instances to be + re-used, which reduces the number of instances that need to be created.

    + Custom plug-ins that use the DitaClass constructor in Java code should be + updated to use the getInstance factory method instead. +
    + +
    + PDF changebars with <tm trademark="Apache" tmtype="tm">Apache</tm> FOP + Apache FOP + change bars + PDF + change bars +

    For DITA-OT 3.4, the bundled Apache™ Formatting Objects Processor library was upgraded to version 2.4, which + included support for changebars, but those features were not yet enabled in DITA-OT 3.4 pending further testing. + DITA-OT 3.6 removes the FOP-specific overrides that disabled changebars in earlier versions, allowing the + default PDF2 flagging routines to be applied when generating PDFs with FOP. For details, see + .

    +

    Plug-ins that implemented custom FOP flagging by overriding the + org.dita.pdf2.fop/xsl/fo/flagging_fop.xsl stylesheet in prior versions will need to be + updated, as this file is no longer available in DITA-OT 3.6. + #3511, + #3591 +

    +
    + +
    + Dublin Core metadata removed from HTML5 + Dublin Core metadata +

    Up to version 3.5, DITA-OT included the + in both XHTML and HTML5 output. DITA-OT 3.6 no longer generates Dublin Core + metadata in HTML5 output.

    + If necessary, the + plug-in can be installed from the plug-in registry at + to add Dublin Core metadata to HTML5. +

    To install the plug-in, run the following command:

    + dita install org.dita.html5.dublin-core +
    + +
    + Legacy style attributes moved to CSS + line-through styles + overline styles +

    Remaining inline style attributes were removed from HTML5 code, which prevented custom plug-ins from overriding + the presentation of the corresponding elements, including: +

      +
    • line-through and + overline elements
    • +
    • syntax diagrams
    • +
    • long quote citations
    • +
    • Boolean states
    • +

    +

    These changes move the default presentation rules to CSS to allow users to override these styles in custom + stylesheets. The output is visually equivalent to the results generated by previous toolkit versions.

    + In publishing environments that do not use the default common CSS files, these styles may + need to be implemented in custom stylesheets. +
    + +
    + XSL variable <codeph>msgprefix</codeph> removed +

    The msgprefix variable (“DOTX”) has been deprecated since DITA-OT 2.3 and is now removed from + DITA-OT 3.6. For more information, see + .

    +
    +
    +
    diff --git a/topics/migrating-to-3.7.dita b/topics/migrating-to-3.7.dita new file mode 100644 index 0000000..a15df11 --- /dev/null +++ b/topics/migrating-to-3.7.dita @@ -0,0 +1,129 @@ + + + + + + Migrating to release 3.7 + + To 3.7 + + + DITA-OT 3.7 includes + stable IDs in re-used content, a common variable format for generated text strings, and an updated + preview of features for the latest draft of the upcoming DITA 2.0 standard, such as the new “combine” chunk + action, the titlealt element, and the alternative titles domain. + + + +
    + This topic provides a summary of changes in DITA-OT 3.7 that may require modifications to custom stylesheets + or plug-ins. For more information on changes in this release, see the + . +
    + +
    + + <p/> + </section> + + <section id="css-precedence"> + <title>CSS precedence +

    The order of elements in the head element of the HTML template + files was changed to facilitate overrides. The common CSS stylesheets and any custom CSS files specified + via args.css now come after the contents of the custom header file specified + via args.hdf. This change better supports use cases in which the custom header file + is used to insert references to external CSS stylesheets for frameworks like + Bootstrap. In previous versions of DITA-OT, framework styles took precedence + over any equivalent rules in the user’s custom stylesheet. This change allows rules in custom CSS files + specified via args.css to override any of the framework styles as necessary. +

    +
    + +
    + Deprecated legacy <codeph>gen-user</codeph> templates +

    The legacy gen-user templates that were originally used to add content to + the head element have been deprecated and will be removed in a future release. + For each of these templates, parameter-based customizations are available that can be used to specify + files that contain content that extends the default processing. + #3835 +

      +
    • gen-user-head → use args.hdf instead
    • +
    • gen-user-header → use args.hdr
    • +
    • gen-user-footer → use args.ftr
    • +
    • gen-user-scripts → use args.hdf
    • +
    • gen-user-styles → use args.css
    • +
    +

    +
    + + + +
    + ToC navigation role +

    Table of contents navigation in HTML5 output used a nav element with + the ARIA role attribute set to toc. Certain accessibility tools flagged + this as an error. The invalid role has been replaced with the navigation landmark role. A + new toc class allows custom CSS styles to target the ToC navigation. CSS rules that use the + nav[role='toc'] selector can be simplified to nav.toc. +

    +
    + +
    + Common attributes mode +

    A commonattributes mode was added to the HTML5, PDF, and XHTML plug-ins to allow + for easier extension. This is a backwards compatible change, however, existing plug-ins should be changed to + use the new commonattributes mode. + + Named template prior to version 3.7 + <xsl:template name="commonattributes"> + <!-- whole copy of commonattributes named template with customizations --> +</xsl:template> + + + Template mode as of version 3.7 + <xsl:template match="@* | node()" mode="commonattributes"> + <xsl:param name="default-output-class" as="xs:string*"/> + <xsl:next-match> + <xsl:with-param name="default-output-class" select="$default-output-class"/> + </xsl:next-match> + <!-- customizations --> +</xsl:template> +

    +
    + +
    + XSL modes +

    The HTML5 stylesheets were updated to use XSL modes instead of named templates.

    +

    This is a backwards compatible change, however, existing plug-ins should be changed to use modes instead of + named templates for: +

      +
    • copyright
    • +
    • gen-endnotes
    • +
    • generateDefaultMeta
    • +
    • generateCssLinks
    • +
    • generateChapterTitle
    • +
    • processHDF
    • +
    • generateBreadcrumbs
    • +
    • processHDR
    • +
    • processFTR
    • +
    • generateCharset
    • +
    +

    +
    + +
    +
    diff --git a/topics/migrating-to-4.0.dita b/topics/migrating-to-4.0.dita new file mode 100644 index 0000000..7700adb --- /dev/null +++ b/topics/migrating-to-4.0.dita @@ -0,0 +1,70 @@ + + + + + + Migrating to release 4.0 + + To 4.0 + + + DITA-OT 4.0 requires Java 17 and includes + a new plug-in for easier PDF customization, project file improvements, + updates to LwDITA processing, and support for the split chunking feature in the latest draft of the upcoming + DITA 2.0 standard. + + + +
    + This topic provides a summary of changes in DITA-OT 4.0 that may require modifications to custom stylesheets + or plug-ins. For more information on changes in this release, see the + . +
    + +
    + DITA-OT now requires Java 17 +

    +

    +

    + +
    + Deprecated attribute set reflection in PDF2 +

    + The legacy attribute set reflection in PDF2 has been replaced with code that generates new + attribute sets directly. This change is backwards-compatible as the old attribute set reflection code has + been retained, but PDF2 now uses the new attribute set generation mechanism everywhere reflection was used. + Custom plug-ins that still use reflection should be updated to the new approach, as the legacy code may be + removed in a future version. + #3827, + #3829 + +

    +
    + +
    + Code references now default to UTF-8 encoding +

    The default character set for code references has been changed from the system default encoding to UTF-8.

    +

    This allows a wider range of characters to be used without needing to specify the format + attribute on the coderef element as described in + character set definition or change the default + encoding in the + configuration.properties file. + #4046 + If you have code references that require a different encoding, use either of these mechanisms to specify + the character set explicitly. +

    +
    + +
    + Deprecated <codeph>place-tbl-lbl</codeph> template in HTML5 +

    + The place-tbl-lbl template that was originally used to define table + titles in XHTML has been deprecated in HTML5 processing and will be removed in a future release. This template + was carried over from XHTML code (which still has a copy that is used), but the copy in HTML5 is not called. + #3435, + #4056 + +

    +
    +
    +
    diff --git a/topics/migrating-to-4.1.dita b/topics/migrating-to-4.1.dita new file mode 100644 index 0000000..a1092de --- /dev/null +++ b/topics/migrating-to-4.1.dita @@ -0,0 +1,32 @@ + + + + + + Migrating to release 4.1 + + To 4.1 + + + DITA-OT 4.1 includes a new version of the Lightweight DITA plug-in with significant + enhancements to Markdown processing, and updates for the latest DITA 2.0 draft standard. + + +
    + This topic provides a summary of changes in DITA-OT 4.1 that may require modifications to custom stylesheets + or plug-ins. For more information on changes in this release, see the + . +
    + +
    + Legacy <xmlelement>tt</xmlelement> style attributes moved to CSS + tt styles +

    The HTML5 plug-in has been updated to remove the remaining inline style attributes that prevented custom + plug-ins from overriding the monospace font presentation of teletype tt elements.

    +

    These changes move the default teletype styling to CSS to allow users to override the presentation in custom + stylesheets. The output is visually equivalent to the results generated by previous toolkit versions.

    + In publishing environments that do not use the default CSS files, these styles may need to + be implemented in custom stylesheets. +
    +
    +
    diff --git a/topics/migrating-to-4.2.dita b/topics/migrating-to-4.2.dita new file mode 100644 index 0000000..75fbf7e --- /dev/null +++ b/topics/migrating-to-4.2.dita @@ -0,0 +1,95 @@ + + + + + + Migrating to release 4.2 + + To 4.2 + + + DITA-OT 4.2 uses map-first pre-processing for HTML5 output and includes a new local + configuration file, better CLI messages with support for overrides, a new version of the Lightweight DITA plug-in + with enhancements to Markdown processing, and updates for the latest DITA 2.0 draft standard. + + + + + filters + map-first pre-processing + map-first pre-processing + pre-processing + map first + pipelines + map first + + + + + +
    + This topic provides a summary of changes in DITA-OT 4.2 that may require modifications to custom stylesheets + or plug-ins. For more information on changes in this release, see the + . +
    + +
    + Common CSS changes + note__body class + cellrowborder class + row-nocellborder class + cell-norowborder class + nocellnorowborder class + firstcol class +

    DITA-OT 4.2 includes several changes to the cascading style sheets generated by the HTML5 plug-in.

    +
      +
    • HTML5 processing for note elements now wraps the note body in a + div element with the note__body class, allowing it to be styled + separately from the note title. For backwards compatibility, the common CSS files have been updated to display + the note body inline with the note title to avoid a new line break before the content division element. + #3955 +
    • +
    • The DITA standard defines a compact attribute for list elements. Previously, this + attribute was published to XHTML and HTML5 as an HTML compact attribute. However, the + compact attribute was deprecated in HTML4 (over 20 years ago). Now, DITA + compact attributes are published to XHTML and HTML5 as class="compact" + keywords. New rules with the class selectors have been added to the default CSS files. Rules with the legacy + compact list attributes have been marked as deprecated with Sass warn + rules and will be removed from a future version of DITA-OT. Any custom CSS rules referencing the + compact attribute should be updated. + #4298, + #4303, + #4358 +
    • +
    • Legacy table presentation classes that were deprecated in DITA-OT 2.3 have now been removed from + the common CSS files. + #4364 +
        +
      • cellrowborder
      • +
      • row-nocellborder
      • +
      • cell-norowborder
      • +
      • nocellnorowborder
      • +
      • firstcol
      • +
      +
    • +
    + In publishing environments that do not use the default CSS files — or those that include + HTML generated by older versions of DITA-OT — these styles may need to be implemented in custom + stylesheets. +
    + +
    + +
    + Map-first pre-processing +

    +

    + See + for information on how to use (or test) map-first pre-processing, or revert to + the legacy preprocess target. +

    + + + diff --git a/topics/migration.dita b/topics/migration.dita new file mode 100644 index 0000000..0710a00 --- /dev/null +++ b/topics/migration.dita @@ -0,0 +1,33 @@ + + + + + Migrating customizations + If you have XSL transformation overrides, plug-ins or other customizations written prior to DITA-OT + , you may need to make changes to ensure your overrides work properly with the latest + toolkit versions. + + + + upgrading + plug-ins + upgrading + migrating + installing + migrating + plug-ins + upgrading + installing + + + + +
    +

    In some cases, you may be able to remove old code that is no longer needed. In other cases, you may need to + refactor your code to point to the modified extension points, templates or modes in recent toolkit versions.

    +

    + +

    +

    +
    +
    diff --git a/topics/migration.ditamap b/topics/migration.ditamap new file mode 100644 index 0000000..13a076f --- /dev/null +++ b/topics/migration.ditamap @@ -0,0 +1,31 @@ + + + + + Migrating customizations + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/topics/other-errors.dita b/topics/other-errors.dita new file mode 100644 index 0000000..8f7fb37 --- /dev/null +++ b/topics/other-errors.dita @@ -0,0 +1,62 @@ + + + + + Other error messages + In addition to error messages that DITA Open Toolkit generates, you might also encounter error messages + generated by Java or other tools. + + + + logging + Java + logging + Java + out of memory + Java + UnsupportedClassVersionError + Java + tools.jar + tools.jar + XSLT + errors + pre-processing + XSLT + debugging + generate-debug-attributes + memory + + + + +
    + Out of Memory error +

    In some cases, you might receive a message stating the build has failed due to an Out of Memory + error. Try the following approaches to resolve the problem:

    +
      +
    1. Increase the memory available to Java.
    2. +
    3. Reduce memory consumption by setting the option to + false. This option is set in the lib/configuration.properties file. + This will disable debug attribute generation (used to trace DITA-OT error messages back to source files) and + will reduce memory consumption.
    4. +
    5. Set dita.preprocess.reloadstylesheet Ant property to true. This will allow + the XSLT processor to release memory when converting multiple files.
    6. +
    7. Run the transformation again.
    8. +
    +
    +
    + UnsupportedClassVersionError +

    If you receive a java.lang.UnsupportedClassVersionError error message with an + Unsupported major.minor version and a list of Java classes, make sure your system meets the + minimum Java requirements as listed in the Release Notes and installation instructions.

    +
    +
    + Unable to locate tools.jar +

    If a Java Runtime Environment (JRE) is used when building output via Ant, the Unable to locate + tools.jar error may appear. This message is safe to ignore, since DITA-OT does not rely on any of the + functions in this library. If a Java Development Kit (JDK) is also installed, setting the + JAVA_HOME environment variable to the location of the JDK will prevent this message from + appearing.

    +
    +
    +
    diff --git a/topics/output-formats.dita b/topics/output-formats.dita new file mode 100644 index 0000000..2360b0c --- /dev/null +++ b/topics/output-formats.dita @@ -0,0 +1,27 @@ + + + + + DITA-OT transformations (output formats) + + Output formats + + DITA Open Toolkit ships with several core transformations that convert DITA content to different output + formats. Additional formats are available from the plug-in registry at + . + + + + output formats + transformations + DITA specification + plug-ins + default, list of + + + + + For information on how to install other formats, see + . + + diff --git a/topics/overriding-strings.dita b/topics/overriding-strings.dita new file mode 100644 index 0000000..f438129 --- /dev/null +++ b/topics/overriding-strings.dita @@ -0,0 +1,95 @@ + + + + + Overriding strings + Override the default strings in the toolkit when you want to replace an existing string with one of your + own; for example, it could be used to reset the English string “Figure” to + “Fig.” + + + + generated text, overriding + gentext + + + + + + + Copy this file to your plug-in. + + non-PDF output: plugins/org.dita.base/xsl/common/strings.xml + PDF output: plugins/org.dita.pdf2/cfg/common/vars/strings.xml + + + + In your plug-in, edit strings.xml to contain references to the language files you want + to override. + +

    + <?xml version="1.0" encoding="UTF-8"?> +<!-- Provide strings for my plug-in; this plug-in supports + English and German. --> +<langlist> + <lang xml:lang="en" filename="strings-en-us.xml"/> + <lang xml:lang="en-US" filename="strings-en-us.xml"/> + <lang xml:lang="de" filename="strings-de-de.xml"/> + <lang xml:lang="de-DE" filename="strings-de-de.xml"/> +</langlist> +

    +
    +
    + + Copy the language file from you want to override. Paste it into your plug-in's + xsl/common or cfg/common/vars directory. + +

    Language files are found in:

    +
    + + non-PDF output: plugins/org.dita.base/xsl/common/ + PDF output: plugins/org.dita.pdf2/cfg/common/vars/ + +
    + + Open the language file. Remove all of the variables except those you want to override. + +

    By removing the variables you will not override, you limit where variables are defined in the toolkit while + making your file easier to maintain.

    +
    +
    + + Change the contents of the variable to your desired text. + +

    Do not modify the id attribute.

    + <variables> + <variable id="Figure">Fig.</variable> +</variables> +
    +
    + + Update your plugin.xml file to extend the strings available. + + <plugin id="com.example.your-plugin"> + <feature extension="dita.xsl.strings" file="xsl/common/strings.xml"/> +</plugin> + + Your overrides are available to your stylesheets. For example, if processing in a context where the + xml:lang value is en-US, the following call returns “Fig.”, + because it was defined as the text for the variable with id value of Figure + in step + , which overrides the default text found in org.dita.base. + <xsl:call-template name="getVariable"> + <xsl:with-param name="id" select="Figure"/> +</xsl:call-template> + + +
    +
    +
    diff --git a/topics/pdf-customization-approaches.dita b/topics/pdf-customization-approaches.dita new file mode 100644 index 0000000..75046a3 --- /dev/null +++ b/topics/pdf-customization-approaches.dita @@ -0,0 +1,97 @@ + + + + + PDF customization approaches + + Customization approaches + + Various methods may be used to customize the PDF output that DITA Open Toolkit produces. Each of these + approaches have advantages and shortcomings that should be considered when preparing a customization + project. + + + + + PDF + customizing, best practices + upgrading + default plug-ins + upgrading + PDF + + + + + + Some of these methods are considered “anti-patterns” with disadvantages that outweigh their apparent appeal. + In most cases, you should create a custom PDF plug-in. +
    + Why not edit default files? +

    When first experimenting with PDF customization, novice users are often tempted to simply edit the default + org.dita.pdf2 files in place to see what happens.

    +

    As practical as this approach may seem, the DITA-OT project does not recommend changing any of the files in the + default plug-ins.

    +

    While this method yields quick results and can help users to determine which files and templates control + various aspects of PDF output, it quickly leads to problems, as any errors may prevent the toolkit from + generating PDF output.

    + Any changes made in this fashion would be overwritten when upgrading to newer versions of + DITA-OT, so users that have customized their toolkit installation in this way are often “stuck” on older + versions of the toolkit and unable to take advantage of improvements in recent versions of DITA-OT. +
    + +
    + Using the <filepath>Customization</filepath> folder + deprecated features + Customization folder + Customization directory +

    The original Idiom plug-in used its own extension mechanism to provide overrides to the PDF transformation. + With this approach, a dedicated folder within the plug-in is used to store customized files.

    +

    Files in the org.dita.pdf2/Customization folder can override their default counterparts, + allowing users to adjust certain aspects of PDF output without changing any of the plug-in’s default files, or + specifying additional parameters when generating output.

    + While this approach is slightly better than editing default files in place, it can still + cause problems when upgrading the toolkit to a new version. Since the Customization folder + is located within the org.dita.pdf2 plug-in’s parent directory, users must take care to + preserve the contents of this folder when upgrading to new toolkit versions. +

    Although recent versions of DITA-OT still support this mechanism to ensure backwards compatibility, this + practice is deprecated in favor of custom PDF plug-ins.

    + Users who have used the Customization folder to modify the default PDF + output are encouraged to create a custom PDF plug-in instead. In many cases, this may be as simple as copying + the contents of the Customization folder to a new subfolder in the + plugins folder and creating the necessary plugin.xml file and an Ant + script to define the transformation type. +
    + +
    + Specifying an external customization directory +

    To ensure that overrides in customization folders are not overwritten when upgrading DITA-OT to a new release, + an external customization directory can be specified at build time or in build scripts via the + customization.dir parameter.

    +

    This method is preferable to the use of the org.dita.pdf2/Customization folder, as the + contents of external folders are unaffected when upgrading DITA-OT. In distributed environments, users can use + local installations of DITA-OT, yet still take advantage of common customizations stored in a network location + available to the entire team, such as a shared drive.

    +

    It can also be useful in environments where corporate policy, CMS permissions, or network access rights prevent + changes to the toolkit installation, which may prohibit the installation of custom plug-ins.

    + Users who specify external customization directories via customization.dir + are encouraged to create a custom PDF plug-in if possible. +
    + +
    + Combining custom plug-ins & customization directories +

    A common custom plug-in may be used to store base overrides that are applicable to all company publications, + and the customization.dir parameter can be passed at build time to override individual + settings as necessary for a given project or publication.

    +

    In this case, any settings in the customization directory will take precedence over their counterparts in the + custom plug-in or default org.dita.pdf2 plug-in.

    +

    This approach allows a single custom plug-in to be shared between multiple publications or the entire company, + without the need to create additional plug-in dependencies per project.

    +

    However, the use of multiple customization mechanisms can make it difficult to debug the precedence cascade and + determine the origin of local formatting or processing overrides.

    + In most scenarios, the use of dedicated PDF customization plug-ins is preferable. Common + customizations can be bundled in one plug-in, and any project-specific overrides can be maintained in separate + plug-ins that build on the base branding or other settings in the common custom plug-in. +
    +
    +
    diff --git a/topics/pdf-customization-example.dita b/topics/pdf-customization-example.dita new file mode 100644 index 0000000..a992d97 --- /dev/null +++ b/topics/pdf-customization-example.dita @@ -0,0 +1,138 @@ + + + + + Example: Creating a simple PDF plug-in + + Simple PDF plug-in + + This scenario walks through the process of creating a very simple plug-in + (com.example.print-pdf) that creates a new transformation type: . + + + + figure + PDF + plug-in + integrator.xml + catalog + example + + + + + +

    The transformation has the following characteristics:

    +
      +
    • Uses A4 paper
    • +
    • Renders figures with a title at the top and a description at the bottom
    • +
    • Removes the period after the number for an ordered-list item
    • +
    • Use em dashes as the symbols for unordered lists
    • +
    +
    + + + In the plugins directory, create a directory named + com.example.print-pdf. + + + In the new com.example.print-pdf directory, create a plug-in configuration file + (plugin.xml) that declares the new transformation and its + dependencies. + + + <filepath>plugin.xml</filepath> file + + + + + + Add an Ant script (integrator.xml) to define the transformation type. + + + <filepath>integrator.xml</filepath> file + + + + + In the new plug-in directory, add a cfg/catalog.xml file that specifies the custom + XSLT style sheets. + + + <filepath>cfg/catalog.xml</filepath> file + + + + + + Create the cfg/fo/attrs/custom.xsl file, and add attribute and variable overrides to + it. + For example, add the following variables to change the page size to A4. + <filepath>cfg/fo/attrs/custom.xsl</filepath> file + + + + + Create the cfg/fo/xsl/custom.xsl file, and add XSLT overrides to it. + For example, the following code changes the rendering of figure elements. + <filepath>cfg/fo/xsl/custom.xsl</filepath> file + + + + + Create an English-language variable-definition file (cfg/common/vars/en.xml) and make + any necessary modifications to it. + For example, the following code removes the period after the number for an ordered-list item; it also + specifies that the bullet for an unordered list item should be an em dash. + <filepath>cfg/common/vars/en.xml</filepath> file + + + + + + The files for this sample plug-in are included in the DITA-OT installation directory under + docsrc/samples/plugins/com.example.print-pdf/ and on + GitHub. +

    The plug-in directory has the following layout and files:

    + com.example.print-pdf +├── cfg +│   ├── catalog.xml +│   ├── common +│   │   └── vars +│   │   └── en.xml +│   └── fo +│   ├── attrs +│   │   └── custom.xsl +│   └── xsl +│   └── custom.xsl +├── integrator.xml +└── plugin.xml +
    + +
      +
    1. +
    2. Build output with the new transformation type to verify that the plug-in works as intended. + --input=my.ditamap --format= +
    3. +
    +
    +
    +
    diff --git a/topics/pdf-customization-plugin-types.dita b/topics/pdf-customization-plugin-types.dita new file mode 100644 index 0000000..fc3eb49 --- /dev/null +++ b/topics/pdf-customization-plugin-types.dita @@ -0,0 +1,36 @@ + + + + + Types of custom PDF plug-ins + + Types of PDF plug-ins + + There are two common types of plug-ins: A plug-in that simply sets the DITA-OT parameters to be used when a + PDF is generated, and a plug-in that overrides aspects of the base DITA-OT PDF transformation. A plug-in can, of + course, do both of these things. + + + + + + +
    + Plug-in that only provides DITA-OT parameters +

    You might want to build a transformation type that uses a transformation as-is; however, you might want to + ensure that certain DITA-OT parameters are used. For an example of this approach, see + .

    +
    +
    + Plug-in that overrides the base PDF transformation +

    Production uses of DITA-OT typically rely on a custom PDF plug-in to render PDFs that are styled to match + corporate or organizational guidelines. Such customization plug-ins often override the following aspects of + DITA-OT default output:

    +
      +
    • Generated text strings
    • +
    • XSL templates
    • +
    • XSL-FO attribute sets
    • +
    +
    +
    +
    diff --git a/topics/pdf-customization-plugins.dita b/topics/pdf-customization-plugins.dita new file mode 100644 index 0000000..0c26916 --- /dev/null +++ b/topics/pdf-customization-plugins.dita @@ -0,0 +1,19 @@ + + + + + Custom PDF plug-ins + In most cases, PDF output should be customized by creating custom DITA-OT plug-ins that build on the + default DITA to PDF transformation. PDF plug-ins can customize covers and page layouts, modify formatting, override + the logic of the default PDF plug-in, and much more. + + + + transformations + PDF + PDF + custom plug-in + + + + diff --git a/topics/pdf-customization-resources.dita b/topics/pdf-customization-resources.dita new file mode 100644 index 0000000..91aa182 --- /dev/null +++ b/topics/pdf-customization-resources.dita @@ -0,0 +1,74 @@ + + + + + Resources for custom PDF plug-ins + + PDF plug-in resources + + There are several external resources that can help you generate and refine custom PDF plug-ins for DITA + Open Toolkit. + + + + RenderX + plugin generator + Antenna House + plugin generator + Apache FOP + plugin generator + Jarno Elovirta + PDF + plugin generator + fonts + PDF plugin generator + + + + + +
    + PDF Plugin Generator +

    This online tool, developed and maintained by Jarno Elovirta, enables you to generate a PDF customization + plug-in automatically.

    +

    The application at + dita-generator.elovirta.com walks you through the process of creating a custom PDF plug-in and allows + you to adjust a variety of settings for your PDF output. For example, you can:

    +
      +
    • Define the target environment by selecting a version of DITA-OT
    • +
    • Select the XSL formatting engine (FOP, Antenna House Formatter, or RenderX XEP)
    • +
    • Specify page size, columns, and margins
    • +
    • Select from (limited) options for headers and footers
    • +
    • Specify layout options for chapters
    • +
    • Select formatting for the following publication components: +
        +
      • Normal text
      • +
      • Headings (levels one through four)
      • +
      • Titles for sections and examples
      • +
      • Tables and figures
      • +
      • Notes and examples
      • +
      • Lists (unordered, ordered, and definition)
      • +
      • Code blocks and pre-formatted text
      • +
      • Inline elements such as links and trademarks
      • +
      +

      For each component, you can specify:

      +
        +
      • Font family, size, weight, and style
      • +
      • Color and background color
      • +
      • Alignment, indentation, spacing, and padding
      • +
    • +
    + The PDF Plugin Generator should be your first stop as you start developing a brand-new PDF + customization plug-in. +
    + +
    + +
    + + + diff --git a/topics/pdf-customization.dita b/topics/pdf-customization.dita new file mode 100644 index 0000000..b69b995 --- /dev/null +++ b/topics/pdf-customization.dita @@ -0,0 +1,37 @@ + + + + + Customizing PDF output + + Customizing PDF + + You can adjust various aspects of PDF output by changing parameter settings or using + a theme file. For more complex customizations, you can create custom DITA-OT plug-ins. + + + + transformations + PDF + PDF + customizing + + + + + +

    For example:

    +
      +
    • To print the file names of the graphics underneath figures, set args.artlbl to +
    • +
    • To disable the subsection links on the first page of each chapter, set + args.chapter.layout to .
    • +
    • To change the name of the PDF file to something other than the input map name, set + outputFile.base to the desired file name (without the .pdf + extension).
    • +
    + For the full list of settings for PDF output, see + . + +
    +
    diff --git a/topics/pdf-customization.ditamap b/topics/pdf-customization.ditamap new file mode 100644 index 0000000..b2aee9b --- /dev/null +++ b/topics/pdf-customization.ditamap @@ -0,0 +1,41 @@ + + + + + Customizing PDF output + + + + + + + Bi-directional links + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/topics/pdf-plugin-structure.dita b/topics/pdf-plugin-structure.dita new file mode 100644 index 0000000..66eb0ca --- /dev/null +++ b/topics/pdf-plugin-structure.dita @@ -0,0 +1,114 @@ + + + + + PDF plug-in structure + In cases that require substantial customizations, it is often useful to organize the files in a folder + structure that mimics the hierarchy of the default PDF plug-in. + + + + languages + adding support for + I18N + plug-in + PDF + plug-in + font-mappings.xml + fonts + PDF + PDF + fonts + index + PDF + Customization directory + + + + + + For simpler customizations, you may want to structure your plug-in differently, but the information in this + topic may help you to locate the files you need to customize. +

    The original Idiom plug-in used its own extension mechanism to provide overrides to the PDF transformation. With + this approach, a dedicated Customization folder within the plug-in was used as a + customization layer to store files that override the default behavior.

    +

    While this method is no longer recommended, the same organization principles can be used in custom PDF plug-ins + to facilitate comparisons with the default settings in the base PDF plug-in and make it easier to migrate + customizations to new toolkit versions.

    + + Default <filepath>Customization</filepath> folder content + . +├── build.properties.orig +├── catalog.xml.orig +└── fo/ + ├── attrs/ + │ └── custom.xsl.orig + └── xsl/ + └── custom.xsl.orig + +

    To begin creating a new custom plug-in, you can copy the contents of the customization layer template in + plugins/org.dita.pdf2/Customization to a new folder that will serve as your new custom + plug-in folder, such as plugins/com.company.pdf.

    +

    To mimic the hierarchy of the default PDF plug-in, you may want to add a cfg/ subfolder and + move the contents of the fo/ folder to cfg/fo/.

    +

    DITA-OT provides template files that you can start with throughout the Customization + directory structure. These files end in the suffix .orig (for example, + catalog.xml.orig). To enable these files, remove the .orig suffix from the + copies in your new custom plug-in folder. (For example, rename catalog.xml.orig to + catalog.xml).

    +

    You can then make modifications to the copy in your custom plug-in folder, and copy any other files from the + default PDF plug-in that you need to override, such as the page layouts in + layout-masters.xsl, or the font-mappings.xml file that tells your PDF + renderer which fonts to use and where to find them.

    + Wherever possible, avoid copying entire XSL files from the PDF2 plug-in to your custom + plug-in. Instead, copy only the specific attribute sets and templates that you want to override. For details, see + . +

    Things you can currently override include:

    +
      +
    • Custom XSL via xsl/custom.xsl and attrs/custom.xsl
    • +
    • Layout overrides via layout-masters.xsl
    • +
    • Font overrides via font-mappings.xml
    • +
    • Per-locale variable overrides via common/vars/[language].xml
    • +
    • I18N configuration via i18n/[language].xml
    • +
    • Index configuration via index/[language].xml
    • +
    +

    When customizing any of these areas, modify the relevant file(s) in your custom plug-in folder. Then, to enable + the changes in the publishing process, you find the corresponding entry for each file you modified in the + catalog.xml file.

    +

    It should look like this:

    + <!--uri name="cfg:fo/attrs/custom.xsl" uri="fo/attrs/custom.xsl"/--> +

    Remove the comment markers !-- and -- to enable the change:

    + <uri name="cfg:fo/attrs/custom.xsl" uri="fo/attrs/custom.xsl"/> +

    Your customization should now be enabled as part of the publishing process.

    + + Sample custom plug-in structure + . +├── plugin.xml +├── ant-include.xml +└── cfg/ + ├── catalog.xml + ├── common/ + │ ├── artwork/ + │ │ ├── logo.svg + │ └── vars/ + │ ├── strings.xml + │ ├── en.xml + └── fo/ + ├── attrs/ + │ ├── custom.xsl + ├── font-mappings.xml + ├── layout-masters.xsl + └── xsl/ + └── custom.xsl + +

    When your custom plug-in is installed, the files in its subfolders will override the out-of-the-box settings from + their counterparts in org.dita.pdf2/cfg/fo/attrs and + org.dita.pdf2/xsl/fo.

    +

    The following topics describe the contents of the base PDF plug-in subfolders and provide additional information + on customizing various aspects of the default PDF output.

    +
    +
    diff --git a/topics/pdf-plugin-structure_common-artwork.dita b/topics/pdf-plugin-structure_common-artwork.dita new file mode 100644 index 0000000..8d6bf0a --- /dev/null +++ b/topics/pdf-plugin-structure_common-artwork.dita @@ -0,0 +1,28 @@ + + + + + Custom artwork + The common/artwork folder houses custom artwork files that override the standard icons + in org.dita.pdf2/cfg/common/artwork. + + + + note + type + locale + + + + +

    These files are used to graphically identify different types of DITA note element.

    +

    The mapping between note type and graphic is contained in the common variables file + org.dita.pdf2/cfg/common/vars/commonvariables.xml.

    +

    The variables that control note graphics all follow the form

    + <variable id="{type} Note Image Path"> {path to image file} </variable> +

    where {type} contains a possible value for the note + type attribute and {path to image file} is the path to the note icon + image.

    + +
    diff --git a/topics/pdf-plugin-structure_common-index.dita b/topics/pdf-plugin-structure_common-index.dita new file mode 100644 index 0000000..95ccb4d --- /dev/null +++ b/topics/pdf-plugin-structure_common-index.dita @@ -0,0 +1,40 @@ + + + + + Index configuration + The common/index folder houses custom index definition files that override the + standard definitions in org.dita.pdf2/cfg/common/index. + + + + index.group + char.set + languages + ISO 639-1 + ISO 639-1 + Portuguese + index + PDF + catalog + catalog.xml + catalog + index configuration + + + + +

    Each file contains data for a single language, and should take that language’s ISO 639-1 language designator as + its name (for example, pt.xml for Portuguese). If necessary, locale-specific customizations + can be provided by adding a region designator to the file name (for example, pt_BR.xml for + Brazilian Portuguese).

    +

    The index files consist of index.group elements which contain sorting information on one + or more characters. Index groups are listed in sort order (“specials” before numbers, numbers before the letter + ‘A‘, etc), and the char.set entries they contain are also listed in sort order (uppercase + before lowercase).

    +

    The best way to start editing a custom index file is by making a copy of the original from + org.dita.pdf2/cfg/common/index and making changes as desired.

    +

    In order to apply a custom index definition to your publishing outputs, edit catalog.xml and + uncomment the appropriate entry in the “Index configuration override entries” section.

    + +
    diff --git a/topics/pdf-plugin-structure_common-vars.dita b/topics/pdf-plugin-structure_common-vars.dita new file mode 100644 index 0000000..cbae44e --- /dev/null +++ b/topics/pdf-plugin-structure_common-vars.dita @@ -0,0 +1,45 @@ + + + + + Variable overrides + The common/vars folder houses custom variable definitions that override the standard + definitions in org.dita.pdf2/cfg/common/vars. + + + + variable + param + id + variables, overriding + languages + adding support for + languages + ISO 639-1 + ISO 639-1 + + + + +

    As with index configuration, each file contains data for a single language, and should take that language’s ISO + 639-1 language designator as its name.

    +

    Variable files contain a set of variable elements, identified by their + id attribute. The variable definitions are used to store static text that is used as part of + the published outputs. For example, page headers, hyperlinks, etc. The id attribute for each variable should make + it clear how the variable text is being used.

    +

    Some variables contain param elements which indicate parameter values that are + substituted at publish time by the XSL. For example, a page number that is being generated as part of the + publishing process might be identified by <param ref-name="number"/> When editing or translating a + variable file, these should be included in the translation, though they can be moved and rearranged within the + variable content as needed.

    +

    The best way to start editing a custom variables file is by making a copy of the original from + org.dita.pdf2/cfg/common/vars and making changes as desired. When adding a new language, + start from an existing language’s list of variables and translate each entry as needed.

    +

    Note that unchanged variable elements can be omitted: the custom variables file need + only include those variable elements which you have modified. Variables not found in the + custom file will are taken from the standard variable files.

    +

    Applying a custom variable does not require modifying the catalog.xml file. The publishing + process will automatically use any custom variables definitions in place of the original ones.

    + +
    diff --git a/topics/pdf-plugin-structure_fo-attrs.dita b/topics/pdf-plugin-structure_fo-attrs.dita new file mode 100644 index 0000000..bec7b4e --- /dev/null +++ b/topics/pdf-plugin-structure_fo-attrs.dita @@ -0,0 +1,35 @@ + + + + + Custom attributes + The fo/attrs folder houses custom attribute configuration files that override the + standard attributes in org.dita.pdf2/cfg/fo/attrs. + + + + fonts + PDF + PDF + fonts + index + tables + index + PDF + tables + tables.attr.xsl + tables + PDF + index-attr.xsl + tables-attr.xsl + + + + +

    These files define the appearance of different elements in XML assets when they are rendered to PDF output. The + different DITA elements are organized into files by element type – index-related definitions in + index-attr.xsl, table-related definitions in tables-attr.xsl, etc.

    +

    The XSL attribute sets defined in these files can be used to override the presentation of DITA elements, + including font size, color, spacing, etc.

    + +
    diff --git a/topics/pdf-plugin-structure_fo-i18n.dita b/topics/pdf-plugin-structure_fo-i18n.dita new file mode 100644 index 0000000..b33ebf3 --- /dev/null +++ b/topics/pdf-plugin-structure_fo-i18n.dita @@ -0,0 +1,41 @@ + + + + + Internationalization configuration + + Internationalization + + The fo/i18n folder houses custom internationalization files that override the standard + configurations in org.dita.pdf2/cfg/fo/i18n. + + + + languages + adding support for + languages + ISO 639-1 + ISO 639-1 + I18N + languages + locale + languages + args.dita.locale + catalog + catalog.xml + catalog + adding languages + + + + +

    As with index configuration and variable overrides, each file contains data for a single language, and should + take that language’s ISO 639-1 language designator as its name.

    +

    Each configuration file contains mappings of certain symbols to the Unicode codepoint which should be used to + represent them in the given locale.

    +

    The best way to start editing a custom configuration is by making a copy of the original from + org.dita.pdf2/cfg/fo/i18n and making changes as desired.

    +

    In order to apply a custom configuration to your publishing outputs, edit catalog.xml and + uncomment the appropriate entry in the “I18N configuration override entries” section.

    + +
    diff --git a/topics/pdf-plugin-structure_fo-xsl.dita b/topics/pdf-plugin-structure_fo-xsl.dita new file mode 100644 index 0000000..595c9c0 --- /dev/null +++ b/topics/pdf-plugin-structure_fo-xsl.dita @@ -0,0 +1,19 @@ + + + + + Custom stylesheets + The fo/xsl folder houses custom stylesheet files that override the default + stylesheets in org.dita.pdf2/xsl/fo. + + + + + + + + +

    You can use custom stylesheets to implement additional processing routines or adjust the output generated by + the default toolkit processing.

    + +
    diff --git a/topics/pdf-themes.dita b/topics/pdf-themes.dita new file mode 100644 index 0000000..f70d767 --- /dev/null +++ b/topics/pdf-themes.dita @@ -0,0 +1,32 @@ + + + + + PDF themes + DITA-OT 4.0 includes the com.elovirta.pdf plug-in, which extends the + default PDF2 plug-in with a new theme parameter. The --theme option + takes a path to a theme file and changes the styling of the PDF output without requiring changes to XSLT + stylesheets. + + + + transformations + PDF + PDF + themes + + + + +
    +

    Themes can be used to adjust basic settings like cover page images, page sizes, numbering, font properties, + background colors and borders, spacing, and running content like page headers and footers.

    +

    To generate PDF output with a custom theme, pass the theme file to the dita command with the + --theme option:

    + dita --project=samples/project-files/pdf.xml \ + --theme=path/to/custom-theme-file.yaml +
    +

    The following topics provide details on the theme file formats and supported configuration options.

    +
    +
    diff --git a/topics/pdf-themes.ditamap b/topics/pdf-themes.ditamap new file mode 100644 index 0000000..9c81183 --- /dev/null +++ b/topics/pdf-themes.ditamap @@ -0,0 +1,15 @@ + + + + + PDF themes + + + + + + + + + + diff --git a/topics/pdf2-creating-change-bars.dita b/topics/pdf2-creating-change-bars.dita new file mode 100644 index 0000000..d2bed2a --- /dev/null +++ b/topics/pdf2-creating-change-bars.dita @@ -0,0 +1,84 @@ + + + + + Generating revision bars + You can generate revision bars in your PDF output by using the changebar and + color attributes of the DITAVAL revprop element. + + + + revprop + changebar + color + DITAVAL + change bars + RenderX + change bars + Antenna House + change bars + Apache FOP + change bars + PDF + change bars + transformations + + + + +

    The DITA + specification for the changebar attribute of the + revprop element simply says: +

    + +
    changebar
    +
    When flag has been set, specify a changebar color, style, or character, according to the changebar + support of the target output format. If flag has not been set, this attribute is ignored.
    +
    +
    +

    +

    The current version of DITA Open Toolkit uses two revprop attribute values to define + revision bars:

    +
      +
    • +

      The changebar attribute value defines the style to use for the line. The list of possible + values is the same as for other XSL-FO rules (see + ). The default value is .

    • +
    • +

      The color attribute value specifies the change bar color using any color value recognized by + XSL-FO, including the usual color names or a hex color value. The default value is + .

    • +
    + + Sample revision bar configuration + <revprop action="flag" changebar="solid" color="green"/> + +

    DITA-OT uses a default offset of 2 mm to place the revision bar near the edge of the text column. The offset, + placement and width are not currently configurable via attribute values.

    + + + +

    XSL-FO 1.1 does not provide for revision bars that are not rules, so there is no way to get text revision + indicators instead of rules, for example, using a number in place of a rule. Antenna House Formatter provides a + proprietary extension to enable this, but the DITA-OT PDF transformation does not take advantage of it.

    +
    +
    diff --git a/topics/plug-ins.ditamap b/topics/plug-ins.ditamap new file mode 100644 index 0000000..fae0ca4 --- /dev/null +++ b/topics/plug-ins.ditamap @@ -0,0 +1,143 @@ + + + + + Plug-ins + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bi-directional links + + + + + + + + + + + + + Source and target links + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/topics/plugin-addgeneratedtext.dita b/topics/plugin-addgeneratedtext.dita new file mode 100644 index 0000000..224bd5d --- /dev/null +++ b/topics/plugin-addgeneratedtext.dita @@ -0,0 +1,65 @@ + + + + + Customizing generated text + Generated text is the term for strings that are automatically added by the build process, such as the word + “Note” before the contents of a note element. + + + + note + xml:lang + languages + adding support for + English + Icelandic + Russian + Vietnamese + Gaelic + strings + generated text + draft + localizing generated text + getVariable + gentext + strings + vars + + + + +
    +

    +

    + +
    dita.xsl.strings
    +
    Add new strings to generated text file.
    +
    +
    The generated text extension point is used to add new strings to the default set of generated text from + org.dita.base for any non-PDF transformation type and from org.dita.pdf2 for PDF. It also + creates the gentext element in the intermediate files used by the toolkit. There are + several reasons you may want to use the dita.strings.xsl extension point: +
      +
    • It can be used to add new text for your own processing extensions; for example, it could be used to add + localized versions of the string “User response” to aid in rendering troubleshooting information.
    • +
    • It can be used to override the default strings in the toolkit; for example, it could be used to reset the + English string “Figure” to “Fig.”
    • +
    • It can be used to add support for new languages. For example, it could be used to add support for + Vietnamese or Gaelic; it could also be used to support a new variant of a previously supported language, + such as Australian English.
    • +
    +

    +

    If two plug-ins define the same string or add support for the same language using different values, the result + will be non-deterministic. In other words, when the same content is processed multiple times, you may get + inconsistent generated text results. This is because the toolkit cannot determine which string to use, since + more than one match is found. Avoid this possibility by ensuring that only one plug-in defines or overrides + string values for each string in each language. Also consider using a naming convention for attributes used to + look up the string value by using the ID or purpose of your plug-in.

    +

    Generated strings are available to the getVariable template used in many DITA-OT XSLT + files.

    +
    +
    +
    +
    diff --git a/topics/plugin-antpreprocess.dita b/topics/plugin-antpreprocess.dita new file mode 100644 index 0000000..691a770 --- /dev/null +++ b/topics/plugin-antpreprocess.dita @@ -0,0 +1,67 @@ + + + + + Adding an Ant target to the pre-processing pipeline + + Adding a pre-processing step + + You can add an Ant target to the pre-processing pipeline. This enables you to insert additional processing + before or after the pre-processing chain or a specific step in the pre-processing operation. + + + + plug-ins + Ant + Ant + pre-processing + + + + + +

    You can use the depend.preprocess.pre and depend.preprocess.post extension + points to run a target before or after the entire pre-processing operation. In addition, there are extension + points that enable you to run an Ant target before specific pre-processing steps.

    + +
    + + + Define and integrate the new Ant target. + + + Create the following plugin.xml file: + <plugin id="plugin-id"> + <feature extension="extension-point" value="Ant-target"/> +</plugin>where +
      +
    • plugin-id is the plug-in identifier.
    • +
    • extension-point is a pre-processing extension point.
    • +
    • Ant-target is the name of the Ant target.
    • +
    +
    + + + +
    + The new target is added to the Ant dependency list. The new target is now always run in conjunction with the + specified step in the pre-processing pipeline. + + Example +

    The following plugin.xml file specifies that the + myAntTargetBeforeChunk target is always run before the chunk step in the + pre-processing stage.

    + <plugin id="com.example.extendchunk"> + <feature extension="depend.preprocess.chunk.pre" + value="myAntTargetBeforeChunk"/> +</plugin> +

    It assumes that the myAntTargetBeforeChunk target has already been defined and + integrated.

    + +
    +
    +
    diff --git a/topics/plugin-anttarget.dita b/topics/plugin-anttarget.dita new file mode 100644 index 0000000..0c519da --- /dev/null +++ b/topics/plugin-anttarget.dita @@ -0,0 +1,55 @@ + + + + + Adding a new target to the Ant build process + + Adding a new Ant target + + As of DITA-OT 3.0, the ant.import extension point can be used to make new targets + available to the Ant processing pipeline. This can be done as part of creating a new transformation, extending + pre-processing, or simply to make new Ant targets available to other plug-ins. + + + + plug-ins + Ant + ant.import + pre-processing + Ant + targets + + + + + + + Create an Ant project file that contains the new target(s). + + + Create the plugin.xml file: + <plugin id="plugin-id"> + <feature extension="ant.import" file="build-file"/> +</plugin>where: +
      +
    • plugin-id is the plug-in identifier, for example, + com.example.ant.
    • +
    • build-file is the Ant project file that contains the new build target(s).
    • +
    +
    + + + +
    + +

    The targets from the project (build-file) are copied into the build.xml + file, using the correct path. This makes the new Ant targets available to other processes.

    + Earlier versions of DITA-OT use the dita.conductor.target.relative to call a + wrapper file with a dummy task that imports the Ant project file. This approach is still supported for backwards + compatibility, but the simpler ant.import approach described above should be used for all new + customizations. +
    +
    +
    diff --git a/topics/plugin-benefits.dita b/topics/plugin-benefits.dita new file mode 100644 index 0000000..86be2de --- /dev/null +++ b/topics/plugin-benefits.dita @@ -0,0 +1,31 @@ + + + + + Plug-in benefits + Plug-ins allow you to extend the toolkit in a way that is consistent, easy-to-share, and possible to + preserve through toolkit upgrades. + + + + plug-ins + benefits + + + + + +

    The DITA-OT plug-in mechanism provides the following benefits:

    +
      +
    • Plug-ins can easily be shared with other users, teams, or companies. Typically, all users need to do is to + unzip and run a single installation command. With many builds, even that installation step is automatic.
    • +
    • Plug-ins permit overrides or customizations to grow from simple to complex over time, with no increased + complexity to the extension mechanism.
    • +
    • Plug-ins can be moved from version to version of DITA-OT by reinstalling or copying the directory from one + installation to another. There is no need to re-integrate code based on updates to DITA-OT core processing.
    • +
    • Plug-ins can build upon each other. If you like a plug-in, simply install that plug-in, and then create your + own plug-in that builds on top of it. The two plug-ins can then be distributed to your team as a unit, or you + can share your own extensions with the original provider.
    • +
    +
    +
    diff --git a/topics/plugin-coding-conventions.dita b/topics/plugin-coding-conventions.dita new file mode 100644 index 0000000..c1746ee --- /dev/null +++ b/topics/plugin-coding-conventions.dita @@ -0,0 +1,226 @@ + + + + + Plug-in coding conventions + + Coding conventions + + To ensure custom plug-ins work well with the core toolkit code and remain compatible with future releases, + the DITA Open Toolkit project recommends that plug-ins use modern development practices and common coding + patterns. + + + + plug-ins + best practices + upgrading + best practices + XSLT + best practices + pre-processing + XSLT + + + + +
    + Best practices +

    Adhering to certain development practices will properly isolate your code from that of DITA Open Toolkit. This + will make it easier to you to upgrade to new versions of DITA-OT when they are released.

    +
      +
    • +

      Use a properly-constructed DITA-OT plug-in.

    • +
    • +

      Use a version control system to store your code.

    • +
    • +

      Store the source code of your plug-ins outside of the DITA-OT installation directory, and add the + repository location to the list of plug-in directories defined in the plugindirs entry + of the + configuration.properties file. +

    • +
    • +

      Never modify any of the core DITA-OT code.

      + You may want to set the permissions on default plug-in directories such as + org.dita.pdf2 to “read-only” to ensure that you do not accidentally modify the files + within as you develop your customized plug-in.
    • +
    • +

      Avoid copying entire DITA-OT files into your customization plug-in. When you only copy the attribute sets + and templates that you need to override, there is less risk of impact from new features or fixes in the base + code, making your code more stable and easier to upgrade between releases.

    • +
    • +

      If you only need to change a few attribute sets and templates, you may prefer to store your overrides in + custom.xsl files, or a simple folder hierarchy within your custom plug-in.

    • +
    • +

      In cases that require substantial customizations, you may prefer to organize the files in a folder + structure that mimics the hierarchy of the default plug-in you are customizing. This facilitates comparisons + with the default settings in the base plug-in and makes it easier to migrate your changes to new toolkit + versions. See + for information on the files in the base PDF plug-in.

    • +
    • +

      Upgrade your customization plug-in to new versions of DITA-OT regularly. Do not wait through several major + releases before upgrading.

    • +
    + +
    + Use a custom namespace +

    For XSLT customizations, use a custom namespace for any modified template modes, template names, attribute + sets, functions, and variables. This helps to clarify which portions of the code are specific to your + customizations, and serves to isolate your changes in the event that items with the same name are added to the + base plug-ins in the future.

    +

    For example, instead of creating a template named searchbar, use something like + corp:searchbar instead. This ensures that if future versions of DITA-OT add a + searchbar template, your custom version will be unaffected.

    +

    Instead of: <xsl:template name="searchbar"/>

    +

    use: <xsl:template name="corp:searchbar"/>

    +
    + +
    + +
    + Use custom <xmlelement>pipeline</xmlelement> elements + Ant + pipeline + Ant + xslt + Ant + style +

    In Ant scripts, use the XSLT module from DITA-OT instead of Ant’s built-in xslt or + style tasks.

    +

    The XSLT module allows access to DITA-OT features like using the job configuration to select files in the + temporary folder based on file metadata and custom XSLT extension functions.

    + Future versions of DITA-OT may switch to a new XML resolver or in-memory storage features + that are not supported by Ant’s XSLT task. To ensure compatibility with future releases, plug-ins should replace + these constructs with custom pipeline elements. +

    Instead of:

    +

    <xslt style="${dita.plugin.example.dir}/custom.xsl" + basedir="${dita.temp.dir}" + destdir="${dita.output.dir}" + includesfile="${dita.temp.dir}/${fullditatopicfile}"/>

    +

    use:

    +

    <pipeline> + <xslt style="${dita.plugin.example.dir}/custom.xsl" + destdir="${dita.output.dir}"> + <ditafileset format="dita" /> + </xslt> +</pipeline>

    +
    + +
    + Use the plug-in directory property +

    In Ant scripts, always refer to files in other plug-ins using the + dita.plugin.plugin-id.dir property.

    +

    Instead of:

    +

    <property name="base" location="../example/custom.xsl"/>

    +

    use:

    +

    <property name="base" location="${dita.plugin.example.dir}/custom.xsl"/>

    +

    This fixes cases where plug-ins are installed to custom plug-in directories or the plug-in folder name doesn’t + match the plug-in ID.

    + For details, see + . +
    + +
    + Use the <codeph>plugin</codeph> URI scheme + Ant + xsl:import + Ant + xsl:include +

    In XSLT, use the plugin URI scheme in xsl:import and + xsl:include to reference files in other plug-ins.

    +

    Instead of:

    +

    <xsl:import href="../../org.dita.base/xsl/common/output-message.xsl"/>

    +

    use:

    +

    <xsl:import href="plugin:org.dita.base:xsl/common/output-message.xsl"/>

    +

    As with the plug-in directory property in Ant, this allows plug-ins to resolve to the correct directory even + when a plug-in moves to a new location. The plug-in is referenced using the syntax + plugin:plugin-id:path/within/plugin/file.xsl.

    + For details, see + . +
    + +
    + Use <xmlelement>ditafileset</xmlelement> to select files + Ant + ditafileset + ditafileset + images + selecting + images + copy-files +

    In Ant scripts, use ditafileset to select resources in the temporary directory.

    +

    For example, to select all images referenced by input DITA files, instead of:

    +

    <copy todir="${copy-image.todir}"> + <fileset dir="${user.input.dir}"> + <includes name="*.jpg"/> + <includes name="*.jpeg"/> + <includes name="*.png"/> + <includes name="*.gif"/> + <includes name="*.svg"/> + </fileset> +</copy>

    +

    use:

    +

    <copy todir="${copy-image.todir}"> + <ditafileset format="image" /> +</copy> +

    +

    The ditafileset resource collection can be used to select different types of + files.

    + + Usage examples of <xmlelement>ditafileset</xmlelement> + + + + + + Example + Description + + + + + <ditafileset format="dita"/> + Selects all DITA topics in the temporary directory. + + + <ditafileset format="ditamap"/> + Selects all DITA maps in the temporary directory. + + + <ditafileset format="image"/> + Selects images of all known types in the temporary directory. + + + +
    +
    +
    + Match elements with their <xmlatt>class</xmlatt> attribute +

    Use class attributes to match elements in XPATH expressions instead of element names.

    +

    For example, instead of: <xsl:template match="p"/>

    +

    use: <xsl:template match="*[contains(@class,' topic/p ')]"/>

    +

    Specialization-aware processing uses these classes to distinguish the general class of elements to which the + current element belongs.

    + Matching classes instead of elements ensures that the expression also applies to any specialized + elements as well as to their more general ancestors. This means you can define new markup without necessarily + requiring new processing rules. +
    + +
    + + + diff --git a/topics/plugin-configfile.dita b/topics/plugin-configfile.dita new file mode 100644 index 0000000..487accc --- /dev/null +++ b/topics/plugin-configfile.dita @@ -0,0 +1,394 @@ + + + + + Plug-in descriptor file + The plug-in descriptor file (plugin.xml) controls all aspects of a plug-in, making + each extension visible to the rest of the toolkit. The file uses pre-defined extension points to locate changes, and + then integrates those changes into the core DITA-OT code. + + + + plug-ins + identifiers + plug-ins + plugin.xml + metadata + plug-in + + + + +
    +
    + Plug-in identifiers + id + plug-in +

    Every DITA-OT plug-in must have a unique identifier composed of one or more dot-delimited tokens, for example, + com.example.rss. This identifier is used to identify the plug-in to the toolkit for + installation, processing, and when determining plug-in dependencies.

    + The default DITA-OT plug-ins use a reverse domain naming convention, as in org.dita.html5; + this is strongly recommended to avoid plug-in naming conflicts. +

    Each token can include only the following characters: +

      +
    • Lower-case letters (a-z)
    • +
    • Upper-case letters (A-Z)
    • +
    • Numerals (0-9)
    • +
    • Underscores (_)
    • +
    • Hyphens (-)
    • +

    +
    +
    + <xmlelement>plugin</xmlelement> +

    The root element of the plugin.xml file is plugin, which has a + required id attribute set to the unique plug-in identifier.

    + + Sample <xmlelement>plugin</xmlelement> element + + +
    +
    + Plug-in elements + plugin + Perhaps all the following tables should have a Data + type column? That would match with the DITA spec; also, it seems as if some attributes must take a predefined + set of values. +

    The plugin element can contain the following child elements:

    + + + extension-point + + extension-point +

    An optional element that defines a new extension point that can be used by other DITA-OT plug-ins.

    +

    The following attributes are supported:

    + + + Attribute + Description + Required? + + + id + Extension point identifier + Yes + + + name + Extension point description + No + + +

    Like plug-in identifiers, extension point identifiers are composed of one or + more dot-delimited tokens.

    + Extension point identifiers should begin with the identifier of the + defining plug-in and append one or more tokens, for example, org.dita.example.pre. + + Sample <xmlelement>extension-point</xmlelement> element + <extension-point id="dita.xsl.html5" name="HTML5 XSLT import"/> + +
    +
    + + feature + + feature + value + file +

    An optional element that supplies values to a DITA-OT extension point.

    +

    The following attributes are supported:

    + + + Attribute + Description + Required? + + + extension + Identifier of the DITA-OT extension point + Yes + + + value + Comma separated string value of the extension + Either the value or file attribute must be + specified + + + file + Name and path of a file containing data for the extension point. +

    Depending on the extension point, this might be specified as an absolute path, a path relative to + the plugin.xml file, or a path relative to the DITA-OT root.

    + Either the value or file attribute must be + specified +
    + + type + Type of the value attribute + No + +
    + + Sample <xmlelement>feature</xmlelement> elements +

    If more than one feature element supplies values to the same extension point, + the values are additive. For example, the following are equivalent:

    + <feature extension="org.dita.example.extension-point" value="a,b,c"/> + <feature extension="org.dita.example.extension-point" value="a"/> +<feature extension="org.dita.example.extension-point" value="b"/> +<feature extension="org.dita.example.extension-point" value="c"/> +
    +
    +
    + + metadata + + metadata +

    An optional element that defines metadata.

    +

    The following attributes are supported:

    + + + Attribute + Description + Required? + + + type + Metadata name + Yes + + + value + Metadata value + Yes + + + + Sample <xmlelement>metadata</xmlelement> element + <metadata type="foo" value="bar"/> + +
    +
    + + require + + require +

    An optional element that defines plug-in dependencies.

    +

    The following attributes are supported:

    + + + Attribute + Description + Required? + + + plugin + The identifier of the required plug-in. +

    To specify alternative requirements, separate plug-in identifiers with a vertical + bar.

    + Yes +
    + + importance + Identifies whether the plug-in is required (default) or + optional. DITA-OT provides a warning if a required plug-in is not + available. + No + +
    + + Sample <xmlelement>require</xmlelement> element + + +
    +
    + + template + + template + dita:extension +

    An optional element that defines files that should be treated as templates.

    +

    Template files can be used to integrate DITA-OT extensions. Templates typically extend the default + transformation-type-specific build files via dita:extension elements. When the + plug-in installation process runs, template files are used to recreate build files, and the specified + extension points are replaced with references to the appropriate plug-ins.

    +

    The following attributes are supported:

    + + + Attribute + Description + Required? + + + file + Name and path to the template file, relative to the plugin.xml + file + Yes + + + + Sample <xmlelement>template</xmlelement> element + <template file="build_dita2html5_template.xml"/> + +
    +
    + + transtype + + transtype + plugin.xml +

    An optional element that defines a new output format (transformation type).

    +

    The following attributes are supported:

    + + + Attribute + Description + Required? + + + name + Transformation name + Yes + + + desc + Transformation type description + No + + + abstract + When , sets the transformation type as abstract, meaning it can be + extended by other plug-ins, but cannot be used directly. +

    For example, the org.dita.base plug-in defines an abstract base + transformation type that is extended by other DITA-OT plug-ins.

    + No +
    + + extends + Specifies the name of the transformation type being extended + No + +
    + + Sample <xmlelement>transtype</xmlelement> element + <transtype name="base" abstract="true" desc="Common"> + [...] + <param name="link-crawl" + desc="Specifies whether to crawl only topic links found in maps, or all discovered topic links." + type="enum"> + <val>map</val> + <val default="true">topic</val> + </param> + [...] +</transtype> + + +

    The transtype element may define additional parameters for the transformation + type using the following child elements.

    + + + param + + param +

    An optional element that specifies a parameter for the transformation type.

    +

    The following parameter attributes are supported:

    + + + Attribute + Description + Required? + + + name + Parameter name + Yes + + + desc + Parameter description + No + + + type + Parameter type (, , + ) + Yes + + + deprecated + When , identifies this parameter as deprecated + No + + + required + When , identifies this parameter as required + No + +
    +
    + + val + + val +

    A child of param (when type=) that + specifies an enumeration value.

    +

    The following attributes are supported:

    + + + Attribute + Description + Required? + + + default + When , sets the enumeration value as the default value of the parent + param + Only for the default val + +
    +
    +
    +
    +
    +
    +

    Any extension that is not recognized by DITA-OT is ignored. Since DITA-OT version 1.5.3, you can combine + multiple extension definitions within a single plugin.xml file; in older versions, only the + last extension definition was used.

    +
    + + + Example <filepath>plugin.xml</filepath> file + DITA + specializations + DTD + plug-ins + DITA specializations + plug-ins + plugin.xml + plugin.xml +

    The following is a sample of a plugin.xml file. This file adds support for a new set of + specialized DTDs, and includes an override for the XHTML output processor.

    +

    This plugin.xml file would go into a directory such as + DITA-OT/plugins/music/ and referenced supporting files would also exist in that + directory. A more extensive sample using these values is available in the actual music plug-in, available on + SourceForge.

    + <plugin id="org.metadita.specialization.music"> + <feature extension="dita.specialization.catalog.relative" + file="catalog-dita.xml"/> + <feature extension="dita.xsl.xhtml" file="xsl/music2xhtml.xsl"/> +</plugin> +
    + + diff --git a/topics/plugin-dependencies.dita b/topics/plugin-dependencies.dita new file mode 100644 index 0000000..38ac590 --- /dev/null +++ b/topics/plugin-dependencies.dita @@ -0,0 +1,60 @@ + + + + + Plug-in dependencies + A DITA-OT plug-in can be dependent on other plug-ins. Prerequisite plug-ins are installed first, which + ensures that DITA-OT handles XSLT overrides correctly. + + + + require + plug-ins + prerequisites + dependencies + order + require + XSLT + plug-ins + + + + +
    +

    The require element in the plugin.xml file specifies whether the + plug-in has dependencies. Use require elements to specify prerequisite plug-ins, in + order from most general to most specific.

    +

    If a prerequisite plug-in is missing, DITA-OT prints a warning during installation. To suppress the warning but + keep the installation order if both plug-ins are present, add importance="optional" to the + require element.

    + +

    If a plug-in can depend on any one of several optional plug-ins, separate the plug-in IDs with a vertical bar. + This is most useful when combined with importance="optional".

    +
    + + Example: Plug-in with a prerequisite plug-in +

    The following plug-in will only be installed if the plug-in with the ID com.example.primary is + available. If that plug-in is not available, a warning is generated and the installation operation fails.

    + <plugin id="com.example.builds-on-primary"> + <!-- ... Extensions here --> + <require plugin="com.example.primary"/> +</plugin> +
    + + Example: Plug-in that has optional plug-ins +

    The following plug-in will only be installed if either the plug-in with the ID pluginA or the + plug-in with the ID pluginB is available. If neither of those plug-ins are installed, a warning + is generated but the installation operation is completed.

    + <plugin id="pluginC"> + <!-- ...extensions here --> + <require plugin="pluginA|pluginB" importance="optional"/> +</plugin> + +

    We need to check this example against the toolkit. Text in the original topic was wrong, but I have not + tested this.

    +
    +
    +
    +
    diff --git a/topics/plugin-javalib.dita b/topics/plugin-javalib.dita new file mode 100644 index 0000000..6d0508d --- /dev/null +++ b/topics/plugin-javalib.dita @@ -0,0 +1,103 @@ + + + + + Adding a Java library to the <parmname>classpath</parmname> + + Adding a Java library + + You can use the dita.conductor.lib.import extension point to add an additional Java + library to the DITA-OT classpath parameter. + + + + deprecated features + dost.class.path property + plug-ins + Java + Java + classpath + classpath + Java + XSLT + Java + + + + + +

    As of DITA-OT 3.1, the Java class path is managed automatically, meaning you do not (and should not) use + explicit references to Java class paths in your build scripts. In particular, the old + dost.class.path property has been deprecated and should not be used. If you are migrating + older plug-ins that manage their class path directly, you should remove any explicit class path configuration. + If your plug-in was not already using the dita.conductor.lib.import extension point to + integrate its JAR dependencies you must add it.

    +

    The effective DITA-OT class path is the combination of the JAR files in the main lib/ + directory and the plug-in-contributed JARs, which are listed in config/env.sh. The + env.sh file is updated automatically when plug-ins are installed or removed.

    +
    + + + If necessary, compile the Java code into a JAR file. + + + Create a plugin.xml file that contains the following code: + <plugin id="plugin-id"> + <feature extension="dita.conductor.lib.import" file="file"/> +</plugin>where: +
      +
    • plugin-id is the plug-in identifier, for example, + com.example.addjar.
    • +
    • file is the name of the JAR file, for example, + myJavaLibrary.jar.
    • +
    +
    + + + +
    + The Ant or XSLT code now can make use of the Java code. + +

    In the following extended example, the myJavaLibrary.jar file performs a validation step + during processing, and you want it to run immediately before the conref step.

    +

    To accomplish this, you will need to use several features:

    +
      +
    • The JAR file must be added to the classpath.
    • +
    • The Ant target must be added to the dependency chain for conref.
    • +
    • An Ant target must be created that uses this class, and integrated into the code.
    • +
    +

    The files might look like the following:

    + + <filepath>plugin.xml</filepath> file + <?xml version="1.0" encoding="UTF-8"?> +<plugin id="com.example.samplejava"> + <!-- Add the JAR file to the DITA-OT CLASSPATH --> + <feature extension="dita.conductor.lib.import" + file="com.example.sampleValidation.jar"/> + <!-- Integrate the Ant code --> + <feature extension="ant.import" file="calljava-antcode.xml"/> + <!-- Define the Ant target to call, and when (before conref) --> + <feature extension="depend.preprocess.conref.pre" + value="validateWithJava"/> +</plugin> + + + <filepath>calljava-antcode.xml</filepath> file + <?xml version="1.0" encoding="UTF-8"?> +<project default="validateWithJava"> + <target name="validateWithJava"> + <java classname="com.example.sampleValidation"> + <!-- The class was added to the DITA-OT classpath --> + </java> + </target> +</project> + +
    +
    +
    diff --git a/topics/plugin-messages.dita b/topics/plugin-messages.dita new file mode 100644 index 0000000..00144df --- /dev/null +++ b/topics/plugin-messages.dita @@ -0,0 +1,109 @@ + + + + + Adding new diagnostic messages + + Adding new messages + + Use the dita.xsl.messages extension point to add plug-in-specific messages to the + diagnostic messages that are generated by DITA-OT. These messages then can be used by any XSLT override. + + + + type + id + diagnostic messages + plug-ins + troubleshooting + troubleshooting + plug-ins + XSLT + errors + pre-processing + XSLT + + + + + + + Create an XML file that contains the messages that you want to add. Be sure to use the following format for + the XML file: + <messages> + <!-- See resources/messages.xml for the details. --> + <message id="PrefixNumberLetter" type="error-severity"> + <reason>Message text</reason> + <response>How to resolve</response> + </message> +</messages>where: +
      +
    • Prefix is a sequence of four capital letters.By convention, the toolkit + messages use DOTX but any sequence can be used by plug-in developers.
    • +
    • Number is a three-digit integer.
    • +
    • Letter is one of the following upper-case letters: I, W, E, F. It should match the + value that is specified for the type attribute.As the id attribute + is used as a whole and not decomposed by recent versions of the toolkit, you could use any sequence as + the message identifier. Nevertheless, to facilitate reuse of the plug-in and make it more readable by + other users, we recommend following these guidelines.
    • +
    • error-severity specifies the severity of the error. It must be one of the following + values: +
      + +
      +
      + +
      The FATAL value throws a fatal error message in XSLT and an exception in + Java. + If the id attribute of your message is equal to the id + of a default DITA-OT message, your message will override the default one. + An override cannot change the severity of the overridden message.
    • +
    +
    + + Create a plugin.xml file that contains the following content: + + <plugin id="plugin-id"> + <feature extension="dita.xsl.messages" file="file"/> +</plugin> +

    where:

    +
      +
    • plugin-id is the plug-in identifier, for example, + com.example.newmsg.
    • +
    • file is the name of the new XML file containing the messages created in step + , for example, + myMessages.xml.
    • +
    +
    +
    + + + +
    + +

    Add the following call in XSLT modules to generate a message when a specific condition occurs:

    + <xsl:call-template name="output-message"> + <xsl:with-param name="id">prefixnumberletter</xsl:with-param> + <xsl:with-param name="msg">Message text and parameters.</xsl:with-param> +</xsl:call-template> +

    You can also pass custom parameters to the template by using the msgparams parameter. The + value of msgparams is a semicolon separated list of strings, where each token consists of a + percent sign prefixed parameter index, equals sign and parameter value.

    + <xsl:call-template name="output-message"> + <xsl:with-param name="id">prefixnumberletter</xsl:with-param> + <xsl:with-param name="msgparams">%1=MyFirstValue;%2=MySecondValue</xsl:with-param> +</xsl:call-template> +

    Use the ctx parameter if calling from a function.

    +
    +
    +
    diff --git a/topics/plugin-newextensions.dita b/topics/plugin-newextensions.dita new file mode 100644 index 0000000..1c13fdb --- /dev/null +++ b/topics/plugin-newextensions.dita @@ -0,0 +1,160 @@ + + + + + Creating a new plug-in extension point + + New extension points + + If your plug-in needs to define its own extension points in an XML file, add the string + "_template" to the filename before the file suffix. When the plug-in is installed, this file will + be processed like the built-in DITA-OT templates. + + + + template + dita:extension + pathelement + xsl:import + id + plug-in + behavior + dita:extension + plug-ins + extension points + extension points + creating + XSLT + extension points + pre-processing + XSLT + metadata + plug-in + catalog + + + + +
    +

    Template files are used to integrate most DITA-OT extensions. For example, the + dita2xhtml_template.xsl file contains all of the default rules for converting DITA topics + to XHTML, along with an extension point for plug-in extensions. When the plug-in is installed, the + dita2xhtml.xsl is recreated, and the extension point is replaced with references to all + appropriate plug-ins.

    +

    To mark a new file as a template file, use the template element.

    +

    The template extension namespace has the URI http://dita-ot.sourceforge.net. It is used to + identify elements and attributes that have a special meaning in template processing. This documentation uses the + dita: prefix to refer to elements in the template extension namespace. However, template + files are free to use any prefix, provided that there is a namespace declaration that binds the prefix to the + URI of the template extension namespace.

    +
    +
    + <xmlelement>dita:extension</xmlelement> element +

    The dita:extension elements are used to insert generated content during the plug-in + installation process. There are two required attributes:

    +
      +
    • The id attribute defines the extension point ID that provides the argument data.
    • +
    • The behavior attribute defines which processing action is used.
    • +
    +

    Supported values for the behavior attribute:

    + + + org.dita.dost.platform.CheckTranstypeAction + Create Ant condition elements to check if the ${transtype} property value equals a + supported transformation type value. + + + org.dita.dost.platform.ImportAntLibAction + Create Ant pathelement elements for the + library import extension point. The id attribute is + used to define the extension point ID. + + + org.dita.dost.platform.ImportPluginCatalogAction + Include plug-in metadata catalog content. + + + org.dita.dost.platform.ImportPluginInfoAction + Create plug-in metadata Ant properties. + + + org.dita.dost.platform.ImportStringsAction + Include plug-in string file content based on the + generated text extension point. The id + attribute is used to define the extension point ID. + + + org.dita.dost.platform.ImportXSLAction + Create xsl:import elements based on the + XSLT import extension point. The id attribute is + used to define the extension point ID. + + + org.dita.dost.platform.InsertAction + Include plug-in conductor content based on the + Ant import extension point. The id attribute is used + to define the extension point ID. + + + org.dita.dost.platform.InsertAntActionRelative + Include plug-in conductor content based on the + relative Ant import extension point. The id + attribute is used to define the extension point ID. + + + org.dita.dost.platform.InsertCatalogActionRelative + Include plug-in catalog content based on the + catalog import extension point. The id attribute is + used to define the extension point ID. + + + org.dita.dost.platform.ListTranstypeAction + Create a pipe-delimited list of supported transformation types. + + +
    +
    + <xmlatt>dita:extension</xmlatt> attribute +

    The dita:extension attribute is used to process attributes in elements which are not in the + template extension namespace. The value of the attribute is a space-delimited tuple, where the first item is the + name of the attribute to process and the second item is the action ID.

    +

    Supported values:

    + + + depends org.dita.dost.platform.InsertDependsAction + The Ant target dependency list is processed to replace all target names that start with an opening brace + { character and end with a closing brace }. The value of the extension + point is the ID between the braces. + + +
    + + Example +

    The following plug-in defines myBuildFile_template.xml as a new template for extensions, + and two new extension points.

    + <plugin id="com.example.new-extensions"> + <extension-point id="com.example.new-extensions.pre" + name="Custom target preprocess"/> + <extension-point id="com.example.new-extensions.content" + name="Custom target content"/> + <template file="myBuildFile_template.xml"/> +</plugin> +

    When the plug-in is installed, this will be used to recreate myBuildFile.xml, replacing + Ant file content based on extension point use.

    + <project xmlns:dita="http://dita-ot.sourceforge.net"> + <target name="dita2custom" + dita:depends="dita2custom.init, + {com.example.new-extensions.pre}, + dita2xhtml" + dita:extension="depends org.dita.dost.platform.InsertDependsAction"> + <dita:extension id="com.example.new-extensions.content" + behavior="org.dita.dost.platform.InsertAction"/> + </target> +</project> +
    +
    +
    diff --git a/topics/plugin-newtranstype.dita b/topics/plugin-newtranstype.dita new file mode 100644 index 0000000..9cd0d54 --- /dev/null +++ b/topics/plugin-newtranstype.dita @@ -0,0 +1,100 @@ + + + + + Adding a new transformation type + + Adding a new output format + + Plug-ins can add an entirely new transformation type. The new transformation type can be very simple, such + as an HTML build that creates an additional control file; it also can be very complex, adding any number of new + processing steps. + + + + transtype + custom + param + plug-ins + transformations + transformations + creating + table of contents + HTML5 + + + + + +

    You can use the transtype element to define a new transformation type with any new + custom parameters that are supported.

    +

    When a transformation type is defined, the build expects Ant code to be integrated to define the transformation + process. The Ant code must define a target based on the name of the transformation type; if the transformation + type is "new-transform", the Ant code must define a target named dita2new-transform.

    +
    + + + Create an Ant project file for the new transformation. This project file must define a target named + "dita2new-transtype," where new-transtype is the name of the new + transformation type. + + + Create a plugin.xml with the following content: + + <plugin id="plugin-id"> + <transtype name="new-transtype"/> + <feature extension="dita.transtype.print" value="new-transtype"/> + <feature extension="ant.import" file="ant-file"/> +</plugin> +

    where:

    +
      +
    • plugin-id is the plug-in identifier, for example, com.dita-ot.pdf.
    • +
    • new-transtype is the name of the new transformation, for example, dita-ot-pdf.
    • +
    • ant-file is the name of the Ant file, for example, + build-dita-ot-pdf.xml.
    • +
    +

    Exclude the content that is highlighted in bold if the transformation is not intended for print.

    +
    +
    + + + +
    + You now can use the new transformation. + + Examples + + Creating a new print transformation +

    The following plugin.xml file defines a new transformation type named "print-pdf"; it + also defines the transformation type to be a print type. The build will look for a + dita2print-pdf target.

    + + For a complete sample plug-in with all required code, see + . +
    + + Defining new parameters +

    If your custom transformation type supports custom parameters, they can be defined in nested + param elements within the transtype element.

    +

    While the org.dita.html5 plug-in was separated from common-html in + version 2.4, the following example shows how earlier versions of that plug-in used the + transtype element to extend the common HTML transformation with a new + transformation type and define a new nav-toc parameter with + three possible values:

    + <transtype name="html5" extends="common-html" desc="HTML5"> + <param name="nav-toc" type="enum" + desc="Specifies whether to generate navigation in topic pages."> + <val default="true" desc="No TOC">none</val> + <val desc="Partial TOC that shows the current topic">partial</val> + <val desc="Full TOC">full</val> + </param> +</transtype> +
    +
    +
    +
    diff --git a/topics/plugin-overridestyle.dita b/topics/plugin-overridestyle.dita new file mode 100644 index 0000000..f8898b9 --- /dev/null +++ b/topics/plugin-overridestyle.dita @@ -0,0 +1,74 @@ + + + + + Overriding an XSLT-processing step + + Overriding XSLT steps + + You can override specific XSLT-processing steps in both the pre-processing pipeline and certain DITA-OT + transformations. + + + + plug-ins + XSLT + XSLT + pre-processing + XHTML + + + + + + + Develop an XSL file that contains the XSL override. + + + Construct a plugin.xml file that contains the following content: + <?xml version="1.0" encoding="UTF-8"?> +<plugin id="plugin-id"> + <feature extension="extension-point" file="relative-path"/> +</plugin>where: +
      +
    • plugin-id is the plug-in identifier, for example, com.example.brandheader.
    • +
    • extension-point is the DITA-OT extension point, for example, + dita.xsl.xhtml. This indicates the DITA-OT processing step that the XSL override applies + to.
    • +
    • relative-path is the relative path and name of the XSLT file, for example, + xsl/header.xsl.
    • +
    +
    + + + +
    + The plug-in installer adds an XSL import statement to the default DITA-OT code, so that the XSL override + becomes part of the normal build. + + Example: Overriding XHTML header processing +

    The following two files represent a complete, simple style plug-in.

    +

    The plugin.xml file declares an XSLT file that extends XHTML processing:

    + <?xml version="1.0" encoding="UTF-8"?> +<plugin id="com.example.brandheader"> + <feature extension="dita.xsl.xhtml" file="xsl/header.xsl"/> +</plugin> +

    The xsl/header.xsl XSLT file referenced in plugin.xml overrides the + default header processing to add a banner:

    + <?xml version="1.0" encoding="UTF-8"?> +<xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> + <xsl:template name="gen-user-header"> + <div><img src="http://www.example.com/company_banner.jpg" + alt="Example Company Banner"/></div> + </xsl:template> +</xsl:stylesheet> +
    +
    +
    diff --git a/topics/plugin-preprocess-xslt.dita b/topics/plugin-preprocess-xslt.dita new file mode 100644 index 0000000..2536819 --- /dev/null +++ b/topics/plugin-preprocess-xslt.dita @@ -0,0 +1,90 @@ + + + + + Processing topics with XSLT in preprocess + + Processing topics with XSLT + + You can add an Ant target to the end of the pre-processing pipeline that transforms all topics. This is + useful if you want to modify topics before transtype-specific processing, for example to modularize the code or + reuse the same processing in multiple transformation types. + + + + Create a plug-in descriptor file plugin.xml that imports a new Ant buildfile + build.xml and adds an Ant target after pre-processing. + + <?xml version="1.0" encoding="utf-8"?> +<?xml-model href="https://www.dita-ot.org/rng/plugin.rnc" type="application/relax-ng-compact-syntax"?> +<plugin id="plugin-id"> + <feature extension="ant.import" file="build.xml"/> + <feature extension="depend.preprocess.post" value="uniform-decimals"/> +</plugin> + + + + Create an Ant buildfile build.xml with a target to process all DITA topics in the + temporary directory. + + <?xml version="1.0" encoding="utf-8"?> +<project> + <target name="uniform-decimals"> + <pipeline taskname="xslt"> + <xslt basedir="${dita.temp.dir}" + style="${dita.plugin.plugin-id.dir}/filter.xsl"> + <ditafileset format="dita" processingRole="normal"/> + </xslt> + </pipeline> + </target> +</project> + + + + Create an XSLT stylesheet filter.xsl to filter topic content. + + <?xml version="1.0" encoding="utf-8"?> +<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs"> + + <!-- Format keywords with a decimal number with at least two decimal points --> + <xsl:template match="*[contains(@class, ' topic/keyword ')]"> + <xsl:copy> + <xsl:apply-templates select="@*"/> + <xsl:variable name="num" select="number(.)" as="xs:double"/> + <xsl:choose> + <xsl:when test="$num = $num and contains(., '.')"> + <xsl:attribute name="orig" select="."/> + <xsl:value-of select="format-number($num, '0.00#')"/> + </xsl:when> + <xsl:otherwise> + <xsl:apply-templates select="node()"/> + </xsl:otherwise> + </xsl:choose> + </xsl:copy> + </xsl:template> + + <!-- Identity template --> + <xsl:template match="@* | node()"> + <xsl:copy> + <xsl:apply-templates select="@* | node()"/> + </xsl:copy> + </xsl:template> + +</xsl:stylesheet> + + + + + + + The filter.xsl stylesheet will transform every DITA topic after pre-processing. + + + diff --git a/topics/plugin-rewrite-rules.dita b/topics/plugin-rewrite-rules.dita new file mode 100644 index 0000000..6bcaf88 --- /dev/null +++ b/topics/plugin-rewrite-rules.dita @@ -0,0 +1,59 @@ + + + + + Adjusting file names in map-first pre-processing + + Rewriting file names + + To dynamically adjust the names and locations of output files in the map-first pre-processing routine + (preprocess2), you can create a custom plug-in and specify the code that contains your custom + rewrite rules. + + + + result.rewrite-rule.xsl + result.rewrite-rule.class + rewriting file names + + + + +

    For example, set the result.rewrite-rule.xsl parameter to specify a bundled XSLT stylesheet + that contains your custom rewrite rules.

    +

    + <?xml version='1.0' encoding='UTF-8'?> +<project name="com.example.rewrite.pdf"> + <target name="dita2rewrite.pdf.init"> + <property name="customization.dir" + location="${dita.plugin.com.example.rewrite.pdf.dir}/cfg"/> + <property name="result.rewrite-rule.xsl" + value="${dita.plugin.com.example.rewrite.pdf.dir}/custom-rules.xsl"/> + </target> + <target name="dita2rewrite.pdf" + depends="dita2rewrite.pdf.init, dita2production.pdf, dita2pdf2"/> +</project> +

    +

    Your plug-in would also include a custom-rules.xsl file, which might contain templates like + this to move all image files to an images subdirectory:

    +

    + <xsl:template match="node() | @*"> + <xsl:copy> + <xsl:apply-template select="node() | @*"/> + </xsl:copy> +</xsl:template> + +<xsl:template match="file[@format = 'image']/@result"> + <xsl:attribute name="{local-name()}" select="concat('images/', .)"/> +</xsl:template> +

    + If your rewrite rules are contained in a Java class, you can set the + result.rewrite-rule.class parameter instead, and pass the name of your Java class in the + value attribute. The custom class should implement the + org.dita.dost.module.RewriteRule interface. +
    +
    diff --git a/topics/plugin-set-parameters.dita b/topics/plugin-set-parameters.dita new file mode 100644 index 0000000..6151b16 --- /dev/null +++ b/topics/plugin-set-parameters.dita @@ -0,0 +1,64 @@ + + + + + Setting parameters with plug-ins + + Setting parameters + + To ensure that output is always generated with the same settings, you can create a plug-in to define a new + output format that automatically sets certain DITA-OT parameters. + + + + property + PDF + plug-in + PDF + draft comments + draft + PDF + property + setting parameters with plug-ins + + + + +

    You might want to build a transformation type that ensures that certain DITA-OT parameters are used. For example, + consider the following scenario.

    +
    + Draft PDFs +

    You want to ensure that PDFs generated for internal review have the following characteristics:

    +
      +
    • +

      Use company style sheets

      +
    • +
    • +

      Make draft comments visible to the reviewers, as they contain queries from the information developers

      +
    • +
    • +

      Print the file names of the graphics underneath figures, so that graphic artists can more quickly respond + to requested changes

      +
    • +
    +

    To accomplish this, you can create a new plug-in. In the Ant script that defines the transformation type, + specify the DITA-OT parameters. For example, to render draft comments and art labels, add + property elements to specify the DITA-OT parameters:

    +

    + <?xml version='1.0' encoding='UTF-8'?> +<project name="com.example.draft.pdf"> + <target name="dita2draft.pdf.init"> + <property name="customization.dir" + location="${dita.plugin.com.example.draft.pdf.dir}/cfg"/> + <property name="args.draft" value="yes"/> + <property name="args.artlbl" value="yes"/> + </target> + <target name="dita2draft.pdf" + depends="dita2draft.pdf.init, dita2production.pdf, dita2pdf2"/> +</project> +

    +
    +
    +
    diff --git a/topics/plugin-use-cases.dita b/topics/plugin-use-cases.dita new file mode 100644 index 0000000..765e57e --- /dev/null +++ b/topics/plugin-use-cases.dita @@ -0,0 +1,16 @@ + + + + + Plug-in use cases + Plug-ins allow you to extend the functionality of DITA-OT. This might entail adding support for specialized + document types, integrating processing overrides, or defining new output transformations. + + + + plug-ins + ideas for + + + + diff --git a/topics/plugin-xmlcatalog.dita b/topics/plugin-xmlcatalog.dita new file mode 100644 index 0000000..2ffd517 --- /dev/null +++ b/topics/plugin-xmlcatalog.dita @@ -0,0 +1,74 @@ + + + + + Extending an XML catalog file + You can update either the main DITA-OT XML catalog or the XML catalog that is used by the PDF plug-in. This + enables DITA-OT to support new specializations and document-type shells. + + + + deprecated features + dita.specialization.catalog + DITA + specializations + plug-ins + DITA specializations + OASIS + catalog + extending + + + + + +

    You can use the dita.specialization.catalog.relative and + org.dita.pdf2.catalog.relative extension points to update the DITA-OT catalog files.

    + The dita.specialization.catalog extension is deprecated. Use + dita.specialization.catalog.relative instead. +
    + + + Using the OASIS catalog format, create an XML catalog file that contains only the new values that you want + to add to a DITA-OT catalog file. + + + Create a plugin.xml file that contains the following content: + <plugin id="plugin-id"> + <feature extension="extension-point" file="file"/> +</plugin>where: +
      +
    • plugin-id is the plug-in identifier, for example, + com.example.catalog.
    • +
    • extension-point is either dita.specialization.catalog.relative + or org.dita.pdf2.catalog.relative.
    • +
    • file is the name of the new catalog file, for example, + catalog-dita.xml.
    • +
    +
    + + Save the new XML catalog file to your plug-in. Be sure that the local file references are relative to the + location of the catalog and plug-in. + + + + +
    + The catalog entries inside of the new catalog file are added to the core DITA-OT catalog file. + + Example +

    This example assumes that catalog-dita.xml contains an OASIS catalog for any document-type + shells inside this plug-in. The catalog entries in catalog-dita.xml are relative to the + catalog itself; when the plug-in is installed, they are added to the core DITA-OT catalog (with the correct + path).

    + <plugin id="com.example.catalog"> + <feature extension="dita.specialization.catalog.relative" + file="catalog-dita.xml"/> +</plugin> +
    +
    +
    diff --git a/topics/plugin-xsltparams.dita b/topics/plugin-xsltparams.dita new file mode 100644 index 0000000..fdd2121 --- /dev/null +++ b/topics/plugin-xsltparams.dita @@ -0,0 +1,79 @@ + + + + + Adding parameters to existing XSLT steps + + Adding new parameters + + You can pass parameters from the Ant build to existing XSLT steps in both the pre-processing pipeline and + certain DITA-OT transformations. This can be useful if you want to make the parameters available as global + xsl:param values within XSLT overrides. + + + + xsl:param + param + dummy + plug-ins + parameters + parameters + adding + plug-ins + XSLT + XSLT + parameters + + + + + + + Create an XML file that contains one or more Ant param elements nested within a + dummy wrapper element. + + <dummy> + <!-- Any Ant code allowed in xslt task is possible. Example: --> + <param name="paramNameinXSLT" expression="${antProperty}" + if="antProperty"/> +</dummy> + + + + Construct a plugin.xml file that contains the following content: + <plugin id="plugin-id"> + <feature extension="extension-point" file="file"/> +</plugin>where: +
      +
    • plugin-id is the plug-in identifier, for example, + com.example.newparam.
    • +
    • extension-point is the DITA-OT extension point, for example, + dita.conductor.xhtml.param. This indicates the DITA-OT processing step where the parameters + will be available.
    • +
    • file is the name of the XML file that you created in step + , for example, insertParameters.xml. +
    • +
    +
    + + + +
    + The plugin.xml file passes the parameters to the specified transformation or + pre-processing module. + + Example +

    The following plug-in passes the parameters defined in the insertParameters.xml file as + input to the XHTML process. Generally, an additional XSLT override will make use of the parameters to do + something new with the generated content.

    + <plugin id="com.example.newparam"> + <feature extension="dita.conductor.xhtml.param" + file="insertParameters.xml"/> +</plugin> +
    +
    +
    diff --git a/topics/plugins-installing.dita b/topics/plugins-installing.dita new file mode 100644 index 0000000..30f43e8 --- /dev/null +++ b/topics/plugins-installing.dita @@ -0,0 +1,41 @@ + + + + + Installing plug-ins + Use the dita install subcommand to install plug-ins. + + + + dita command + plug-ins + plug-ins + installing + integrator + plug-ins + installing + + + + + + + At the command-line prompt, enter the following command: + + dita install <plug-in> +

    where:

    +
      +
    • +
    + + --install. + -install. + + + +
    +
    +
    +
    +
    diff --git a/topics/plugins-registry.dita b/topics/plugins-registry.dita new file mode 100644 index 0000000..0adeb6f --- /dev/null +++ b/topics/plugins-registry.dita @@ -0,0 +1,278 @@ + + + + + Adding plug-ins via the registry + + Plug-in registry + + DITA-OT 3.2 supports a new plug-in registry that makes it easier to discover and + install new plug-ins. The registry provides a searchable list of plug-ins at + . + + + + PDF + plug-in + dita command + plug-in registry + plug-ins + registry + plug-ins + installing + GitHub + plug-ins + URL + + + + +
    +

    In the past, installing plug-ins required you to either download a plug-in to your computer and provide the + path to the plug-in archive (.zip file) or pass the URL of the plug-in distribution file to the + dita command and let DITA-OT download the file. This required that you know the URL of the + plug-in distribution package.

    +
    +
    + Installing plug-ins from the registry +

    With the registry, you can now search the list of available plug-ins at + and install new plug-ins by name and optional version.

    +

    Search the registry for a plug-in and install it by providing the plug-in name to the dita + command.

    + dita --install=<plugin-name> +

    If the registry includes multiple versions of the same plug-in, you can specify the version to install as + follows:

    + dita --install=<plugin-name>@<plugin-version> +

    If the plug-in requires other plug-ins, those are also installed recursively.

    +

    For example, to revert PDF output to the legacy PDF2 layout that was the default in DITA-OT before 2.5, install + the org.dita.pdf2.legacy plug-in as follows:

    + dita --install=org.dita.pdf2.legacy +

    If a matching plug-in cannot be found, an error message will appear. Possible reasons for failure include:

    +
      +
    • A plug-in with the specified name was not found in the registry
    • +
    • A plug-in with the specified version was not found in the registry
    • +
    • The specified plug-in version is not compatible with the installed DITA-OT version
    • +
    • None of the available plug-in versions are compatible with the installed DITA-OT version
    • +
    +
    +
    Publishing plug-ins to the registry +

    The contents of the DITA Open Toolkit plug-in registry are stored in a Git repository at + . New plug-ins or new versions can be added by sending a + that includes a single new plug-in entry in JavaScript Object Notation (JSON) + format.

    + As for all other contributions to the project, pull requests to the registry must be signed off by passing + the --signoff option to the git commit command to certify that you have the + rights to submit this contribution. For more information on this process, see + . +

    The version entries for each plug-in are stored in a file that is named after the plug-in ID as + <plugin-name>.json. The file contains an array of entries with a pre-defined structure. + You should have one entry for each supported version of the plug-in.

    + + Plug-in version entry structure + + + + + + + Key + Mandatory + Description + + + + + name + yes + Plug-in name + + + vers + yes + Plug-in version in + format + + + deps + yes + Array of dependency entries. The only mandatory plug-in dependency is + org.dita.base, which defines the supported DITA-OT platform. + + + url + yes + Absolute URL to plug-in distribution file + + + cksum + no + SHA-256 hash of the plug-in distribution file + + + description + no + Description of the plug-in + + + keywords + no + Array of keywords + + + homepage + no + Plug-in homepage URL + + + license + no + License in + SPDX format + + + +
    + To calculate the SHA-256 checksum for the cksum key, use shasum -a 256 + <plugin-file> on macOS or Linux. With Windows PowerShell, use + Get-FileHash <plugin-file> | + Format-List. + macOS + plug-in registry checksum + Linux + plug-in registry checksum + Windows + plug-in registry checksum + + + Structure for dependency entries + + + + + + + Key + Mandatory + Description + + + + + name + yes + Plug-in name + + + req + yes + Required plug-in version in + format that may contain + ranges. + + + +
    + Version numbers in the vers and req keys use the three-digit format + specified by + . An initial development release of a plug-in might start at version 0.1.0, and an + initial production release at 1.0.0. If your plug-in requires DITA-OT 3.1 or later, set the req + key to >=3.1.0. Using the greater-than sign allows your plug-in to work with compatible + maintenance releases, such as 3.1.3. If the requirement is set to =3.1.0, the registry will + only offer it for installation on that exact version. +
    +
    + Sample plug-in entry file + DocBook +

    The example below shows an entry for the DocBook plug-in. The complete file is available in + the registry as + org.dita.docbook.json.

    + [ + { + "name": "org.dita.docbook", + "description": "Convert DITA to DocBook.", + "keywords": ["DocBook"], + "homepage": "https://github.com/dita-ot/org.dita.docbook/", + "vers": "2.3.0", + "license": "Apache-2.0", + "deps": [ + { + "name": "org.dita.base", + "req": ">=2.3.0" + } + ], + "url": "https://github.com/dita-ot/org.dita.docbook/archive/2.3.zip", + "cksum": "eaf06b0dca8d942bd4152615e39ee8cfb73a624b96d70e10ab269ed6f8a13e21" + } +] +
    +
    + Maintaining multiple plug-in versions +

    When you have multiple versions of a plug-in, include an entry for each version, separated by a comma:

    + [ + { + "name": "org.example.myplugin", + [...] + "vers": "1.0.1", + [...] + }, + { + "name": "org.example.myplugin", + [...] + "vers": "2.1.0", + [...] + } +] + To publish a new version of your plug-in to the registry, add a new entry to the array in the + existing plug-in entry file rather than overwriting an existing entry. This allows users to install the previous + version of the plug-in if they are using an older version of DITA-OT. +
    +
    + Adding custom registries +

    In addition to the main plug-in registry at + , you can create a registry of your own to store the custom plug-ins for + your company or organization.

    +

    A registry is just a directory that contains JSON files like the one above; each JSON file represents one entry + in the registry. To add a custom registry location, edit the + config/configuration.properties file in the DITA-OT installation directory and add the + URL for your custom registry directory to the registry key value, separating each entry with a + space.

    + Custom registry entries are a simple way to test your own plug-in entry file before submitting to + a common registry. +
    +
    Testing with a custom registry +

    To test your plug-in entry with a custom registry:

    +
      +
    1. Fork the plug-in registry, which creates a new repository under your GitHub username — for example, + https://github.com/USERNAME/registry.git.
    2. +
    3. Create a new branch for your plug-in entry, and add the JSON file to the branch — for example, create + org.example.newPlugin.json in the branch addPlugin.
    4. +
    5. As long as your repository is accessible, that branch now represents a working “custom registry” that can be + added to the config/configuration.properties file. Edit the registry key + and add the raw GitHub URL for the branch that contains the JSON file. With the example username and branch + name above, you can add your registry + with:registry=https://raw.githubusercontent.com/USERNAME/registry/addPlugin/ http://plugins.dita-ot.org/
    6. +
    7. You can now test the plug-in installation with: + dita --install=org.example.newPlugin
    8. +
    9. Once you’ve confirmed that the entry works, you can submit a pull request to have your entry added to the + common registry.
    10. +
    +
    + +
    diff --git a/topics/plugins-removing.dita b/topics/plugins-removing.dita new file mode 100644 index 0000000..6883597 --- /dev/null +++ b/topics/plugins-removing.dita @@ -0,0 +1,36 @@ + + + + + Removing plug-ins + Use the dita uninstall subcommand to remove a plug-in. + + + + dita command + plug-ins + plug-ins + uninstalling + + + + + + + At the command-line prompt, enter the following command: + + dita uninstall <plug-in-id> +

    where:

    +
      +
    • +
    + + --uninstall. + -uninstall. + +
    +
    +
    +
    +
    diff --git a/topics/prerequisite-software.dita b/topics/prerequisite-software.dita new file mode 100644 index 0000000..3a8e217 --- /dev/null +++ b/topics/prerequisite-software.dita @@ -0,0 +1,79 @@ + + + + + Prerequisite software + The software that DITA-OT requires depends on the output formats you want to use. + + + + RenderX + XSL-FO processor + Antenna House + XSL-FO processor + Apache FOP + XSL-FO processor + installing + prerequisites + XSLT + processor + XSLT + 2.0 + Saxon + version + Java + Java Development Kit (JDK) + Java Runtime Environment (JRE) + XSL-FO processor + Antenna House + RenderX + Apache FOP + + + + +
    + Software required for core DITA-OT processing +

    DITA-OT requires the following software applications: +

    + +
    Java Development Kit (JDK) or Java Runtime Environment (JRE)
    +
    +

    + This is the only prerequisite that you need to install. All other required software is + provided in the distribution package, including + Apache Ant + , + Saxon + , and + ICU for Java + . +

    +
    +
    +

    +
    +
    + Software required for specific transformations + locale +

    Depending on the type of output that you want to generate, you might need the following applications: +

    + +
    HTML Help Workshop
    +
    Microsoft no longer provides the software required for generating Compiled HTML Help (.chm) files. You + can download an archived copy of the HTML Help Workshop from the Internet Archive’s Wayback Machine at + .
    +
    + +
    XSL-FO processor
    +
    Required for generating PDF output. Apache FOP (Formatting + Objects Processor) is included in the distribution package. + You can download other versions from + . + You can also use commercial FO processors such as Antenna House Formatter or RenderX XEP.
    +
    +
    +

    +
    +
    +
    diff --git a/topics/project-files-json.dita b/topics/project-files-json.dita new file mode 100644 index 0000000..371e38c --- /dev/null +++ b/topics/project-files-json.dita @@ -0,0 +1,47 @@ + + + + + Sample JSON project files + + JSON project files + + DITA-OT includes sample project files in + format that can be used to define a publication project. Like the XML project samples, the + sample JSON files illustrate how deliverables can be described for use in publication projects. The JSON samples are + functionally equivalent to their XML and YAML counterparts, with minor adaptations to JSON file syntax. + + + + JSON project files + project files + JSON + + + + +

    Project files can be designed in a modular fashion to create reusable configuration structures that allow you to + define settings in one file and refer to them in other projects to publish multiple deliverables at once.

    +

    For example, /project-files/html.json defines + a single HTML deliverable.

    + + Sample project file for HTML output + + +

    This file can be used to generate the HTML version of the DITA-OT documentation by running the following command + from the docsrc folder of the DITA-OT installation directory:

    + dita --project=samples/project-files/html.json +

    The project file for HTML output imports the common html context from a shared project context + defined in the /project-files/common.json + file, which includes the input map file and the DITAVAL file used to filter the output.

    + + Sample shared context for HTML-based output + + +
    +
    diff --git a/topics/project-files-xml.dita b/topics/project-files-xml.dita new file mode 100644 index 0000000..1e02ece --- /dev/null +++ b/topics/project-files-xml.dita @@ -0,0 +1,81 @@ + + + + + Sample XML project files + + XML project files + + DITA-OT includes sample XML project files that can be used to define a publication project. The XML format + can be validated with a RELAX NG schema provided in the resources folder of the DITA-OT + installation (project.rnc). + + + + XML project files + project files + XML + + + + +

    Project files can be designed in a modular fashion to create reusable configuration structures that allow you to + define settings in one file and refer to them in other projects to publish multiple deliverables at once.

    +

    For example, /project-files/html.xml defines + a single HTML deliverable.

    + + Sample project file for HTML output + + +

    This file can be used to generate the HTML version of the DITA-OT documentation by running the following command + from the docsrc folder of the DITA-OT installation directory:

    + dita --project=samples/project-files/html.xml +

    The project file for HTML output imports the common html context from a shared project context + defined in the /project-files/common.xml file, + which includes the input map file and the DITAVAL file used to filter the output.

    + + Sample shared context for HTML-based output + + +

    The same common html context is also referenced in the project file for HTMLHelp output, as + illustrated in /project-files/htmlhelp.xml.

    + + Sample project file for HTMLHelp output + + +

    The /project-files/pdf.xml file defines a + single PDF deliverable.

    + + Sample project file for PDF output + + +

    This file can be used to generate the PDF version of the DITA-OT documentation by running the following command + from the docsrc folder of the DITA-OT installation directory:

    + dita --project=samples/project-files/pdf.xml +

    The /project-files/distribution-docs.xml file + includes both the HTML and PDF projects as follows:

    + +

    To build both the HTML and PDF versions of the documentation as included in the distribution package, run the + following command from the docsrc folder of the DITA-OT installation directory:

    + dita --project=samples/project-files/distribution-docs.xml +

    The /project-files/all.xml file includes all + three project deliverables as follows:

    + +
    +
    diff --git a/topics/project-files-yaml.dita b/topics/project-files-yaml.dita new file mode 100644 index 0000000..1cfe6bc --- /dev/null +++ b/topics/project-files-yaml.dita @@ -0,0 +1,47 @@ + + + + + Sample YAML project files + + YAML project files + + DITA-OT includes sample project files in + format that can be used to define a publication project. Like the XML project samples, the + sample YAML files illustrate how deliverables can be described for use in publication projects. The YAML samples are + functionally equivalent to their XML and JSON counterparts, with minor adaptations to YAML file syntax. + + + + YAML project files + project files + YAML + + + + +

    Project files can be designed in a modular fashion to create reusable configuration structures that allow you to + define settings in one file and refer to them in other projects to publish multiple deliverables at once.

    +

    For example, /project-files/html.yaml defines + a single HTML deliverable.

    + + Sample project file for HTML output + + +

    This file can be used to generate the HTML version of the DITA-OT documentation by running the following command + from the docsrc folder of the DITA-OT installation directory:

    + dita --project=samples/project-files/html.yaml +

    The project file for HTML output imports the common html context from a shared project context + defined in the /project-files/common.yaml + file, which includes the input map file and the DITAVAL file used to filter the output.

    + + Sample shared context for HTML-based output + + +
    +
    diff --git a/topics/publishing-reltables.ditamap b/topics/publishing-reltables.ditamap new file mode 100644 index 0000000..4157b58 --- /dev/null +++ b/topics/publishing-reltables.ditamap @@ -0,0 +1,77 @@ + + + + + Relationship Tables + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + More information about building output with the dita command + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/topics/publishing-with-ant.dita b/topics/publishing-with-ant.dita new file mode 100644 index 0000000..42163a0 --- /dev/null +++ b/topics/publishing-with-ant.dita @@ -0,0 +1,19 @@ + + + + + Building output using Ant + + Using Ant + + You can use Ant to invoke DITA Open Toolkit and generate output. You can use the complete set of parameters + that the toolkit supports. + + + + Ant + publishing with + + + + diff --git a/topics/publishing.ditamap b/topics/publishing.ditamap new file mode 100644 index 0000000..6103d57 --- /dev/null +++ b/topics/publishing.ditamap @@ -0,0 +1,39 @@ + + + + + + Publishing + + + + Using the dita command + + + + build- + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/topics/rebuilding-docs.dita b/topics/rebuilding-docs.dita new file mode 100644 index 0000000..57e6c87 --- /dev/null +++ b/topics/rebuilding-docs.dita @@ -0,0 +1,59 @@ + + + + + Rebuilding the DITA-OT documentation + + Rebuilding documentation + + When you add or remove plug-ins, you can rebuild the documentation to update the information on the + extension points, messages, and parameters that are available in your environment. + + + + macOS + gradle + rebuilding documentation + Linux + gradle + rebuilding documentation + Windows + gradlew + rebuilding documentation + + + + + +

    DITA-OT ships with a build script that enables you to rebuild the toolkit + documentation. The build script reads the toolkit’s plug-in configuration and automatically regenerates topics + and properties file templates based on the extension points, messages, and parameters provided by the installed + plug-ins.

    + If you have installed new plug-ins, you may need to add the corresponding generated topics + to the DITA maps to include the new information in the output.
    + + + Change to the docsrc/ subdirectory of the DITA-OT installation. + + + Run one of the following commands. + + On Linux and macOS: + ./gradlew target + On Windows: gradlew.bat target + + +

    The target parameter is optional and specifies a transformation type. It takes the + following values: +

      +
    • +
    • +
    • +
    +

    +

    If you do not specify a target, HTML5 and PDF output is generated.

    +
    +
    +
    +
    +
    diff --git a/topics/reducing-processing-time.dita b/topics/reducing-processing-time.dita new file mode 100644 index 0000000..5f55a8e --- /dev/null +++ b/topics/reducing-processing-time.dita @@ -0,0 +1,94 @@ + + + + + Speeding up builds + Several configuration changes can significantly reduce DITA-OT processing time. + + + + xtrf + xtrc + processing time + Java + required version + debugging + generate-debug-attributes + JVM + + + + +
    + Disable debug attribute generation +

    The generate-debug-attributes parameter determines whether debugging attributes are + generated in the temporary files. By changing the value to false, DITA-OT will no longer + generate the xtrf and xtrc debug attributes. This will make it more + difficult to track down the source file location from which a given issue may have originated, but it will + reduce the size of the temporary files. As a result, XML parsing will take less time and overall processing + time will be reduced.

    +
    +
    + Use a fast disk for the temporary directory +

    DITA-OT keeps topic and map files as separate files and processes each file multiple times during + pre-processing. Thus reading from disk, parsing XML, serializing XML, and writing to disk makes processing + quite I/O intensive. Use either an + SSD or a + RAM disk for + temporary files, and never use a temporary directory that is not located on the same machine as where the + processing takes place.

    +
    +
    + Enable parallel processing +

    As of DITA-OT 3.6, pre-processing module code can be run in parallel by setting the + parallel parameter to . The performance benefits this option + provides depend heavily on the source file set, the DITA features used in the project, and the computer + doing the processing, but under the right circumstances, you may see notable improvements when this option + is enabled.

    +
    +
    + Enable in-memory processing +

    As of DITA-OT 3.6, the Cache Store can be activated by setting the store-type parameter + to . For more information, see + .

    +
    +
    + Reuse the JVM instance +

    For all but large source sets, the Java virtual machine (JVM) will not have enough time to warm-up. By + reusing the same JVM instance, the first few DITA-OT conversions will be “normal”, but when the Just-In-Time + (JIT) compiler starts to kick in, the performance increase may be 2-10 fold. This is especially noticeable + with smaller source sets, as much of the DITA-OT processing is I/O intensive.

    + The + uses this mechanism (along with incremental builds) to reduce processing + time. You can run DITA-OT with these features via the + . +
    +
    + Use the latest Java version +

    DITA-OT 2.0 to 2.3 require Java 7, and DITA-OT 2.4 and newer require Java 8. However, using a newer version + of Java may further reduce processing time, depending on your operating system.

    +
    +
    + Re-enable Java file caching +

    As of Java 12, the file canonicalization cache is no longer enabled by default (see + ). On Windows, this results in significantly longer build times, and slight + increases on Linux. To re-enable file caching, add -Dsun.io.useCanonCaches=true to the Java + invocation command in the dita.bat and ant.bat wrapper + scripts.

    + As of DITA-OT 3.7.3, this system property is set by default in the bundled wrapper scripts. +
    + + + + + Collected links + + SSD + + + RAM disk + + + +
    diff --git a/topics/referencing-other-plugins.dita b/topics/referencing-other-plugins.dita new file mode 100644 index 0000000..c821d32 --- /dev/null +++ b/topics/referencing-other-plugins.dita @@ -0,0 +1,95 @@ + + + + + Referencing files from other plug-ins + Starting with DITA-OT 1.5.4, you can use the plugin:plugin-id URI extension and the ${dita.plugin.plugin-id.dir} Ant variable to reference the base path of another + installed DITA-OT plug-in. + + + + xsl:import + xmlcatalog + xslt + plug-ins + using file in another plug-in + XSLT + using another plug-in + pre-processing + XSLT + catalog + referencing + CSS + HTML5 + HTML5 + CSS + + + + +
    +

    Sometimes you need to reference content in another DITA-OT plug-in. However, the path to an installed plug-in + is not guaranteed to be the same between different installed instances of DITA-OT. The URI extension and Ant variable are provided so your build and XSLT files always + use the correct path to the plug-in.

    +

    Within a single plug-in, you can safely use relative path references, for example, + xsl/my.xsl without specifying the path to the plug-in itself.

    +
    + + + Use in Ant build files. + +

    Use the Ant variable anywhere in your build file or + template to point to the base path of an installed DITA-OT plug-in.

    +
    + +

    The following example copies CSS files from the HTML5 plug-in:

    + <copy todir="${dita.temp.dir}/css"> + <fileset dir="${dita.plugin.org.dita.html5.dir}/css" + includes="*.css"/> +</copy> +
    +
    + + Use in XSLT files. + +

    Use the URI extension at the beginning of a + file reference—usually in xsl:import—to point to the base path of an installed + DITA-OT plug-in.

    +
    + +

    The following example imports the base output-message.xsl processing:

    + <xsl:import href="plugin:org.dita.base:xsl/common/output-message.xsl"/> +
    + +

    To use the URI extension, your plug-in must reference the DITA-OT catalog file. In your Ant build file, add + an xmlcatalog element referencing the DITA-OT catalog file as a child of the + xslt element.

    +
    + + <xslt style="xsl/my.xsl" + in="${dita.temp.dir}/input.file" + out="${dita.temp.dir}/output.file"> + <xmlcatalog refid="dita.catalog"/> +</xslt> + +
    +
    + +

    For both of these methods, make sure you use the plug-in ID (defined in the plugin.xml + file) rather than the folder name of the plug-in. In many cases, the folder name is not the same as the plug-in + ID.

    +
    +
    +
    diff --git a/topics/release-history.dita b/topics/release-history.dita new file mode 100644 index 0000000..53b04ec --- /dev/null +++ b/topics/release-history.dita @@ -0,0 +1,13 @@ + + + + + DITA-OT release history + + Release history + + Release Notes archives contain information on the changes in earlier versions. + +

    + + diff --git a/topics/sample-pdf-theme.dita b/topics/sample-pdf-theme.dita new file mode 100644 index 0000000..277756c --- /dev/null +++ b/topics/sample-pdf-theme.dita @@ -0,0 +1,156 @@ + + + + + Sample theme file + Theme files can be written in either + or + format. The docsrc/samples/themes folder in the DITA-OT installation + directory provides several examples. + + The examples provided here are all in YAML format, which is generally more compact and readable than + JSON. +

    The YAML theme file used to produce the PDF output for the DITA-OT documentation is included in the installation + directory as /themes/dita-ot-docs-theme.yaml.

    +

    The examples below include excerpts from this theme that show common customizations. You can adapt these examples + for your own requirements.

    + For an overview of the elements and other settings that the theme plug-in supports, see + , + , + , and + . + + Setting custom colors +

    Like in CSS or + , you can use + to define brand colors and other shared values, and re-use these them in other + using semantic references such as $brand-color-primary.

    + + Color variables in <filepath conkeyref="conref-task/samples-dir"/><filepath + >/themes/dita-ot-docs-theme.yaml</filepath> +

    +
    +
    + + Defining custom font stacks +

    You can also use + to specify a prioritized list of one or more font family names and reference these + values in the font-family property of other + style keys.

    + + Font families in <filepath conkeyref="conref-task/samples-dir"/><filepath + >/themes/dita-ot-docs-theme.yaml</filepath> +

    +
    +

    This theme uses the default font stacks from the default org.dita.pdf2 plug-in, but the same + approach can be used to define other font families as required by your corporate identity.

    +

    The font variables defined here under the pdf2 prefix could just as well be added to the + brand key, or under a company name prefix and re-used elsewhere with references such as + $company-font-sans.

    +
    + + Defining page sizes +

    + include page size, orientation, and margins.

    + + Page settings in <filepath conkeyref="conref-task/samples-dir"/><filepath + >/themes/dita-ot-docs-theme.yaml</filepath> +

    +
    +

    The DITA-OT documentation theme uses the PA4 page size, a 21 × 28 cm transitional format + suitable for printing on both A4 and US Letter paper.

    +

    The mirror-margins key sets up facing pages for double-sided documents, so the margins of the + left page are a mirror image of those on the right.

    +
    + + Extending and overriding themes +

    You can + extend one theme with another. The samples in the DITA-OT installation + directory include additional theme files that can be used to override the PA4 page size in the + documentation theme with either A4 or Letter.

    + + Switching page size to A4 with <filepath conkeyref="conref-task/samples-dir"/><filepath + >/themes/dita-ot-docs_A4.yaml</filepath> +

    +
    + + Switching page size to Letter with <filepath conkeyref="conref-task/samples-dir"/><filepath + >/themes/dita-ot-docs_Letter.yaml</filepath> +

    +
    +

    When one of these theme extensions is passed to the dita command via the + --theme option, the page-size value in the extending theme takes + precedence over the original value in dita-ot-docs-theme.yaml.

    +

    If you add any new keys to a theme extension, they will be overlaid onto the keys from the extended theme.

    +
    + + Setting up headers and footers +

    The documentation theme includes sample customizations to adjust the content of the running headers and footers + that appear on each page.

    + + Formatting headers and running content in <filepath conkeyref="conref-task/samples-dir"/><filepath + >/themes/dita-ot-docs-theme.yaml</filepath> +

    +
    +

    These settings use the secondary brand color for page headers (as defined above under + ), the sans-serif font families defined above under + , and position the content with indentation and padding.

    + + Formatting footers and page numbers in <filepath conkeyref="conref-task/samples-dir"/><filepath + >/themes/dita-ot-docs-theme.yaml</filepath> +

    +
    +

    These settings use the {folio} field to place the current page number on the outside edges of + each page footer. The content key may include combinations of static text, or reference + variables using curly braces. For details on the available options, see + and + .

    +
    + + Adding an image to the cover page +

    The cover and cover-title + can be used to add a background image and adjust the formatting and placement of the + document title.

    + + Cover page settings in <filepath conkeyref="conref-task/samples-dir"/><filepath + >/themes/dita-ot-docs-theme.yaml</filepath> +

    +
    +

    The DITA-OT documentation theme references a background image stored in the same folder as the theme file, + and places the title at the bottom of the page by + setting the space-before property for the cover-title.

    + The latest version of the documentation theme is available on GitHub: + dita-ot-docs-theme.yaml. +
    + + diff --git a/topics/transformations.ditamap b/topics/transformations.ditamap new file mode 100644 index 0000000..bae61d6 --- /dev/null +++ b/topics/transformations.ditamap @@ -0,0 +1,15 @@ + + + + + DITA-OT transformations + + + + + + + + + + diff --git a/topics/troubleshooting-overview.dita b/topics/troubleshooting-overview.dita new file mode 100644 index 0000000..2bdc0b8 --- /dev/null +++ b/topics/troubleshooting-overview.dita @@ -0,0 +1,11 @@ + + + + + Error messages and troubleshooting + + Troubleshooting + + This section contains information about problems that you might encounter and how to resolve + them. + diff --git a/topics/troubleshooting.ditamap b/topics/troubleshooting.ditamap new file mode 100644 index 0000000..53011bb --- /dev/null +++ b/topics/troubleshooting.ditamap @@ -0,0 +1,16 @@ + + + + + Troubleshooting + + + + + + + + + + + diff --git a/topics/using-dita-command.dita b/topics/using-dita-command.dita new file mode 100644 index 0000000..cd610d4 --- /dev/null +++ b/topics/using-dita-command.dita @@ -0,0 +1,94 @@ + + + + + Building output using the <cmdname>dita</cmdname> command + You can generate output using the dita command-line tool. Build parameters can be + specified on the command line or with .properties files. + + + + macOS + dita command + Linux + dita command + Windows + dita command + dita command + using + + + + + The DITA-OT client is a command-line tool with no graphical user interface. To verify + that your installation works correctly, you can build output using the sample files included in the distribution + package. + + + Open a terminal window by typing the following in the search bar: + + + Linux or macOS  + Type Terminal. + + + Windows + Type Command Prompt. + + + + + At the command-line prompt, enter the following command: + --input=input-file --format=format [options] +

    where:

    +
      +
    • +
    • +
    • +
    • +
    + +
    +
    + +

    Run from , the following command generates HTML5 output for the + sequence.ditamap file:

    + --input=sequence.ditamap --format= + DITA maps + dita command example +
    + +

    For example, from , run:

    +

    + dita --input=sequence.ditamap --format= \ + --output=output/sequence \ + --args.input.dir= \ + --propertyfile=properties/sequence-html5.properties +

    +

    This builds sequence.ditamap to HTML5 output in output/sequence using + the following additional parameters specified in the properties/sequence-html5.properties + file:

    +

    + +

    + DITA maps + dita command example +
    + +

    Most builds require you to specify more options than are described in this topic.

    +

    Usually, you will want to specify a set of reusable build parameters in a + .properties file.

    +
    +
    +
    diff --git a/topics/using-dita-properties-file.dita b/topics/using-dita-properties-file.dita new file mode 100644 index 0000000..f87fb72 --- /dev/null +++ b/topics/using-dita-properties-file.dita @@ -0,0 +1,89 @@ + + + + + Setting build parameters with <filepath>.properties</filepath> files + + Using a properties file + + Usually, DITA builds require setting a number of parameters that do not change frequently. You can + reference a set of build parameters defined in a .properties file when building output with the + dita command. If needed, you can override any parameter by specifying it explicitly as an + argument to the dita command. + + + + draft + draft + required-cleanup + dita command + .properties file + DITA maps + properties file + .properties file + + + + +
    + About <filepath>.properties</filepath> files +

    A .properties file is a text file that enumerates one or more name-value pairs, one per + line, in the format name = value. The .properties filename extension is + customarily used, but is not required.

    +
      +
    • Lines beginning with the # character are comments.
    • +
    • Properties specified as arguments of the dita command override those set in + .properties files. For this reason, + args.input and transtype can’t be set in the + .properties file.
    • +
    • If you specify the same property more than once, the last instance is used.
    • +
    • Properties not used by the selected transformation type are ignored.
    • +
    • Properties can reference other property values defined elsewhere in the .properties + file or passed by the dita command. Use the Ant + ${property.name} syntax.
    • +
    • You can set properties not only for the default DITA-OT transformation types, but also for custom plugins. +
    • +
    +
    + + + Create your .properties file. + + + + +

    For example:

    +

    +

    +
    +
    + + Reference your .properties file with the dita command when building + your output. + + dita --input=my.ditamap --format= --propertyfile=my.properties + + + + + If needed, pass additional arguments to the dita command to override specific build + parameters. + +

    For example, to build output once with draft and + required-cleanup content:

    + dita --input=my.ditamap --format= --propertyfile=my.properties \ + --args.draft= +
    + + + +
    +
    +
    +
    diff --git a/topics/using-docker-images.dita b/topics/using-docker-images.dita new file mode 100644 index 0000000..36a4643 --- /dev/null +++ b/topics/using-docker-images.dita @@ -0,0 +1,113 @@ + + + + + Running the <cmdname>dita</cmdname> command from a Docker image + + Using Docker images + + + + is a platform used to build, share, and run portable application containers. As of version + 3.4, the DITA-OT project provides an official Docker container image that includes everything you need to run the + toolkit and publish DITA content from a containerized environment. + + + + dita command + running from Docker images + Docker images + + + + +
    + About application containers +

    Using containers to deploy applications isolates software from its environment to ensure that it works + consistently despite any differences in the host operating system, for example.

    +

    Docker containers are designed as stateless machines that can be quickly created and destroyed, started and + stopped. Each Docker image provides its own private filesystem that includes only the code required to run the + application itself — it is not intended for persistent data storage.

    +

    When a container is stopped, any changes made within the container are lost, so source files and generated + output should be stored outside the container. These resources are attached to the container by mounting + directories from the host machine.

    +
    + +

    To run the DITA-OT image, you will need to install Docker and be able to access the GitHub Container Registry. +

      +
    • To download Docker Desktop, you may be prompted to sign in with your Docker ID (or sign up to create + one).
    • +
    +

    +
    + + + Install Docker for your operating system. + + + Install + Docker Desktop on Windows + + + Install Docker + Desktop on Mac + + On macOS, you can also install Docker Desktop via + : + $ brew install homebrew/cask/docker +Downloading… + + + When you first run the Docker Desktop application, you may be prompted to grant privileged access to allow + Docker to install its networking components and links to the Docker apps. Grant this access and accept the + service agreement to proceed. + + On Linux, install Docker Community Edition (CE) via your operating system’s package manager, for + example: $ sudo apt-get install docker-ce + + + + To build output, map a host directory to a container volume and specify options for the + dita command. + + $ docker run --rm \ + -v /Users/username/source:/src ghcr.io/dita-ot/dita-ot: \ + -i /src/input.ditamap \ + -o /src/out \ + -f html5 -v +

    This command sequence specifies the following options: +

      +
    • mounts the source subfolder of your home directory and binds + it to the /src volume in the container
    • +
    • specifies the input.ditamap file in your + source folder as the input map file
    • +
    • writes the output to source/out
    • +
    • sets the output format to HTML5, and
    • +
    • displays build progress messages with verbose logging
    • +
    +

    +
    +

    On Windows, if your Users directory is on the C:\ drive, use + /c/Users/… to map the host directory:

    + > C:\Users\username> docker run --rm ^ + -v /c/Users/username/source:/src ghcr.io/dita-ot/dita-ot: ^ + -i /src/input.ditamap ^ + -o /src/out ^ + -f html5 -v +
    +
    + + The DITA-OT container image uses the ENTRYPOINT instruction to run the + dita command from the /opt/app/bin/ directory of the container + automatically, so you there’s no need to include the dita command itself, only the + arguments and options you need to publish your content. + +
    +
    +
    +
    diff --git a/topics/using-github-actions.dita b/topics/using-github-actions.dita new file mode 100644 index 0000000..1a5ac20 --- /dev/null +++ b/topics/using-github-actions.dita @@ -0,0 +1,99 @@ + + + + + Running the <cmdname>dita</cmdname> command from a GitHub Action + + Using GitHub Actions + + + + are a CI/CD workflow mechanism attached to GitHub. Each action is an individual + unit of functionality that can be combined with other GitHub Actions to create workflows, which are triggered in + response to certain GitHub events. As of version 3.6.1, the DITA-OT project provides an official + that can be used as a step within a GitHub workflow to publish + documentation as part of your CI/CD pipeline. + + + + dita command + running from GitHub CI/CD + GitHub Actions + + + + +
    + About GitHub Actions +

    + GitHub Actions can automate tasks such as document generation as part of your + software development life cycle. GitHub Actions are event-driven, allowing a + series of tasks to run one after another when a specified event has occurred. +

    +

    Each step is an individual atomic task that can run commands in a job. A step can be either an action or a + shell command. Each step in a job executes on the same runner, allowing the actions in that job to share data + with each other, therefore files generated through the dita-ot-build action can be archived or + published by later actions within the same job.

    +
    + + + In your GitHub repository, create the .github/workflows/ directory to store your workflow files. + + + In the .github/workflows/ directory, create a new file called + dita-ot-build-actions.yml and add the following code. + + + + This setup ensures the action runs whenever code is updated on the master branch and + checks out the codebase. + + + In the same file, add the following code. + + +

    This action specifies the following: +

      +
    • name defines the name of the action to be displayed within the GitHub repository
    • +
    • uses specifies the name and version of the GitHub Action to run. Use dita-ot/dita-ot-action@master to run the latest version.
    • +
    • input specifies the name and location of the input map file within the GitHub + repository (relative to the repository root)
    • +
    • transtype sets the output format to PDF, and
    • +
    • output-path writes the output to the out folder within the running action
    • +
    +

    +
    +
    +
    + +

    The docsrc/samples folder in the DITA-OT installation directory contains several complete + examples. The following GitHub Action generates styled HTML and PDF outputs.

    + + Sample GitHub Action: <filepath conkeyref="conref-task/samples-dir"/><filepath + >/github-actions/dita-ot-pipeline.yaml</filepath> + + +

    The Build HTML5 + Bootstrap step reuses the input, + transtype and output-path settings. In addition, additional DITA-OT + plug-ins can be loaded using the plugins parameter, with each plug-in separated by a comma or + new line separator.

    +

    The Build PDF step uses an alternative syntax where the install and + build parameters are used to run arbitrary commands from the command line.

    +
    + See the docsrc/samples/github-actions folder in the DITA-OT installation directory for + additional examples of GitHub Actions for different scenarios. +
    +
    diff --git a/topics/using-plugins.ditamap b/topics/using-plugins.ditamap new file mode 100644 index 0000000..8d61438 --- /dev/null +++ b/topics/using-plugins.ditamap @@ -0,0 +1,25 @@ + + + + + Working with plug-ins + + + + + + + + Bi-directional links + + + + + + + + + + + + diff --git a/topics/using-project-files.dita b/topics/using-project-files.dita new file mode 100644 index 0000000..96c68eb --- /dev/null +++ b/topics/using-project-files.dita @@ -0,0 +1,161 @@ + + + + + Publishing with project files + + Using a project file + + DITA-OT 3.4 introduced project files that allow you to publish multiple deliverables at once. Each + deliverable specifies a re-usable source context that groups the maps or topics you want to + publish, an output folder, and a publication format (such as HTML, or PDF) with + transformation parameters. + + + + dita command + project files + project files + using + + + + +
    + About project files +

    Project files may be defined in one of three formats: XML, + , or + . The XML format can be validated with a RELAX NG schema provided in the + resources folder of the DITA-OT installation (project.rnc).

    + The XML project file format is the normative version provided for interoperability with existing XML-based + toolchains. The JSON and YAML versions are alternative compact formats that are easier to read and write, but + otherwise equivalent to the XML syntax. +

    Whereas .properties files can only be used to set parameters, + project files go further, allowing you to define multiple deliverables with separate input files and output + folders and formats for each publication. A project file can also refer to other project files with + include statements. Deliverables, contexts, and publications can either be entirely + self-contained, or reference others with idref attributes, so you can re-use common + configuration structures across (and within) projects.

    +

    Another advantage of project files over .properties files is that + they allow you to specify paths relative to the project file, even for parameters that require absolute paths, + such as: +

      +
    • args.cssroot
    • +
    • args.ftr
    • +
    • args.hdf
    • +
    • args.hdr
    • +
    +

    +
    +
    + Syntax +

    Though the exact syntax differs slightly, the basic structure of project files is + similar in all supported formats.

    +

    The following settings can be defined for each deliverable:

    +
      +
    • +

      a source context that may include: +

        +
      • an id that allows you to refer to this context from other contexts or projects
      • +
      • an idref that refers to another context
      • +
      • a series of input files (the DITA maps or topics you want to publish)
      • +
      • a profile with a series of DITAVAL files used to filter the content of all + publications in the deliverable
      • +
      +

      +
    • +
    • +

      an output location (relative to the CLI --output directory)

    • +
    • +

      a publication type that defines: +

        +
      • an id that allows you to refer to this publication from other publications or + projects
      • +
      • an idref that refers to another publication
      • +
      • a transtype that specifies an output format (such as HTML, or PDF)
      • +
      • a series of param elements, with any parameters to set for this transformation type, + specified via name and either href, path, or + value
      • +
      • a profile with any additional DITAVAL files used to filter the content of the + publication (in addition to any filters defined in the map context)
      • +

      +

      Parameters defined in a publication can override those in other publications that are referenced via + idref.

      + + Sample project file with publication parameter overrides: <filepath + conkeyref="conref-task/samples-dir" + /><filepath>/project-files/param-override.xml</filepath> + + +
    • +
    + +
      +
    • Use href for web addresses and other resources that should resolve to an absolute + URI. Relative references are resolved using the project file as a base directory.
    • +
    • Use path for parameters that require an absolute value, like + args.cssroot. Paths may be defined relative to the project file, but are always + expanded to an absolute system path.
    • +
    • Use value to define strings and relative values for properties like + args.csspath, which is used to describe a relative path in the output folder. String + values are passed as is.
    • +
    +
    +
    +
    + Project filtering +

    As of DITA-OT 4.0, you can add DITAVAL filters to both contexts and publications. If a set of filter conditions + applies to most or all of your deliverables, then it should probably be defined in a publication, rather than in + contexts.

    +

    For example, consider a case with 100 maps that have multiple product variants, but every one + of which is published in two audience conditions (internal or external). If + audience is varied in publications, the structure is orthogonal and well-organized:

    + + Sample filtering scenario + + +
    + + + Create a project file to define the deliverables in your publication project. + +

    For example:

    + + Sample project file for PDF output: <filepath conkeyref="conref-task/samples-dir"/><filepath + >/project-files/pdf.xml</filepath> + + +
    +
    + + Pass your project file to the dita command to build output. + + dita --project=pdf.xml + + + + If needed, pass additional arguments to the dita command to override specific build + parameters. + +

    For example, to build output once with draft and + required-cleanup content:

    + dita --project=pdf.xml --args.draft= +
    +
    + + If your project contains multiple deliverables, you can pass the --deliverable option + to generate output for a single deliverable ID. + + dita --project=all.xml --deliverable= + + +
    +
    +
    diff --git a/topics/web-based-resources.dita b/topics/web-based-resources.dita new file mode 100644 index 0000000..704d80b --- /dev/null +++ b/topics/web-based-resources.dita @@ -0,0 +1,73 @@ + + + + + Web-based resources + There are many vital DITA resources online, including the DITA Users group and the DITA-OT project website + at dita-ot.org. + +
    +
    + +
    + DITA-OT project website: + dita-ot.org
    +
    The DITA-OT project website at dita-ot.org provides information about the latest toolkit releases, + including download links, release notes, and documentation for recent DITA-OT versions. + dita-ot.org + project website + dita-ot.org
    +
    + +
    + DITA Users group
    +
    The original dita-users group was founded in 2004 as a Yahoo! Group and moved to Groups.io in November + 2019. The mailing list addresses the needs of DITA users at all levels of experience, from beginners to + experts, and serves as a vital resource for the DITA community. + DITA Users group + Yahoo! dita-users group + DITA Users group
    +
    + +
    + DITA-OT Discussions +
    +
    The DITA-OT Discussions forum on GitHub is a collaborative communication platform that allows members of + the community to ask questions, share suggestions, upvote discussions to signal support, and mark questions as answered. + GitHub Discussions + DITA-OT Discussions
    +
    + +
    + DITA-OT Users + group +
    +
    General interest DITA-OT mailing list, for questions on any aspect of the toolkit — from installation and + getting started to specific overrides, plug-ins, and customizations. + DITA-OT Users group + Google Group + DITA-OT Users group
    +
    + +
    + Home page for the + DITA Technical Committee
    +
    The OASIS DITA Technical Committee develops the DITA standard. + OASIS + DITA Technical Committee
    +
    + +
    + DITA-OT + project archive
    +
    The DITA-OT project archive at dita-archive.xml.org provides news about earlier toolkit releases, and + release notes for legacy versions.
    +
    +
    +
    +
    +
    diff --git a/userguide-book.ditamap b/userguide-book.ditamap new file mode 100644 index 0000000..fbbc786 --- /dev/null +++ b/userguide-book.ditamap @@ -0,0 +1,65 @@ + + + + + DITA Open Toolkit Release <keyword keyref="release"/> + + + DITA Open Toolkit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/userguide.ditamap b/userguide.ditamap new file mode 100644 index 0000000..44a9943 --- /dev/null +++ b/userguide.ditamap @@ -0,0 +1,37 @@ + + + + + DITA Open Toolkit <keyword keyref="release"/> + + + + + Source and target: Links that apply only to HTML version of distribution documentation + + + + + + + + + + + + + DITA-OT Java API documentation + + + + + + + + + + + + + +