Python implementation of the Links Notation parser
Project description
Links Notation Parser for Python
Python implementation of the Links Notation parser.
Installation
pip install links-notation
Quick Start
from links_notation import Parser
parser = Parser()
links = parser.parse("papa (lovesMama: loves mama)")
# Access parsed links
for link in links:
print(link)
Usage
Basic Parsing
from links_notation import Parser, format_links
parser = Parser()
# Parse simple links
links = parser.parse("(papa: loves mama)")
print(links[0].id) # 'papa'
print(len(links[0].values)) # 2
# Format links back to string
output = format_links(links)
print(output) # (papa: loves mama)
Working with Link Objects
from links_notation import Link
# Create links programmatically
link = Link('parent', [Link('child1'), Link('child2')])
print(str(link)) # (parent: child1 child2)
# Access link properties
print(link.id) # 'parent'
print(link.values[0].id) # 'child1'
# Combine links
combined = link.combine(Link('another'))
print(str(combined)) # ((parent: child1 child2) another)
Indented Syntax
parser = Parser()
# Parse indented notation
text = """3:
papa
loves
mama"""
links = parser.parse(text)
# Produces: (3: papa loves mama)
API Reference
Parser
The main parser class for Links Notation.
parse(input_text: str) -> List[Link]: Parse Links Notation text into Link objects
Link
Represents a link in Links Notation.
__init__(id: Optional[str] = None, values: Optional[List[Link]] = None)format(less_parentheses: bool = False) -> str: Format as stringsimplify() -> Link: Simplify link structurecombine(other: Link) -> Link: Combine with another link
format_links
Format a list of links into Links Notation.
format_links(links: List[Link], less_parentheses: bool = False) -> str
Examples
Doublets (2-tuple)
parser = Parser()
text = """
papa (lovesMama: loves mama)
son lovesMama
daughter lovesMama
"""
links = parser.parse(text)
Triplets (3-tuple)
text = """
papa has car
mama has house
(papa and mama) are happy
"""
links = parser.parse(text)
Quoted References
# References with special characters need quotes
text = '("has space": "value with: colon")'
links = parser.parse(text)
Development
Running Tests
# Install development dependencies
pip install pytest
# Run tests
pytest
Building
pip install build
python -m build
Maintenance
Linting and Formatting
This project uses Black for code formatting, isort for import sorting, and flake8 for linting.
Install linting tools:
pip install ".[lint]"
# Or install all dev dependencies
pip install ".[dev]"
Format all code files
black .
isort .
Check formatting (without modifying files)
black --check --diff .
isort --check-only --diff .
flake8 --max-line-length=120
These checks are enforced in CI. Pull requests with unformatted code will fail the lint check.
Pre-commit Hooks
This project uses pre-commit hooks that automatically run Black, isort, and flake8 before commits. To set up pre-commit hooks locally:
# From repository root
pip install pre-commit
pre-commit install
License
This project is released into the public domain under the Unlicense.
Links
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file links_notation-0.13.0.tar.gz.
File metadata
- Download URL: links_notation-0.13.0.tar.gz
- Upload date:
- Size: 25.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0dc392a2264eba49892416b6bacc4d844c6c1657d221593a87f0ae5bb742bcd3
|
|
| MD5 |
2313f2a013d2bfe784d5d22e53c705c5
|
|
| BLAKE2b-256 |
3178ce7e26a1c635e8504c5c3bc2f06a56991c0d0d56a981a4a6ed04aaa6ba1c
|
File details
Details for the file links_notation-0.13.0-py3-none-any.whl.
File metadata
- Download URL: links_notation-0.13.0-py3-none-any.whl
- Upload date:
- Size: 12.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dda67e361941dad14359f746beb1bdd577257d4bfb726615414d51964ab95786
|
|
| MD5 |
de7bc6cf1b31021abb6fcb20f8af0f67
|
|
| BLAKE2b-256 |
ec0142af9e84c6e39cb73ef2c9ab36f5f7bbbafff3d84ae1394eaffecff47e6e
|