#!/usr/bin/env python3 """ Debug script to test text positioning in the line breaking system """ import sys from pathlib import Path from PIL import Image, ImageDraw from pyWebLayout.style import Font from pyWebLayout.concrete.text import Text, Line from pyWebLayout.style.layout import Alignment # Add pyWebLayout to path sys.path.insert(0, str(Path(__file__).parent)) def test_simple_text_rendering(): """Test basic text rendering to debug positioning issues""" # Create a simple image width, height = 300, 200 image = Image.new('RGB', (width, height), 'white') draw = ImageDraw.Draw(image) # Draw a border for reference draw.rectangle([0, 0, width-1, height-1], outline=(200, 200, 200), width=2) # Create a font font = Font(font_size=12) # Test 1: Direct PIL text rendering print("Test 1: Direct PIL text rendering") draw.text((10, 30), "Direct PIL text", font=font.font, fill=(0, 0, 0)) # Test 2: Using our Text class print("Test 2: Using Text class") text_obj = Text("Text class rendering", font, draw) text_obj.set_origin([10, 60]) # Set position print(f"Text origin: {text_obj.origin}") text_obj.render() # Test 3: Using Line class print("Test 3: Using Line class") line = Line( spacing=(2, 6), origin=(10, 100), size=(280, 20), draw=draw, font=font, halign=Alignment.LEFT ) # Create a simple word to add to the line from pyWebLayout.abstract.inline import Word word = Word("Line class rendering", font) success, overflow = line.add_word(word) print(f"Word added successfully: {success}") print(f"Line origin: {line.origin}") print(f"Line baseline: {line._baseline}") print(f"Text objects in line: {len(line.text_objects)}") if line.text_objects: for i, text in enumerate(line.text_objects): print(f" Text {i}: '{text.text}' at origin {text.origin}") line.render() # Save the debug image image.save("debug_text_positioning.png") print("Debug image saved as debug_text_positioning.png") if __name__ == "__main__": test_simple_text_rendering()