Update backup8.app.py
Browse files- backup8.app.py +82 -8
backup8.app.py
CHANGED
@@ -42,6 +42,35 @@ def clean_for_speech(text):
|
|
42 |
text = emoji_pattern.sub('', text)
|
43 |
return text
|
44 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
45 |
async def generate_audio(text, voice, filename):
|
46 |
communicate = edge_tts.Communicate(text, voice)
|
47 |
await communicate.save(filename)
|
@@ -283,17 +312,62 @@ with st.sidebar:
|
|
283 |
render_with_bold = st.checkbox("Render with Bold Formatting (remove ** markers)", value=True, key="render_with_bold")
|
284 |
auto_bold_numbers = st.checkbox("Auto Bold Numbered Lines", value=True, key="auto_bold_numbers")
|
285 |
enlarge_numbered = st.checkbox("Enlarge Font Size for Numbered Lines", value=True, key="enlarge_numbered")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
286 |
column_options = ["Auto"] + list(range(1, 7))
|
287 |
-
num_columns = st.selectbox("Number of Columns", options=column_options,
|
|
|
288 |
num_columns = 0 if num_columns == "Auto" else int(num_columns)
|
289 |
st.info("Font size and columns adjust to fit one page.")
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
297 |
prefix = get_timestamp_prefix()
|
298 |
st.download_button(
|
299 |
label="πΎπ Save Markdown",
|
|
|
42 |
text = emoji_pattern.sub('', text)
|
43 |
return text
|
44 |
|
45 |
+
def trim_emojis_except_numbered(markdown_text):
|
46 |
+
emoji_pattern = re.compile(
|
47 |
+
r"[\U0001F300-\U0001F5FF"
|
48 |
+
r"\U0001F600-\U0001F64F"
|
49 |
+
r"\U0001F680-\U0001F6FF"
|
50 |
+
r"\U0001F700-\U0001F77F"
|
51 |
+
r"\U0001F780-\U0001F7FF"
|
52 |
+
r"\U0001F800-\U0001F8FF"
|
53 |
+
r"\U0001F900-\U0001F9FF"
|
54 |
+
r"\U0001FAD0-\U0001FAD9"
|
55 |
+
r"\U0001FA00-\U0001FA6F"
|
56 |
+
r"\U0001FA70-\U0001FAFF"
|
57 |
+
r"\u2600-\u26FF"
|
58 |
+
r"\u2700-\u27BF]+"
|
59 |
+
)
|
60 |
+
number_pattern = re.compile(r'^\d+\.\s')
|
61 |
+
lines = markdown_text.strip().split('\n')
|
62 |
+
processed_lines = []
|
63 |
+
|
64 |
+
for line in lines:
|
65 |
+
if number_pattern.match(line):
|
66 |
+
# Keep emojis in numbered lines
|
67 |
+
processed_lines.append(line)
|
68 |
+
else:
|
69 |
+
# Remove emojis from other lines
|
70 |
+
processed_lines.append(emoji_pattern.sub('', line))
|
71 |
+
|
72 |
+
return '\n'.join(processed_lines)
|
73 |
+
|
74 |
async def generate_audio(text, voice, filename):
|
75 |
communicate = edge_tts.Communicate(text, voice)
|
76 |
await communicate.save(filename)
|
|
|
312 |
render_with_bold = st.checkbox("Render with Bold Formatting (remove ** markers)", value=True, key="render_with_bold")
|
313 |
auto_bold_numbers = st.checkbox("Auto Bold Numbered Lines", value=True, key="auto_bold_numbers")
|
314 |
enlarge_numbered = st.checkbox("Enlarge Font Size for Numbered Lines", value=True, key="enlarge_numbered")
|
315 |
+
# Add AutoColumns option to automatically determine column count based on line length
|
316 |
+
auto_columns = st.checkbox("AutoColumns", value=False, key="auto_columns")
|
317 |
+
|
318 |
+
# Auto-determine column count based on longest line if AutoColumns is checked
|
319 |
+
if auto_columns and 'markdown_content' in st.session_state:
|
320 |
+
current_markdown = st.session_state.markdown_content
|
321 |
+
lines = current_markdown.strip().split('\n')
|
322 |
+
longest_line_words = 0
|
323 |
+
for line in lines:
|
324 |
+
if line.strip(): # Skip empty lines
|
325 |
+
word_count = len(line.split())
|
326 |
+
longest_line_words = max(longest_line_words, word_count)
|
327 |
+
|
328 |
+
# Set recommended columns based on word count
|
329 |
+
if longest_line_words > 25:
|
330 |
+
recommended_columns = 1 # Very long lines need a single column
|
331 |
+
elif longest_line_words >= 18:
|
332 |
+
recommended_columns = 2 # Long lines need 2 columns
|
333 |
+
elif longest_line_words >= 11:
|
334 |
+
recommended_columns = 3 # Medium lines can use 3 columns
|
335 |
+
else:
|
336 |
+
recommended_columns = "Auto" # Default to auto for shorter lines
|
337 |
+
|
338 |
+
st.info(f"Longest line has {longest_line_words} words. Recommending {recommended_columns} columns.")
|
339 |
+
else:
|
340 |
+
recommended_columns = "Auto"
|
341 |
+
|
342 |
column_options = ["Auto"] + list(range(1, 7))
|
343 |
+
num_columns = st.selectbox("Number of Columns", options=column_options,
|
344 |
+
index=0 if recommended_columns == "Auto" else column_options.index(recommended_columns))
|
345 |
num_columns = 0 if num_columns == "Auto" else int(num_columns)
|
346 |
st.info("Font size and columns adjust to fit one page.")
|
347 |
+
|
348 |
+
# Changed label from "Modify the markdown content below:" to "Input Markdown"
|
349 |
+
edited_markdown = st.text_area("Input Markdown", value=st.session_state.markdown_content, height=300, key=f"markdown_{selected_md}_{selected_font_name}_{num_columns}")
|
350 |
+
|
351 |
+
# Added emoji to "Update PDF" button and created a two-column layout for buttons
|
352 |
+
col1, col2 = st.columns(2)
|
353 |
+
with col1:
|
354 |
+
if st.button("ππ Update PDF"):
|
355 |
+
st.session_state.markdown_content = edited_markdown
|
356 |
+
if selected_md:
|
357 |
+
with open(f"{selected_md}.md", "w", encoding="utf-8") as f:
|
358 |
+
f.write(edited_markdown)
|
359 |
+
st.rerun()
|
360 |
+
|
361 |
+
# Added "Trim Emojis" button in second column
|
362 |
+
with col2:
|
363 |
+
if st.button("βοΈ Trim Emojis"):
|
364 |
+
trimmed_content = trim_emojis_except_numbered(edited_markdown)
|
365 |
+
st.session_state.markdown_content = trimmed_content
|
366 |
+
if selected_md:
|
367 |
+
with open(f"{selected_md}.md", "w", encoding="utf-8") as f:
|
368 |
+
f.write(trimmed_content)
|
369 |
+
st.rerun()
|
370 |
+
|
371 |
prefix = get_timestamp_prefix()
|
372 |
st.download_button(
|
373 |
label="πΎπ Save Markdown",
|