| import re | |
| import streamlit as st | |
| from ui.Component import side_bar_links | |
| st.set_page_config( | |
| page_title='工具箱', | |
| page_icon='🔨', | |
| layout='wide', | |
| ) | |
| with st.sidebar: | |
| side_bar_links() | |
| st.title("格式化工具") | |
| def re_format(origin_str: str) -> str: | |
| new_str = origin_str.replace('\r', '').replace('\n', '').replace('', '①').replace('', '②').replace('', '③') | |
| matches = re.findall(r'\[\s*\d+(?:,\s*\d+)*]', new_str) | |
| for match in matches: | |
| match_str: str = match | |
| new_ref = ''.join([ | |
| f"[^{ind.replace(' ', '')}]" | |
| for ind in match_str.replace('[', '').replace(']', '').split(',') | |
| ]) | |
| new_str = new_str.replace(match, new_ref) | |
| matches = re.findall(r'\[\s*\d+(?:-\s*\d+)*]', new_str) | |
| for match in matches: | |
| match_str: str = match | |
| match_str = match_str.replace('[', '').replace(']', '') | |
| a = int(match_str.split('-')[0].strip()) | |
| b = int(match_str.split('-')[-1].strip()) | |
| new_ref = ''.join([ | |
| f'[^{i}]' | |
| for i in range(a, b + 1) | |
| ]) | |
| new_str = new_str.replace(match, new_ref) | |
| return new_str | |
| col1, col2 = st.columns([1, 1], gap="medium") | |
| if 'markdown_text' not in st.session_state: | |
| st.session_state.markdown_text = '' | |
| with col1.container(height=520, border=True): | |
| st.markdown(st.session_state.markdown_text) | |
| with col2: | |
| st.code(st.session_state.markdown_text, language='markdown') | |
| if prompt := st.chat_input(): | |
| response = re_format(prompt) | |
| st.session_state.markdown_text = response | |
| st.rerun() | |