{"id":23331035,"url":"https://github.com/insoft-uk/primeplus","last_synced_at":"2026-02-14T04:07:56.854Z","repository":{"id":227375624,"uuid":"771236895","full_name":"Insoft-UK/PrimePlus","owner":"Insoft-UK","description":"PPL+ is a pre-processor that improves readability and maintainability of HP PPL code.","archived":false,"fork":false,"pushed_at":"2026-02-04T02:24:16.000Z","size":19895,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-04T13:59:32.270Z","etag":null,"topics":["calculator","code-maintance","compression","graphical-calculator","hp","hp-prime","ppl","prgm","prime","programming-language","software-development"],"latest_commit_sha":null,"homepage":"http://insoft.uk/prime-plus.php","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Insoft-UK.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-03-12T23:44:14.000Z","updated_at":"2026-02-04T02:24:20.000Z","dependencies_parsed_at":"2024-05-08T02:28:27.578Z","dependency_job_id":"5b6d6605-96eb-499c-8592-8f4230d07352","html_url":"https://github.com/Insoft-UK/PrimePlus","commit_stats":null,"previous_names":["insoft-uk/pplus","insoft-uk/primeplus"],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/Insoft-UK/PrimePlus","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Insoft-UK%2FPrimePlus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Insoft-UK%2FPrimePlus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Insoft-UK%2FPrimePlus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Insoft-UK%2FPrimePlus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Insoft-UK","download_url":"https://codeload.github.com/Insoft-UK/PrimePlus/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Insoft-UK%2FPrimePlus/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29435574,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-14T03:34:37.767Z","status":"ssl_error","status_checked_at":"2026-02-14T03:34:09.092Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["calculator","code-maintance","compression","graphical-calculator","hp","hp-prime","ppl","prgm","prime","programming-language","software-development"],"created_at":"2024-12-20T22:30:07.386Z","updated_at":"2026-02-14T04:07:56.848Z","avatar_url":"https://github.com/Insoft-UK.png","language":"C++","readme":"\u003cimg src=\"https://github.com/Insoft-UK/PrimePlus/blob/main/assets/Icon.png\" style=\"width: 128px\" /\u003e\n\n\n## PPL+ for HP Prime Programming Language\n**Command Line Tool**\n\n**PPL+** is a pre-processor that improves readability and maintainability of HP PPL code. It supports custom regex rules, can extract PPL source from **.hpprgm** and **.hpappprgm** files, and can also **compress** PPL source into a compact, optimized form for the HP Prime. PPL+ supports add-ons that enable conversion of Adafruit resources into PPL.\nUsing these **add-ons**, **\u003ca href=\"https://github.com/Insoft-UK/PrimePlus/blob/main/assets/HP.md\"\u003eAdafruit\u003c/a\u003e** fonts and Adafruit_GFX **.h** files can be converted to PPL. In addition, the **GROB** add-on allows image files to be imported and converted as well.\n\n**Compression** of your code results in it taking up less space, making it use less storage of your HP Prime's storage memory giving you more space for more programs.\n\n**Reformating** your code enforce a consistent coding style throughout your project, making it easier for multiple developers to work on the same codebase. It helps maintain a uniform look and feel, which can enhance code readability. Readability: Well-formatted code is easier to read and understand.\n\nDownload links: \u003ca href=\"https://insoft.uk/action/?method=downlink\u0026path=macos\u0026file=ppl+_macOS.zip\"\u003emacOS\u003c/a\u003e | \u003ca href=\"https://insoft.uk/action/?method=downlink\u0026path=pc\u0026file=ppl+_x86_64.zip\"\u003eWindows\u003c/a\u003e | \u003ca href=\"https://insoft.uk/action/?method=downlink\u0026path=linux\u0026file=ppl+_linux_macOS.zip\"\u003eLinux\u003c/a\u003e\n\n`Usage: ppl+ \u003cinput-file\u003e [-o \u003coutput-file\u003e] [-v]`\n\n\u003ctable\u003e\n  \u003cthead\u003e\n    \u003ctr align=\"left\"\u003e\n      \u003cth\u003eOptions\u003c/th\u003e\n      \u003cth\u003eDescription\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e-o \u003coutput-file\u003e\u003c/td\u003e\u003ctd\u003eSpecify the filename for generated code\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e-c or --compress\u003c/td\u003e\u003ctd\u003eSpecify if the PPL code should be compressed\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e-r or --reformat\u003c/td\u003e\u003ctd\u003eSpecify if the PPL code should be reformated\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e-v or --verbose\u003c/td\u003e\u003ctd\u003eDisplay detailed processing information\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd colspan=\"2\"\u003e\u003cb\u003eAdditional Commands\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e--version\u003c/td\u003e\u003ctd\u003eDisplays the version information\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e--build\u003c/td\u003e\u003ctd\u003eDisplays the build information\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e--help\u003c/td\u003e\u003ctd\u003eShow this help message\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003e[!WARNING]\nPPL+ 26 (v5.x) will transition to using \u003ca href=\"https://unicode-org.github.io/icu/userguide/strings/regexp.html\"\u003eICU\u003c/a\u003e. As a result, prebuilt Windows 11 binaries will no longer be provided. Users running Windows 11 who wish to use PPL+ 26 (v5.x) will need to install ICU for Windows and compile the command line tool from source.\n\n### Regular Expressions\n**Example: Extending PPL with Switch-Case Functionality Using Regex**\n\nThis example demonstrates how to use **regex** (regular expressions) to add **switch-case** control flow to the PPL language, similar to the switch statements found in other programming languages.\n\n```\nregex \u003e`\\bswitch +([a-z_.:]+)`i LOCAL sw__SCOPE__ := $1;\\aCASE\nregex \u003e`\\bcase +([^ ]+) +do\\b`i IF sw\\`__SCOPE__-1` == $1 THEN\nswitch X\n    case 0 do\n    end;\nend;\n```\n**PPL+ Preprocessor: Switch-Case to PPL Conversion**\n\nThe PPL+ preprocessor generates valid PPL code by transforming switch-case statements into standard PPL case statements. This preprocessing step allows you to write more intuitive switch-case syntax while maintaining full compatibility with the PPL language, as the output is pure, valid PPL code.\n\n```\nLOCAL sw0 := X;\nCASE\n  IF sw0 == 0 THEN\n  END;\nEND;\n```\n\n### Code Stack\n\nA code stack provides a convenient way to store code snippets that can be retrieved and used later.\n\n**Example: how code stack can be used for a regular expresion to bring a bit of C style to PPL**\n\n```\nregex \u003e`\\bfor *([^;]+); *([^;]+); *([^;]+) +do\\b`i $1;\\aWHILE $2 DO__PUSH__`\\i$3;\\a`\nregex \u003e`\\bend;`i __POP__END;\nfunction()\nbegin\n    for i=0; i\u003c2; i=i+1 do\n        A := A+1;\n    end;\nend;\n```\n\n**PPL+ Preprocessor: PPL Converstion**\n\n```\nfunction()\nBEGIN\n  i := 0; WHILE i\u003c2 DO\n    A := A + 1;\n  i := i + 1; END;\nEND;\n```\n\n\n### Implimenting Variable Aliases and Auto\n```\nregex \u003e`\\bauto\\b`i v__COUNTER__\nregex =`^ *\\bauto *: *([a-z]\\w*)` g__COUNTER__:$1\nregex `\\b([a-zA-Z_]\\w*) *\\: *([a-zA-Z]\\w*(?:::[a-zA-Z]\\w*)*)` alias $2:=$1;$1\n\nauto : myGlobal := 1;\nfnc1: My::Function(p1: argumentOne)\nbegin\n    local auto: i, a: Alpha;\n    for i=0; i\u003c2; i=i+1 do\n        Alpha := Alpha + 1 * myGlobal * argumentOne;\n    end;\n    \nend;\nauto: anotherGlobal := 2;\n\nMy::Function();\n```\n\n**PPL+ Preprocessor: PPL Converstion**\n```\ng0 := 1;\nfnc1(p1)\nBEGIN\n  LOCAL v0, a;\n  v0 := 0; WHILE v0\u003c2 DO\n    a := a + 1 * g0 * p1;\n  v0 := v0 + 1; END;\nEND;\n\ng1 := 2;\nfnc1();\n```\n\n### Assignment Style\n\nIn \u003cb\u003ePPL+\u003c/b\u003e, the = operator is treated as := (assignment) by default, whereas in standard \u003cb\u003ePPL\u003c/b\u003e, = is interpreted as == (equality). This behavior in PPL+ can be explicitly controlled using the directive:\n\n```#pragma mode( assignment(:=) )```\n\nThis will inform PPL+ that PPL assignment is to be used only, allowing you to use = as equality.\n\nWhen = is used for assignment, the PPL := operator is still supported; however, using := is strongly recommended.\n\n\u003e[!IMPORTANT]\nIn PPL+ by default `=` is treated as `:=` were in PPL `=` is treated as `==`\n\n## Alias\nAdded support for defining aliases that include a dot (e.g., alias hp::text := HP.Text).\n\n\u003e[!NOTE]\nThe PPL+ preprocessor is subject to change but aims to maintain some level of compatibility with previous versions.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finsoft-uk%2Fprimeplus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finsoft-uk%2Fprimeplus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finsoft-uk%2Fprimeplus/lists"}