import re from flask import Flask, render_template, request from asgiref.wsgi import WsgiToAsgi # Create Flask app app = Flask(__name__) def process_ssml_text(ssml_text): """ Process SSML text to extract content between SSML tags and format it properly. """ # Regular expression to find all textnorm tags and their content result = [] # Process each line separately lines = ssml_text.split('\n') for line in lines: # Create a new line by removing all SSML tags and just using the clean text if "]*>([^<]*)', r'\1', line) # Replace specific symbols to match the expected output clean_line = clean_line.replace('A☼M', 'A※M').replace('P☼M', 'P※M') result.append(clean_line) return '\n'.join(result) def process_old_ssml_text(ssml_text): """ Process old SSML text format to extract and format content. """ result = [] # Process each line separately lines = ssml_text.split('\n') for line in lines: # Remove DECIMAL and CURRENCY tags, keeping the spoken text and any trailing content if "<" in line: clean_line = re.sub(r'<(?:DECIMAL|DATE02|NUMERIC_RANGE|CURRENCY|DATE|TIME|DURATION|TELEPHONE|EMAIL|URL|SYMBOL|ORDINAL|CARDINAL|MEASUREMENT|ROMAN|FRACTION|MATH_EXPRESSION|MATH_EQUATION|BANK_NUMBER|ADDRESS|ALPHA_NUMERIC|DIGIT|LONG_NUMBER|LATIN|PHONE|CONTACT|WEB|NUMERIC|ALPHABETIC|SPECIAL_CHAR|PUNCTUATION|SPACE|TAG_REPLACEMENT|LANGUAGE|LOCALE):\s*([^>]+)>\s*', r'\1 ', line) # Remove textnorm tags clean_line = re.sub(r']*>([^<]*)', r'\1', clean_line) # Replace specific symbols to match the expected output clean_line = clean_line.replace('A☼M', 'A※M').replace('P☼M', 'P※M') # Strip extra whitespace clean_line = clean_line.strip() result.append(clean_line) return '\n'.join(result) @app.route('/', methods=['GET', 'POST']) def index(): processed_text = "" input_text = "" current_endpoint = "/" if request.method == 'POST': input_text = request.form.get('input_text', '') processed_text = process_ssml_text(input_text) return render_template('index.html', processed_text=processed_text, input_text=input_text, current_endpoint=current_endpoint) @app.route('/old', methods=['GET', 'POST']) def old_index(): processed_text = "" input_text = "" current_endpoint = "/old" if request.method == 'POST': input_text = request.form.get('input_text', '') processed_text = process_old_ssml_text(input_text) return render_template('index.html', processed_text=processed_text, input_text=input_text, current_endpoint=current_endpoint) if __name__ == '__main__': app.run(debug=True) # Wrap Flask app with ASGI adapter for Uvicorn/Hugging Face Spaces compatibility asgi_app = WsgiToAsgi(app)