From 1f249206e7aaff54f9c9c8b19a278b95728c1931 Mon Sep 17 00:00:00 2001 From: Herwin Bozet Date: Sun, 14 Sep 2025 00:00:22 +0200 Subject: [PATCH] Added PEArch page, Added strings, Updated readme Update .dockerignore, .gitignore, and 11 more files... --- .dockerignore | 5 + .gitignore | 1 + data/projects/lscom-cli-dotnet.yml | 2 +- data/projects/pearch.yml | 36 +++ data/sitemap.yml | 4 + data/strings/en/commons.yml | 182 +++++++++--- data/strings/en/pearch.yml | 48 +++ data/strings/fr/commons.yml | 182 +++++++++--- data/strings/fr/pearch.yml | 49 +++ readme.md | 13 +- .../images/content/pearch/main.png | Bin 0 -> 25169 bytes templates/projects/lscom-cli-dotnet.jinja | 280 +++++++++--------- templates/projects/pearch.jinja | 214 +++++++++++++ 13 files changed, 785 insertions(+), 231 deletions(-) create mode 100644 data/projects/pearch.yml create mode 100644 data/strings/en/pearch.yml create mode 100644 data/strings/fr/pearch.yml create mode 100644 static/resources/NibblePoker/images/content/pearch/main.png create mode 100644 templates/projects/pearch.jinja diff --git a/.dockerignore b/.dockerignore index 996b331..ea1ffdd 100644 --- a/.dockerignore +++ b/.dockerignore @@ -11,3 +11,8 @@ scripts/ # Docker docker-compose.yml Dockerfile + +# Internal stuff +*.pdn +*.ai +*.private.* diff --git a/.gitignore b/.gitignore index b1100fa..4e2bb2a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ scripts/package-lock.json # Internal stuff *.pdn *.ai +*.private.* # Temp static/resources/DecimalJs* diff --git a/data/projects/lscom-cli-dotnet.yml b/data/projects/lscom-cli-dotnet.yml index f618cd4..405fe8b 100644 --- a/data/projects/lscom-cli-dotnet.yml +++ b/data/projects/lscom-cli-dotnet.yml @@ -28,7 +28,7 @@ projects: subtitle_key: "article.subtitle" tags: - "application" - - "tool" + - "cli" - "windows" languages: - "dotnet" diff --git a/data/projects/pearch.yml b/data/projects/pearch.yml new file mode 100644 index 0000000..1380e59 --- /dev/null +++ b/data/projects/pearch.yml @@ -0,0 +1,36 @@ + +projects: + - id: "pearch" + metadata: + head: + title_key: "meta.title" + description_key: "meta.description" + opengraph: + title_key: "meta.title" + description_key: "meta.description" + type: null + url: null + image_url: "/resources/NibblePoker/images/content/pearch/main.png" + image_type: null + twitter: + title_key: "meta.title" + description_key: "meta.description" + index: + priority: 2000 + enable: true + title_key: "meta.title" + preamble_key: "meta.description" + image_url: "/resources/NibblePoker/images/content/pearch/main.png" + image_alt_key: "" + general: + icon: "fad fa-terminal" + title_key: "meta.title" + subtitle_key: "article.subtitle" + tags: + - "application" + - "cli" + - "windows" + - "windows-pe" + - "cpu-arch" + languages: + - "purebasic" diff --git a/data/sitemap.yml b/data/sitemap.yml index 1eb0741..06c84ce 100644 --- a/data/sitemap.yml +++ b/data/sitemap.yml @@ -27,6 +27,10 @@ sitemap: lastmod: "2025-09-13T16:19:00+02:00" priority: "0.6" + "/content/pearch/": + lastmod: "2025-09-14T00:15:00+02:00" + priority: "0.6" + "/links/": lastmod: "2025-03-01T07:40:00+01:00" priority: "0.6" diff --git a/data/strings/en/commons.yml b/data/strings/en/commons.yml index 95155a3..3c9df9e 100644 --- a/data/strings/en/commons.yml +++ b/data/strings/en/commons.yml @@ -22,6 +22,18 @@ user-agent: User-Agent server: Server +windows: + 95: "Windows 95" + 98: "Windows 98" + 2000: "Windows 2000" + xp: "Windows XP" + vista: "Windows Vista" + 7: "Windows 7" + 8: "Windows 8" + 81: "Windows 8.1" + 10: "Windows 10" + 11: "Windows 11" + cpu.architecture: CPU Architecture cpu.responsive: "CPU Architecture" cpu.any: "Any architecture" @@ -34,6 +46,87 @@ cpu.arm64: "ARM64" #cpu.arm64: "

ARM64
ARMv8
AArch64

" cpu.risc-v: "RISC-V" +cpu: + human: + unknown: The content of this field is assumed to be applicable to any machine type + alpha: Alpha AXP, 32-bit address space + alpha64: Alpha 64, 64-bit address space + am33: Matsushita AM33 + amd64: x64 + any: Any architecture + arm: ARM little endian + arm64: ARM64 little endian + arm64ec: ABI that enables interoperability between native ARM64 and emulated x64 code. + arm64x: Binary format that allows both native ARM64 and ARM64EC code to coexist in the same file. + armnt: ARM Thumb-2 little endian + axp64: AXP 64 (Same as Alpha 64) + ebc: EFI byte code + i386: Intel 386 or later processors and compatible processors + ia64: Intel Itanium processor family + loongarch32: LoongArch 32-bit processor family + loongarch64: LoongArch 64-bit processor family + m32r: Mitsubishi M32R little endian + mips16: MIPS16 + mipsfpu: MIPS with FPU + mipsfpu16: MIPS16 with FPU + powerpc: Power PC little endian + powerpcfp: Power PC with floating point support + r3000be: MIPS I compatible 32-bit big endian + r3000: MIPS I compatible 32-bit little endian + r4000: MIPS III compatible 64-bit little endian + r10000: MIPS IV compatible 64-bit little endian + riscv32: RISC-V 32-bit address space + riscv64: RISC-V 64-bit address space + riscv128: RISC-V 128-bit address space + sh3: Hitachi SH3 + sh3dsp: Hitachi SH3 DSP + sh4: Hitachi SH4 + sh5: Hitachi SH5 + thumb: Thumb + wcemipsv2: MIPS little-endian WCE v2v2 + code: + unknown: UNKNOWN + alpha: ALPHA + alpha64: ALPHA64 + am33: AM33 + amd64: AMD64 + any: ANY + arm: ARM + arm32: "ARM32" + arm64: ARM64 + arm64ec: ARM64EC + arm64x: ARM64X + armnt: ARMNT + axp64: AXP64 + ebc: EBC + i386: I386 + ia64: IA64 + loongarch32: LOONGARCH32 + loongarch64: LOONGARCH64 + m32r: M32R + mips16: MIPS16 + mipsfpu: MIPSFPU + mipsfpu16: MIPSFPU16 + powerpc: POWERPC + powerpcfp: POWERPCFP + r3000be: R3000BE + r3000: R3000 + r4000: R4000 + r10000: R10000 + riscv: RISC-V + riscv32: RISCV32 + riscv64: RISCV64 + riscv128: RISCV128 + sh3: SH3 + sh3dsp: SH3DSP + sh4: SH4 + sh5: SH5 + thumb: THUMB + wcemipsv2: WCEMIPSV2 + x64: "x64" + x86: "x86" + + requirements: Requirements python: Python @@ -92,47 +185,48 @@ format.yaml: "YAML" action.generate: "Generate" -country.afghanistan: "Afghanistan" -country.albania: "Albania" -country.algeria: "Algeria" -country.andorra: "Andorra" -country.angola: "Angola" -country.anguilla: "Anguilla" -country.argentina: "Argentina" -country.australia: "Australia" -country.austria: "Austria" -country.azerbaijan: "Azerbaijan" -country.azores: "Azores" -country.bahamas: "Bahamas" -country.belgium: "Belgium" -country.bulgaria: "Bulgaria" -country.corsica: "Corsica" -country.croatia: "Croatia" -country.cyprus: "Cyprus" -country.czechia: "Czechia" -country.denmark: "Denmark" -country.estonia: "Estonia" -country.finland: "Finland" -country.france: "France" -country.france.corsica: "France - Corsica" -country.germany: "Germany" -country.greece: "Greece" -country.hungary: "Hungary" -country.ireland: "Ireland" -country.italy: "Italy" -country.latvia: "Latvia" -country.lithuania: "lithuania" -country.luxembourg: "Luxembourg" -country.madeira: "Madeira" -country.malta: "Malta" -country.monaco: "Monaco" -country.netherlands: "Netherlands" -country.poland: "Poland" -country.portugal: "Portugal" -country.portugal.azores: "Portugal - Azores" -country.portugal.madeira: "Portugal - Madeira" -country.romania: "Romania" -country.slovenia: "Slovenia" -country.slovakia: "Slovakia" -country.spain: "Spain" -country.sweden: "Sweden" +country: + afghanistan: "Afghanistan" + albania: "Albania" + algeria: "Algeria" + andorra: "Andorra" + angola: "Angola" + anguilla: "Anguilla" + argentina: "Argentina" + australia: "Australia" + austria: "Austria" + azerbaijan: "Azerbaijan" + azores: "Azores" + bahamas: "Bahamas" + belgium: "Belgium" + bulgaria: "Bulgaria" + corsica: "Corsica" + croatia: "Croatia" + cyprus: "Cyprus" + czechia: "Czechia" + denmark: "Denmark" + estonia: "Estonia" + finland: "Finland" + france: "France" + france.corsica: "France - Corsica" + germany: "Germany" + greece: "Greece" + hungary: "Hungary" + ireland: "Ireland" + italy: "Italy" + latvia: "Latvia" + lithuania: "lithuania" + luxembourg: "Luxembourg" + madeira: "Madeira" + malta: "Malta" + monaco: "Monaco" + netherlands: "Netherlands" + poland: "Poland" + portugal: "Portugal" + portugal.azores: "Portugal - Azores" + portugal.madeira: "Portugal - Madeira" + romania: "Romania" + slovenia: "Slovenia" + slovakia: "Slovakia" + spain: "Spain" + sweden: "Sweden" diff --git a/data/strings/en/pearch.yml b/data/strings/en/pearch.yml new file mode 100644 index 0000000..cf92163 --- /dev/null +++ b/data/strings/en/pearch.yml @@ -0,0 +1,48 @@ +# PEArch - EN + +meta: + title: "PEArch" + description: "CLI tool that tells you which CPU architecture a given Windows PE is made for." + +intro: + title: "Introduction" + text: + p1: + l1: A small tool that tells you which + CPU architecture + a given Windows PE is made for. + p2: + l1: A total of 35 architectures are supported by this tool. + +usage: + title: "Usage" + text: + p1: + l1: "This tool can either be used in a command prompt with the options below." + l2: "Or, you can simply drop a file onto the .exe or a shortcut to get the same result." + details: + #disclaimer: The architecture codes, as well as their descriptions, are taken from Microsoft's + # MSDN. + title: "Click here to show/hide the architecture and return codes" + thead: + code: "STDOUT" + hex: "STDOUT with /AsHex" + dec: "STDERR with /AsError" + description: "Description (Source: MSDN)" + +output: + title: "Output examples" + default: + title: "Without options:" + options: + title: "With /AsHex and /AsError:" + +downloads: + title: "Downloads" + +license: + title: "License" + text: "This software and its source code is released in the Public Domain (CC0 1.0 Universal)." + +links: + title: "Links" diff --git a/data/strings/fr/commons.yml b/data/strings/fr/commons.yml index 2e2e2c2..af095dd 100644 --- a/data/strings/fr/commons.yml +++ b/data/strings/fr/commons.yml @@ -22,6 +22,18 @@ user-agent: User-Agent server: Serveur +windows: + 95: "Windows 95" + 98: "Windows 98" + 2000: "Windows 2000" + xp: "Windows XP" + vista: "Windows Vista" + 7: "Windows 7" + 8: "Windows 8" + 81: "Windows 8.1" + 10: "Windows 10" + 11: "Windows 11" + cpu.architecture: Architecture de CPU cpu.responsive: "Architecture de CPU" cpu.any: "Indépendante" @@ -34,6 +46,87 @@ cpu.arm64: "ARM64" #cpu.arm64: "

ARM64
ARMv8
AArch64

" cpu.risc-v: "RISC-V" +cpu: + human: + unknown: Le contenu de ce champ est supposé pouvoir s’appliquer à n’importe quel type d’ordinateur + alpha: Alpha AXP, espace d’adressage 32 bits + alpha64: Alpha 64, espace d’adressage 64 bits + am33: Matsushita AM33 + amd64: X64 + any: Indépendante + arm: ARM little endian + arm64: ARM64 little endian + arm64ec: ABI permettant l'interopérabilité entre le code natif ARM64 et le code x64 émulé. + arm64x: Format binaire qui permet à la fois au code natif ARM64 et au code ARM64EC de coexister dans le même fichier. + armnt: ARM Pouce-2 petit endian + axp64: AXP 64 (identique à Alpha 64) + ebc: Code d’octet EFI + i386: Processeurs Intel 386 ou ultérieurs et processeurs compatibles + ia64: Famille de processeurs Intel Itanium + loongarch32: Famille de processeurs LoongArch 32 bits + loongarch64: Famille de processeurs LoongArch 64 bits + m32r: Mitsubishi M32R petit endian + mips16: MIPS16 + mipsfpu: MIPS avec FPU + mipsfpu16: MIPS16 avec FPU + powerpc: Power PC little endian + powerpcfp: Power PC avec prise en charge de la virgule flottante + r3000be: MIPS I compatible 32 bits big endian + r3000: MIPS I compatible 32 bits little endian + r4000: MIPS III compatible 64 bits petit endian + r10000: MIPS IV compatible 64 bits petit endian + riscv32: Espace d’adressage RISC-V 32 bits + riscv64: Espace d’adressage RISC-V 64 bits + riscv128: Espace d’adressage RISC-V 128 bits + sh3: Hitachi SH3 + sh3dsp: Hitachi SH3 DSP + sh4: Hitachi SH4 + sh5: Hitachi SH5 + thumb: Pouce + wcemipsv2: MIPS little-endian WCE v2 + code: + unknown: UNKNOWN + alpha: ALPHA + alpha64: ALPHA64 + am33: AM33 + amd64: AMD64 + any: ANY + arm: ARM + arm32: "ARM32" + arm64: ARM64 + arm64ec: ARM64EC + arm64x: ARM64X + armnt: ARMNT + axp64: AXP64 + ebc: EBC + i386: I386 + ia64: IA64 + loongarch32: LOONGARCH32 + loongarch64: LOONGARCH64 + m32r: M32R + mips16: MIPS16 + mipsfpu: MIPSFPU + mipsfpu16: MIPSFPU16 + powerpc: POWERPC + powerpcfp: POWERPCFP + r3000be: R3000BE + r3000: R3000 + r4000: R4000 + r10000: R10000 + riscv: RISC-V + riscv32: RISCV32 + riscv64: RISCV64 + riscv128: RISCV128 + sh3: SH3 + sh3dsp: SH3DSP + sh4: SH4 + sh5: SH5 + thumb: THUMB + wcemipsv2: WCEMIPSV2 + x64: "x64" + x86: "x86" + + requirements: "Dépendances" python: Python @@ -92,47 +185,48 @@ format.yaml: "YAML" action.generate: "Générer" -country.afghanistan: "Afghanistan" -country.albania: "Albanie" -country.algeria: "Algérie" -country.andorra: "Andorre" -country.angola: "Angola" -country.anguilla: "Anguilla" -country.argentina: "Argentine" -country.australia: "Australie" -country.austria: "Autriche" -country.azerbaijan: "Azerbaïdjan" -country.azores: "Açores" -country.bahamas: "Bahamas" -country.belgium: "Belgique" -country.bulgaria: "Bulgarie" -country.corsica: "Corse" -country.croatia: "Croatie" -country.cyprus: "Chypre" -country.czechia: "Tchéquie" -country.denmark: "Danemark" -country.estonia: "Estonie" -country.finland: "Finlande" -country.france: "France" -country.france.corsica: "France - Corse" -country.germany: "Allemagne" -country.greece: "Grèce" -country.hungary: "Hongrie" -country.ireland: "Irlande" -country.italy: "Italie" -country.latvia: "Lettonie" -country.lithuania: "Lituanie" -country.luxembourg: "Luxembourg" -country.madeira: "Madère" -country.malta: "Malte" -country.monaco: "Monaco" -country.netherlands: "Pays-Bas" -country.poland: "Pologne" -country.portugal: "Portugal" -country.portugal.azores: "Portugal - Açores" -country.portugal.madeira: "Portugal - Madère" -country.romania: "Roumanie" -country.slovenia: "Slovénie" -country.slovakia: "Slovaquie" -country.spain: "Espagne" -country.sweden: "Suède" +country: + afghanistan: "Afghanistan" + albania: "Albanie" + algeria: "Algérie" + andorra: "Andorre" + angola: "Angola" + anguilla: "Anguilla" + argentina: "Argentine" + australia: "Australie" + austria: "Autriche" + azerbaijan: "Azerbaïdjan" + azores: "Açores" + bahamas: "Bahamas" + belgium: "Belgique" + bulgaria: "Bulgarie" + corsica: "Corse" + croatia: "Croatie" + cyprus: "Chypre" + czechia: "Tchéquie" + denmark: "Danemark" + estonia: "Estonie" + finland: "Finlande" + france: "France" + france.corsica: "France - Corse" + germany: "Allemagne" + greece: "Grèce" + hungary: "Hongrie" + ireland: "Irlande" + italy: "Italie" + latvia: "Lettonie" + lithuania: "Lituanie" + luxembourg: "Luxembourg" + madeira: "Madère" + malta: "Malte" + monaco: "Monaco" + netherlands: "Pays-Bas" + poland: "Pologne" + portugal: "Portugal" + portugal.azores: "Portugal - Açores" + portugal.madeira: "Portugal - Madère" + romania: "Roumanie" + slovenia: "Slovénie" + slovakia: "Slovaquie" + spain: "Espagne" + sweden: "Suède" diff --git a/data/strings/fr/pearch.yml b/data/strings/fr/pearch.yml new file mode 100644 index 0000000..a98c266 --- /dev/null +++ b/data/strings/fr/pearch.yml @@ -0,0 +1,49 @@ +# PEArch - FR + +meta: + title: "PEArch" + description: "Outil pour invité de commande qui vous indique l'architecture de CPU pour laquelle un executable a été compilé." + +intro: + title: "Introduction" + text: + p1: + l1: A small tool that tells you which + CPU architecture + a given Windows PE is made for. + p2: + l1: Un total de 35 architectures sont supportées par cet outil. + +usage: + title: "Utilisation" + text: + p1: + l1: "Cet outil peut soit être utilisé dans un invité de commande avec les options ci-dessous." + l2: "Ou alors, vous pouvez simplement déposer un fichier sur le .exe ou un raccourci, et avoir le même résultat." + details: + #disclaimer: Les codes d'architecture, ainsi que leur descriptions, sont tirés de ceux de Microsoft sur + # MSDN. + title: "Cliquez ici pour afficher/cacher les codes d'architecture et de retour" + thead: + code: "STDOUT" + hex: "STDOUT avec /AsHex" + dec: "STDERR avec /AsError" + description: "Description (Source: MSDN)" + +output: + title: "Examples d'exécution" + default: + title: "Sans options:" + options: + title: "Avec /AsHex et /AsError:" + +downloads: + title: "Téléchargements" + +license: + title: "Licence" + text: "Ce programme, ainsi que son code-source sont dans le domaine public (CC0 1.0 Universal)." + +links: + title: "Liens" + diff --git a/readme.md b/readme.md index c7b9b7e..706ed3e 100644 --- a/readme.md +++ b/readme.md @@ -1,9 +1,18 @@ # Website - NibblePoker.lu -Public repository containing the source code for the *nibblepoker.lu* & *nibblepoker.com* websites. +Public repository containing the source code for [nibblepoker.lu](https://nibblepoker.lu/) & +[nibblepoker.com](https://nibblepoker.com/). ## Features -TODO +* Projects + * [CircuitPython - Ebyte E32 Driver](https://nibblepoker.lu/content/circuitpython-ebyte-e32/) + * [DotNet-ListComPort](https://nibblepoker.lu/content/lscom-cli-dotnet/) + * [Mini Dockerized CCTV NVR](https://nibblepoker.lu/content/docker-mini-cctv-nvr/) +* Web-based Tools + * [Excel Password Remover](https://nibblepoker.lu/tools/excel-password-remover/) + * [IBAN Generator](https://nibblepoker.lu/tools/iban-generator/) + * [UUID Generator](https://nibblepoker.lu/tools/uuid-generator/) + * [VAT Calculator](https://nibblepoker.lu/tools/vat-calculator/) ## Related Projects diff --git a/static/resources/NibblePoker/images/content/pearch/main.png b/static/resources/NibblePoker/images/content/pearch/main.png new file mode 100644 index 0000000000000000000000000000000000000000..5d2d480d84551ab3a71c68b56a72d2e4b8ae9a5d GIT binary patch literal 25169 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 M07*qoM6N<$g7F7iX8-^I literal 0 HcmV?d00001 diff --git a/templates/projects/lscom-cli-dotnet.jinja b/templates/projects/lscom-cli-dotnet.jinja index d144349..19159aa 100644 --- a/templates/projects/lscom-cli-dotnet.jinja +++ b/templates/projects/lscom-cli-dotnet.jinja @@ -10,7 +10,7 @@ -
+
{{ render_h2(l10n("requirements.title", project_id, user_lang)) }}
{{ render_list_ul([ @@ -54,27 +54,27 @@ {{ render_h2(l10n("usage.title", project_id, user_lang)) }}
{{ - render_code_block([ - "lscom.exe [-a|--show-all] [-d|--show-device] [-D |--divider ] [-f|--show-friendly]", - " [-h|--help] [-H|--short-help] [-n|--show-name-raw] [-P|--no-pretty] [-s|--sort]", - " [-S|--sort-reverse] [-t|--tab-padding] [-v|--version] [-V|--version-only]", - "", - "Launch arguments:", - " -a, --show-all Display the complete port's name (Equal to '-dfn')", - " -d, --show-device Displays the port's device name", - " -D , --divider Uses the given string or char as a separator (Can be empty string !)", - " -f, --show-friendly Displays the port's friendly name", - " -h, --help Display this help text", - " -H, --short-help Display the short help text", - " -n, --show-name-raw Displays the port's raw name (See remarks section)", - " -P, --no-pretty Disables the pretty printing format (Equal to -D \" \")", - " -s, --sort Sorts the port based on their raw names in an ascending order", - " -S, --sort-reverse Sorts the port based on their raw names in a descending order", - " -t, --tab-padding Use tabs for padding between the types of names (Overrides '-D')", - " -v, --version Shows the utility's version number and other info", - " -V, --version-only Shows the utility's version number only (Overrides '-v')" - ], None) - }} + render_code_block([ + "lscom.exe [-a|--show-all] [-d|--show-device] [-D |--divider ] [-f|--show-friendly]", + " [-h|--help] [-H|--short-help] [-n|--show-name-raw] [-P|--no-pretty] [-s|--sort]", + " [-S|--sort-reverse] [-t|--tab-padding] [-v|--version] [-V|--version-only]", + "", + "Launch arguments:", + " -a, --show-all Display the complete port's name (Equal to '-dfn')", + " -d, --show-device Displays the port's device name", + " -D , --divider Uses the given string or char as a separator (Can be empty string !)", + " -f, --show-friendly Displays the port's friendly name", + " -h, --help Display this help text", + " -H, --short-help Display the short help text", + " -n, --show-name-raw Displays the port's raw name (See remarks section)", + " -P, --no-pretty Disables the pretty printing format (Equal to -D \" \")", + " -s, --sort Sorts the port based on their raw names in an ascending order", + " -S, --sort-reverse Sorts the port based on their raw names in a descending order", + " -t, --tab-padding Use tabs for padding between the types of names (Overrides '-D')", + " -v, --version Shows the utility's version number and other info", + " -V, --version-only Shows the utility's version number only (Overrides '-v')" + ], None) + }}
@@ -82,26 +82,26 @@ {{ render_h2(l10n("formatting.title", project_id, user_lang)) }}
{{ - render_code_block([ - " *┬> No launch arguments:", - " └──> ${Raw name} => COM1", - " *┬> '-d' or '-f'", - " ├──> ${Device name} => \\Device\\Serial1", - " └──> ${Friendly name} => Communications Port", - " *┬> '-d' and '-f'", - " └──> ${Friendly name} [${Device name}] => Communications Port [\\Device\\Serial1]", - " *┬> '-n' and '-d'", - " └──> ${Raw name} [$DeviceName] => COM1 [\\Device\\Serial1]", - " *┬> '-n' and '-f'", - " └──> ${Raw name} - ${Friendly name} => COM1 - Communications Port", - " *┬> '-ndf' or '-a'", - " └──> ${Raw name} - ${Friendly name} [${Device name}] => COM1 - Communications Port [\\Device\\Serial1]", - " *┬> '-ndfp' or '-ap'", - " └──> ${Raw name} ${Friendly name} ${Device name} => COM1 Communications Port \\Device\\Serial1", - " *┬> '-ndfD \";\"' or '-aD \";\"'", - " └──> ${Raw name};${Friendly name};${Device name} => COM1;Communications Port;\\Device\\Serial1" - ], None) - }} + render_code_block([ + " *┬> No launch arguments:", + " └──> ${Raw name} => COM1", + " *┬> '-d' or '-f'", + " ├──> ${Device name} => \\Device\\Serial1", + " └──> ${Friendly name} => Communications Port", + " *┬> '-d' and '-f'", + " └──> ${Friendly name} [${Device name}] => Communications Port [\\Device\\Serial1]", + " *┬> '-n' and '-d'", + " └──> ${Raw name} [$DeviceName] => COM1 [\\Device\\Serial1]", + " *┬> '-n' and '-f'", + " └──> ${Raw name} - ${Friendly name} => COM1 - Communications Port", + " *┬> '-ndf' or '-a'", + " └──> ${Raw name} - ${Friendly name} [${Device name}] => COM1 - Communications Port [\\Device\\Serial1]", + " *┬> '-ndfp' or '-ap'", + " └──> ${Raw name} ${Friendly name} ${Device name} => COM1 Communications Port \\Device\\Serial1", + " *┬> '-ndfD \";\"' or '-aD \";\"'", + " └──> ${Raw name};${Friendly name};${Device name} => COM1;Communications Port;\\Device\\Serial1" + ], None) + }}
@@ -122,113 +122,113 @@
- - - - - + + + + + - - - - + + + - + }} + + + - - - - + + + - - - - + + + + - + }} + + + - - - - + + + - - - - + + + + - + }} + + + - - - - + + + - - - - + + + + - + }} + + + -
{{ l10n("cpu.architecture", "commons", user_lang) }}{{ l10n("requirements", "commons", user_lang) }}{{ l10n("download.multiple", "commons", user_lang) }}
{{ l10n("cpu.architecture", "commons", user_lang) }}{{ l10n("requirements", "commons", user_lang) }}{{ l10n("download.multiple", "commons", user_lang) }}
{{ l10n("cpu.any", "commons", user_lang) }}{{ l10n("requirements.text.dotnet", project_id, user_lang) }} - - {{ render_button( +
{{ l10n("cpu.any", "commons", user_lang) }}{{ l10n("requirements.text.dotnet", project_id, user_lang) }} + + {{ render_button( "ZIP - 120.36 KiB", False, None) - }} - -
{{ l10n("cpu.x64", "commons", user_lang) }}{{ l10n("requirements.text.dotnet", project_id, user_lang) }} - - {{ render_button( +
{{ l10n("cpu.x64", "commons", user_lang) }}{{ l10n("requirements.text.dotnet", project_id, user_lang) }} + + {{ render_button( "ZIP - 138.9 KiB", False, None) - }} - -
{{ l10n("none.fs", "commons", user_lang) }} - - {{ render_button( + }} + +
{{ l10n("none.fs", "commons", user_lang) }} + + {{ render_button( "ZIP - 7.35 MiB", False, None) - }} - + }} + - - {{ render_button( + + {{ render_button( "MSI - 10.51 MiB", False, None, "btn-primary") - }} - -
{{ l10n("cpu.x86", "commons", user_lang) }}{{ l10n("requirements.text.dotnet", project_id, user_lang) }} - - {{ render_button( +
{{ l10n("cpu.x86", "commons", user_lang) }}{{ l10n("requirements.text.dotnet", project_id, user_lang) }} + + {{ render_button( "ZIP - 123.56 KiB", False, None) - }} - -
{{ l10n("none.fs", "commons", user_lang) }} - - {{ render_button( + }} + +
{{ l10n("none.fs", "commons", user_lang) }} + + {{ render_button( "ZIP - 6.64 MiB", False, None) - }} - + }} + - - {{ render_button( + + {{ render_button( "MSI - 9.79 MiB", False, None, "btn-primary") - }} - -
{{ l10n("cpu.arm64", "commons", user_lang) }}{{ l10n("requirements.text.dotnet", project_id, user_lang) }} - - {{ render_button( +
{{ l10n("cpu.arm64", "commons", user_lang) }}{{ l10n("requirements.text.dotnet", project_id, user_lang) }} + + {{ render_button( "ZIP - 130.34 KiB", False, None) - }} - -
{{ l10n("none.fs", "commons", user_lang) }} - - {{ render_button( + }} + +
{{ l10n("none.fs", "commons", user_lang) }} + + {{ render_button( "ZIP - 7.04 MiB", False, None) - }} - -