mirror of
https://github.com/gabrielkheisa/gemini-resume-checker.git
synced 2025-02-22 17:04:12 +07:00
markdown formatting improvement
This commit is contained in:
parent
c867c9e730
commit
fe3f7e33ea
50
app.py
50
app.py
@ -15,6 +15,7 @@ from flask_limiter.util import get_remote_address
|
|||||||
import google.generativeai as genai
|
import google.generativeai as genai
|
||||||
import requests
|
import requests
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
|
import markdown
|
||||||
|
|
||||||
# Load environment variables
|
# Load environment variables
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
@ -111,54 +112,7 @@ def is_valid_pdf(pdf_path):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def format_summary(summary):
|
def format_summary(summary):
|
||||||
"""Converts markdown-like text to HTML formatting, including nested lists (both ordered and unordered)."""
|
return markdown.markdown(summary)
|
||||||
summary = re.sub(r'\*\*(.*?)\*\*', r'<strong>\1</strong>', summary) # Bold text
|
|
||||||
summary = re.sub(r'\*(?!\s)(.*?)\*', r'<em>\1</em>', summary) # Italic text (ignoring lists)
|
|
||||||
|
|
||||||
lines = summary.split('\n')
|
|
||||||
formatted_lines = []
|
|
||||||
list_stack = [] # Track nesting levels and types
|
|
||||||
|
|
||||||
for line in lines:
|
|
||||||
unordered_match = re.match(r'^(\s*)\*\s(.+)', line) # Matches "* item"
|
|
||||||
ordered_match = re.match(r'^(\s*)(\d+)\.\s(.+)', line) # Matches "1. item"
|
|
||||||
|
|
||||||
if unordered_match or ordered_match:
|
|
||||||
indent = unordered_match.group(1) if unordered_match else ordered_match.group(1)
|
|
||||||
level = len(indent) // 4 # Assume 4 spaces per indent level
|
|
||||||
|
|
||||||
list_type = '<ul>' if unordered_match else '<ol>'
|
|
||||||
list_tag = '<li>{}</li>'.format(unordered_match.group(2) if unordered_match else ordered_match.group(3))
|
|
||||||
|
|
||||||
# Close lists if necessary
|
|
||||||
while list_stack and len(list_stack) > level:
|
|
||||||
formatted_lines.append('</{}>'.format(list_stack.pop()))
|
|
||||||
|
|
||||||
# Open new lists if necessary
|
|
||||||
while len(list_stack) < level:
|
|
||||||
formatted_lines.append(list_type)
|
|
||||||
list_stack.append(list_type[1:3]) # Store 'ul' or 'ol'
|
|
||||||
|
|
||||||
# Handle list type switching (unordered ↔ ordered)
|
|
||||||
if list_stack and list_stack[-1] != list_type[1:3]:
|
|
||||||
formatted_lines.append('</{}>'.format(list_stack.pop()))
|
|
||||||
formatted_lines.append(list_type)
|
|
||||||
list_stack.append(list_type[1:3])
|
|
||||||
|
|
||||||
formatted_lines.append(list_tag)
|
|
||||||
|
|
||||||
else:
|
|
||||||
# Close any open lists before adding non-list content
|
|
||||||
while list_stack:
|
|
||||||
formatted_lines.append('</{}>'.format(list_stack.pop()))
|
|
||||||
|
|
||||||
formatted_lines.append(line.replace("\n", "<br>"))
|
|
||||||
|
|
||||||
# Close any remaining lists
|
|
||||||
while list_stack:
|
|
||||||
formatted_lines.append('</{}>'.format(list_stack.pop()))
|
|
||||||
|
|
||||||
return '\n'.join(formatted_lines)
|
|
||||||
|
|
||||||
def resize_image(image, max_size=1080):
|
def resize_image(image, max_size=1080):
|
||||||
width, height = image.size
|
width, height = image.size
|
||||||
|
@ -9,3 +9,4 @@ flask-limiter==3.10.1
|
|||||||
google-generativeai==0.8.3
|
google-generativeai==0.8.3
|
||||||
requests==2.31.0
|
requests==2.31.0
|
||||||
python-dotenv==1.0.1
|
python-dotenv==1.0.1
|
||||||
|
markdown==3.7
|
||||||
|
Loading…
Reference in New Issue
Block a user