diff --git a/twitter2bsky_daemon.py b/twitter2bsky_daemon.py index 98b283f..d565ec7 100644 --- a/twitter2bsky_daemon.py +++ b/twitter2bsky_daemon.py @@ -1162,19 +1162,16 @@ def find_tail_preservation_start(text, primary_non_x_url): return url_pos - def truncate_text_safely(text, max_length=BSKY_TEXT_MAX_LENGTH): if grapheme_len(text) <= max_length: return text - # Truncate by grapheme clusters clusters = list(grapheme.graphemes(text)) - truncated = "".join(clusters[: max_length - 3]) + truncated = "".join(clusters[:max_length]) last_space = truncated.rfind(" ") if last_space > TRUNCATE_MIN_PREFIX_CHARS: - return truncated[:last_space] + "..." - return truncated + "..." - + return truncated[:last_space] + return truncated def truncate_text_preserving_tail(text, tail_start, max_length=BSKY_TEXT_MAX_LENGTH): if ( not text @@ -1191,13 +1188,13 @@ def truncate_text_preserving_tail(text, tail_start, max_length=BSKY_TEXT_MAX_LEN if not tail: return truncate_text_safely(text, max_length) - reserve = len(tail) + 4 + reserve = len(tail) + 1 if reserve >= max_length: - shortened_tail = tail[-(max_length - 3) :].strip() + shortened_tail = tail[-max_length:].strip() first_space = shortened_tail.find(" ") if 0 <= first_space <= 30: - shortened_tail = shortened_tail[first_space + 1 :].strip() - return f"...{shortened_tail}" + shortened_tail = shortened_tail[first_space + 1:].strip() + return shortened_tail available_prefix = max_length - reserve prefix = text[:tail_start].rstrip() @@ -1208,7 +1205,7 @@ def truncate_text_preserving_tail(text, tail_start, max_length=BSKY_TEXT_MAX_LEN if last_space > 20: prefix = prefix[:last_space].rstrip() - final_text = f"{prefix}... {tail}".strip() + final_text = f"{prefix} {tail}".strip() final_text = re.sub(r"[ \t]+", " ", final_text) final_text = re.sub(r"\n{3,}", "\n\n", final_text).strip() @@ -1217,7 +1214,6 @@ def truncate_text_preserving_tail(text, tail_start, max_length=BSKY_TEXT_MAX_LEN return truncate_text_safely(text, max_length) - def choose_final_visible_text( full_clean_text, primary_non_x_url=None, prefer_full_text_without_url=True ): @@ -2291,7 +2287,7 @@ def make_rich(content): text_builder.text(word) elif cleaned_word.startswith("#") and len(cleaned_word) > 1: - clean_tag = cleaned_word[1:].rstrip(".,;:!?)'\"…") + clean_tag = cleaned_word[1:].rstrip(".,;:!?)'\"") if clean_tag: text_builder.tag(cleaned_word, clean_tag) trailing = word[len(cleaned_word):] @@ -2323,7 +2319,7 @@ def build_dynamic_alt(raw_text, link_title=None): dynamic_alt = link_title.strip() if len(dynamic_alt) > DYNAMIC_ALT_MAX_LENGTH: - dynamic_alt = dynamic_alt[:DYNAMIC_ALT_MAX_LENGTH - 3] + "..." + dynamic_alt = dynamic_alt[:DYNAMIC_ALT_MAX_LENGTH] elif not dynamic_alt: dynamic_alt = "Attached video or image from tweet" @@ -3237,7 +3233,6 @@ def sync_feeds(args): if dry_run: logging.info( f" 📄 Text: {raw_text[:200]}" - f"{'...' if len(raw_text) > 200 else ''}" ) logging.info( f" 🔗 Primary external URL: "