Compare commits
9 Commits
foreigntho
...
foreigntho
| Author | SHA1 | Date | |
|---|---|---|---|
| bb4e325dec | |||
| 92b2a59f95 | |||
| bc9e73ef88 | |||
| 393b947953 | |||
| 85e3837117 | |||
| 15f367131e | |||
| 83d8552977 | |||
| 606501d654 | |||
| d9c5042ec7 |
@@ -6,10 +6,10 @@ ForeignThon transpiles `.es.py`, `.ta.py` (and more) into standard Python. Keywo
|
||||
|
||||
```python
|
||||
# hola.es.py
|
||||
definir saludar(nombre):
|
||||
def saludar(nombre):
|
||||
retornar f"Hola, {nombre}!"
|
||||
|
||||
para i en rango(3):
|
||||
para i en dist(3):
|
||||
imprimir(saludar(f"mundo {i}"))
|
||||
```
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
||||
|
||||
[project]
|
||||
name = "foreignthon"
|
||||
version = "0.5.0"
|
||||
version = "0.5.2"
|
||||
description = "Write Python in any language. Transpiles foreign-language .xx.py files to standard Python."
|
||||
license = { text = "GPL v3" }
|
||||
requires-python = ">=3.9"
|
||||
|
||||
@@ -254,26 +254,58 @@ def compile(file: Path, output: str | None):
|
||||
out_path.write_text(transpiled, encoding="utf-8")
|
||||
click.echo(f"Compiled: {out_path}")
|
||||
|
||||
|
||||
@main.command(context_settings=CONTEXT_SETTINGS)
|
||||
@click.argument("file", type=click.Path(exists=True, path_type=Path))
|
||||
def check(file: Path):
|
||||
"""Validate a foreign-language file without running it."""
|
||||
@click.argument("files", nargs=-1, required=True, type=click.Path(exists=True, path_type=Path))
|
||||
def check(files: tuple):
|
||||
"""Validate one or more foreign-language files without running them."""
|
||||
import ast
|
||||
import io
|
||||
import tokenize as _tokenize
|
||||
|
||||
from .transpiler import _build_mapping, transpile_file
|
||||
|
||||
failed = False
|
||||
for file in files:
|
||||
detected_lang = _lang_from_file(file)
|
||||
try:
|
||||
pack = _load_effective_pack(file, detected_lang)
|
||||
transpiled = transpile_file(file, pack=pack)
|
||||
ast.parse(transpiled)
|
||||
click.echo(f"✓ {file.name} looks good.")
|
||||
|
||||
source = file.read_text(encoding="utf-8")
|
||||
mapping = _build_mapping(pack)
|
||||
tokens = list(_tokenize.generate_tokens(io.StringIO(source).readline))
|
||||
count = sum(1 for t in tokens if t.type == _tokenize.NAME and t.string in mapping)
|
||||
|
||||
click.echo(f"✓ {file.name} looks good. ({count} tokens translated)")
|
||||
except SyntaxError as e:
|
||||
click.echo(f"✗ Syntax error: {e}", err=True)
|
||||
sys.exit(1)
|
||||
click.echo(f"✗ {file.name}: Syntax error: {e}", err=True)
|
||||
failed = True
|
||||
except Exception as e:
|
||||
click.echo(f"✗ {e}", err=True)
|
||||
click.echo(f"✗ {file.name}: {e}", err=True)
|
||||
failed = True
|
||||
|
||||
if failed:
|
||||
sys.exit(1)
|
||||
|
||||
@main.command(context_settings=CONTEXT_SETTINGS)
|
||||
def langs():
|
||||
"""List all installed language packs."""
|
||||
from .pack import _discover_packs
|
||||
|
||||
packs = _discover_packs()
|
||||
if not packs:
|
||||
click.echo("No language packs installed.")
|
||||
click.echo("Try: pip install foreignthon-es")
|
||||
return
|
||||
|
||||
click.echo("Installed language packs:")
|
||||
for code, module in sorted(packs.items()):
|
||||
import json
|
||||
data = json.loads(module.get_pack_path().read_text(encoding="utf-8"))
|
||||
name = data["meta"].get("name", code)
|
||||
native = data["meta"].get("native_name", "")
|
||||
click.echo(f" {code:<6} {name} ({native})")
|
||||
|
||||
@main.command("pack", context_settings=CONTEXT_SETTINGS)
|
||||
@click.argument("json_file", type=click.Path(exists=True, path_type=Path))
|
||||
|
||||
@@ -14,7 +14,7 @@ authors = [
|
||||
]
|
||||
keywords = ["foreignthon", "spanish", "español"]
|
||||
|
||||
dependencies = ["foreignthon>=0.5.0"]
|
||||
dependencies = ["foreignthon>=0.5.2"]
|
||||
|
||||
[project.entry-points."foreignthon.langs"]
|
||||
es = "foreignthon_es"
|
||||
|
||||
@@ -12,7 +12,7 @@ authors = [
|
||||
{ name = "Keshav Anand", email = "keshavanand.dev@gmail.com" }
|
||||
]
|
||||
keywords = ["foreignthon", "tamil", "தமிழ்"]
|
||||
dependencies = ["foreignthon>=0.5.0"]
|
||||
dependencies = ["foreignthon>=0.5.2"]
|
||||
|
||||
[project.entry-points."foreignthon.langs"]
|
||||
ta = "foreignthon_ta"
|
||||
|
||||
Reference in New Issue
Block a user