diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a590bca1..ef54b9e0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,8 +24,8 @@ jobs: uses: gradle/gradle-build-action@v3 # validate and build - - name: Validate Help - run: ./gradlew convertHelp + - name: Generate Documents + run: ./gradlew generateDocs - name: Validate Dictionaries run: ./gradlew validateLanguages - name: Build Languages diff --git a/app/build.gradle b/app/build.gradle index c5debd5d..1567ad24 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -53,12 +53,13 @@ tasks.register('copyDownloadsToAssets', Copy) { } -tasks.register('convertHelp') { +tasks.register('generateDocs') { inputs.dir HELP_MARKDOWN_DIR - outputs.dir HELP_HTML_DIR + inputs.file PRIVACY_POLICY_MARKDOWN + outputs.dir DOCS_HTML_DIR doLast { - convertHelpDocs(HELP_MARKDOWN_DIR, HELP_HTML_DIR) + convertDocs(HELP_MARKDOWN_DIR, PRIVACY_POLICY_MARKDOWN, DOCS_HTML_DIR) } } @@ -72,7 +73,7 @@ clean { delete LANGUAGES_OUTPUT_DIR delete DICTIONARIES_OUTPUT_DIR delete DICTIONARIES_DOWNLOAD_DIR - delete HELP_HTML_DIR + delete DOCS_HTML_DIR } // using the exported Closures directly causes weird values, hence the extra wrappers here @@ -98,23 +99,18 @@ android { versionCode getVerCode() versionName getVerName() + buildConfigField 'String', 'DICTIONARY_EXTENSION', "\"${DICTIONARY_OUTPUT_EXTENSION}\"" + buildConfigField 'String', 'DOCS_DIR', "\"${DOCS_DIR_NAME}\"" + buildConfigField 'String', 'DONATION_URL', "\"${getDonationUrl()}\"" + buildConfigField 'String', 'VERSION_FULL', "\"${getVersionString('debug')}\"" + // F-droid hacks dependenciesInfo.includeInApk false vectorDrawables.generatedDensities = [] } buildTypes { - debug { - buildConfigField 'String', 'DONATION_URL', "\"${getDonationUrl()}\"" - buildConfigField 'String', 'DICTIONARY_EXTENSION', "\"${DICTIONARY_OUTPUT_EXTENSION}\"" - buildConfigField 'String', 'VERSION_FULL', "\"${getVersionString('debug')}\"" - } - release { - buildConfigField 'String', 'DONATION_URL', "\"${getDonationUrl()}\"" - buildConfigField 'String', 'DICTIONARY_EXTENSION', "\"${DICTIONARY_OUTPUT_EXTENSION}\"" - buildConfigField 'String', 'VERSION_FULL', "\"${getVersionString('release')}\"" - debuggable false jniDebuggable false minifyEnabled true @@ -150,7 +146,7 @@ android { ].each { taskName -> try { tasks.named(taskName)?.configure { - dependsOn(buildDefinition, convertHelp, validateLanguages, buildDictionaryDownloads) + dependsOn(buildDefinition, generateDocs, validateLanguages, buildDictionaryDownloads) } if (taskName.toLowerCase().contains("full")) { diff --git a/app/constants.gradle b/app/constants.gradle index 21e971ab..0a97f17e 100644 --- a/app/constants.gradle +++ b/app/constants.gradle @@ -13,8 +13,10 @@ def FULL_VERSION_ASSETS_DIR = "${APP_ROOT_DIR}/src/full/assets" ext.FUNDING_FILE = "${project.rootDir}/.github/FUNDING.yml" -ext.HELP_MARKDOWN_DIR = "${project.rootDir}/docs/help" -ext.HELP_HTML_DIR = "${MAIN_ASSETS_DIR}/help" +ext.DOCS_DIR_NAME = "docs" +ext.HELP_MARKDOWN_DIR = "${project.rootDir}/${DOCS_DIR_NAME}/help" +ext.PRIVACY_POLICY_MARKDOWN = "${project.rootDir}/${DOCS_DIR_NAME}/privacy.md" +ext.DOCS_HTML_DIR = "${MAIN_ASSETS_DIR}/${DOCS_DIR_NAME}" ext.LANGUAGES_INPUT_DIR = "${APP_ROOT_DIR}/${LANGUAGES_DIR_NAME}" ext.DEFINITIONS_INPUT_DIR = "${LANGUAGES_INPUT_DIR}/${DEFINITIONS_DIR_NAME}" diff --git a/app/help-tools.gradle b/app/help-tools.gradle index d8773231..31fbe6ff 100644 --- a/app/help-tools.gradle +++ b/app/help-tools.gradle @@ -1,18 +1,23 @@ -ext.convertHelpDocs = {markdownDir, htmlDir -> - fileTree(markdownDir).getFiles().parallelStream().forEach { File markdownPath -> - markdownToHtml(markdownPath.path, "${htmlDir}/${markdownPath.name.replaceAll("\\.md\$", ".html")}") +ext.convertDocs = {String DOCS_MARKDOWN_DIR, String PRIVACY_POLICY_MARKDOWN, String HTML_DIR -> + Set docs = fileTree(DOCS_MARKDOWN_DIR).getFiles() + docs.add(new File(PRIVACY_POLICY_MARKDOWN)) + docs.parallelStream().forEach { File markdownPath -> + markdownToHtml(markdownPath.path, "${HTML_DIR}/${markdownPath.name.replaceAll("\\.md\$", ".html")}", !PRIVACY_POLICY_MARKDOWN.contains(markdownPath.name)) } } -static markdownToHtml(markdownPath, htmlPath) { +static markdownToHtml(markdownPath, htmlPath, addIndex) { def text = new File(markdownPath).text text = convertHeaders(text) + text = convertHorizontalRules(text) text = convertOrderedLists(text) text = convertUnorderedLists(text) text = convertInlineTags(text) text = addStylesToTags(text) - text = insertIndex(text, generateIndex(text)) + if (addIndex) { + text = insertIndex(text, generateIndex(text)) + } text = removeWhitespace(text) new File(htmlPath).text = "Help${text}" @@ -76,6 +81,10 @@ static convertHeaders(markdown) { } +static convertHorizontalRules(markdown) { + return markdown.replaceAll("\\-{3,}", "
") +} + static convertOrderedLists(markdown) { def html = markdown.split("\n").collect { line -> if (line.matches("^\\d+\\..*")) { @@ -100,7 +109,7 @@ static convertUnorderedLists(markdown) { def innerLi = line.replaceAll("^\\s*-\\s*", "") - if (line.matches("^-.*")) { + if (line.matches("^-(?!-).*")) { if (!inList) { convertedLine += "