rupython 1.2.1__py3-none-any.whl → 1.2.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
rupython/__main__.py CHANGED
@@ -7,10 +7,24 @@ import sys as Система
7
7
 
8
8
  def Перехватчик_прерывания_клавиатурой(тип_исключения, значение, предыдущие_шаги):
9
9
  if тип_исключения == KeyboardInterrupt: print('\nСработало прерывание клавиатурой.')
10
- else: Система.__excepthook__(тип, значение, предыдущие_шаги)
10
+ else: Система.__excepthook__(тип_исключения, значение, предыдущие_шаги)
11
11
  Система.excepthook = Перехватчик_прерывания_клавиатурой
12
12
 
13
13
  Исходник = Преобразователь.Преобразовать_код(Путь_к_файлу)
14
14
  if Исходник: Преобразователь.Запустить_код(Название_файла, Исходник, Путь_к_файлу)
15
15
 
16
- Преобразователь.Ожидать_нажатие_клавиши('=== Исполнение кода завершено. Нажмите любую клавишу для выхода. ===')
16
+ def Ожидать_нажатие_клавиши(сообщение):
17
+ if ОС.name == 'nt':
18
+ import msvcrt
19
+ print('\n' + сообщение)
20
+ msvcrt.getch()
21
+ else:
22
+ import tty
23
+ import termios
24
+ print('\n' + сообщение)
25
+ fd = Система.stdin.fileno()
26
+ старые_настройки = termios.tcgetattr(fd)
27
+ try: tty.setraw(fd); Система.stdin.read(1)
28
+ finally: termios.tcsetattr(fd, termios.TCSADRAIN, старые_настройки)
29
+
30
+ Ожидать_нажатие_клавиши('=== Исполнение кода завершено. Нажмите любую клавишу для выхода. ===')
@@ -252,7 +252,7 @@ def Перевести_токены(токены):
252
252
  for ключ, значение in Словарь_перевода.items():
253
253
  if '___' in ключ:
254
254
  шаблон = '^' + ключ.replace('___', r'(\S+)') + '$'
255
- совпадение = re.match(шаблон, фраза)
255
+ совпадение = РегВыр.match(шаблон, фраза)
256
256
  if совпадение:
257
257
  переменная = совпадение.group(1).upper()
258
258
  if переменная in Словарь_перевода:
@@ -5,6 +5,7 @@ import os as ОС
5
5
  import sys as Система
6
6
  import importlib as Импортование
7
7
  import re as РегВыр
8
+ from io import StringIO as СтроковыйВВ
8
9
 
9
10
  Служебные_слова = {
10
11
  'Да': 'True',
@@ -362,6 +363,59 @@ def Заменить_встроенные_функции(слова, соотв
362
363
  слова[сч] = (1, соответствие[1][слова[сч][1]], слова[сч][2])
363
364
  сч += 1
364
365
 
366
+ def Обработать_f_строки(слова, путь_к_файлу):
367
+ номер = 0
368
+ while номер < len(слова):
369
+ if слова[номер][0] == 3 and слова[номер][1].startswith(("f'", 'f"')):
370
+ отступов = слова[номер][2]
371
+ исходная_строка = слова[номер][1]
372
+ префикс = 'f' if исходная_строка.startswith('f') else исходная_строка[0]
373
+ кавычка = исходная_строка[1]
374
+ содержимое = исходная_строка[2:-1] if исходная_строка.endswith(кавычка) else исходная_строка[2:]
375
+ новые_токены = []
376
+ поз = 0
377
+ while поз < len(содержимое):
378
+ if поз + 1 < len(содержимое) and содержимое[поз:поз+2] == '{{':
379
+ новые_токены.append((3, '{{', отступов))
380
+ поз += 2
381
+ elif поз + 1 < len(содержимое) and содержимое[поз:поз+2] == '}}':
382
+ новые_токены.append((3, '}}', отступов))
383
+ поз += 2
384
+ elif содержимое[поз] == '{':
385
+ уровень_скобок = 1
386
+ нач_поз = поз + 1
387
+ поз += 1
388
+ while поз < len(содержимое) and уровень_скобок > 0:
389
+ if содержимое[поз] == '{':
390
+ уровень_скобок += 1
391
+ elif содержимое[поз] == '}':
392
+ уровень_скобок -= 1
393
+ поз += 1
394
+ if уровень_скобок != 0:
395
+ искл = SyntaxError('Незакрытое выражение в f-строке')
396
+ Вывести_текст_исключения(искл, 'при разборе f-строки', путь_к_файлу)
397
+ выражение = содержимое[нач_поз:поз-1]
398
+ try:
399
+ токены_выражения = list(Разборщик_слов.generate_tokens(СтроковыйВВ(выражение).readline))
400
+ токены_выражения = [(ток.type, ток.string, отступов) for ток in токены_выражения if ток.type != Разборщик_слов.ENDMARKER]
401
+ Выполнить_основные_замены(токены_выражения, Служебные_слова)
402
+ Выполнить_основные_замены(токены_выражения, Специальные_названия)
403
+ Выполнить_основные_замены(токены_выражения, Исключения)
404
+ Заменить_встроенные_функции(токены_выражения, Встроенные_функции)
405
+ выражение_текст = Разборщик_слов.untokenize((ток[0], ток[1]) for ток in токены_выражения if ток[0] not in (4, 5, 6)).strip()
406
+ новые_токены.append((3, '{' + выражение_текст + '}', отступов))
407
+ except Exception as ошибка:
408
+ Вывести_текст_исключения(ошибка, 'при разборе выражения в f-строке', путь_к_файлу)
409
+ else:
410
+ нач_поз = поз
411
+ while поз < len(содержимое) and содержимое[поз] not in ['{', '}']:
412
+ поз += 1
413
+ if нач_поз != поз:
414
+ новые_токены.append((3, содержимое[нач_поз:поз], отступов))
415
+ новая_строка = f"f{кавычка}{''.join(ток[1] for ток in новые_токены)}{кавычка}"
416
+ слова[номер] = (3, новая_строка, отступов)
417
+ номер += 1
418
+
365
419
  def Посчитать_номер_строки(слова, позиция):
366
420
  переводов = 0
367
421
  for сч in range(позиция):
@@ -466,7 +520,7 @@ def Преобразовать_код(путь_к_файлу):
466
520
  слова = list(Прочитать_слова(файл.readline, путь_к_файлу))
467
521
  if not Проверить_соответствие_слов(слова, путь_к_файлу): return
468
522
 
469
- # обрабатываем импорты
523
+ # Обрабатываем импорты
470
524
  импорты = []
471
525
  строки_импорта = []
472
526
  for поз in [i for i, x in enumerate(слова) if x[1] == 'Подключить' or x[1] == 'подключить']:
@@ -492,10 +546,12 @@ def Преобразовать_код(путь_к_файлу):
492
546
  импорты.append(импорт)
493
547
  for импорт in импорты: Обработать_импорт(импорт, путь_к_файлу)
494
548
 
549
+ # Выполняем замены
495
550
  Выполнить_основные_замены(слова, Служебные_слова)
496
551
  Выполнить_основные_замены(слова, Специальные_названия)
497
552
  Выполнить_основные_замены(слова, Исключения)
498
553
  Заменить_встроенные_функции(слова, Встроенные_функции)
554
+ Обработать_f_строки(слова, путь_к_файлу)
499
555
 
500
556
  # Обрабатываем цикл со счётчиком
501
557
  сдвиг = 0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rupython
3
- Version: 1.2.1
3
+ Version: 1.2.2
4
4
  Summary: Исполнитель кода Русского Питона
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
@@ -0,0 +1,12 @@
1
+ rupython/__main__.py,sha256=5CE287LA_5R1pXymB5T0r9pk5QD9meo4_qnQTbgvxKA,1719
2
+ rupython/__Заголовочный_код__.py,sha256=VWghfQc6dv9lwIeQvJotpdOlBtHZeN00NBeL4RdWloA,10998
3
+ rupython/Преобразователь.py,sha256=-0oxZb63T3s50sT-0jiH3cA4KqRs3qVpaGsfSyAb8TY,47550
4
+ rupython/Модули/БД.py,sha256=ypjYa-9s0wO1Y_nXRiyiS80F_TStRlsSHRpisBWMT4g,23957
5
+ rupython/Модули/Матем.py,sha256=d8ekm7GJreu7LJ9KmAKcTOciIUQ-VBI567BfK_QeLSc,3587
6
+ rupython/Модули/РегВыр.py,sha256=yeXYfeDF2qw4DSKVdZVSFInMUW52U7Nq_KOJKvm4XnM,6349
7
+ rupython/Модули/Случ.py,sha256=oeVdSdFVb4X_T-nX2P7NSIhise1zUPIS4lk7h-67XSg,2689
8
+ rupython-1.2.2.dist-info/LICENSE,sha256=iWzdt1wyTlK8qNSu7TzK8pjjIcCvLvWHycp7ACRcWEc,59
9
+ rupython-1.2.2.dist-info/METADATA,sha256=c7xdKMa8k7PQcFNS_fZ74jhoLFY1t5xqyL9s4h4RQdk,27473
10
+ rupython-1.2.2.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
11
+ rupython-1.2.2.dist-info/top_level.txt,sha256=GtXaS8JTsBm5hpQxxtQlrxK6rExvSAK_Cp44FrY4210,9
12
+ rupython-1.2.2.dist-info/RECORD,,
@@ -1,12 +0,0 @@
1
- rupython/__main__.py,sha256=fBgJ_gMHKBOIoZZIyLDecfjuOWxIwb5N0xEphsWUUvw,1183
2
- rupython/__Заголовочный_код__.py,sha256=VWghfQc6dv9lwIeQvJotpdOlBtHZeN00NBeL4RdWloA,10998
3
- rupython/Преобразователь.py,sha256=JHdyCJWRBZxxm-kzBBW_pGobWJZxVaewBDdfUU2Av8E,42957
4
- rupython/Модули/БД.py,sha256=ZgMDbvr7Q_oYY4qQVyOo7VaDjeSYRwdX8rn7Ur7SbR0,23947
5
- rupython/Модули/Матем.py,sha256=d8ekm7GJreu7LJ9KmAKcTOciIUQ-VBI567BfK_QeLSc,3587
6
- rupython/Модули/РегВыр.py,sha256=yeXYfeDF2qw4DSKVdZVSFInMUW52U7Nq_KOJKvm4XnM,6349
7
- rupython/Модули/Случ.py,sha256=oeVdSdFVb4X_T-nX2P7NSIhise1zUPIS4lk7h-67XSg,2689
8
- rupython-1.2.1.dist-info/LICENSE,sha256=iWzdt1wyTlK8qNSu7TzK8pjjIcCvLvWHycp7ACRcWEc,59
9
- rupython-1.2.1.dist-info/METADATA,sha256=acR1BOTh-XzBZrBWBinn1-lBcFe5TrDhTbUCU7xxs-E,27473
10
- rupython-1.2.1.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
11
- rupython-1.2.1.dist-info/top_level.txt,sha256=GtXaS8JTsBm5hpQxxtQlrxK6rExvSAK_Cp44FrY4210,9
12
- rupython-1.2.1.dist-info/RECORD,,