Compare commits

..

8 Commits

19 changed files with 291 additions and 44 deletions

25
.gitignore vendored
View File

@@ -1,7 +1,24 @@
# Python bytecode
*.pyc
__pycache__/
*.egg-info/
.pytest_cache/
*.map
*.pyo
# Cache
**/__pycache__/
**/*.egg-info/
**/.pytest_cache/
.coverage
.htmlcov/
# Environment
.env
.venv/
.env/*
!/.env.example
# Build artifacts
*.map
dist/
build/
# Generated test files
tests/*.py

102
INSTALL.md Normal file
View File

@@ -0,0 +1,102 @@
# Installation Guide
## Quick Start
### Option 1: Install to system (recommended)
```bash
# Add Python to PATH if not already there
export PATH="$HOME/.local/bin:$PATH"
# Install tampy
pip install tampy
# Verify installation
tampy --help
# Use
tampy run my_script.tampy
tampy build my_script.tampy
```
### Option 2: Use virtual environment
```bash
# Create venv
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# Install in development mode
pip install -e ".[dev]"
# Use
tampy run my_script.tampy
```
## Windows (PowerShell)
```powershell
# Install
pip install tampy
# Add to PATH
$env:APPDATA = [Environment]::GetFolderPath("ApplicationData")
$env:PATH = "$env:APPDATA\Python\Scripts;" + $env:PATH
# Verify
tampy --help
```
## Development Setup
```bash
# Clone repository
git clone https://github.com/yourusername/tampy.git
cd tampy
# Install with Makefile
make install
# Run tests
make test
# Build package
make build
# Clean
make clean
```
## Troubleshooting
### "tampy: command not found"
Add venv bin to PATH:
```bash
# Linux/Mac
export PATH="$HOME/.venv/bin:$PATH"
# Windows (PowerShell)
$env:PATH = "$env:APPDATA\Python\Scripts;" + $env:PATH
```
### Permission denied when installing
```bash
pip install --user tampy
# or
sudo pip install tampy # Use with caution
```
## Cross-Platform Notes
- **Linux**: Use `~/.local/bin` or venv bin
- **macOS**: Use `~/Library/Python/3.x/bin` or venv bin
- **Windows**: Use `%APPDATA%\Python\Scripts` or venv Scripts folder
## Verify Installation
```bash
tampy --version
tampy --help
```

27
Makefile Normal file
View File

@@ -0,0 +1,27 @@
.PHONY: install test build clean help
install:
pip install -e ".[dev]"
test:
pytest tests/ -v
build:
python -m build
clean:
rm -rf dist/ build/ .venv/
find . -type d -name __pycache__ -exec rm -rf {} +
find . -type f -name "*.pyc" -delete
help:
@echo "Available commands:"
@echo " make install - Install in development mode"
@echo " make test - Run tests"
@echo " make build - Build package"
@echo " make clean - Clean build artifacts"
@echo " make - Run tests (default)"
.DEFAULT_GOAL := help
test: test

View File

@@ -0,0 +1,82 @@
# Tampy
A Python compiler/transpiler that converts Tamil code syntax to Python.
## Features
- **Build mode**: Generate Python code from Tamil syntax
- **Run mode**: Build and execute Tamil code directly
- **Configurable keywords**: Custom keyword mappings via JSON
- **Minimal dependencies**: Uses Python's built-in `ast` module
## Installation
```bash
pip install tampy
```
## Usage
### Build (generate Python code)
```bash
tampy build my_script.tampy
# Generates: my_script.py
```
### Run (build and execute)
```bash
tampy run my_script.tampy
```
## Example
**Input (Tamil code):**
```python
x = 1
y = 2
if x > y:
print("x is greater")
else:
print("y is greater")
```
**Output:**
```python
x = 1
y = 2
if x > y:
print('x is greater')
else:
print('y is greater')
```
## Configuration
Edit `src/tampy/keywords.json` to customize keyword mappings:
```json
{
"print": "இருப்பு",
"if": "இணை",
"for": "ஒவ்வொரு"
}
```
## Development
```bash
# Run tests
pytest tests/
# Install in development mode
pip install -e ".[dev]"
# Run tests with coverage
pytest --cov=src
```
## License
MIT

View File

@@ -1,13 +1,53 @@
[build-system]
requires = ["hatchling", "hatch-vcs"]
build-backend = "hatchling.build"
[project]
name = "tampy"
version = "0.1.0"
description = "Tamil code compiler"
dynamic = ["version"]
description = "Tamil code compiler - converts Tamil code to Python"
readme = "README.md"
requires-python = ">=3.9"
license = {text = "MIT"}
authors = [
{name = "Keshav Anand", email = "keshavanand.dev@gmail.com"}
]
keywords = ["tamil", "python", "compiler", "transpiler"]
classifiers = [
"Development Status :: 3 - Alpha",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Topic :: Software Development",
"Topic :: Software Development :: Compilers",
]
dependencies = []
[project.scripts]
tampy = "tampy.cli:main"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project.optional-dependencies]
dev = [
"pytest>=8.0",
"pytest-cov>=4.0",
"ruff>=0.1.0",
"mypy>=1.0.0",
]
[tool.hatch.build.targets.wheel]
packages = ["src/tampy"]
[tool.hatch.build.targets.sdist]
include = ["/src"]
[tool.hatch.version]
source = "vcs"
[tool.hatch.build.hooks.vcs]
version-file = "src/tampy/_version.py"

2
pytest.ini Normal file
View File

@@ -0,0 +1,2 @@
[pytest]
pythonpath = src

View File

@@ -1,5 +0,0 @@
Metadata-Version: 2.4
Name: tampy
Version: 0.0.0
License-File: LICENSE
Dynamic: license-file

View File

@@ -1,13 +0,0 @@
LICENSE
README.md
pyproject.toml
src/tampy/__init__.py
src/tampy/__main__.py
src/tampy/cli.py
src/tampy/keywords.py
src/tampy/transpiler.py
src/tampy.egg-info/PKG-INFO
src/tampy.egg-info/SOURCES.txt
src/tampy.egg-info/dependency_links.txt
src/tampy.egg-info/top_level.txt
tests/test.generated.py

View File

@@ -1 +0,0 @@

View File

@@ -1 +0,0 @@
tampy

View File

@@ -5,8 +5,8 @@ import subprocess
import sys
from pathlib import Path
from src.tampy.transpiler import SimpleTranspiler
from src.tampy.keywords import load_keywords
from .transpiler import SimpleTranspiler
from .keywords import load_keywords
def main():
@@ -31,7 +31,7 @@ def main():
python_code = transpiler.transpile(code)
if args.command == "build":
output_file = args.file.replace(".tampy", ".py")
output_file = Path(args.file).with_suffix(".py")
with open(output_file, "w", encoding="utf-8") as f:
f.write(python_code)
print(f"Generated: {output_file}")

View File

@@ -1,6 +0,0 @@
x = 1
y = 2
if x > y:
print('x is greater')
else:
print('y is greater')

View File

@@ -9,19 +9,20 @@ from pathlib import Path
def test_build_command():
"""Test build command."""
result = subprocess.run(
[sys.executable, "-m", "tampy", "build", "test.tampy"],
[sys.executable, "-m", "tampy", "build", "tests/test.tampy"],
capture_output=True,
text=True,
env={**dict(os.environ), "PYTHONPATH": "src"}
)
assert result.returncode == 0
assert "Generated:" in result.stdout
assert Path("tests/test.py").exists()
def test_run_command():
"""Test run command."""
result = subprocess.run(
[sys.executable, "-m", "tampy", "run", "test.tampy"],
[sys.executable, "-m", "tampy", "run", "tests/test.tampy"],
capture_output=True,
text=True,
env={**dict(os.environ), "PYTHONPATH": "src"}
@@ -33,10 +34,10 @@ def test_run_command():
def test_file_extension_replacement():
"""Test that .tampy is replaced with .py."""
result = subprocess.run(
[sys.executable, "-m", "tampy", "build", "test.tampy"],
[sys.executable, "-m", "tampy", "build", "tests/test.tampy"],
capture_output=True,
text=True,
env={**dict(os.environ), "PYTHONPATH": "src"}
)
assert result.returncode == 0
assert Path("test.py").exists()
assert Path("tests/test.py").exists()

View File

@@ -2,7 +2,9 @@
import ast
import pytest
from src.tampy.transpiler import SimpleTranspiler
import sys
sys.path.insert(0, "..")
from tampy.transpiler import SimpleTranspiler
def test_simple_transpile():

2
uv.lock generated
View File

@@ -5,4 +5,4 @@ requires-python = ">=3.9"
[[package]]
name = "tampy"
version = "0.1.0"
source = { virtual = "." }
source = { editable = "." }