Skip to content
Snippets Groups Projects
text_processor2.py 5.48 KiB
import codecs
import json

def text_process(arr):
    new_arr = []
    new_arr.append(f"## **{arr.pop(0)}**")

    for _ in range(4):
        del arr[0]

    stek = []
    p = False
    li_c = False
    li = False
    li_c2 = False
    for s in arr:
        if "Пример" in s:
            if p:
                new_arr.append(f"|||{'<br>'.join(stek).rstrip('<br>')}")
            else:
                new_arr.append("<br>".join(stek).rstrip("<br>"))
            p = True
            stek = []
            new_arr.append(f"### **{s}**")
        elif p:
            if s == "Ввод\tВывод":
                if stek:
                    new_arr.append(f"|||{'<br>'.join(stek).rstrip('<br>')}")
                    new_arr.append("<br>".join(stek).rstrip("<br>"))
                    stek = []
                new_arr.append("|Ввод |Вывод|")
                new_arr.append("|-----|-----|")
            else:
                stek.append(s)
        elif s == "Формат ввода" or s == "Формат вывода" or s == "Примечание":
            new_arr.append("<br>".join(stek).rstrip("<br>"))
            stek = []
            new_arr.append(f"### **{s}**")
        else:
            if s and s[-1] == ":":
                li_c = True
                stek.append(s)
            elif li_c:
                li_c = False
                if s == "":
                    li = True
                    new_arr.append("<br>".join(stek) + "<br>")
                    stek = []
            elif li:
                if not li_c2:
                    if s[-1] == ";":
                        li_c2 = True
                    else:
                        li = False
                        stek.append(s)
                if li_c2:
                    new_arr.append(f"* {s}")
                    if s[-1] == ".":
                        li = False
                        new_arr.append("")
                        li_c2 = False
            else:
                stek.append(s)
            
    new_arr.append(f"|||{'<br>'.join(stek[:-1]).rstrip('<br>')}")

    input_count = stek[-1]
    if input_count != "_":
        input_count = int(input_count)

    for i in range(len(new_arr)):
        if new_arr[i][:3] == "|||":
            data = new_arr[i][3:].split("<br>")
            if input_count == "_":
                data = f"|{'<br>'.join(data)}||"
            elif input_count > 0:
                if 2 * input_count > len(data):
                    data = f"|{'<br>'.join(data[:input_count])}|{'<br>'.join(data[input_count:])}<br>{'<br>'.join([' '] * (2 * input_count - len(data)))}<br>|"
                elif 2 * input_count == len(data):
                    data = f"|{'<br>'.join(data[:input_count])}|{'<br>'.join(data[input_count:])}|"
                else:
                    data = f"|{'<br>'.join(data[:input_count])}<br>{'<br>'.join([' '] * (len(data) - 2 * input_count))}<br>|{'<br>'.join(data[input_count:])}<br>|"
            else:
                if -2 * input_count > len(data):
                    data = f"|{'<br>'.join(data[:len(data) + input_count])}<br>{'<br>'.join([' '] * (-2 * input_count - len(data)))}<br>|{'<br>'.join(data[:-1 * input_count])}|"
                elif -2 * input_count == len(data):
                    data = f"|{'<br>'.join(data[:-1 * input_count])}|{'<br>'.join(data[-1 * input_count:])}|"
                else:
                    data = f"|{'<br>'.join(data[:len(data) + input_count])}|{'<br>'.join(data[len(data) + input_count:])}<br>{'<br>'.join([' '] * (len(data) - -2 * input_count))}<br>|"


            new_arr[i] = data

    for i in range(len(new_arr)):
        if new_arr[i] and (new_arr[i][0] == "|" or new_arr[i][0] == "#"):
            continue
        elems = new_arr[i].split("<br>")
        del_ind = []
        for j in range(len(elems) - 1):
            if len(elems[j]) == 1 and elems[j] == elems[j + 1][0]:
                del_ind.append(j)
        
        if del_ind:
            for j in del_ind[::-1]:
                if j:
                    buff = elems.pop(j + 1)
                    elems[j - 1] = elems[j - 1] + "$" + buff[0] + "$" + buff[1:]
                del elems[j]
                
        new_arr[i] = "<br>".join(elems)

    return new_arr




f = codecs.open("2.4/24.ipynb", 'r', encoding="utf-8")
source = f.read()
y = json.loads(source)
f.close()

inp_data = open("md.txt", encoding="utf-8")

arr = []
tarr = []
for i in inp_data:
    if i == "/py\n":
        arr.append(tarr)
        tarr = []
    elif i == "/md\n":
        arr.append(tarr)
        tarr = []
    else:
        tarr.append(i.strip("\n"))
arr.append(tarr)
del arr[0]



data = {'cells':[],
        'metadata': {'kernelspec': {'display_name': 'Python 3', 'language': 'python', 'name': 'python3'},
                      'language_info': {'name': 'python', 'version': '3.11.1'}},
        'nbformat': 4,
        'nbformat_minor': 2}

print(*arr, sep="\n")
for i in range(len(arr)):
    if i % 2 == 0:
        py_data = {'cell_type': 'markdown',
                   'metadata': {},
                   'source': [],}
        new_arr = text_process(arr[i])
        for s in new_arr:
            py_data['source'] += [s]
    else:
        py_data = {'cell_type': 'code',
                   'execution_count': None,
                   'metadata': {},
                   'outputs': [],
                   'source': [],}
        for s in arr[i]:
            py_data['source'] += [s]
        
    data['cells'] += [py_data]



with open('output.ipynb', 'w') as file:
    # Write the JSON data to the file
    json.dump(data, file)
file.close()