@@ -1,162 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Test script specifically for verifying the long word fix.
|
||||
"""
|
||||
|
||||
from PIL import Image, ImageDraw
|
||||
from pyWebLayout.concrete.text import Text, Line
|
||||
from pyWebLayout.style import Font, FontStyle, FontWeight
|
||||
from pyWebLayout.style.layout import Alignment
|
||||
|
||||
def test_supercalifragilisticexpialidocious():
|
||||
"""Test the specific long word that was causing issues"""
|
||||
|
||||
print("Testing long word handling...")
|
||||
|
||||
font_style = Font(
|
||||
font_path=None,
|
||||
font_size=12,
|
||||
colour=(0, 0, 0, 255)
|
||||
)
|
||||
|
||||
# The problematic sentence
|
||||
sentence = "This sentence has some really long words like supercalifragilisticexpialidocious that might need hyphenation."
|
||||
|
||||
# Test with the same constraints that were failing
|
||||
line_width = 150
|
||||
line_height = 25
|
||||
|
||||
words = sentence.split()
|
||||
|
||||
# Create lines and track all the text
|
||||
lines = []
|
||||
words_remaining = words.copy()
|
||||
all_rendered_text = []
|
||||
|
||||
print(f"Original sentence: {sentence}")
|
||||
print(f"Line width: {line_width}px")
|
||||
print()
|
||||
|
||||
line_number = 1
|
||||
while words_remaining:
|
||||
print(f"Creating line {line_number}...")
|
||||
|
||||
# Create a new line
|
||||
current_line = Line(
|
||||
spacing=(3, 8),
|
||||
origin=(0, (line_number-1) * line_height),
|
||||
size=(line_width, line_height),
|
||||
font=font_style,
|
||||
halign=Alignment.LEFT
|
||||
)
|
||||
|
||||
lines.append(current_line)
|
||||
|
||||
# Add words to current line until it's full
|
||||
words_added_to_line = []
|
||||
while words_remaining:
|
||||
word = words_remaining[0]
|
||||
print(f" Trying to add word: '{word}'")
|
||||
|
||||
result = current_line.add_word(word)
|
||||
|
||||
if result is None:
|
||||
# Word fit in the line
|
||||
words_added_to_line.append(word)
|
||||
words_remaining.pop(0)
|
||||
print(f" ✓ Added '{word}' to line {line_number}")
|
||||
else:
|
||||
# Word didn't fit, or only part of it fit
|
||||
if result == word:
|
||||
# Whole word didn't fit
|
||||
print(f" ✗ Word '{word}' didn't fit, moving to next line")
|
||||
break
|
||||
else:
|
||||
# Part of word fit, remainder is in result
|
||||
words_added_to_line.append(word) # The original word
|
||||
words_remaining[0] = result # Replace with remainder
|
||||
print(f" ⚡ Part of '{word}' fit, remainder: '{result}'")
|
||||
break
|
||||
|
||||
# Show what's on this line
|
||||
line_words = [word.text for word in current_line.text_objects]
|
||||
line_text = ' '.join(line_words)
|
||||
all_rendered_text.extend(line_words)
|
||||
print(f" Line {line_number} contains: \"{line_text}\"")
|
||||
print(f" Line {line_number} width usage: {current_line._current_width}/{line_width}px")
|
||||
print()
|
||||
|
||||
# If no words were added to this line, we have a problem
|
||||
if not line_words:
|
||||
print(f"ERROR: No words could be added to line {line_number}")
|
||||
break
|
||||
|
||||
line_number += 1
|
||||
|
||||
# Safety check to prevent infinite loops
|
||||
if line_number > 10:
|
||||
print("Safety break: too many lines")
|
||||
break
|
||||
|
||||
# Check if all words were rendered
|
||||
original_words = sentence.split()
|
||||
rendered_text_combined = ' '.join(all_rendered_text)
|
||||
|
||||
print("="*60)
|
||||
print("VERIFICATION")
|
||||
print("="*60)
|
||||
print(f"Original text: {sentence}")
|
||||
print(f"Rendered text: {rendered_text_combined}")
|
||||
print()
|
||||
|
||||
# Check for the problematic word
|
||||
long_word = "supercalifragilisticexpialidocious"
|
||||
if long_word in rendered_text_combined:
|
||||
print(f"✓ SUCCESS: Long word '{long_word}' was rendered!")
|
||||
elif "supercalifragilisticexpialidocious" in rendered_text_combined:
|
||||
print(f"✓ SUCCESS: Long word was rendered (possibly hyphenated)!")
|
||||
else:
|
||||
# Check if parts of the word are there
|
||||
found_parts = []
|
||||
for rendered_word in all_rendered_text:
|
||||
if long_word.startswith(rendered_word.replace('-', '')):
|
||||
found_parts.append(rendered_word)
|
||||
elif rendered_word.replace('-', '') in long_word:
|
||||
found_parts.append(rendered_word)
|
||||
|
||||
if found_parts:
|
||||
print(f"✓ PARTIAL SUCCESS: Found parts of long word: {found_parts}")
|
||||
else:
|
||||
print(f"✗ FAILURE: Long word '{long_word}' was not rendered at all!")
|
||||
|
||||
print(f"Total lines used: {len(lines)}")
|
||||
|
||||
# Create combined image showing all lines
|
||||
total_height = len(lines) * line_height
|
||||
combined_image = Image.new('RGBA', (line_width, total_height), (255, 255, 255, 255))
|
||||
|
||||
for i, line in enumerate(lines):
|
||||
line_img = line.render()
|
||||
y_pos = i * line_height
|
||||
combined_image.paste(line_img, (0, y_pos), line_img)
|
||||
|
||||
# Add a border for visualization
|
||||
draw = ImageDraw.Draw(combined_image)
|
||||
draw.rectangle([(0, y_pos), (line_width-1, y_pos + line_height-1)], outline=(200, 200, 200), width=1)
|
||||
|
||||
# Save the result
|
||||
output_filename = "test_long_word_fix.png"
|
||||
combined_image.save(output_filename)
|
||||
print(f"Result saved as: {output_filename}")
|
||||
|
||||
return len(lines), all_rendered_text
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("Testing long word fix for 'supercalifragilisticexpialidocious'...\n")
|
||||
|
||||
lines_used, rendered_words = test_supercalifragilisticexpialidocious()
|
||||
|
||||
print(f"\nTest completed!")
|
||||
print(f"- Lines used: {lines_used}")
|
||||
print(f"- Total words rendered: {len(rendered_words)}")
|
||||
print(f"- Check test_long_word_fix.png for visual verification")
|
||||
Reference in New Issue
Block a user