feat: Add RTL (Right-to-Left) text support for Hebrew, Arabic, and bidirectional languages#6306
Closed
shaal wants to merge 1 commit into
Closed
feat: Add RTL (Right-to-Left) text support for Hebrew, Arabic, and bidirectional languages#6306shaal wants to merge 1 commit into
shaal wants to merge 1 commit into
Conversation
…directional languages
This adds BiDi (Bidirectional) text support to Textual, enabling proper display of
RTL languages like Hebrew and Arabic in terminal applications.
## Changes
### New Files
- `_bidi.py`: Core BiDi utilities with RTL detection and Unicode BiDi algorithm support
- `tests/test_bidi.py`: Comprehensive tests for BiDi functionality
### CSS System
- Added `text-direction` CSS property with values: "auto", "ltr", "rtl"
- Default is "auto" which detects RTL characters automatically
### Widgets
- **Content class**: Integrated BiDi processing in render pipeline
- **TextArea**: Added `text_direction` reactive property (defaults to "ltr" for code)
- **Markdown**: Code blocks force LTR to preserve formatting
### Dependencies
- Added `python-bidi` as optional dependency (`pip install textual[bidi]`)
## Usage
```css
/* Auto-detect RTL */
Static { text-direction: auto; }
/* Force RTL */
Label { text-direction: rtl; }
```
```python
text_area.text_direction = "auto"
```
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Member
|
I will need the following before I consider merging:
I gather this is AI generated. But I do hope you have an understanding of this update beyond what you prompted for... https://textual.textualize.io/blog/2023/07/29/pull-requests-are-cake-or-puppies/ |
|
@willmcgugan It is a required feature because the text is reversed, I'll try to better look at it and see if there's something from this code that's usable for this use case. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR adds BiDi (Bidirectional) text support to Textual, enabling proper display of RTL (Right-to-Left) languages like Hebrew and Arabic in terminal applications.
Key Features
text-direction: autoCSS property automatically detects RTL characters and applies the Unicode BiDi algorithmtext-directionproperty with valuesauto,ltr,rtlpython-bidilibrary (install withpip install textual[bidi])Changes
_bidi.pycontent.pycss/types.pyTextDirectiontypecss/constants.pyVALID_TEXT_DIRECTIONcss/styles.pytext_directionCSS propertycss/_styles_builder.pytext-directionwidgets/_text_area.pytext_directionreactive propertywidgets/_markdown.pypyproject.tomlpython-bidioptional dependencytests/test_bidi.pyUsage
CSS:
Python (TextArea):
Test Examples
Test plan
pytest tests/test_bidi.py- All 22 tests pass (3 skipped when python-bidi not installed)pytest tests/test_content.py- All 74 tests pass🤖 Generated with Claude Code