added custom opacks md
This commit is contained in:
@@ -1 +1,95 @@
|
||||
# Custom Packs
|
||||
## Custom Packs
|
||||
|
||||
ForeignThon lets you extend or override any installed language pack locally — no PyPI account, no new package required. You can also scaffold a completely new language from scratch.
|
||||
|
||||
---
|
||||
|
||||
## Local override
|
||||
|
||||
Create a `custom.json` in your project root with only the keys you want to change:
|
||||
|
||||
```json
|
||||
{
|
||||
"builtins": {
|
||||
"show": "print"
|
||||
},
|
||||
"keywords": {
|
||||
"when": "if"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Then reference it in `.foreignthon.toml`:
|
||||
|
||||
```toml
|
||||
[foreignthon]
|
||||
lang = "es"
|
||||
custom_pack = "custom.json"
|
||||
```
|
||||
|
||||
Custom keys are merged on top of the installed pack. Installed pack keys are preserved — only the keys you define in `custom.json` are overridden.
|
||||
|
||||
!!! tip
|
||||
ForeignThon walks up the directory tree to find `.foreignthon.toml`, so you can place it at the project root and run `fpy` from any subdirectory.
|
||||
|
||||
---
|
||||
|
||||
## Scaffold a new language
|
||||
|
||||
If no pack exists for your language yet:
|
||||
|
||||
```bash
|
||||
fpy new myproject --lang custom
|
||||
```
|
||||
|
||||
You will be prompted for:
|
||||
|
||||
- Language code (e.g. `ru`, `fr`, `ar`)
|
||||
- English name (e.g. `Russian`)
|
||||
- Native name (e.g. `Русский`)
|
||||
|
||||
This generates a `custom.json` based on the official template — every Python keyword, builtin, exception, and stdlib module is listed with the English value as a placeholder. Replace the **keys** with your language's words.
|
||||
|
||||
```json
|
||||
{
|
||||
"keywords": {
|
||||
"if": "if", ← replace the key, keep the value
|
||||
"for": "for",
|
||||
"def": "def",
|
||||
...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
The `.foreignthon.toml` is automatically wired to use this file.
|
||||
|
||||
---
|
||||
|
||||
## Pack schema
|
||||
|
||||
A standalone pack must have these top-level sections:
|
||||
|
||||
| Section | Purpose |
|
||||
|---|---|
|
||||
| `meta` | Name, code, version, authors |
|
||||
| `keywords` | Python reserved words |
|
||||
| `builtins` | Built-in functions |
|
||||
| `exceptions` | Built-in exception classes |
|
||||
| `error_messages` | Translations for bilingual error output |
|
||||
| `stdlib` | Common standard library module names |
|
||||
| `postfix_keywords` | English keywords to rewrite in `--postfix` output |
|
||||
|
||||
Validate your pack at any time:
|
||||
|
||||
```bash
|
||||
fpy pack custom.json
|
||||
# ✓ Pack 'Russian' is valid.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Publishing
|
||||
|
||||
Once your `custom.json` is complete and working, you can turn it into a proper `foreignthon-xx` package on PyPI so others can install it with `pip install foreignthon-xx`.
|
||||
|
||||
See [Contributing → Language Packs](contributing/language-packs.md) for the full guide. Custom Packs
|
||||
|
||||
Reference in New Issue
Block a user