From bf32d78466c4d8575b745303ac6ab7e7032ffc17 Mon Sep 17 00:00:00 2001 From: Reidar Johansen Date: Wed, 9 Aug 2023 18:39:31 +0200 Subject: [PATCH] Clean up after rename (#26) * Fix workflow input called 'project' to use empty string as default value * Delete old files that has been replaced: * build-documentation.yml --> convert-markdown.yml * sample-call-build-documenation.yml --> README.md in root * sample-call-convert-markdown.yaml --> README.md in root * build-docs.ps1 --> mdconvert.ps1 * cover.png --> designdoc-cover.png * logo.png --> designdoc-logo.png * azure-document.yaml --> mdconvert.ps1 * azure-document.tex --> designdoc.tex * Delete action files to sync labels because we can use github-governance automation instead: * push-labels-sync.yaml * labels.yaml * Use consistent extension .yml instead of .yaml * Add .gitignore and CODEOWNERS files * Change vscode settings * Update README.md --- .github/{labeler.yaml => labeler.yml} | 2 +- .github/labels.yaml | 95 -- ...ild-container.yaml => build-container.yml} | 0 .github/workflows/build-documentation.yml | 299 ----- ...ert-markdown.yaml => convert-markdown.yml} | 2 +- ...ze.yaml => pull-labels-changeset_size.yml} | 4 +- .github/workflows/push-labels-sync.yaml | 25 - .../sample-call-build-documenation.yml | 33 - .../sample-call-convert-markdown.yaml | 33 - .gitignore | 103 ++ .vscode/settings.json | 61 +- CODEOWNERS | 1 + README.md | 73 +- scripts/build-docs.ps1 | 194 --- templates/azure-document.tex | 1166 ----------------- templates/azure-document.yaml | 33 - templates/cover.png | Bin 23659 -> 0 bytes templates/logo.png | Bin 6888 -> 0 bytes 18 files changed, 200 insertions(+), 1924 deletions(-) rename .github/{labeler.yaml => labeler.yml} (94%) delete mode 100644 .github/labels.yaml rename .github/workflows/{build-container.yaml => build-container.yml} (100%) delete mode 100644 .github/workflows/build-documentation.yml rename .github/workflows/{convert-markdown.yaml => convert-markdown.yml} (99%) rename .github/workflows/{pull-labels-changeset_size.yaml => pull-labels-changeset_size.yml} (91%) delete mode 100644 .github/workflows/push-labels-sync.yaml delete mode 100644 .github/workflows/sample-call-build-documenation.yml delete mode 100644 .github/workflows/sample-call-convert-markdown.yaml create mode 100644 .gitignore create mode 100644 CODEOWNERS delete mode 100644 scripts/build-docs.ps1 delete mode 100644 templates/azure-document.tex delete mode 100644 templates/azure-document.yaml delete mode 100644 templates/cover.png delete mode 100644 templates/logo.png diff --git a/.github/labeler.yaml b/.github/labeler.yml similarity index 94% rename from .github/labeler.yaml rename to .github/labeler.yml index f72c6be..efc26f3 100644 --- a/.github/labeler.yaml +++ b/.github/labeler.yml @@ -11,4 +11,4 @@ area/documentation: - "docs/**/*" area/definitions: - "examples/**/*" - - "*.tf" \ No newline at end of file + - "*.tf" diff --git a/.github/labels.yaml b/.github/labels.yaml deleted file mode 100644 index a5e2fb2..0000000 --- a/.github/labels.yaml +++ /dev/null @@ -1,95 +0,0 @@ ---- -# Area -- name: area/ansible - color: "72ccf3" - description: >- - Changes made in the ansible directory -- name: area/github - color: "72ccf3" - description: >- - Changes made in the github directory -- name: area/module - color: "72ccf3" - description: >- - Changes made in the module directory -- name: area/definitions - color: "72ccf3" - description: >- - Changes made in the main or example definations -- name: area/documentation - color: "72ccf3" - description: >- - Changes made in the documentation directory -- name: area/tasks - color: "72ccf3" - description: >- - Changes made in the .task directory -- name: area/vscode - color: "72ccf3" - description: >- - Changes made in the .VSCode directory -# Renovate -- name: renovate/ansible - color: "ffc300" -- name: renovate/container - color: "ffc300" -- name: renovate/github-action - color: "ffc300" -- name: renovate/github-release - color: "ffc300" -- name: renovate/helm - color: "ffc300" -- name: renovate/terraform - color: "ffc300" -# Semantic Type -- name: "type/no-release" - color: "6C483F" - description: "Fix and improvement will not create a new release" -- name: type/patch - color: "FFEC19" - description: "Something isn't working" -- name: type/minor - color: "FF9800" - description: "New feature or request" -- name: type/major - color: "F6412D" - description: "Multiple breaking changes, and new features" -# Size -- name: size/XS - color: "009900" - description: >- - Denotes a PR that changes 0-9 lines, ignoring generated files. -- name: size/S - color: "77bb00" - description: >- - Denotes a PR that changes 10-29 lines, ignoring generated files. -- name: size/M - color: "eebb00" - description: >- - Denotes a PR that changes 30-99 lines, ignoring generated files. -- name: size/L - color: "ee9900" - description: >- - Denotes a PR that changes 100-499 lines, ignoring generated files. -- name: size/XL - color: "ee5500" - description: >- - Denotes a PR that changes 500-999 lines, ignoring generated files. -- name: size/XXL - color: "ee0000" - description: >- - Denotes a PR that changes 1000+ lines, ignoring generated files. -# Issue Templates -- name: bug - color: "ee0701" -- name: question - color: "cc317c" -- name: enhancement - color: "84b6eb" -# Uncategorized -- name: do-not-merge - color: "ee0701" -- name: docs - color: "F4D1B7" -- name: link-checker - color: "7B55D7" \ No newline at end of file diff --git a/.github/workflows/build-container.yaml b/.github/workflows/build-container.yml similarity index 100% rename from .github/workflows/build-container.yaml rename to .github/workflows/build-container.yml diff --git a/.github/workflows/build-documentation.yml b/.github/workflows/build-documentation.yml deleted file mode 100644 index fcda76f..0000000 --- a/.github/workflows/build-documentation.yml +++ /dev/null @@ -1,299 +0,0 @@ ---- -name: 🧳 Build Documentation - -on: - workflow_call: - inputs: - OrderFile: - required: true - type: string - Title: - required: false - type: string - default: Azure Cloud Framework - Subtitle: - required: false - type: string - default: DESIGN DOCUMENT - MetadataFile: - required: false - type: string - default: templates/azure-document.yaml - Template: - required: false - type: string - default: templates/azure-document.tex - OutFile: - required: true - type: string - DocsRootFolder: - required: false - type: string - default: docs - BuildBranch: - required: false - type: string - default: main - DefaultAuthor: - required: false - type: string - default: Innofactor - DefaultDescription: - required: false - type: string - default: Initial draft - ForceDefault: - required: false - type: boolean - default: false -# outputs: -# firstword: -# description: "The first output string" -# value: ${{ jobs.build.outputs.output1 }} -# secondword: -# description: "The second output string" -# value: ${{ jobs.build.outputs.output2 }} - -jobs: - build: - name: Build Documentation - runs-on: ubuntu-latest - env: - GITHUB_TOKEN: ${{ github.token }} -# outputs: -# output1: ${{ steps.step1.outputs.firstword }} -# output2: ${{ steps.step2.outputs.secondword }} - steps: - # - id: step1 - # run: echo "firstword=hello" >> $GITHUB_OUTPUT - # - id: step2 - # run: echo "secondword=world" >> $GITHUB_OUTPUT - - name: Setup pandoc - env: - PANDOC_VERSION: "2.19.2" - run: | - wget -qO- "https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-linux-amd64.tar.gz" | sudo tar xzf - --strip-components 1 -C "/usr/local/" - - - name: Setup TeX Live - uses: teatimeguest/setup-texlive-action@v2 - with: - packages: >- - adjustbox - ae - amscls - amsmath - anysize - awesomebox - babel - babel-english - babel-german - babelbib - background - beamer - bidi - bookmark - booktabs - breqn - caption - carlisle - cite - cmap - collectbox - colortbl - crop - csquotes - ctable - enumitem - environ - etoolbox - fancyhdr - fix2col - geometry - graphics - graphics-cfg - hyperref - latex - latex-bin - latex-fonts - latexconfig - ltxmisc - mfnfss - mptopdf - natbib - oberdiek - pslatex - psnfss - pspicture - tools - url - eso-pic - euenc - euler - etoolbox - extsizes - fancybox - fancyref - fancyvrb - filehook - float - fontspec - fp - index - jknapltx - koma-script - latexbug - l3experimental - l3kernel - l3packages - lineno - listings - lwarp - mathspec - mathtools - mdwtools - memoir - metalogo - microtype - ms - ntgclass - parskip - pdfpages - polyglossia - powerdot - psfrag - rcs - sansmath - section - seminar - sepnum - setspace - subfig - textcase - thumbpdf - sectsty - translator - typehtml - ucharcat - underscore - unicode-math - xcolor - xkeyval - xltxtra - xunicode - everypage - filehook - footmisc - footnotebackref - footnotehyper - framed - fvextra - letltxmacro - ly1 - mdframed - mweights - needspace - pagecolor - sourcecodepro - sourcesanspro - titling - ucharcat - ulem - unicode-math - upquote - xecjk - xurl - zref - fontawesome5 - tcolorbox - pgf - trimspaces - lastpage - - - name: Initialization for tlmgr - run: | - sudo apt-get update -qq && sudo apt-get install xzdec -y - tlmgr init-usertree - - - name: Setup fonts - run: sudo apt-get update -qq && sudo apt-get install fonts-noto-cjk fonts-crosextra-carlito fonts-crosextra-caladea -y - - - name: Setup image conversion tools - run: sudo apt-get update -qq && sudo apt-get install poppler-utils librsvg2-bin -y - - - name: Setup Python - uses: actions/setup-python@v4 - with: - python-version: "3.x" - architecture: "x64" - - - name: Install pandoc filters - run: | - python -m pip install --upgrade pip - pip install pandoc-latex-environment - - - name: Clone repository for building - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Download the build script - run: curl -f -o ${{ inputs.DocsRootFolder }}/build-docs.ps1 https://raw.githubusercontent.com/innofactororg/ghw-markdown-convert/${{ inputs.BuildBranch }}/scripts/build-docs.ps1 - - - name: Create Template area - run: mkdir ${{ inputs.DocsRootFolder }}/templates - - - name: Download the Cover Image - run: curl -f -o ${{ inputs.DocsRootFolder }}/templates/cover.png https://raw.githubusercontent.com/innofactororg/ghw-markdown-convert/${{ inputs.BuildBranch }}/templates/cover.png - - - name: Download the Logo - run: curl -f -o ${{ inputs.DocsRootFolder }}/templates/logo.png https://raw.githubusercontent.com/innofactororg/ghw-markdown-convert/${{ inputs.BuildBranch }}/templates/logo.png - - - name: Download the LaTeX Template - run: curl -f -o ${{ inputs.DocsRootFolder }}/${{ inputs.Template }} https://raw.githubusercontent.com/innofactororg/ghw-markdown-convert/${{ inputs.BuildBranch }}/${{ inputs.Template }} - - - name: Download the Pandoc Meta Data file - run: curl -f -o ${{ inputs.DocsRootFolder }}/${{ inputs.MetadataFile }} https://raw.githubusercontent.com/innofactororg/ghw-markdown-convert/${{ inputs.BuildBranch }}/${{ inputs.MetadataFile }} - - - name: Update the Document Title - run: yq eval -i '.title = "${{ inputs.Title }}"' ${{ inputs.DocsRootFolder }}/${{ inputs.MetadataFile }} - - - name: Update the Document Subtitle - run: yq eval -i '.subtitle = "${{ inputs.Subtitle }}"' ${{ inputs.DocsRootFolder }}/${{ inputs.MetadataFile }} - - - name: Update the path to titlepage-top-cover-image - run: yq eval -i '.titlepage-top-cover-image = "../templates/cover.png"' ${{ inputs.DocsRootFolder }}/${{ inputs.MetadataFile }} - - - name: Update the path to logo - run: yq eval -i '.logo = "../templates/logo.png"' ${{ inputs.DocsRootFolder }}/${{ inputs.MetadataFile }} - - - name: Give script permissions - run: chmod +x ${{ inputs.DocsRootFolder }}/build-docs.ps1 - - # - name: Setup upterm session - # uses: lhotari/action-upterm@v1 - # with: - # ## limits ssh access and adds the ssh public key for the user which triggered the workflow - # limit-access-to-actor: false - - # - name: Setup tmate session - # uses: mxschmitt/action-tmate@v3 - # with: - # limit-access-to-actor: true - - # Expanded Script Sample - # docs/build-docs.ps1 -OrderFile training/training.order -MetadataFile templates/azure-document.yaml -Template templates/azure-document.tex -OutFile training.pdf -DocsRootFolder docs - - - name: Build PDF - shell: pwsh - run: | - $Global:ProgressPreference = 'SilentlyContinue'; - $forceDefault = '${{ inputs.ForceDefault }}' -eq 'true'; - & ${{ inputs.DocsRootFolder }}/build-docs.ps1 -OrderFile '${{ inputs.OrderFile }}' -MetadataFile '${{ inputs.MetadataFile }}' -Template '${{ inputs.Template }}' -OutFile '${{ inputs.OutFile }}' -DocsRootFolder '${{ inputs.DocsRootFolder }}' -DefaultAuthor '${{ inputs.DefaultAuthor }}' -DefaultDescription '${{ inputs.DefaultDescription }}' -ForceDefault:$forceDefault - - - name: Publish PDF - uses: actions/upload-artifact@v3 - with: - name: ${{ inputs.OutFile }} - if-no-files-found: error - retention-days: 5 - path: "${{ github.workspace }}/${{ inputs.OutFile }}" diff --git a/.github/workflows/convert-markdown.yaml b/.github/workflows/convert-markdown.yml similarity index 99% rename from .github/workflows/convert-markdown.yaml rename to .github/workflows/convert-markdown.yml index c4c862c..2f66d09 100644 --- a/.github/workflows/convert-markdown.yaml +++ b/.github/workflows/convert-markdown.yml @@ -15,7 +15,7 @@ on: Project: required: false type: string - default: + default: '' Folder: required: false type: string diff --git a/.github/workflows/pull-labels-changeset_size.yaml b/.github/workflows/pull-labels-changeset_size.yml similarity index 91% rename from .github/workflows/pull-labels-changeset_size.yaml rename to .github/workflows/pull-labels-changeset_size.yml index 998fc2b..f3017c1 100644 --- a/.github/workflows/pull-labels-changeset_size.yaml +++ b/.github/workflows/pull-labels-changeset_size.yml @@ -15,7 +15,7 @@ jobs: - name: Labeler uses: actions/labeler@v4 with: - configuration-path: .github/labeler.yaml + configuration-path: .github/labeler.yml repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Label Size @@ -31,4 +31,4 @@ jobs: "200": "L", "800": "XL", "2000": "XXL" - } \ No newline at end of file + } diff --git a/.github/workflows/push-labels-sync.yaml b/.github/workflows/push-labels-sync.yaml deleted file mode 100644 index 019bf76..0000000 --- a/.github/workflows/push-labels-sync.yaml +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: "🏷️ Label definition's" -on: # yamllint disable-line rule:truthy - workflow_dispatch: - push: - branches: - - main - paths: - - ".github/labels.yaml" - -jobs: - labels: - name: Synchronies labels - runs-on: ubuntu-latest - steps: - - - name: Checkout - uses: actions/checkout@v3 - - - name: Sync Labels - uses: EndBug/label-sync@v2 - with: - config-file: .github/labels.yaml - token: ${{ secrets.GITHUB_TOKEN }} - delete-other-labels: true \ No newline at end of file diff --git a/.github/workflows/sample-call-build-documenation.yml b/.github/workflows/sample-call-build-documenation.yml deleted file mode 100644 index 47d2089..0000000 --- a/.github/workflows/sample-call-build-documenation.yml +++ /dev/null @@ -1,33 +0,0 @@ ---- -name: 🧳 Sample Call Build Documentation -on: - workflow_dispatch: - pull_request: - branches: [main] - paths: - - 'docs/Sample/*.md' - - 'docs/Sample/*.order' - - 'docs/Sample/.attachments/**' - push: - paths: - - 'docs/Sample/*.md' - - 'docs/Sample/*.order' - - 'docs/Sample/.attachments/**' - -jobs: - pdf: - name: Build PDF - uses: innofactororg/ghw-markdown-convert/.github/workflows/build-documentation.yml@main - secrets: inherit - with: - OrderFile: Sample/document.order - OutFile: Sample.pdf - MetadataFile: templates/azure-document.yaml - Template: templates/azure-document.tex - Title: Sample - Subtitle: Document - DocsRootFolder: docs - BuildBranch: main - DefaultAuthor: Innofactor - DefaultDescription: Initial draft - ForceDefault: false diff --git a/.github/workflows/sample-call-convert-markdown.yaml b/.github/workflows/sample-call-convert-markdown.yaml deleted file mode 100644 index 350ef7c..0000000 --- a/.github/workflows/sample-call-convert-markdown.yaml +++ /dev/null @@ -1,33 +0,0 @@ ---- -name: 🧳 Sample Call Convert Markdown -on: - workflow_dispatch: - pull_request: - branches: [main] - paths: - - 'docs/sample/*.md' - - 'docs/sample/*.order' - - 'docs/sample/.attachments/**' - push: - paths: - - 'docs/sample/*.md' - - 'docs/sample/*.order' - - 'docs/sample/.attachments/**' - -jobs: - pdf: - name: Build PDF - uses: innofactororg/ghw-markdown-convert/.github/workflows/convert-markdown.yaml@main - secrets: inherit - with: - Title: Sample - Subtitle: Document - Project: 808080 - Folder: docs/sample - Template: designdoc - OrderFile: document.order - OutFile: Sample.pdf - DefaultAuthor: Innofactor - DefaultDescription: Initial draft - ForceDefault: false - RetentionDays: 5 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ae2e9b6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,103 @@ +# https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix + +# https://github.com/github/gitignore/blob/main/Global/MicrosoftOffice.gitignore +*.tmp + +# Word temporary +~$*.doc* + +# Word Auto Backup File +Backup of *.doc* + +# Excel temporary +~$*.xls* + +# Excel Backup File +*.xlk + +# PowerPoint temporary +~$*.ppt* + +# Visio autosave temporary files +*.~vsd* + +# https://github.com/github/gitignore/blob/main/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# https://github.com/github/gitignore/blob/main/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# https://github.com/github/gitignore/blob/main/Global/Linux.gitignore +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* diff --git a/.vscode/settings.json b/.vscode/settings.json index 238a54a..55e1cd2 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,43 +1,26 @@ { + "editor.accessibilitySupport": "off", + "editor.bracketPairColorization.enabled": true, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.detectIndentation": false, + "editor.fontSize": 14, + "editor.formatOnPaste": true, + "editor.formatOnSave": true, + "editor.tabCompletion": "on", + "editor.tabSize": 2, + "git.pruneOnFetch": true, + "git.enableSmartCommit": true, + "markdown.extension.orderedList.autoRenumber": false, + "workbench.editor.decorations.badges": true, + "workbench.editor.decorations.colors": true, + "workbench.startupEditor": "none", + "workbench.editor.wrapTabs": true, + "[markdown]": { + "editor.defaultFormatter": "yzhang.markdown-all-in-one", "editor.tabSize": 2, - "editor.tabCompletion": "on", - "editor.detectIndentation": false, - "editor.formatOnSave": true, - "editor.bracketPairColorization.enabled": true, - "markdownlint.config": { - "MD025": false, - "MD028": false, - "MD041": false - }, - "cSpell.enableFiletypes": [ - "!json", - "!jsonc", - "!latex", - "!markdown", - "!plaintext" - ], - "files.trimTrailingWhitespace": true, - "files.insertFinalNewline": true, + "editor.wordWrap": "off", "files.encoding": "utf8", - "powershell.codeFormatting.preset": "OTBS", - "powershell.codeFormatting.ignoreOneLineBlock": false, - "powershell.codeFormatting.newLineAfterCloseBrace": false, - "[json]": { - "editor.defaultFormatter": "vscode.json-language-features" - }, - "[jsonc]": { - "editor.defaultFormatter": "vscode.json-language-features" - }, - "[arm-template]": { - "editor.defaultFormatter": "msazurermtools.azurerm-vscode-tools" - }, - "[markdown]": { - "editor.wordWrap": "off", - "editor.tabSize": 2, - "editor.defaultFormatter": "yzhang.markdown-all-in-one" - }, - "workbench.editorAssociations": { - "*.drawio.png": "hediet.vscode-drawio" - } + "files.insertFinalNewline": true, + "files.trimTrailingWhitespace": true } - \ No newline at end of file +} diff --git a/CODEOWNERS b/CODEOWNERS new file mode 100644 index 0000000..10b86a4 --- /dev/null +++ b/CODEOWNERS @@ -0,0 +1 @@ +* @reijoh @DamianFlynn diff --git a/README.md b/README.md index 5a99f77..1ea9a2f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,72 @@ -# Workflows +# Markdown to PDF complier -## Markdown Complier +This reusable workflow can be used to publish PDF from Markdown. -Workflow to publish PDF from source Markdown +## Example Workflow + +```yaml +name: 🧳 Convert Markdown +on: + workflow_dispatch: + pull_request: + branches: [main] + paths: + - 'docs/design/*.md' + - 'docs/design/*.order' + - 'docs/design/.attachments/**' + push: + paths: + - 'docs/design/*.md' + - 'docs/design/*.order' + - 'docs/design/.attachments/**' + +jobs: + pdf: + name: Build PDF + uses: innofactororg/markdown2pdf/.github/workflows/convert-markdown.yml@v1 + secrets: inherit + with: + # The document title + # Default: Innofactor + Title: Design + + # The document subtitle + # Default: DESIGN DOCUMENT + Subtitle: Document + + # The project ID or name + # Default: '' + Project: 12345678 + + # The repository folder where markdown files exist + # Default: docs + Folder: docs/design + + # The template name. Must be: designdoc + # Default: designdoc + Template: designdoc + + # The name of the .order file that specify what order the markdown files must be in the converted PDF + # Default: document.order + OrderFile: document.order + + # The name of the output file that will be uploaded to the job artifacts + # Default: document.pdf + OutFile: Design.pdf + + # The default value to use for author of the PDF content. When specified, this value will be used if autors can't be retreived from the git commits + # Default: Innofactor + DefaultAuthor: Innofactor + + # The description of the first line of document change history. When specified, this value will be used when no git comment can be retreived from the git commits + # Default: Initial draft + DefaultDescription: Initial draft + + # Force to use the DefaultAuthor and DefaultDescription instead of using information for git commits + # Default: false + ForceDefault: false + + # Number of days to retains the output PDF file in the job artifacts. + # Default: 5 days + RetentionDays: 5 +``` diff --git a/scripts/build-docs.ps1 b/scripts/build-docs.ps1 deleted file mode 100644 index e81edd8..0000000 --- a/scripts/build-docs.ps1 +++ /dev/null @@ -1,194 +0,0 @@ -<# -.SYNOPSIS - Build PDF document from markdown files based on order file. -.NOTES - To use this script on windows, install the following (to update with winget replace install with upgrade): - - winget install --id JohnMacFarlane.Pandoc - - winget install --id MiKTeX.MiKTeX - - Select Always for the option Install missing packages on the fly - - After install, open MiKTeX Console and Check for updates. - If MiKTeX was installed for all users you must - start MiKTeX Console with run as administrator - - winget install --id Python.Python.3.11 - - python -m pip install --upgrade pip - - pip install pandoc-latex-environment - - Using modified latex template from https://github.com/Wandmalfarbe/pandoc-latex-template -.EXAMPLE - ./docs/build.ps1 -OrderFile markdown/design-document.order -MetadataFile markdown/design-document.yaml -Template templates/design-document.tex -OutFile design-document.pdf -#> -[CmdletBinding()] -param ( - [Parameter(Mandatory = $true)] - [ValidateNotNullOrEmpty()] - [string] - $OrderFile, - [Parameter(Mandatory = $true)] - [string] - $MetadataFile, - [Parameter(Mandatory = $true)] - [string] - $Template, - [Parameter(Mandatory = $true)] - [string] - $OutFile, - [Parameter(Mandatory = $false)] - [string] - $DocsRootFolder = 'docs', - [Parameter(Mandatory = $false)] - [string] - $DefaultAuthor = 'Innofactor', - [Parameter(Mandatory = $false)] - [string] - $DefaultDescription = 'Initial draft', - [Parameter(Mandatory = $false)] - [switch] - $ForceDefault -) -$culture = New-Object System.Globalization.CultureInfo('en-US'); -$currentDate = (Get-Date).ToString('MMMM d, yyyy', $culture); -$currentPath = Get-Item -Path .; -$docsRootPath = Join-Path -Path $currentPath.FullName -ChildPath $DocsRootFolder; -$orderFilePath = $( - if (-not(Test-Path -Path $OrderFile -PathType Leaf)) { - Get-Item -Path $(Join-Path -Path $docsRootPath -ChildPath $OrderFile) - } else { - Get-Item -Path $OrderFile - } -); -$metadataFilePath = $( - if (-not(Test-Path -Path $MetadataFile -PathType Leaf)) { - Get-Item -Path $(Join-Path -Path $docsRootPath -ChildPath $MetadataFile) - } else { - Get-Item -Path $MetadataFile - } -); -$templateFilePath = $( - if (-not(Test-Path -Path $Template -PathType Leaf)) { - Get-Item -Path $(Join-Path -Path $docsRootPath -ChildPath $Template) - } else { - Get-Item -Path $Template - } -); -# We need to get information from git log and we need to run this from root folder -$mergeLogs = @( - if ($ForceDefault) { - "$DefaultAuthor|$currentDate|tag: rel/repo/1.0.0|$DefaultDescription" - } else { - & git --no-pager log --date-order --date=format:'%b %e, %Y' --first-parent --no-merges --pretty=format:'%an|%ad|%D|%s' -- $orderFilePath.DirectoryName - } -); -$authors = @( - if ($ForceDefault) { - $DefaultAuthor - } else { - & git --no-pager log --first-parent --no-merges --pretty=format:"%an" -- $orderFilePath.DirectoryName | Select-Object -Unique - } -); -# This script is copied to the folder where the documentation exist, typically the docs folder in the root of the repository -# We set location to the docs folder and work from there -Push-Location; -Set-Location -Path $PSScriptRoot; -# Get the markdown files in OrderFile -$files = @( - Get-Content -Path $orderFilePath.FullName | ForEach-Object { - Get-Item -Path (Join-Path -Path $orderFilePath.DirectoryName -ChildPath $_) -ErrorAction Stop - } -); -$i = 0; -$markdowncontent = $( - foreach ($file in $files) { - $i++; - $content = Get-Content -Path $file.FullName -Raw -Encoding utf8; - # Require that the file begins with a first level title - # Turning this off for now, want to use sub pages - # if ($content -notmatch '^#\s\w') { - # throw "The file $($file.Name) is not valid, it must begin with a first level title" - # }; - # Require that the file ends with a line feed - if ($content -notmatch '\n$') { - throw "The file $($file.Name) is not valid, it must end with a line feed (empty line)" - }; - if ($i -ne 1) { - if ($content -notmatch '\r\n$') { - "`r`n$content" - } else { - "`n$content" - } - } else { - $content - } - } -); -$metadataExtraFile = Join-Path -Path $metadataFilePath.DirectoryName -ChildPath 'latest-release-info.json'; -# Set location path to a specific folder in the docs folder, e.g. docs/detaileddesign -Set-Location -Path $orderFilePath.DirectoryName; -if ($mergeLogs.Count -eq 0 -and $authors.Count -ge 1) { - $mergeLogs = @("$($authors[0])|$currentDate|tag: rel/repo/1.0.0|$DefaultDescription") -} elseif ($mergeLogs.Count -eq 0) { - $mergeLogs = @("$DefaultAuthor|$currentDate|tag: rel/repo/1.0.0|$DefaultDescription") -}; -$i = $mergeLogs.Count; -$versionHistory = @( - foreach ($mergeLog in $mergeLogs) { - $items = @($mergeLog.Split('|')); - if ($items.Count -ge 4) { - $i--; - $refNamesTag = @($items[2] -split 'tag:'); - $version = $( - if ($refNamesTag.Count -eq 2 -and $refNamesTag[1] -match 'rel/') { - @(@($refNamesTag[1] -split ',')[0] -split '/')[-1] - } else { - "1.0.$i" - } - ); - @{ - "version" = $version; - "date" = $items[1].Replace(' ', ' '); - "author" = $items[0]; - "description" = $items[3] - }; - } - } -); -$font = $( - if ($IsLinux) { - 'Carlito' - } else { - 'Calibri' - } -); -$metadataContent = @{ - "date" = $currentDate; - "author" = $authors; - "version-history" = $versionHistory; - "mainfont" = $font -} | ConvertTo-Json; -Set-Content -Path $metadataExtraFile -Value $metadataContent -Force -Encoding utf8; -if (-not($OutFile -match '\\' -or $OutFile -match '/')) { - $OutFile = Join-Path -Path $currentPath.FullName -ChildPath $OutFile -}; -Write-Host -Object "Creating $OutFile"; -# We only want to use pandoc if the output file is not a markdown file -if ($OutFile -notmatch '\.md$') { - $markdowncontent | & pandoc ` - --standalone ` - --listings ` - --pdf-engine=xelatex ` - --metadata-file="$($metadataFilePath.FullName)" ` - --metadata-file="$metadataExtraFile" ` - -f markdown+backtick_code_blocks+pipe_tables+auto_identifiers+yaml_metadata_block+table_captions+footnotes+smart+escaped_line_breaks ` - --template="$($templateFilePath.FullName)" ` - --filter pandoc-latex-environment ` - --output="$OutFile"; - if (-not(Test-Path -Path $OutFile -PathType Leaf)) { - Write-Warning -Message "Unable to create $OutFile" - } else { - $file = Get-Item -Path $OutFile; - Write-Host -Object "Done creating $($file.FullName) at $($file.CreationTime), size is $([math]::Ceiling($file.Length / 1kb)) kb. Version metadata:"; - Write-Host -Object $metadataContent - }; - Pop-Location -} else { - Set-Content -Path $OutFile -Value $markdowncontent -Force -NoNewline -Encoding utf8 -} diff --git a/templates/azure-document.tex b/templates/azure-document.tex deleted file mode 100644 index cdd9e5b..0000000 --- a/templates/azure-document.tex +++ /dev/null @@ -1,1166 +0,0 @@ -%% -% Copyright (c) 2017 - 2021, Pascal Wagler; -% Copyright (c) 2014 - 2021, John MacFarlane -% -% All rights reserved. -% -% Redistribution and use in source and binary forms, with or without -% modification, are permitted provided that the following conditions -% are met: -% -% - Redistributions of source code must retain the above copyright -% notice, this list of conditions and the following disclaimer. -% -% - Redistributions in binary form must reproduce the above copyright -% notice, this list of conditions and the following disclaimer in the -% documentation and/or other materials provided with the distribution. -% -% - Neither the name of John MacFarlane nor the names of other -% contributors may be used to endorse or promote products derived -% from this software without specific prior written permission. -% -% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -% "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -% LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -% FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -% COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -% INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -% BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -% LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -% CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -% LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -% ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -% POSSIBILITY OF SUCH DAMAGE. -%% - -%% -% This is the Eisvogel pandoc LaTeX template. -% -% For usage information and examples visit the official GitHub page: -% https://github.com/Wandmalfarbe/pandoc-latex-template -%% - -% Options for packages loaded elsewhere -\PassOptionsToPackage{unicode$for(hyperrefoptions)$,$hyperrefoptions$$endfor$}{hyperref} -\PassOptionsToPackage{hyphens}{url} -\PassOptionsToPackage{dvipsnames,svgnames,x11names,table}{xcolor} -$if(dir)$ -$if(latex-dir-rtl)$ -\PassOptionsToPackage{RTLdocument}{bidi} -$endif$ -$endif$ -$if(CJKmainfont)$ -\PassOptionsToPackage{space}{xeCJK} -$endif$ -% -\documentclass[ -$if(fontsize)$ - $fontsize$, -$endif$ -$if(lang)$ - $babel-lang$, -$endif$ -$if(papersize)$ - $papersize$paper, -$else$ - paper=a4, -$endif$ -$if(beamer)$ - ignorenonframetext, -$if(handout)$ - handout, -$endif$ -$if(aspectratio)$ - aspectratio=$aspectratio$, -$endif$ -$endif$ -$for(classoption)$ - $classoption$$sep$, -$endfor$ - ,captions=tableheading -]{$if(beamer)$$documentclass$$else$$if(book)$scrbook$else$scrartcl$endif$$endif$} -$if(beamer)$ -$if(background-image)$ -\usebackgroundtemplate{% - \includegraphics[width=\paperwidth]{$background-image$}% -} -$endif$ -\usepackage{pgfpages} -\setbeamertemplate{caption}[numbered] -\setbeamertemplate{caption label separator}{: } -\setbeamercolor{caption name}{fg=normal text.fg} -\beamertemplatenavigationsymbols$if(navigation)$$navigation$$else$empty$endif$ -$for(beameroption)$ -\setbeameroption{$beameroption$} -$endfor$ -% Prevent slide breaks in the middle of a paragraph -\widowpenalties 1 10000 -\raggedbottom -$if(section-titles)$ -\setbeamertemplate{part page}{ - \centering - \begin{beamercolorbox}[sep=16pt,center]{part title} - \usebeamerfont{part title}\insertpart\par - \end{beamercolorbox} -} -\setbeamertemplate{section page}{ - \centering - \begin{beamercolorbox}[sep=12pt,center]{part title} - \usebeamerfont{section title}\insertsection\par - \end{beamercolorbox} -} -\setbeamertemplate{subsection page}{ - \centering - \begin{beamercolorbox}[sep=8pt,center]{part title} - \usebeamerfont{subsection title}\insertsubsection\par - \end{beamercolorbox} -} -\AtBeginPart{ - \frame{\partpage} -} -\AtBeginSection{ - \ifbibliography - \else - \frame{\sectionpage} - \fi -} -\AtBeginSubsection{ - \frame{\subsectionpage} -} -$endif$ -$endif$ -$if(beamerarticle)$ -\usepackage{beamerarticle} % needs to be loaded first -$endif$ -\usepackage{amsmath,amssymb} -$if(fontfamily)$ -\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$} -$else$ -\usepackage{lmodern} -$endif$ -$if(linestretch)$ -\usepackage{setspace} -$else$ -\usepackage{setspace} -\setstretch{1.2} -$endif$ -\usepackage{iftex} -\ifPDFTeX - \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc} - \usepackage[utf8]{inputenc} - \usepackage{textcomp} % provide euro and other symbols -\else % if luatex or xetex -$if(mathspec)$ - \ifXeTeX - \usepackage{mathspec} - \else - \usepackage{unicode-math} - \fi -$else$ - \usepackage{unicode-math} -$endif$ - \defaultfontfeatures{Scale=MatchLowercase} - \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1} -$if(mainfont)$ - \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$} -$endif$ -$if(sansfont)$ - \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$} -$endif$ -$if(monofont)$ - \setmonofont[$for(monofontoptions)$$monofontoptions$$sep$,$endfor$]{$monofont$} -$endif$ -$for(fontfamilies)$ - \newfontfamily{$fontfamilies.name$}[$for(fontfamilies.options)$$fontfamilies.options$$sep$,$endfor$]{$fontfamilies.font$} -$endfor$ -$if(mathfont)$ -$if(mathspec)$ - \ifXeTeX - \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} - \else - \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} - \fi -$else$ - \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} -$endif$ -$endif$ -$if(CJKmainfont)$ - \ifXeTeX - \usepackage{xeCJK} - \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} - \fi -$endif$ -$if(luatexjapresetoptions)$ - \ifLuaTeX - \usepackage[$for(luatexjapresetoptions)$$luatexjapresetoptions$$sep$,$endfor$]{luatexja-preset} - \fi -$endif$ -$if(CJKmainfont)$ - \ifLuaTeX - \usepackage[$for(luatexjafontspecoptions)$$luatexjafontspecoptions$$sep$,$endfor$]{luatexja-fontspec} - \setmainjfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} - \fi -$endif$ -\fi -$if(zero-width-non-joiner)$ -%% Support for zero-width non-joiner characters. -\makeatletter -\def\zerowidthnonjoiner{% - % Prevent ligatures and adjust kerning, but still support hyphenating. - \texorpdfstring{% - \textormath{\nobreak\discretionary{-}{}{\kern.03em}% - \ifvmode\else\nobreak\hskip\z@skip\fi}{}% - }{}% -} -\makeatother -\ifPDFTeX - \DeclareUnicodeCharacter{200C}{\zerowidthnonjoiner} -\else - \catcode`^^^^200c=\active - \protected\def ^^^^200c{\zerowidthnonjoiner} -\fi -%% End of ZWNJ support -$endif$ -$if(beamer)$ -$if(theme)$ -\usetheme[$for(themeoptions)$$themeoptions$$sep$,$endfor$]{$theme$} -$endif$ -$if(colortheme)$ -\usecolortheme{$colortheme$} -$endif$ -$if(fonttheme)$ -\usefonttheme{$fonttheme$} -$endif$ -$if(mainfont)$ -\usefonttheme{serif} % use mainfont rather than sansfont for slide text -$endif$ -$if(innertheme)$ -\useinnertheme{$innertheme$} -$endif$ -$if(outertheme)$ -\useoutertheme{$outertheme$} -$endif$ -$endif$ -% Use upquote if available, for straight quotes in verbatim environments -\IfFileExists{upquote.sty}{\usepackage{upquote}}{} -\IfFileExists{microtype.sty}{% use microtype if available - \usepackage[$for(microtypeoptions)$$microtypeoptions$$sep$,$endfor$]{microtype} - \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts -}{} -$if(indent)$ -$else$ -\makeatletter -\@ifundefined{KOMAClassName}{% if non-KOMA class - \IfFileExists{parskip.sty}{% - \usepackage{parskip} - }{% else - \setlength{\parindent}{0pt} - \setlength{\parskip}{6pt plus 2pt minus 1pt}} -}{% if KOMA class - \KOMAoptions{parskip=half}} -\makeatother -$endif$ -$if(verbatim-in-note)$ -\usepackage{fancyvrb} -$endif$ -\usepackage{xcolor} -\definecolor{default-linkcolor}{HTML}{0563C1} -\definecolor{default-filecolor}{HTML}{0563C1} -\definecolor{default-citecolor}{HTML}{0563C1} -\definecolor{default-urlcolor}{HTML}{0563C1} -\definecolor{titlecolor}{HTML}{7030A0} -\definecolor{subtitlecolor}{HTML}{1F4E79} -\definecolor{authorcolor}{HTML}{5B9BD5} -\definecolor{disclaimercolor}{HTML}{949494} -\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available -$if(footnotes-pretty)$ -% load footmisc in order to customize footnotes (footmisc has to be loaded before hyperref, cf. https://tex.stackexchange.com/a/169124/144087) -\usepackage[hang,flushmargin,bottom,multiple]{footmisc} -\setlength{\footnotemargin}{0.8em} % set space between footnote nr and text -\setlength{\footnotesep}{\baselineskip} % set space between multiple footnotes -\setlength{\skip\footins}{0.3cm} % set space between page content and footnote -\setlength{\footskip}{0.9cm} % set space between footnote and page bottom -$endif$ -\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}} -\hypersetup{ -$if(title-meta)$ - pdftitle={$title-meta$}, -$endif$ -$if(author-meta)$ - pdfauthor={$author-meta$}, -$endif$ -$if(lang)$ - pdflang={$lang$}, -$endif$ -$if(subject)$ - pdfsubject={$subject$}, -$endif$ -$if(keywords)$ - pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$}, -$endif$ -$if(colorlinks)$ - colorlinks=true, - linkcolor={$if(linkcolor)$$linkcolor$$else$default-linkcolor$endif$}, - filecolor={$if(filecolor)$$filecolor$$else$default-filecolor$endif$}, - citecolor={$if(citecolor)$$citecolor$$else$default-citecolor$endif$}, - urlcolor={$if(urlcolor)$$urlcolor$$else$default-urlcolor$endif$}, -$else$ - hidelinks, -$endif$ - breaklinks=true, - pdfcreator={LaTeX via pandoc with the Eisvogel template}} -\urlstyle{same} % disable monospaced font for URLs -$if(verbatim-in-note)$ -\VerbatimFootnotes % allow verbatim text in footnotes -$endif$ -$if(geometry)$ -$if(beamer)$ -\geometry{$for(geometry)$$geometry$$sep$,$endfor$} -$else$ -\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} -$endif$ -$else$ -$if(beamer)$ -$else$ -\usepackage[a4paper,left=2.54cm,right=2.54cm,top=1.91cm,bottom=2.54cm]{geometry} -$endif$ -$endif$ -$if(logo)$ -\usepackage[export]{adjustbox} -\usepackage{graphicx} -$elseif(titlepage-top-cover-image)$ -\usepackage[export]{adjustbox} -\usepackage{graphicx} -$endif$ -$if(beamer)$ -\newif\ifbibliography -$endif$ -$if(listings)$ -\usepackage{listings} -\newcommand{\passthrough}[1]{#1} -\lstset{defaultdialect=[5.3]Lua} -\lstset{defaultdialect=[x86masm]Assembler} -$endif$ -$if(listings-no-page-break)$ -\usepackage{etoolbox} -\BeforeBeginEnvironment{lstlisting}{\par\noindent\begin{minipage}{\linewidth}} -\AfterEndEnvironment{lstlisting}{\end{minipage}\par\addvspace{\topskip}} -$endif$ -$if(lhs)$ -\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} -$endif$ -$if(highlighting-macros)$ -$highlighting-macros$ - -% Workaround/bugfix from jannick0. -% See https://github.com/jgm/pandoc/issues/4302#issuecomment-360669013) -% or https://github.com/Wandmalfarbe/pandoc-latex-template/issues/2 -% -% Redefine the verbatim environment 'Highlighting' to break long lines (with -% the help of fvextra). Redefinition is necessary because it is unlikely that -% pandoc includes fvextra in the default template. -\usepackage{fvextra} -\DefineVerbatimEnvironment{Highlighting}{Verbatim}{breaklines,fontsize=$if(code-block-font-size)$$code-block-font-size$$else$\small$endif$,commandchars=\\\{\}} - -$endif$ -$if(tables)$ -\usepackage{longtable,booktabs,array} -\setlength\LTleft\parindent -\setlength\LTright\fill -$if(multirow)$ -\usepackage{multirow} -$endif$ -\usepackage{calc} % for calculating minipage widths -$if(beamer)$ -\usepackage{caption} -% Make caption package work with longtable -\makeatletter -\def\fnum@table{\tablename~\thetable} -\makeatother -$else$ -% Correct order of tables after \paragraph or \subparagraph -\usepackage{etoolbox} -\makeatletter -\patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{} -\makeatother -% Allow footnotes in longtable head/foot -\IfFileExists{footnotehyper.sty}{\usepackage{footnotehyper}}{\usepackage{footnote}} -\makesavenoteenv{longtable} -$endif$ -$endif$ -% add backlinks to footnote references, cf. https://tex.stackexchange.com/questions/302266/make-footnote-clickable-both-ways -$if(footnotes-disable-backlinks)$ -$else$ -\usepackage{footnotebackref} -$endif$ -\usepackage{titling} -\usepackage{fancyhdr} -\usepackage{lastpage} -\usepackage{enumitem} -\usepackage{amsfonts} -\usepackage{sectsty} -\sectionfont{\clearpage} -$if(graphics)$ -\usepackage{graphicx} -\makeatletter -\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} -\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} -\makeatother -% Scale images if necessary, so that they will not overflow the page -% margins by default, and it is still possible to overwrite the defaults -% using explicit options in \includegraphics[width, height, ...]{} -\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} -% Set default figure placement to htbp -\makeatletter -\def\fps@figure{htbp} -\makeatother -$endif$ -$if(links-as-notes)$ -% Make links footnotes instead of hotlinks: -\DeclareRobustCommand{\href}[2]{#2\footnote{\url{#1}}} -$endif$ -$if(strikeout)$ -$-- also used for underline -\usepackage[normalem]{ulem} -% Avoid problems with \sout in headers with hyperref -\pdfstringdefDisableCommands{\renewcommand{\sout}{}} -$endif$ -\setlength{\emergencystretch}{3em} % prevent overfull lines -\providecommand{\tightlist}{% - \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} -$if(numbersections)$ -\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$} -$else$ -\setcounter{secnumdepth}{-\maxdimen} % remove section numbering -$endif$ -$if(beamer)$ -$else$ -$if(block-headings)$ -% Make \paragraph and \subparagraph free-standing -\ifx\paragraph\undefined\else - \let\oldparagraph\paragraph - \renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}} -\fi -\ifx\subparagraph\undefined\else - \let\oldsubparagraph\subparagraph - \renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}} -\fi -$endif$ -$endif$ -$if(pagestyle)$ -\pagestyle{$pagestyle$} -$endif$ -$if(csl-refs)$ -\newlength{\cslhangindent} -\setlength{\cslhangindent}{1.5em} -\newlength{\csllabelwidth} -\setlength{\csllabelwidth}{3em} -\newlength{\cslentryspacingunit} % times entry-spacing -\setlength{\cslentryspacingunit}{\parskip} -\newenvironment{CSLReferences}[2] % #1 hanging-ident, #2 entry spacing - {% don't indent paragraphs - \setlength{\parindent}{0pt} - % turn on hanging indent if param 1 is 1 - \ifodd #1 - \let\oldpar\par - \def\par{\hangindent=\cslhangindent\oldpar} - \fi - % set entry spacing - \setlength{\parskip}{#2\cslentryspacingunit} - }% - {} -\usepackage{calc} -\newcommand{\CSLBlock}[1]{#1\hfill\break} -\newcommand{\CSLLeftMargin}[1]{\parbox[t]{\csllabelwidth}{#1}} -\newcommand{\CSLRightInline}[1]{\parbox[t]{\linewidth - \csllabelwidth}{#1}\break} -\newcommand{\CSLIndent}[1]{\hspace{\cslhangindent}#1} -$endif$ -$for(header-includes)$ -$header-includes$ -$endfor$ -$if(lang)$ -\usepackage[$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=$babel-lang$]{babel} -% get rid of language-specific shorthands (see #6817): -\let\LanguageShortHands\languageshorthands -\def\languageshorthands#1{} -$endif$ -\ifLuaTeX - \usepackage{selnolig} % disable illegal ligatures -\fi -$if(dir)$ -\ifXeTeX - % Load bidi as late as possible as it modifies e.g. graphicx - \usepackage{bidi} -\fi -\ifPDFTeX - \TeXXeTstate=1 - \newcommand{\RL}[1]{\beginR #1\endR} - \newcommand{\LR}[1]{\beginL #1\endL} - \newenvironment{RTL}{\beginR}{\endR} - \newenvironment{LTR}{\beginL}{\endL} -\fi -$endif$ -$if(natbib)$ -\usepackage[$natbiboptions$]{natbib} -\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} -$endif$ -$if(biblatex)$ -\usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex} -$for(bibliography)$ -\addbibresource{$bibliography$} -$endfor$ -$endif$ -$if(nocite-ids)$ -\nocite{$for(nocite-ids)$$it$$sep$, $endfor$} -$endif$ -$if(csquotes)$ -\usepackage{csquotes} -$endif$ - -$if(title)$ -\title{$title$$if(thanks)$\thanks{$thanks$}$endif$} -$endif$ -$if(subtitle)$ -$if(beamer)$ -$else$ -\usepackage{etoolbox} -\makeatletter -\providecommand{\subtitle}[1]{% add subtitle to \maketitle - \apptocmd{\@title}{\par {\large #1 \par}}{}{} -} -\makeatother -$endif$ -\subtitle{$subtitle$} -$endif$ -\author{$for(author)$$author$$sep$ \and $endfor$} -\date{$date$} -$if(beamer)$ -$if(institute)$ -\institute{$for(institute)$$institute$$sep$ \and $endfor$} -$endif$ -$if(titlegraphic)$ -\titlegraphic{\includegraphics{$titlegraphic$}} -$endif$ -$if(logo)$ -\logo{\includegraphics{$logo$}} -$endif$ -$endif$ - - - -%% -%% added -%% - -$if(page-background)$ -\usepackage[pages=all]{background} -$endif$ - -% -% for the background color of the title page -% -$if(titlepage)$ -\usepackage{pagecolor} -\usepackage{afterpage} -$if(titlepage-background)$ -\usepackage{tikz} -$endif$ -$endif$ - -% -% break urls -% -\PassOptionsToPackage{hyphens}{url} - -% -% When using babel or polyglossia with biblatex, loading csquotes is recommended -% to ensure that quoted texts are typeset according to the rules of your main language. -% -\usepackage{csquotes} - -% -% captions -% -\definecolor{caption-color}{HTML}{7030A0} -$if(beamer)$ -$else$ -\usepackage[font={stretch=1.2}, textfont={color=caption-color}, position=top, skip=4mm, labelfont=bf, singlelinecheck=false, justification=$if(caption-justification)$$caption-justification$$else$raggedright$endif$]{caption} -\setcapindent{0em} -$endif$ - -\usepackage{awesomebox} -% -% blockquote -% -\definecolor{blockquote-border}{RGB}{221,221,221} -\definecolor{blockquote-text}{RGB}{119,119,119} -\usepackage{mdframed} -\newmdenv[rightline=false,bottomline=false,topline=false,linewidth=3pt,linecolor=blockquote-border,skipabove=\parskip]{customblockquote} -\renewenvironment{quote}{\begin{customblockquote}\list{}{\rightmargin=0em\leftmargin=0em}% -\item\relax\color{blockquote-text}\ignorespaces}{\unskip\unskip\endlist\end{customblockquote}} - -% -% Source Sans Pro as the de­fault font fam­ily -% Source Code Pro for monospace text -% -% 'default' option sets the default -% font family to Source Sans Pro, not \sfdefault. -% -\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex - $if(fontfamily)$ - $else$ - \usepackage[default]{sourcesanspro} - \usepackage{sourcecodepro} - $endif$ -\else % if not pdftex - $if(mainfont)$ - $else$ - \usepackage[default]{sourcesanspro} - \usepackage{sourcecodepro} - - % XeLaTeX specific adjustments for straight quotes: https://tex.stackexchange.com/a/354887 - % This issue is already fixed (see https://github.com/silkeh/latex-sourcecodepro/pull/5) but the - % fix is still unreleased. - % TODO: Remove this workaround when the new version of sourcecodepro is released on CTAN. - \ifxetex - \makeatletter - \defaultfontfeatures[\ttfamily] - { Numbers = \sourcecodepro@figurestyle, - Scale = \SourceCodePro@scale, - Extension = .otf } - \setmonofont - [ UprightFont = *-\sourcecodepro@regstyle, - ItalicFont = *-\sourcecodepro@regstyle It, - BoldFont = *-\sourcecodepro@boldstyle, - BoldItalicFont = *-\sourcecodepro@boldstyle It ] - {SourceCodePro} - \makeatother - \fi - $endif$ -\fi - -% -% heading color -% -\definecolor{heading-color}{HTML}{7030A0} -$if(beamer)$ -$else$ -\addtokomafont{section}{\color{heading-color} \fontsize{16pt}{19pt}\selectfont} -\addtokomafont{subsection}{\color{heading-color} \fontsize{14pt}{17pt}\selectfont} -\addtokomafont{subsubsection}{\color{heading-color} \fontsize{12pt}{14pt}\selectfont} -\addtokomafont{paragraph}{\color{heading-color} \fontsize{12pt}{14pt}\selectfont \itshape} -\addtokomafont{subparagraph}{\color{heading-color} \fontsize{12pt}{14pt}\selectfont \itshape} -$endif$ -% When using the classes report, scrreprt, book, -% scrbook or memoir, uncomment the following line. -%\addtokomafont{chapter}{\color{heading-color}} - -% -% variables for title, author and date -% -$if(beamer)$ -$else$ -\title{$title$} -\author{$for(author)$$author$$sep$, $endfor$} -\date{$date$} -$endif$ - -% -% tables -% -$if(tables)$ - -\definecolor{table-row-color}{HTML}{F5F5F5} -\definecolor{table-rule-color}{HTML}{999999} - -%\arrayrulecolor{black!40} -\arrayrulecolor{table-rule-color} % color of \toprule, \midrule, \bottomrule -\setlength\heavyrulewidth{0.3ex} % thickness of \toprule, \bottomrule -\renewcommand{\arraystretch}{1.3} % spacing (padding) - -$if(table-use-row-colors)$ -% TODO: This doesn't work anymore. I don't know why. -% Reset rownum counter so that each table -% starts with the same row colors. -% https://tex.stackexchange.com/questions/170637/restarting-rowcolors -% -% Unfortunately the colored cells extend beyond the edge of the -% table because pandoc uses @-expressions (@{}) like so: -% -% \begin{longtable}[]{@{}ll@{}} -% \end{longtable} -% -% https://en.wikibooks.org/wiki/LaTeX/Tables#.40-expressions -\let\oldlongtable\longtable -\let\endoldlongtable\endlongtable -\renewenvironment{longtable}{ -\rowcolors{3}{}{table-row-color!100} % row color -\oldlongtable} { -\endoldlongtable -\global\rownum=0\relax} -$endif$ -$endif$ - -% -% remove paragraph indention -% -\setlength{\parindent}{0pt} -\setlength{\parskip}{6pt plus 2pt minus 1pt} -\setlength{\emergencystretch}{3em} % prevent overfull lines - -% -% -% Listings -% -% - -$if(listings)$ - -% -% general listing colors -% -\definecolor{listing-background}{HTML}{F7F7F7} -\definecolor{listing-rule}{HTML}{B3B2B3} -\definecolor{listing-numbers}{HTML}{B3B2B3} -\definecolor{listing-text-color}{HTML}{000000} -\definecolor{listing-keyword}{HTML}{435489} -\definecolor{listing-keyword-2}{HTML}{1284CA} % additional keywords -\definecolor{listing-keyword-3}{HTML}{9137CB} % additional keywords -\definecolor{listing-identifier}{HTML}{435489} -\definecolor{listing-string}{HTML}{00999A} -\definecolor{listing-comment}{HTML}{8E8E8E} -\colorlet{punct}{red!60!black} -\definecolor{delim}{RGB}{20,105,176} -\colorlet{numb}{magenta!60!black} - -\lstdefinestyle{listing_style}{ -$if(listings-disable-line-numbers)$ - xleftmargin = 0.6em, - framexleftmargin = 0.4em, -$else$ - numbers = left, - xleftmargin = 2.7em, - framexleftmargin = 2.5em, -$endif$ - backgroundcolor = \color{listing-background}, - basicstyle = \color{listing-text-color}\linespread{1.2}$if(code-block-font-size)$$code-block-font-size$$else$\footnotesize$endif$\ttfamily{}, - breaklines = true, - breakatwhitespace = true, - breakautoindent = true, - linewidth = \textwidth, - frame = single, - framesep = 0.19em, - rulecolor = \color{listing-rule}, - frameround = ffff, - tabsize = 2, - numberstyle = \color{listing-numbers}, - numbersep = 5pt, - aboveskip = 1.0em, - belowskip = 0.1em, - abovecaptionskip = 0em, - belowcaptionskip = 1.0em, - keywordstyle = {\color{listing-keyword}\bfseries}, - keywordstyle = {[2]\color{listing-keyword-2}\bfseries}, - keywordstyle = {[3]\color{listing-keyword-3}\bfseries\itshape}, - sensitive = true, - showspaces = false, - showstringspaces = false, - showtabs = false, - captionpos = b, - identifierstyle = \color{listing-identifier}, - commentstyle = \color{listing-comment}, - stringstyle = \color{listing-string}, - showstringspaces = false, - escapeinside = {/*@}{@*/}, % Allow LaTeX inside these special comments - literate = - {á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1 - {Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1 - {à}{{\`a}}1 {è}{{\'e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1 - {À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1 - {ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1 - {Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1 - {â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1 - {Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1 - {œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1 - {ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {å}{{\r a}}1 {Å}{{\r A}}1 - {€}{{\EUR}}1 {£}{{\pounds}}1 {«}{{\guillemotleft}}1 - {»}{{\guillemotright}}1 {ñ}{{\~n}}1 {Ñ}{{\~N}}1 {¿}{{?`}}1 - {…}{{\ldots}}1 {≥}{{>=}}1 {≤}{{<=}}1 {„}{{\glqq}}1 {“}{{\grqq}}1 - {”}{{''}}1 -} -\lstset{style=listing_style} - -% -% Java (Java SE 12, 2019-06-22) -% -\lstdefinelanguage{Java}{ - morekeywords={ - % normal keywords (without data types) - abstract,assert,break,case,catch,class,continue,default, - do,else,enum,exports,extends,final,finally,for,if,implements, - import,instanceof,interface,module,native,new,package,private, - protected,public,requires,return,static,strictfp,super,switch, - synchronized,this,throw,throws,transient,try,volatile,while, - % var is an identifier - var - }, - morekeywords={[2] % data types - % primitive data types - boolean,byte,char,double,float,int,long,short, - % String - String, - % primitive wrapper types - Boolean,Byte,Character,Double,Float,Integer,Long,Short - % number types - Number,AtomicInteger,AtomicLong,BigDecimal,BigInteger,DoubleAccumulator,DoubleAdder,LongAccumulator,LongAdder,Short, - % other - Object,Void,void - }, - morekeywords={[3] % literals - % reserved words for literal values - null,true,false, - }, - sensitive, - morecomment = [l]//, - morecomment = [s]{/*}{*/}, - morecomment = [s]{/**}{*/}, - morestring = [b]", - morestring = [b]', -} - -\lstdefinelanguage{XML}{ - morestring = [b]", - moredelim = [s][\bfseries\color{listing-keyword}]{<}{\ }, - moredelim = [s][\bfseries\color{listing-keyword}]{}, - moredelim = [l][\bfseries\color{listing-keyword}]{/>}, - moredelim = [l][\bfseries\color{listing-keyword}]{>}, - morecomment = [s]{}, - morecomment = [s]{}, - commentstyle = \color{listing-comment}, - stringstyle = \color{listing-string}, - identifierstyle = \color{listing-identifier} -} - -\lstdefinelanguage{JSON}{ - literate= - *{0}{{{\color{numb}0}}}{1} - {1}{{{\color{numb}1}}}{1} - {2}{{{\color{numb}2}}}{1} - {3}{{{\color{numb}3}}}{1} - {4}{{{\color{numb}4}}}{1} - {5}{{{\color{numb}5}}}{1} - {6}{{{\color{numb}6}}}{1} - {7}{{{\color{numb}7}}}{1} - {8}{{{\color{numb}8}}}{1} - {9}{{{\color{numb}9}}}{1} - {:}{{{\color{punct}{:}}}}{1} - {,}{{{\color{punct}{,}}}}{1} - {\{}{{{\color{delim}{\{}}}}{1} - {\}}{{{\color{delim}{\}}}}}{1} - {[}{{{\color{delim}{[}}}}{1} - {]}{{{\color{delim}{]}}}}{1} -} - -\lstdefinelanguage{PowerShell}{ - morekeywords={ - Add-Content,Add-PSSnapin,Clear-Content,Clear-History,Clear-Host,Clear-Item,Clear-ItemProperty,Clear-Variable,Compare-Object,Connect-PSSession,ConvertFrom-String,Convert-Path,Copy-Item,Copy-ItemProperty,Disable-PSBreakpoint,Disconnect-PSSession,Enable-PSBreakpoint,Enter-PSSession,Exit-PSSession,Export-Alias,Export-Csv,Export-PSSession,ForEach-Object,Format-Custom,Format-Hex,Format-List,Format-Table,Format-Wide,Get-Alias,Get-ChildItem,Get-Clipboard,Get-Command,Get-ComputerInfo,Get-Content,Get-History,Get-Item,Get-ItemProperty,Get-ItemPropertyValue,Get-Job,Get-Location,Get-Member,Get-Module,Get-Process,Get-PSBreakpoint,Get-PSCallStack,Get-PSDrive,Get-PSSession,Get-PSSnapin,Get-Service,Get-TimeZone,Get-Unique,Get-Variable,Get-WmiObject,Group-Object,help,Import-Alias,Import-Csv,Import-Module,Import-PSSession,Invoke-Command,Invoke-Expression,Invoke-History,Invoke-Item,Invoke-RestMethod,Invoke-WebRequest,Invoke-WmiMethod,Measure-Object,mkdir,Move-Item,Move-ItemProperty,New-Alias,New-Item,New-Module,New-PSDrive,New-PSSession,New-PSSessionConfigurationFile,New-Variable,Out-GridView,Out-Host,Out-Printer,Pop-Location,powershell_ise.exe,Push-Location,Receive-Job,Receive-PSSession,Remove-Item,Remove-ItemProperty,Remove-Job,Remove-Module,Remove-PSBreakpoint,Remove-PSDrive,Remove-PSSession,Remove-PSSnapin,Remove-Variable,Remove-WmiObject,Rename-Item,Rename-ItemProperty,Resolve-Path,Resume-Job,Select-Object,Select-String,Set-Alias,Set-Clipboard,Set-Content,Set-Item,Set-ItemProperty,Set-Location,Set-PSBreakpoint,Set-TimeZone,Set-Variable,Set-WmiInstance,Show-Command,Sort-Object,Start-Job,Start-Process,Start-Service,Start-Sleep,Stop-Job,Stop-Process,Stop-Service,Suspend-Job,Tee-Object,Trace-Command,Wait-Job,Where-Object,Write-Output - }, - morekeywords={ - Add-AppxPackage,Add-AppxProvisionedPackage,Add-AppxVolume,Add-BitsFile,Add-CertificateEnrollmentPolicyServer,Add-Computer,Add-Content,Add-History,Add-JobTrigger,Add-KdsRootKey,Add-LocalGroupMember,Add-Member,Add-PSSnapin,Add-Type,Add-WindowsCapability,Add-WindowsDriver,Add-WindowsImage,Add-WindowsPackage,Checkpoint-Computer,Clear-Content,Clear-EventLog,Clear-History,Clear-Item,Clear-ItemProperty,Clear-KdsCache,Clear-RecycleBin,Clear-Tpm,Clear-Variable,Clear-WindowsCorruptMountPoint,Compare-Object,Complete-BitsTransfer,Complete-DtiagnosticTransaction,Complete-Transaction,Confirm-SecureBootUEFI,Connect-PSSession,Connect-WSMan,ConvertFrom-Csv,ConvertFrom-Json,ConvertFrom-SecureString,ConvertFrom-String,ConvertFrom-StringData,Convert-Path,Convert-String,ConvertTo-Csv,ConvertTo-Html,ConvertTo-Json,ConvertTo-ProcessMitigationPolicy,ConvertTo-SecureString,ConvertTo-TpmOwnerAuth,ConvertTo-Xml,Copy-Item,Copy-ItemProperty,Debug-Job,Debug-Process,Debug-Runspace,Disable-AppBackgroundTaskDiagnosticLog,Disable-ComputerRestore,Disable-JobTrigger,Disable-LocalUser,Disable-PSBreakpoint,Disable-PSRemoting,Disable-PSSessionConfiguration,Disable-RunspaceDebug,Disable-ScheduledJob,Disable-TlsCipherSuite,Disable-TlsEccCurve,Disable-TlsSessionTicketKey,Disable-TpmAutoProvisioning,Disable-WindowsErrorReporting,Disable-WindowsOptionalFeature,Disable-WSManCredSSP,Disconnect-PSSession,Disconnect-WSMan,Dismount-AppxVolume,Dismount-WindowsImage,Enable-AppBackgroundTaskDiagnosticLog,Enable-ComputerRestore,Enable-JobTrigger,Enable-LocalUser,Enable-PSBreakpoint,Enable-PSRemoting,Enable-PSSessionConfiguration,Enable-RunspaceDebug,Enable-ScheduledJob,Enable-TlsCipherSuite,Enable-TlsEccCurve,Enable-TlsSessionTicketKey,Enable-TpmAutoProvisioning,Enable-WindowsErrorReporting,Enable-WindowsOptionalFeature,Enable-WSManCredSSP,Enter-PSHostProcess,Enter-PSSession,Exit-PSHostProcess,Exit-PSSession,Expand-WindowsCustomDataImage,Expand-WindowsImage,Export-Alias,Export-BinaryMiLog,Export-Certificate,Export-Clixml,Export-Console,Export-Counter,Export-Csv,Export-FormatData,Export-ModuleMember,Export-PfxCertificate,Export-ProvisioningPackage,Export-PSSession,Export-StartLayout,Export-StartLayoutEdgeAssets,Export-TlsSessionTicketKey,Export-Trace,Export-WindowsCapabilitySource,Export-WindowsDriver,Export-WindowsImage,Find-Package,Find-PackageProvider,ForEach-Object,Format-Custom,Format-List,Format-SecureBootUEFI,Format-Table,Format-Wide,Get-Acl,Get-Alias,Get-AppxDefaultVolume,Get-AppxPackage,Get-AppxPackageManifest,Get-AppxProvisionedPackage,Get-AppxVolume,Get-AuthenticodeSignature,Get-BitsTransfer,Get-Certificate,Get-CertificateAutoEnrollmentPolicy,Get-CertificateEnrollmentPolicyServer,Get-CertificateNotificationTask,Get-ChildItem,Get-CimAssociatedInstance,Get-CimClass,Get-CimInstance,Get-CimSession,Get-Clipboard,Get-CmsMessage,Get-Command,Get-ComputerInfo,Get-ComputerRestorePoint,Get-Content,Get-ControlPanelItem,Get-Counter,Get-Credential,Get-Culture,Get-DAPolicyChange,Get-Date,Get-DeliveryOptimizationLog,Get-DeliveryOptimizationPerfSnap,Get-DeliveryOptimizationPerfSnapThisMonth,Get-DeliveryOptimizationStatus,Get-DODownloadMode,Get-DOPercentageMaxBackgroundBandwidth,Get-DOPercentageMaxForegroundBandwidth,Get-Event,Get-EventLog,Get-EventSubscriber,Get-ExecutionPolicy,Get-FormatData,Get-Help,Get-History,Get-Host,Get-HotFix,Get-Item,Get-ItemProperty,Get-ItemPropertyValue,Get-Job,Get-JobTrigger,Get-KdsConfiguration,Get-KdsRootKey,Get-LocalGroup,Get-LocalGroupMember,Get-LocalUser,Get-Location,Get-Member,Get-Module,Get-Package,Get-PackageProvider,Get-PackageSource,Get-PfxCertificate,Get-PfxData,Get-PmemDisk,Get-PmemPhysicalDevice,Get-PmemUnusedRegion,Get-Process,Get-ProcessMitigation,Get-ProvisioningPackage,Get-PSBreakpoint,Get-PSCallStack,Get-PSDrive,Get-PSHostProcessInfo,Get-PSProvider,Get-PSReadlineKeyHandler,Get-PSReadlineOption,Get-PSSession,Get-PSSessionCapability,Get-PSSessionConfiguration,Get-PSSnapin,Get-Random,Get-Runspace,Get-RunspaceDebug,Get-ScheduledJob,Get-ScheduledJobOption,Get-SecureBootPolicy,Get-SecureBootUEFI,Get-Service,Get-TimeZone,Get-TlsCipherSuite,Get-TlsEccCurve,Get-Tpm,Get-TpmEndorsementKeyInfo,Get-TpmSupportedFeature,Get-TraceSource,Get-Transaction,Get-TroubleshootingPack,Get-TrustedProvisioningCertificate,Get-TypeData,Get-UICulture,Get-Unique,Get-Variable,Get-WIMBootEntry,Get-WinAcceptLanguageFromLanguageListOptOut,Get-WinCultureFromLanguageListOptOut,Get-WinDefaultInputMethodOverride,Get-WindowsCapability,Get-WindowsDeveloperLicense,Get-WindowsDriver,Get-WindowsEdition,Get-WindowsErrorReporting,Get-WindowsImage,Get-WindowsImageContent,Get-WindowsOptionalFeature,Get-WindowsPackage,Get-WindowsSearchSetting,Get-WinEvent,Get-WinHomeLocation,Get-WinLanguageBarOption,Get-WinSystemLocale,Get-WinUILanguageOverride,Get-WinUserLanguageList,Get-WmiObject,Get-WSManCredSSP,Get-WSManInstance,Group-Object,Import-Alias,Import-BinaryMiLog,Import-Certificate,Import-Clixml,Import-Counter,Import-Csv,Import-LocalizedData,Import-Module,Import-PackageProvider,Import-PfxCertificate,Import-PSSession,Import-StartLayout,Import-TpmOwnerAuth,Initialize-PmemPhysicalDevice,Initialize-Tpm,Install-Package,Install-PackageProvider,Install-ProvisioningPackage,Install-TrustedProvisioningCertificate,Invoke-CimMethod,Invoke-Command,Invoke-CommandInDesktopPackage,Invoke-DscResource,Invoke-Expression,Invoke-History,Invoke-Item,Invoke-RestMethod,Invoke-TroubleshootingPack,Invoke-WebRequest,Invoke-WmiMethod,Invoke-WSManAction,Join-DtiagnosticResourceManager,Join-Path,Limit-EventLog,Measure-Command,Measure-Object,Mount-AppxVolume,Mount-WindowsImage,Move-AppxPackage,Move-Item,Move-ItemProperty,New-Alias,New-CertificateNotificationTask,New-CimInstance,New-CimSession,New-CimSessionOption,New-DtiagnosticTransaction,New-Event,New-EventLog,New-FileCatalog,New-Item,New-ItemProperty,New-JobTrigger,New-LocalGroup,New-LocalUser,New-Module,New-ModuleManifest,New-NetIPsecAuthProposal,New-NetIPsecMainModeCryptoProposal,New-NetIPsecQuickModeCryptoProposal,New-Object,New-PmemDisk,New-ProvisioningRepro,New-PSDrive,New-PSRoleCapabilityFile,New-PSSession,New-PSSessionConfigurationFile,New-PSSessionOption,New-PSTransportOption,New-PSWorkflowExecutionOption,New-ScheduledJobOption,New-SelfSignedCertificate,New-Service,New-TimeSpan,New-TlsSessionTicketKey,New-Variable,New-WebServiceProxy,New-WindowsCustomImage,New-WindowsImage,New-WinEvent,New-WinUserLanguageList,New-WSManInstance,New-WSManSessionOption,Optimize-AppxProvisionedPackages,Optimize-WindowsImage,Out-Default,Out-File,Out-GridView,Out-Host,Out-Null,Out-Printer,Out-String,Pop-Location,Protect-CmsMessage,Publish-DscConfiguration,Push-Location,Read-Host,Receive-DtiagnosticTransaction,Receive-Job,Receive-PSSession,Register-ArgumentCompleter,Register-CimIndicationEvent,Register-EngineEvent,Register-ObjectEvent,Register-PackageSource,Register-PSSessionConfiguration,Register-ScheduledJob,Register-WmiEvent,Remove-AppxPackage,Remove-AppxProvisionedPackage,Remove-AppxVolume,Remove-BitsTransfer,Remove-CertificateEnrollmentPolicyServer,Remove-CertificateNotificationTask,Remove-CimInstance,Remove-CimSession,Remove-Computer,Remove-Event,Remove-EventLog,Remove-Item,Remove-ItemProperty,Remove-Job,Remove-JobTrigger,Remove-LocalGroup,Remove-LocalGroupMember,Remove-LocalUser,Remove-Module,Remove-PmemDisk,Remove-PSBreakpoint,Remove-PSDrive,Remove-PSReadlineKeyHandler,Remove-PSSession,Remove-PSSnapin,Remove-TypeData,Remove-Variable,Remove-WindowsCapability,Remove-WindowsDriver,Remove-WindowsImage,Remove-WindowsPackage,Remove-WmiObject,Remove-WSManInstance,Rename-Computer,Rename-Item,Rename-ItemProperty,Rename-LocalGroup,Rename-LocalUser,Repair-WindowsImage,Reset-ComputerMachinePassword,Resolve-DnsName,Resolve-Path,Restart-Computer,Restart-Service,Restore-Computer,Resume-BitsTransfer,Resume-Job,Resume-ProvisioningSession,Resume-Service,Save-Help,Save-Package,Save-WindowsImage,Select-Object,Select-String,Select-Xml,Send-DtiagnosticTransaction,Send-MailMessage,Set-Acl,Set-Alias,Set-AppBackgroundTaskResourcePolicy,Set-AppxDefaultVolume,Set-AppXProvisionedDataFile,Set-AuthenticodeSignature,Set-BitsTransfer,Set-CertificateAutoEnrollmentPolicy,Set-CimInstance,Set-Clipboard,Set-Content,Set-Culture,Set-Date,Set-DODownloadMode,Set-DOPercentageMaxBackgroundBandwidth,Set-DOPercentageMaxForegroundBandwidth,Set-DscLocalConfigurationManager,Set-ExecutionPolicy,Set-Item,Set-ItemProperty,Set-JobTrigger,Set-KdsConfiguration,Set-LocalGroup,Set-LocalUser,Set-Location,Set-PackageSource,Set-ProcessMitigation,Set-PSBreakpoint,Set-PSDebug,Set-PSReadlineKeyHandler,Set-PSReadlineOption,Set-PSSessionConfiguration,Set-ScheduledJob,Set-ScheduledJobOption,Set-SecureBootUEFI,Set-Service,Set-StrictMode,Set-TimeZone,Set-TpmOwnerAuth,Set-TraceSource,Set-Variable,Set-WinAcceptLanguageFromLanguageListOptOut,Set-WinCultureFromLanguageListOptOut,Set-WinDefaultInputMethodOverride,Set-WindowsEdition,Set-WindowsProductKey,Set-WindowsSearchSetting,Set-WinHomeLocation,Set-WinLanguageBarOption,Set-WinSystemLocale,Set-WinUILanguageOverride,Set-WinUserLanguageList,Set-WmiInstance,Set-WSManInstance,Set-WSManQuickConfig,Show-Command,Show-ControlPanelItem,Show-EventLog,Show-WindowsDeveloperLicenseRegistration,Sort-Object,Split-Path,Split-WindowsImage,Start-BitsTransfer,Start-DscConfiguration,Start-DtiagnosticResourceManager,Start-Job,Start-Process,Start-Service,Start-Sleep,Start-Transaction,Start-Transcript,Stop-Computer,Stop-DtiagnosticResourceManager,Stop-Job,Stop-Process,Stop-Service,Stop-Transcript,Suspend-BitsTransfer,Suspend-Job,Suspend-Service,Switch-Certificate,Tee-Object,Test-Certificate,Test-ComputerSecureChannel,Test-Connection,Test-DscConfiguration,Test-FileCatalog,Test-KdsRootKey,Test-ModuleManifest,Test-Path,Test-PSSessionConfigurationFile,Test-WSMan,Trace-Command,Unblock-File,Unblock-Tpm,Undo-DtiagnosticTransaction,Undo-Transaction,Uninstall-Package,Uninstall-ProvisioningPackage,Uninstall-TrustedProvisioningCertificate,Unprotect-CmsMessage,Unregister-Event,Unregister-PackageSource,Unregister-PSSessionConfiguration,Unregister-ScheduledJob,Unregister-WindowsDeveloperLicense,Update-FormatData,Update-Help,Update-List,Update-TypeData,Update-WIMBootEntry,Use-Transaction,Use-WindowsUnattend,Wait-Debugger,Wait-Event,Wait-Job,Wait-Process,Where-Object,Write-Debug,Write-Error,Write-EventLog,Write-Host,Write-Information,Write-Output,Write-Progress,Write-Verbose,Write-Warning - }, - morekeywords={ - Add-BitLockerKeyProtector,Add-DnsClientNrptRule,Add-DtcClusterTMMapping,Add-EtwTraceProvider,Add-InitiatorIdToMaskingSet,Add-MpPreference,Add-NetEventNetworkAdapter,Add-NetEventPacketCaptureProvider,Add-NetEventProvider,Add-NetEventVFPProvider,Add-NetEventVmNetworkAdapter,Add-NetEventVmSwitch,Add-NetEventVmSwitchProvider,Add-NetEventWFPCaptureProvider,Add-NetIPHttpsCertBinding,Add-NetLbfoTeamMember,Add-NetLbfoTeamNic,Add-NetNatExternalAddress,Add-NetNatStaticMapping,Add-NetSwitchTeamMember,Add-Odbsn,Add-PartitionAccessPath,Add-PhysicalDisk,Add-Printer,Add-PrinterDriver,Add-PrinterPort,Add-StorageFaultDomain,Add-TargetPortToMaskingSet,Add-VirtualDiskToMaskingSet,Add-VpnConnection,Add-VpnConnectionRoute,Add-VpnConnectionTriggerApplication,Add-VpnConnectionTriggerDnsConfiguration,Add-VpnConnectionTriggerTrustedNetwork,AfterAll,AfterEach,Assert-MockCalled,Assert-VerifiableMocks,Backup-BitLockerKeyProtector,BackupToAAD-BitLockerKeyProtector,BeforeAll,BeforeEach,Block-FileShareAccess,Block-SmbShareAccess,Clear-BitLockerAutoUnlock,Clear-Disk,Clear-DnsClientCache,Clear-FileStorageTier,Clear-Host,Clear-PcsvDeviceLog,Clear-StorageDiagnosticInfo,Close-SmbOpenFile,Close-SmbSession,Compress-Archive,Configuration,Connect-IscsiTarget,Connect-VirtualDisk,Context,convert,ConvertFrom-SddlString,Copy-NetFirewallRule,Copy-NetIPsecMainModeCryptoSet,Copy-NetIPsecMainModeRule,Copy-NetIPsecPhase1AuthSet,Copy-NetIPsecPhase2AuthSet,Copy-NetIPsecQuickModeCryptoSet,Copy-NetIPsecRule,Debug-FileShare,Debug-MMAppPrelaunch,Debug-StorageSubSystem,Debug-Volume,Describe,Disable-BitLocker,Disable-BitLockerAutoUnlock,Disable-DAManualEntryPointSelection,Disable-Dsebug,Disable-MMAgent,Disable-NetAdapter,Disable-NetAdapterBinding,Disable-NetAdapterChecksumOffload,Disable-NetAdapterEncapsulatedPacketTaskOffload,Disable-NetAdapterIPsecOffload,Disable-NetAdapterLso,Disable-NetAdapterPacketDirect,Disable-NetAdapterPowerManagement,Disable-NetAdapterQos,Disable-NetAdapterRdma,Disable-NetAdapterRsc,Disable-NetAdapterRss,Disable-NetAdapterSriov,Disable-NetAdapterVmq,Disable-NetDnsTransitionConfiguration,Disable-NetFirewallRule,Disable-NetIPHttpsProfile,Disable-NetIPsecMainModeRule,Disable-NetIPsecRule,Disable-NetNatTransitionConfiguration,Disable-NetworkSwitchEthernetPort,Disable-NetworkSwitchFeature,Disable-NetworkSwitchVlan,Disable-OdbcPerfCounter,Disable-PhysicalDiskIdentification,Disable-PnpDevice,Disable-PSTrace,Disable-PSWSManCombinedTrace,Disable-ScheduledTask,Disable-SmbDelegation,Disable-StorageEnclosureIdentification,Disable-StorageEnclosurePower,Disable-StorageHighAvailability,Disable-StorageMaintenanceMode,Disable-WdacBidTrace,Disable-WSManTrace,Disconnect-IscsiTarget,Disconnect-VirtualDisk,Dismount-DiskImage,Enable-BitLocker,Enable-BitLockerAutoUnlock,Enable-DAManualEntryPointSelection,Enable-Dsebug,Enable-MMAgent,Enable-NetAdapter,Enable-NetAdapterBinding,Enable-NetAdapterChecksumOffload,Enable-NetAdapterEncapsulatedPacketTaskOffload,Enable-NetAdapterIPsecOffload,Enable-NetAdapterLso,Enable-NetAdapterPacketDirect,Enable-NetAdapterPowerManagement,Enable-NetAdapterQos,Enable-NetAdapterRdma,Enable-NetAdapterRsc,Enable-NetAdapterRss,Enable-NetAdapterSriov,Enable-NetAdapterVmq,Enable-NetDnsTransitionConfiguration,Enable-NetFirewallRule,Enable-NetIPHttpsProfile,Enable-NetIPsecMainModeRule,Enable-NetIPsecRule,Enable-NetNatTransitionConfiguration,Enable-NetworkSwitchEthernetPort,Enable-NetworkSwitchFeature,Enable-NetworkSwitchVlan,Enable-OdbcPerfCounter,Enable-PhysicalDiskIdentification,Enable-PnpDevice,Enable-PSTrace,Enable-PSWSManCombinedTrace,Enable-ScheduledTask,Enable-SmbDelegation,Enable-StorageEnclosureIdentification,Enable-StorageEnclosurePower,Enable-StorageHighAvailability,Enable-StorageMaintenanceMode,Enable-WdacBidTrace,Enable-WSManTrace,Expand-Archive,Export-ODataEndpointProxy,Export-ScheduledTask,Find-Command,Find-DscResource,Find-Module,Find-NetIPsecRule,Find-NetRoute,Find-RoleCapability,Find-Script,Flush-EtwTraceSession,Format-Hex,Format-Volume,Get-AppBackgroundTask,Get-AppxLastError,Get-AppxLog,Get-AutologgerConfig,Get-BitLockerVolume,Get-ClusteredScheduledTask,Get-DAClientExperienceConfiguration,Get-DAConnectionStatus,Get-DAEntryPointTableItem,Get-DedupProperties,Get-Disk,Get-DiskImage,Get-DiskStorageNodeView,Get-DnsClient,Get-DnsClientCache,Get-DnsClientGlobalSetting,Get-DnsClientNrptGlobal,Get-DnsClientNrptPolicy,Get-DnsClientNrptRule,Get-DnsClientServerAddress,Get-DscConfiguration,Get-DscConfigurationStatus,Get-DscLocalConfigurationManager,Get-DscResource,Get-Dtc,Get-DtcAdvancedHostSetting,Get-DtcAdvancedSetting,Get-DtcClusterDefault,Get-DtcClusterTMMapping,Get-Dtefault,Get-DtcLog,Get-DtcNetworkSetting,Get-DtcTransaction,Get-DtcTransactionsStatistics,Get-DtcTransactionsTraceSession,Get-DtcTransactionsTraceSetting,Get-EtwTraceProvider,Get-EtwTraceSession,Get-FileHash,Get-FileIntegrity,Get-FileShare,Get-FileShareAccessControlEntry,Get-FileStorageTier,Get-InitiatorId,Get-InitiatorPort,Get-InstalledModule,Get-InstalledScript,Get-IscsiConnection,Get-IscsiSession,Get-IscsiTarget,Get-IscsiTargetPortal,Get-IseSnippet,Get-LogProperties,Get-MaskingSet,Get-MMAgent,Get-MockDynamicParameters,Get-MpComputerStatus,Get-MpPreference,Get-MpThreat,Get-MpThreatCatalog,Get-MpThreatDetection,Get-NCSIPolicyConfiguration,Get-Net6to4Configuration,Get-NetAdapter,Get-NetAdapterAdvancedProperty,Get-NetAdapterBinding,Get-NetAdapterChecksumOffload,Get-NetAdapterEncapsulatedPacketTaskOffload,Get-NetAdapterHardwareInfo,Get-NetAdapterIPsecOffload,Get-NetAdapterLso,Get-NetAdapterPacketDirect,Get-NetAdapterPowerManagement,Get-NetAdapterQos,Get-NetAdapterRdma,Get-NetAdapterRsc,Get-NetAdapterRss,Get-NetAdapterSriov,Get-NetAdapterSriovVf,Get-NetAdapterStatistics,Get-NetAdapterVmq,Get-NetAdapterVMQQueue,Get-NetAdapterVPort,Get-NetCompartment,Get-NetConnectionProfile,Get-NetDnsTransitionConfiguration,Get-NetDnsTransitionMonitoring,Get-NetEventNetworkAdapter,Get-NetEventPacketCaptureProvider,Get-NetEventProvider,Get-NetEventSession,Get-NetEventVFPProvider,Get-NetEventVmNetworkAdapter,Get-NetEventVmSwitch,Get-NetEventVmSwitchProvider,Get-NetEventWFPCaptureProvider,Get-NetFirewallAddressFilter,Get-NetFirewallApplicationFilter,Get-NetFirewallInterfaceFilter,Get-NetFirewallInterfaceTypeFilter,Get-NetFirewallPortFilter,Get-NetFirewallProfile,Get-NetFirewallRule,Get-NetFirewallSecurityFilter,Get-NetFirewallServiceFilter,Get-NetFirewallSetting,Get-NetIPAddress,Get-NetIPConfiguration,Get-NetIPHttpsConfiguration,Get-NetIPHttpsState,Get-NetIPInterface,Get-NetIPseospSetting,Get-NetIPsecMainModeCryptoSet,Get-NetIPsecMainModeRule,Get-NetIPsecMainModeSA,Get-NetIPsecPhase1AuthSet,Get-NetIPsecPhase2AuthSet,Get-NetIPsecQuickModeCryptoSet,Get-NetIPsecQuickModeSA,Get-NetIPsecRule,Get-NetIPv4Protocol,Get-NetIPv6Protocol,Get-NetIsatapConfiguration,Get-NetLbfoTeam,Get-NetLbfoTeamMember,Get-NetLbfoTeamNic,Get-NetNat,Get-NetNatExternalAddress,Get-NetNatGlobal,Get-NetNatSession,Get-NetNatStaticMapping,Get-NetNatTransitionConfiguration,Get-NetNatTransitionMonitoring,Get-NetNeighbor,Get-NetOffloadGlobalSetting,Get-NetPrefixPolicy,Get-NetQosPolicy,Get-NetRoute,Get-NetSwitchTeam,Get-NetSwitchTeamMember,Get-NetTCPConnection,Get-NetTCPSetting,Get-NetTeredoConfiguration,Get-NetTeredoState,Get-NetTransportFilter,Get-NetUDPEndpoint,Get-NetUDPSetting,Get-NetworkSwitchEthernetPort,Get-NetworkSwitchFeature,Get-NetworkSwitchGlobalData,Get-NetworkSwitchVlan,Get-Odbriver,Get-Odbsn,Get-OdbcPerfCounter,Get-OffloadDataTransferSetting,Get-OperationValidation,Get-Partition,Get-PartitionSupportedSize,Get-PcsvDevice,Get-PcsvDeviceLog,Get-PhysicalDisk,Get-PhysicalDiskStorageNodeView,Get-PhysicalExtent,Get-PhysicalExtentAssociation,Get-PnpDevice,Get-PnpDeviceProperty,Get-PrintConfiguration,Get-Printer,Get-PrinterDriver,Get-PrinterPort,Get-PrinterProperty,Get-PrintJob,Get-PSRepository,Get-ResiliencySetting,Get-ScheduledTask,Get-ScheduledTaskInfo,Get-SmbBandWidthLimit,Get-SmbClientConfiguration,Get-SmbClientNetworkInterface,Get-SmbConnection,Get-SmbDelegation,Get-SmbGlobalMapping,Get-SmbMapping,Get-SmbMultichannelConnection,Get-SmbMultichannelConstraint,Get-SmbOpenFile,Get-SmbServerConfiguration,Get-SmbServerNetworkInterface,Get-SmbSession,Get-SmbShare,Get-SmbShareAccess,Get-SmbWitnessClient,Get-StartApps,Get-StorageAdvancedProperty,Get-StorageDiagnosticInfo,Get-StorageEnclosure,Get-StorageEnclosureStorageNodeView,Get-StorageEnclosureVendorData,Get-StorageExtendedStatus,Get-StorageFaultDomain,Get-StorageFileServer,Get-StorageFirmwareInformation,Get-StorageHealthAction,Get-StorageHealthReport,Get-StorageHealthSetting,Get-StorageJob,Get-StorageNode,Get-StoragePool,Get-StorageProvider,Get-StorageReliabilityCounter,Get-StorageSetting,Get-StorageSubSystem,Get-StorageTier,Get-StorageTierSupportedSize,Get-SupportedClusterSizes,Get-SupportedFileSystems,Get-TargetPort,Get-TargetPortal,Get-TestDriveItem,Get-Verb,Get-VirtualDisk,Get-VirtualDiskSupportedSize,Get-Volume,Get-VolumeCorruptionCount,Get-VolumeScrubPolicy,Get-VpnConnection,Get-VpnConnectionTrigger,Get-WdacBidTrace,Get-WindowsUpdateLog,Get-WUAVersion,Get-WUIsPendingReboot,Get-WULastInstallationDate,Get-WULastScanSuccessDate,Grant-FileShareAccess,Grant-SmbShareAccess,help,Hide-VirtualDisk,Import-IseSnippet,Import-PowerShellDataFile,ImportSystemModules,In,Initialize-Disk,InModuleScope,Install-Dtc,Install-Module,Install-Script,Install-WUUpdates,Invoke-AsWorkflow,Invoke-Mock,Invoke-OperationValidation,Invoke-Pester,It,Lock-BitLocker,mkdir,Mock,more,Mount-DiskImage,Move-SmbWitnessClient,New-AutologgerConfig,New-DAEntryPointTableItem,New-DscChecksum,New-EapConfiguration,New-EtwTraceSession,New-FileShare,New-Fixture,New-Guid,New-IscsiTargetPortal,New-IseSnippet,New-MaskingSet,New-NetAdapterAdvancedProperty,New-NetEventSession,New-NetFirewallRule,New-NetIPAddress,New-NetIPHttpsConfiguration,New-NetIPseospSetting,New-NetIPsecMainModeCryptoSet,New-NetIPsecMainModeRule,New-NetIPsecPhase1AuthSet,New-NetIPsecPhase2AuthSet,New-NetIPsecQuickModeCryptoSet,New-NetIPsecRule,New-NetLbfoTeam,New-NetNat,New-NetNatTransitionConfiguration,New-NetNeighbor,New-NetQosPolicy,New-NetRoute,New-NetSwitchTeam,New-NetTransportFilter,New-NetworkSwitchVlan,New-Partition,New-PesterOption,New-PSWorkflowSession,New-ScheduledTask,New-ScheduledTaskAction,New-ScheduledTaskPrincipal,New-ScheduledTaskSettingsSet,New-ScheduledTaskTrigger,New-ScriptFileInfo,New-SmbGlobalMapping,New-SmbMapping,New-SmbMultichannelConstraint,New-SmbShare,New-StorageFileServer,New-StoragePool,New-StorageSubsystemVirtualDisk,New-StorageTier,New-TemporaryFile,New-VirtualDisk,New-VirtualDiskClone,New-VirtualDiskSnapshot,New-Volume,New-VpnServerAddress,Open-NetGPO,Optimize-StoragePool,Optimize-Volume,oss,Pause,prompt,PSConsoleHostReadline,Publish-Module,Publish-Script,Read-PrinterNfcTag,Register-ClusteredScheduledTask,Register-DnsClient,Register-IscsiSession,Register-PSRepository,Register-ScheduledTask,Register-StorageSubsystem,Remove-AutologgerConfig,Remove-BitLockerKeyProtector,Remove-DAEntryPointTableItem,Remove-DnsClientNrptRule,Remove-DscConfigurationDocument,Remove-DtcClusterTMMapping,Remove-EtwTraceProvider,Remove-FileShare,Remove-InitiatorId,Remove-InitiatorIdFromMaskingSet,Remove-IscsiTargetPortal,Remove-MaskingSet,Remove-MpPreference,Remove-MpThreat,Remove-NetAdapterAdvancedProperty,Remove-NetEventNetworkAdapter,Remove-NetEventPacketCaptureProvider,Remove-NetEventProvider,Remove-NetEventSession,Remove-NetEventVFPProvider,Remove-NetEventVmNetworkAdapter,Remove-NetEventVmSwitch,Remove-NetEventVmSwitchProvider,Remove-NetEventWFPCaptureProvider,Remove-NetFirewallRule,Remove-NetIPAddress,Remove-NetIPHttpsCertBinding,Remove-NetIPHttpsConfiguration,Remove-NetIPseospSetting,Remove-NetIPsecMainModeCryptoSet,Remove-NetIPsecMainModeRule,Remove-NetIPsecMainModeSA,Remove-NetIPsecPhase1AuthSet,Remove-NetIPsecPhase2AuthSet,Remove-NetIPsecQuickModeCryptoSet,Remove-NetIPsecQuickModeSA,Remove-NetIPsecRule,Remove-NetLbfoTeam,Remove-NetLbfoTeamMember,Remove-NetLbfoTeamNic,Remove-NetNat,Remove-NetNatExternalAddress,Remove-NetNatStaticMapping,Remove-NetNatTransitionConfiguration,Remove-NetNeighbor,Remove-NetQosPolicy,Remove-NetRoute,Remove-NetSwitchTeam,Remove-NetSwitchTeamMember,Remove-NetTransportFilter,Remove-NetworkSwitchEthernetPortIPAddress,Remove-NetworkSwitchVlan,Remove-Odbsn,Remove-Partition,Remove-PartitionAccessPath,Remove-PhysicalDisk,Remove-Printer,Remove-PrinterDriver,Remove-PrinterPort,Remove-PrintJob,Remove-SmbBandwidthLimit,Remove-SmbGlobalMapping,Remove-SmbMapping,Remove-SmbMultichannelConstraint,Remove-SmbShare,Remove-StorageFaultDomain,Remove-StorageFileServer,Remove-StorageHealthIntent,Remove-StorageHealthSetting,Remove-StoragePool,Remove-StorageTier,Remove-TargetPortFromMaskingSet,Remove-VirtualDisk,Remove-VirtualDiskFromMaskingSet,Remove-VpnConnection,Remove-VpnConnectionRoute,Remove-VpnConnectionTriggerApplication,Remove-VpnConnectionTriggerDnsConfiguration,Remove-VpnConnectionTriggerTrustedNetwork,Rename-DAEntryPointTableItem,Rename-MaskingSet,Rename-NetAdapter,Rename-NetFirewallRule,Rename-NetIPHttpsConfiguration,Rename-NetIPsecMainModeCryptoSet,Rename-NetIPsecMainModeRule,Rename-NetIPsecPhase1AuthSet,Rename-NetIPsecPhase2AuthSet,Rename-NetIPsecQuickModeCryptoSet,Rename-NetIPsecRule,Rename-NetLbfoTeam,Rename-NetSwitchTeam,Rename-Printer,Repair-FileIntegrity,Repair-VirtualDisk,Repair-Volume,Reset-DAClientExperienceConfiguration,Reset-DAEntryPointTableItem,Reset-DtcLog,Reset-NCSIPolicyConfiguration,Reset-Net6to4Configuration,Reset-NetAdapterAdvancedProperty,Reset-NetDnsTransitionConfiguration,Reset-NetIPHttpsConfiguration,Reset-NetIsatapConfiguration,Reset-NetTeredoConfiguration,Reset-PhysicalDisk,Reset-StorageReliabilityCounter,Resize-Partition,Resize-StorageTier,Resize-VirtualDisk,Restart-NetAdapter,Restart-PcsvDevice,Restart-PrintJob,Restore-DscConfiguration,Restore-NetworkSwitchConfiguration,Resume-BitLocker,Resume-PrintJob,Revoke-FileShareAccess,Revoke-SmbShareAccess,SafeGetCommand,Save-EtwTraceSession,Save-Module,Save-NetGPO,Save-NetworkSwitchConfiguration,Save-Script,Send-EtwTraceSession,Set-AutologgerConfig,Set-ClusteredScheduledTask,Set-DAClientExperienceConfiguration,Set-DAEntryPointTableItem,Set-Disk,Set-DnsClient,Set-DnsClientGlobalSetting,Set-DnsClientNrptGlobal,Set-DnsClientNrptRule,Set-DnsClientServerAddress,Set-DtcAdvancedHostSetting,Set-DtcAdvancedSetting,Set-DtcClusterDefault,Set-DtcClusterTMMapping,Set-Dtefault,Set-DtcLog,Set-DtcNetworkSetting,Set-DtcTransaction,Set-DtcTransactionsTraceSession,Set-DtcTransactionsTraceSetting,Set-DynamicParameterVariables,Set-EtwTraceProvider,Set-FileIntegrity,Set-FileShare,Set-FileStorageTier,Set-InitiatorPort,Set-IscsiChapSecret,Set-LogProperties,Set-MMAgent,Set-MpPreference,Set-NCSIPolicyConfiguration,Set-Net6to4Configuration,Set-NetAdapter,Set-NetAdapterAdvancedProperty,Set-NetAdapterBinding,Set-NetAdapterChecksumOffload,Set-NetAdapterEncapsulatedPacketTaskOffload,Set-NetAdapterIPsecOffload,Set-NetAdapterLso,Set-NetAdapterPacketDirect,Set-NetAdapterPowerManagement,Set-NetAdapterQos,Set-NetAdapterRdma,Set-NetAdapterRsc,Set-NetAdapterRss,Set-NetAdapterSriov,Set-NetAdapterVmq,Set-NetConnectionProfile,Set-NetDnsTransitionConfiguration,Set-NetEventPacketCaptureProvider,Set-NetEventProvider,Set-NetEventSession,Set-NetEventVFPProvider,Set-NetEventVmSwitchProvider,Set-NetEventWFPCaptureProvider,Set-NetFirewallAddressFilter,Set-NetFirewallApplicationFilter,Set-NetFirewallInterfaceFilter,Set-NetFirewallInterfaceTypeFilter,Set-NetFirewallPortFilter,Set-NetFirewallProfile,Set-NetFirewallRule,Set-NetFirewallSecurityFilter,Set-NetFirewallServiceFilter,Set-NetFirewallSetting,Set-NetIPAddress,Set-NetIPHttpsConfiguration,Set-NetIPInterface,Set-NetIPseospSetting,Set-NetIPsecMainModeCryptoSet,Set-NetIPsecMainModeRule,Set-NetIPsecPhase1AuthSet,Set-NetIPsecPhase2AuthSet,Set-NetIPsecQuickModeCryptoSet,Set-NetIPsecRule,Set-NetIPv4Protocol,Set-NetIPv6Protocol,Set-NetIsatapConfiguration,Set-NetLbfoTeam,Set-NetLbfoTeamMember,Set-NetLbfoTeamNic,Set-NetNat,Set-NetNatGlobal,Set-NetNatTransitionConfiguration,Set-NetNeighbor,Set-NetOffloadGlobalSetting,Set-NetQosPolicy,Set-NetRoute,Set-NetTCPSetting,Set-NetTeredoConfiguration,Set-NetUDPSetting,Set-NetworkSwitchEthernetPortIPAddress,Set-NetworkSwitchPortMode,Set-NetworkSwitchPortProperty,Set-NetworkSwitchVlanProperty,Set-Odbriver,Set-Odbsn,Set-Partition,Set-PcsvDeviceBootConfiguration,Set-PcsvDeviceNetworkConfiguration,Set-PcsvDeviceUserPassword,Set-PhysicalDisk,Set-PrintConfiguration,Set-Printer,Set-PrinterProperty,Set-PSRepository,Set-ResiliencySetting,Set-ScheduledTask,Set-SmbBandwidthLimit,Set-SmbClientConfiguration,Set-SmbPathAcl,Set-SmbServerConfiguration,Set-SmbShare,Set-StorageFileServer,Set-StorageHealthSetting,Set-StoragePool,Set-StorageProvider,Set-StorageSetting,Set-StorageSubSystem,Set-StorageTier,Set-TestInconclusive,Setup,Set-VirtualDisk,Set-Volume,Set-VolumeScrubPolicy,Set-VpnConnection,Set-VpnConnectionIPsecConfiguration,Set-VpnConnectionProxy,Set-VpnConnectionTriggerDnsConfiguration,Set-VpnConnectionTriggerTrustedNetwork,Should,Show-NetFirewallRule,Show-NetIPsecRule,Show-VirtualDisk,Start-AppBackgroundTask,Start-AutologgerConfig,Start-Dtc,Start-DtcTransactionsTraceSession,Start-EtwTraceSession,Start-MpScan,Start-MpWDOScan,Start-NetEventSession,Start-PcsvDevice,Start-ScheduledTask,Start-StorageDiagnosticLog,Start-Trace,Start-WUScan,Stop-DscConfiguration,Stop-Dtc,Stop-DtcTransactionsTraceSession,Stop-EtwTraceSession,Stop-NetEventSession,Stop-PcsvDevice,Stop-ScheduledTask,Stop-StorageDiagnosticLog,Stop-StorageJob,Stop-Trace,Suspend-BitLocker,Suspend-PrintJob,Sync-NetIPsecRule,TabExpansion2,Test-Dtc,Test-NetConnection,Test-ScriptFileInfo,Unblock-FileShareAccess,Unblock-SmbShareAccess,Uninstall-Dtc,Uninstall-Module,Uninstall-Script,Unlock-BitLocker,Unregister-AppBackgroundTask,Unregister-ClusteredScheduledTask,Unregister-IscsiSession,Unregister-PSRepository,Unregister-ScheduledTask,Unregister-StorageSubsystem,Update-Disk,Update-DscConfiguration,Update-EtwTraceSession,Update-HostStorageCache,Update-IscsiTarget,Update-IscsiTargetPortal,Update-Module,Update-ModuleManifest,Update-MpSignature,Update-NetIPsecRule,Update-Script,Update-ScriptFileInfo,Update-SmbMultichannelConnection,Update-StorageFirmware,Update-StoragePool,Update-StorageProviderCache,Write-DtcTransactionsTraceSession,Write-PrinterNfcTag,Write-VolumeCache - }, - morekeywords={Do,Else,For,ForEach,Function,If,In,Until,While}, - alsodigit={-}, - sensitive=false, - morecomment=[l]{\#}, - morecomment=[n]{<\#}{\#>}, - morestring=[b]{"}, - morestring=[b]{'}, - morestring=[s]{@'}{'@}, - morestring=[s]{@"}{"@} -} -$endif$ - -% -% header and footer -% -$if(beamer)$ -$else$ -$if(disable-header-and-footer)$ -$else$ -\setlength{\headheight}{36pt} -\setlength{\footskip}{20pt} -\fancypagestyle{eisvogel-header-footer}{ - \fancyhf{} - $if(logo)$ - \fancyhf[LH]{\raisebox{0.5cm}{\includegraphics[width=3cm]{$logo$}}} - $endif$ - $if(date)$ - \fancyhf[RH]{\fontsize{8pt}{10pt}\selectfont $date$\\ } - $endif$ - \fancyhf[CH]{\fontsize{8pt}{10pt}\selectfont $if(project)$Project $project$$endif$$if(author)$\\$for(author)$$author$$sep$, $endfor$$endif$} - $if(footer-left)$ - \fancyhf[LF]{\fontsize{8pt}{10pt}\selectfont $footer-left$} - $endif$ - $if(footer-center)$ - \fancyhf[CF]{\fontsize{8pt}{10pt}\selectfont $footer-center$} - $endif$ - $if(footer-right)$ - \fancyhf[RF]{\fontsize{8pt}{10pt}\selectfont $footer-right$} - $endif$ - \renewcommand{\headrulewidth}{0pt} - \renewcommand{\footrulewidth}{0pt} -} -\pagestyle{eisvogel-header-footer} -$if(page-background)$ -\backgroundsetup{ -scale=1, -color=black, -opacity=$if(page-background-opacity)$$page-background-opacity$$else$0.2$endif$, -angle=0, -contents={% - \includegraphics[width=\paperwidth,height=\paperheight]{$page-background$} - }% -} -$endif$ -$endif$ -$endif$ - -%% -%% end header and footer -%% - -%% -%% begin set bullet style -%% -\setlistdepth{9} -\setlist[itemize,1]{label=$$\bullet$$,font=\fontsize{10pt}{12pt}\selectfont} -\setlist[itemize,2]{label=$$\circ$$,font=\fontsize{14pt}{17pt}\selectfont} -\setlist[itemize,3]{label=$$\blacksquare$$,font=\fontsize{4pt}{6pt}\selectfont} -\setlist[itemize,4]{label=$$\star$$} -\setlist[itemize,5]{label=$$\diamond$$} -\setlist[itemize,6]{label=$$\ast$$} -\setlist[itemize,7]{label=$$\star$$} -\setlist[itemize,8]{label=$$\ast$$} -\setlist[itemize,9]{label=$$\star$$} -\renewlist{itemize}{itemize}{9} -%% -%% end set bullet style -%% - -\begin{document} - -%% -%% begin titlepage -%% -$if(beamer)$ -$else$ -$if(titlepage)$ -\begin{titlepage} -$if(titlepage-background)$ -\newgeometry{top=2cm, right=4cm, bottom=3cm, left=4cm} -$else$ -\newgeometry{left=3cm, right=2cm, bottom=1.5cm} -$endif$ -$if(titlepage-color)$ -\definecolor{titlepage-color}{HTML}{$titlepage-color$} -\newpagecolor{titlepage-color}\afterpage{\restorepagecolor} -$endif$ -$if(titlepage-background)$ -\tikz[remember picture,overlay] \node[inner sep=0pt] at (current page.center){\includegraphics[width=\paperwidth,height=\paperheight]{$titlepage-background$}}; -$endif$ -\newcommand{\colorRule}[3][black]{\textcolor[HTML]{#1}{\rule{#2}{#3}}} -\begin{flushleft} -\noindent -\\[-1em] -\color[HTML]{$if(titlepage-text-color)$$titlepage-text-color$$else$5F5F5F$endif$} -\par -\noindent - -$if(titlepage-top-cover-image)$ -\noindent -\vskip -3em -\includegraphics{$titlepage-top-cover-image$} -$endif$ - -$if(titlepage-background)$ -% The titlepage with a background image has other text spacing and text size -{ - \setstretch{2} - \vfill - \vskip -8em - \textcolor{titlecolor}{\noindent {\fontsize{36pt}{42pt}\selectfont $title$}} - $if(subtitle)$ - \vskip 2em - \textcolor{subtitlecolor}{{\fontsize{14pt}{17pt}\selectfont $subtitle$}} - $endif$ - \vskip 0em - \textcolor{authorcolor}{\noindent {\fontsize{12pt}{14pt}\selectfont $for(author)$$author$$sep$, $endfor$ \vskip 0.6em $date$}} - \vfill -} -$else$ -{ - \setstretch{1.4} - \vfill - \vskip 18em - \textcolor{titlecolor}{\noindent {\fontsize{36pt}{42pt}\selectfont $title$}} - $if(subtitle)$ - \vskip 2em - \textcolor{subtitlecolor}{{\fontsize{14pt}{17pt}\selectfont $subtitle$}} - $endif$ - \vskip -1em - \textcolor{authorcolor}{\noindent {\fontsize{12pt}{14pt}\selectfont $for(author)$$author$$sep$, $endfor$}} - \vfill -} -$endif$ - -$if(disclaimer)$ -\vskip 21em -\setstretch{1.0} -\textcolor{disclaimercolor}{\noindent {\fontsize{8pt}{10pt}\selectfont $disclaimer$}} -$endif$ - -\end{flushleft} -\end{titlepage} -\restoregeometry -$endif$ -$endif$ - -%% -%% end titlepage -%% - -$if(has-frontmatter)$ -\frontmatter -$endif$ -$if(title)$ -$if(beamer)$ -\frame{\titlepage} -$endif$ -$if(abstract)$ -\begin{abstract} -$abstract$ -\end{abstract} -$endif$ -$endif$ - -$if(first-chapter)$ -\setcounter{chapter}{$first-chapter$} -\addtocounter{chapter}{-1} -$endif$ - -$if(version-history)$ -\hypertarget{version-history}{% -\section{Version history}\label{version-history}} - -\begin{longtable}[]{@{} - >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.1200}} - >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.2000}} - >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.2500}} - >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.4300}}@{}} -\toprule() -\begin{minipage}[b]{\linewidth}\raggedright -\textbf{Version} -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -\textbf{Date} -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -\textbf{Author} -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -\textbf{Description} -\end{minipage} \\ -\midrule() -\endhead -$for(version-history)$ -$if(version-history.version)$ -$version-history.version$ & $if(version-history.date)$$version-history.date$$endif$ & $if(version-history.author)$$version-history.author$$endif$ & $if(version-history.description)$$version-history.description$$endif$ \\ -$else$ -1.0.0 & $date$ & $for(author)$$author$$sep$ \and $endfor$ & Initial draft \\ -$endif$ -$endfor$ -\bottomrule() -\end{longtable} -$endif$ - -$for(include-before)$ -$include-before$ - -$endfor$ -$if(toc)$ -$if(toc-title)$ -\renewcommand*\contentsname{$toc-title$} -$endif$ -$if(beamer)$ -\begin{frame}[allowframebreaks] -$if(toc-title)$ - \frametitle{$toc-title$} -$endif$ - \tableofcontents[hideallsubsections] -\end{frame} -$if(toc-own-page)$ -\newpage -$endif$ -$else$ -{ -\setcounter{tocdepth}{$toc-depth$} -\tableofcontents -$if(toc-own-page)$ -\newpage -$endif$ -} -$endif$ -$endif$ -$if(lot)$ -\listoftables -$endif$ -$if(lof)$ -\listoffigures -$endif$ -$if(linestretch)$ -\setstretch{$linestretch$} -$endif$ -$if(has-frontmatter)$ -\mainmatter -$endif$ -$body$ - -$if(has-frontmatter)$ -\backmatter -$endif$ -$if(natbib)$ -$if(bibliography)$ -$if(biblio-title)$ -$if(has-chapters)$ -\renewcommand\bibname{$biblio-title$} -$else$ -\renewcommand\refname{$biblio-title$} -$endif$ -$endif$ -$if(beamer)$ -\begin{frame}[allowframebreaks]{$biblio-title$} - \bibliographytrue -$endif$ - \bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$} -$if(beamer)$ -\end{frame} -$endif$ - -$endif$ -$endif$ -$if(biblatex)$ -$if(beamer)$ -\begin{frame}[allowframebreaks]{$biblio-title$} - \bibliographytrue - \printbibliography[heading=none] -\end{frame} -$else$ -\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ -$endif$ - -$endif$ -$for(include-after)$ -$include-after$ - -$endfor$ -\end{document} \ No newline at end of file diff --git a/templates/azure-document.yaml b/templates/azure-document.yaml deleted file mode 100644 index 484fdf1..0000000 --- a/templates/azure-document.yaml +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: Azure Cloud Framework -subtitle: DESIGN DOCUMENT -project: 801800 -geometry: a4paper,left=2.54cm,right=2.54cm,top=1.91cm,bottom=2.54cm -titlepage: true -titlepage-color: FFFFFF -titlepage-text-color: 5F5F5F -titlepage-top-cover-image: "../templates/cover.png" -logo: "../templates/logo.png" -colorlinks: true -page-background: -page-background-opacity: -block-headings: true -links-as-notes: true -lot: false -lof: false -toc: true -toc-own-page: true -toc-title: Table of Contents -tables: true -table-use-row-colors: false -listings-disable-line-numbers: false -listings-no-page-break: false -disable-header-and-footer: false -footer-center: 'Page (\thepage ) of \pageref{LastPage}' -disclaimer: This document contains business and trade secrets (essential information about Innofactor's business) and is therefore totally confidential. Confidentiality does not apply to pricing information -pandoc-latex-environment: - noteblock: [note] - tipblock: [tip] - warningblock: [warning] - cautionblock: [caution] - importantblock: [important] \ No newline at end of file diff --git a/templates/cover.png b/templates/cover.png deleted file mode 100644 index 4d070ea4ccf026b6dae2162bae271aef576e5334..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23659 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 Q`%YnLsDPC#6yJsaAFw=f7ytkO