File size: 2,634 Bytes
e8c87b8
 
 
 
0ebae9a
e8c87b8
 
 
0ebae9a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e8c87b8
 
0ebae9a
 
 
e8c87b8
 
 
0ebae9a
 
 
 
 
e8c87b8
 
 
 
 
 
 
 
0ebae9a
 
 
 
 
e8c87b8
0ebae9a
 
 
 
 
 
 
 
 
e8c87b8
 
0ebae9a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import gradio as gr
from converter import MarkdownToDocxConverter
from datetime import datetime
import os
import requests

converter = MarkdownToDocxConverter()

def convert_markdown_to_docx(markdown_text: str, file_input: str, url_input: str):
    # Приоритет: URL > Файл > Текст
    if url_input:
        try:
            response = requests.get(url_input)
            response.raise_for_status()
            # Пытаемся получить "сырое" содержимое для таких сайтов, как GitHub Gist
            if "gist.github.com" in url_input and not url_input.endswith("/raw"):
                raw_url = url_input + "/raw"
                response = requests.get(raw_url)
                response.raise_for_status()
            markdown_text = response.text
        except requests.exceptions.RequestException as e:
            raise gr.Error(f"Ошибка при скачивании файла по URL: {e}")
    elif file_input:
        with open(file_input.name, "r", encoding='utf-8') as file:
            markdown_text = file.read()

    if not markdown_text.strip():
        raise gr.Error("Нет входных данных для конвертации. Введите текст, загрузите файл или укажите URL.")

    output_dir = "output"
    os.makedirs(output_dir, exist_ok=True)
    output_filename = f"output_{datetime.now().strftime('%Y%m%d_%H%M%S')}.docx"
    output_path = os.path.join(output_dir, output_filename)
    
    converter.convert(markdown_text, output_path)
    
    return output_path

demo = gr.Blocks(title="Markdown to DOCX Converter")

with demo:
    gr.Markdown("# Markdown to DOCX Converter")
    with gr.Row():
        with gr.Column():
            with gr.Tab("Текст"):
                markdown_input = gr.TextArea(label="Markdown Input", value="", lines=15)
            with gr.Tab("Файл"):
                file_input = gr.File(label="Загрузите Markdown файл")
            with gr.Tab("URL"):
                url_input = gr.Textbox(label="Введите URL Markdown файла", placeholder="https://gist.github.com/...")
        with gr.Column():
            gr.Markdown("### Результат")
            docx_output = gr.File(label="Скачать DOCX")
            
    convert_button = gr.Button("Конвертировать", variant="primary")
    convert_button.click(
        convert_markdown_to_docx,
        inputs=[markdown_input, file_input, url_input],
        outputs=docx_output
    )

if __name__ == "__main__":
    demo.launch(server_name="0.0.0.0", server_port=8010)