rupython 1.0.11__tar.gz → 1.1.0__tar.gz

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.
@@ -1,19 +1,29 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rupython
3
- Version: 1.0.11
3
+ Version: 1.1.0
4
4
  Summary: Исполнитель кода Русского Питона
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
7
7
 
8
- Русская версия языка Python, реализованная в виде транслятора кода в код Python. Транслятор устанавливается как пакет соответствующей командой:
9
-
10
- `pip install rupython`
8
+ Русская версия языка Python, реализованная в виде транслятора кода в код Python.
11
9
 
12
10
  Русский Питон почти полностью идентичен оригинальному языку с англоязычной лексической базой, основное отличие заключается в использовании русских названий для именования сущностей в коде. Данный инструмент создан для достижения двух целей:
13
11
 
14
12
  * Повышение производительности труда работников, выполняющих задачи автоматизации процессов и формализации алгоритмов, за счёт применения лексики на родном им языке, что априори повышает усвоение и читаемость кода.
15
13
  * Упрощение освоения навыков алгоритмизации и составления компьютерных программ учащимися путём устранения искусственного препятствия в виде необходимости оперировать лексикой иностранного языка.
16
14
 
15
+ Приложения на Русском Питоне могут использовать все возможности оригинального Python, включая всё богатство подключаемых пакетов и библиотек. Код может быть написан на обоих вариантах языка.
16
+
17
+ ### Установка
18
+
19
+ Транслятор устанавливается как пакет соответствующей командой:
20
+
21
+ `pip install rupython`
22
+
23
+ Если "pip" выдаёт ошибку "externally-managed-environment" (под некоторыми версиями ОС Linux), то установка производится следущей командой:
24
+
25
+ `pip install rupython --break-system-packages`
26
+
17
27
  Код модулей Русского Питона размещается в файлах с расширением **.крп**. Для интеграции в операционную систему необходимо ассоциировать эти файлы с транслятором. Например, для ОС Windows это выполняется следующими консольными командами:
18
28
 
19
29
  ```
@@ -21,8 +31,6 @@ assoc .крп = "Код на Русском Питоне"
21
31
  ftype "Код на Русском Питоне"=py -m rupython "%%1" %%*
22
32
  ```
23
33
 
24
- Приложения на Русском Питоне могут использовать все возможности оригинального Python, включая всё богатство подключаемых пакетов и библиотек. Код может быть написан на обоих вариантах языка.
25
-
26
34
  Исходный код размещён тут: https://github.com/russkiy/rupython
27
35
 
28
36
  ### Примеры кода
@@ -1,19 +1,22 @@
1
- Metadata-Version: 2.1
2
- Name: rupython
3
- Version: 1.0.11
4
- Summary: Исполнитель кода Русского Питона
5
- Description-Content-Type: text/markdown
6
- License-File: LICENSE
7
-
8
- Русская версия языка Python, реализованная в виде транслятора кода в код Python. Транслятор устанавливается как пакет соответствующей командой:
9
-
10
- `pip install rupython`
1
+ Русская версия языка Python, реализованная в виде транслятора кода в код Python.
11
2
 
12
3
  Русский Питон почти полностью идентичен оригинальному языку с англоязычной лексической базой, основное отличие заключается в использовании русских названий для именования сущностей в коде. Данный инструмент создан для достижения двух целей:
13
4
 
14
5
  * Повышение производительности труда работников, выполняющих задачи автоматизации процессов и формализации алгоритмов, за счёт применения лексики на родном им языке, что априори повышает усвоение и читаемость кода.
15
6
  * Упрощение освоения навыков алгоритмизации и составления компьютерных программ учащимися путём устранения искусственного препятствия в виде необходимости оперировать лексикой иностранного языка.
16
7
 
8
+ Приложения на Русском Питоне могут использовать все возможности оригинального Python, включая всё богатство подключаемых пакетов и библиотек. Код может быть написан на обоих вариантах языка.
9
+
10
+ ### Установка
11
+
12
+ Транслятор устанавливается как пакет соответствующей командой:
13
+
14
+ `pip install rupython`
15
+
16
+ Если "pip" выдаёт ошибку "externally-managed-environment" (под некоторыми версиями ОС Linux), то установка производится следущей командой:
17
+
18
+ `pip install rupython --break-system-packages`
19
+
17
20
  Код модулей Русского Питона размещается в файлах с расширением **.крп**. Для интеграции в операционную систему необходимо ассоциировать эти файлы с транслятором. Например, для ОС Windows это выполняется следующими консольными командами:
18
21
 
19
22
  ```
@@ -21,8 +24,6 @@ assoc .крп = "Код на Русском Питоне"
21
24
  ftype "Код на Русском Питоне"=py -m rupython "%%1" %%*
22
25
  ```
23
26
 
24
- Приложения на Русском Питоне могут использовать все возможности оригинального Python, включая всё богатство подключаемых пакетов и библиотек. Код может быть написан на обоих вариантах языка.
25
-
26
27
  Исходный код размещён тут: https://github.com/russkiy/rupython
27
28
 
28
29
  ### Примеры кода
@@ -1,43 +1,19 @@
1
- from ctypes import c_char, pythonapi, py_object
1
+ import gc
2
+ import ctypes
3
+
2
4
  import sys as Система
3
5
  import os as ОС
4
6
 
5
7
  from _io import BufferedReader, BufferedWriter, TextIOWrapper
6
8
 
7
- Адреса_памяти_классов = {}
8
-
9
- def Добавить_поле(класс, название, значение, функция = True):
10
- def Получить_память(где):
11
- if где in Адреса_памяти_классов: return Адреса_памяти_классов[где]
12
- else:
13
- адрес = memoryview((c_char * type(где).__sizeof__(где)).from_address(id(где))).cast('c').cast('P')
14
- Адреса_памяти_классов[где] = адрес
15
- return адрес
16
-
17
- def Установить_поле(класс, поле, значение):
18
- смещение_флагов = [*Получить_память(int)].index(int.__flags__)
19
- флаги = класс.__flags__
20
- память_класса = Получить_память(класс)
21
- if Система.version_info[0:2] <= (3, 9): память_класса[смещение_флагов] |= 1 << 9
22
- elif Система.version_info[0:2] >= (3, 10): память_класса[смещение_флагов] &= ~(1 << 8)
23
- setattr(класс, поле, значение)
24
- память_класса[смещение_флагов] = флаги
25
- pythonapi.PyType_Modified(py_object(класс))
26
-
27
- def Новая_функция(функция, **параметры):
28
- код = функция.__code__
29
- копия = type(функция)(
30
- код.replace(co_consts = код.co_consts + tuple((ключ, значение) for ключ, значение in параметры.items())),
31
- функция.__globals__,
32
- name=функция.__name__,
33
- closure=функция.__closure__
34
- )
35
- копия.__defaults__ = функция.__defaults__
36
- копия.__kwdefaults__ = функция.__kwdefaults__
37
- копия.__qualname__ = функция.__qualname__
38
- return копия
39
-
40
- Установить_поле(класс, название, Новая_функция(значение) if функция else значение)
9
+ def Установить_поле(класс, атрибут, значение):
10
+ сл = gc.get_referents(класс.__dict__)[0]
11
+ сл[атрибут] = значение
12
+ if callable(значение):
13
+ сл[атрибут].__name__ = значение.__name__
14
+ сл[атрибут].__qualname__ = значение.__qualname__
15
+ сл[атрибут].__kwdefaults__ = значение.__kwdefaults__
16
+ ctypes.pythonapi.PyType_Modified(ctypes.py_object(класс))
41
17
 
42
18
  Встроенные_поля = {
43
19
  ('str', 'bytes', 'bytearray'): {
@@ -75,7 +51,11 @@ def Добавить_поле(класс, название, значение, ф
75
51
  'rjust': 'Дополнить_слева'
76
52
  },
77
53
  'str': {
78
- 'format': 'Формат'
54
+ 'format': 'Формат',
55
+ 'encode': 'Закодовать'
56
+ },
57
+ ('bytes', 'bytearray'): {
58
+ 'decode': 'Раскодовать'
79
59
  },
80
60
  ('list', 'bytearray'): {
81
61
  'append': 'Добавить',
@@ -133,7 +113,7 @@ def Добавить_поле(класс, название, значение, ф
133
113
  },
134
114
  'int': {
135
115
  'bit_length': 'Длина_в_битах',
136
- 'to_bytes': ( 'В_байты', { 'length': 'длина', 'byteorder': 'порядок', 'signed': 'со_знаком' }, { (1, 'byteorder'): { 'МлСт': 'little', 'СтМл': 'big' } } ),
116
+ 'to_bytes': ( 'В_байты', { 'length': 'длина', 'byteorder': 'порядок', 'signed': 'со_знаком' }, { (2, 'byteorder'): { 'МлСт': 'little', 'СтМл': 'big' } } ),
137
117
  'from_bytes': ( 'Из_байтов', { 'bytes': 'байты', 'byteorder': 'порядок', 'signed': 'со_знаком' }, { (1, 'byteorder'): { 'МлСт': 'little', 'СтМл': 'big' } } ),
138
118
  '.numerator': 'числитель',
139
119
  '.denominator': 'знаменатель'
@@ -182,27 +162,38 @@ for классы, таблица in Встроенные_поля.items():
182
162
  замещающая_функция += ' ИА["' + зам_арг[1] + '"] = ' + str(знач_зам) + '[ИА["' + зам_арг[1] + '"]]\n'
183
163
  замещающая_функция += ' return ' + класс + '.' + название + '(*ПА, **ИА)'
184
164
  exec(замещающая_функция)
185
- exec("Добавить_поле(" + класс + ", '" + замена[0] + "', __" + класс + "_" + название + "__)")
165
+ exec("Установить_поле(" + класс + ", '" + замена[0] + "', __" + класс + "_" + название + "__)")
186
166
  exec('del __' + класс + '_' + название + '__')
187
167
  else:
188
168
  if название[0] == '.':
189
- eval("Добавить_поле(" + класс + ", '" + замена + "', " + класс + название + ", False)")
169
+ eval("Установить_поле(" + класс + ", '" + замена + "', " + класс + название + ")")
190
170
  else:
191
- eval("Добавить_поле(" + класс + ", '" + замена + "', lambda *ПА, **ИА: " + класс + "." + название + "(*ПА, **ИА))")
171
+ eval("Установить_поле(" + класс + ", '" + замена + "', lambda *ПА, **ИА: " + класс + "." + название + "(*ПА, **ИА))")
192
172
 
193
173
  Система.path.insert(0, ОС.path.dirname(__file__) + '/Модули')
194
174
 
175
+ def Заменить_преобразование_в_строку(класс, функция):
176
+ class Объект_типа(ctypes.Structure): pass
177
+ Объект_типа._fields_ = [
178
+ ('', ctypes.c_ssize_t * 17), ('tp_str', ctypes.CFUNCTYPE(ctypes.py_object, ctypes.py_object))
179
+ ]
180
+ def Выполнить(класс, функция):
181
+ ф = ctypes.CFUNCTYPE(ctypes.py_object, ctypes.py_object)(функция)
182
+ Объект_типа._fields_.append(ф)
183
+ setattr(Объект_типа.from_address(id(класс)), 'tp_str', Объект_типа._fields_[-1])
184
+ Выполнить(класс, функция)
185
+
195
186
  Обёртка__Вещ_в_стр = lambda здесь: Вещ_в_стр(здесь).replace('.', ',').replace('inf', 'Бскн')
196
187
  Вещ_в_стр = float.__str__
197
- Добавить_поле(float, '__str__', Обёртка__Вещ_в_стр)
188
+ Заменить_преобразование_в_строку(float, Обёртка__Вещ_в_стр)
198
189
 
199
190
  Обёртка__Логич_в_стр = lambda здесь: Логич_в_стр(здесь).replace('True', 'Да').replace('False', 'Нет')
200
191
  Логич_в_стр = bool.__str__
201
- Добавить_поле(bool, '__str__', Обёртка__Логич_в_стр)
192
+ Заменить_преобразование_в_строку(bool, Обёртка__Логич_в_стр)
202
193
 
203
194
  Обёртка__Пусто_в_стр = lambda здесь: Пусто_в_стр(здесь).replace('None', 'Пусто')
204
195
  Пусто_в_стр = type(None).__str__
205
- Добавить_поле(type(None), '__str__', Обёртка__Пусто_в_стр)
196
+ Заменить_преобразование_в_строку(type(None), Обёртка__Пусто_в_стр)
206
197
 
207
198
  def Проверить_существование(код, местн, общ):
208
199
  try: eval(код, местн, общ)
@@ -8,7 +8,7 @@ import importlib as Импортование
8
8
  Служебные_слова = {
9
9
  'Да': 'True',
10
10
  'Нет': 'False',
11
- 'Пусто': 'None',
11
+ 'Пусто': 'None', # Ничего, Неопр
12
12
  'и': 'and',
13
13
  'или': 'or',
14
14
  'не': 'not',
@@ -65,7 +65,7 @@ import importlib as Импортование
65
65
  'ВычВыр': ( 'eval', None, False ),
66
66
  'Двоич': ( 'bin', None, False ),
67
67
  'ДелОст': ( 'divmod', None, False ),
68
- 'Длина': ( 'len', None, False ),
68
+ 'Длина': ( 'len', None, False ), # Размер
69
69
  'Знак_в_код': ( 'ord', None, False ),
70
70
  'Идент': ( 'id', None, False ),
71
71
  'Имеет_поле': ( 'hasattr', None, False ),
@@ -99,8 +99,7 @@ import importlib as Импортование
99
99
  'Поля': ( 'vars', None, False ),
100
100
  'Представление': ( 'repr', None, False ),
101
101
  'Принять': ( 'input', None, False ),
102
- 'Размер': ( 'len', None, False ),
103
- 'Ряд': ( 'range', None, True ),
102
+ 'Ряд': ( 'range', None, True ), # Диапазон, Последов
104
103
  'Свойство': ( 'property', { 'ф_получения': 'fget', 'ф_установки': 'fset', 'ф_удаления': 'fdel', 'документация': 'doc' }, True ),
105
104
  'Следующий': ( 'next', None, False ),
106
105
  'Словарь': ( 'dict', None, True ),
@@ -111,7 +110,7 @@ import importlib as Импортование
111
110
  'Срез': ( 'slice', None, True ),
112
111
  'Статический_метод': ( 'staticmethod', None, False ),
113
112
  'Степень': ( 'pow', None, False ),
114
- 'Строка': ( 'str', { 'кодование': 'encoding', 'при_ошибках': 'errors' }, False ),
113
+ 'Строка': ( 'str', { 'кодование': 'encoding', 'при_ошибках': 'errors' }, True ),
115
114
  'Сумма': ( 'sum', { 'начало': 'start' }, False ),
116
115
  'Тип': ( 'type', None, True ),
117
116
  'Удалить_поле': ( 'delattr', None, False ),
@@ -200,7 +199,7 @@ import importlib as Импортование
200
199
  '__ЛСдвиг__': '__lshift__',
201
200
  '__ПСдвиг__': '__rshift__',
202
201
  '__ПобитИ__': '__and__',
203
- '__ПобитИИли__': '__xor__',
202
+ '__ПобитИсклИли__': '__xor__',
204
203
  '__ПобитИли__': '__or__',
205
204
  '__АрифмОтр__': '__neg__',
206
205
  '__ОдПлюс__': '__pos__',
@@ -218,7 +217,7 @@ import importlib as Импортование
218
217
  '__Прав_ЛСдвиг__': '__rlshift__',
219
218
  '__Прав_ПСдвиг__': '__rrshift__',
220
219
  '__Прав_И__': '__rand__',
221
- '__Прав_ИИли__': '__rxor__',
220
+ '__Прав_ИсклИли__': '__rxor__',
222
221
  '__Прав_Или__': '__ror__',
223
222
  '__Присв_Сложение__': '__iadd__',
224
223
  '__Присв_Вычитание__': '__isub__',
@@ -231,7 +230,7 @@ import importlib as Импортование
231
230
  '__Присв_ЛСдвиг__': '__ilshift__',
232
231
  '__Присв_ПСдвиг__': '__irshift__',
233
232
  '__Присв_И__': '__iand__',
234
- '__Присв_ИИли__': '__ixor__',
233
+ '__Присв_ИсклИли__': '__ixor__',
235
234
  '__Присв_Или__': '__ior__',
236
235
  '__Компл__': '__complex__',
237
236
  '__Цел__': '__int__',
@@ -439,19 +438,22 @@ def Проверить_соответствие_слов(слова, путь_к
439
438
 
440
439
  for сл in ('Подключить', 'Если', 'Иначе'):
441
440
  for поз in [i for i, x in enumerate(слова) if x[1] == сл]:
442
- if поз > 0 and слова[поз - 1][1] not in ('\n', '\t'):
441
+ if поз > 0 and слова[поз - 1][0] not in (4, 5, 6):
442
+ print(слова[поз])
443
+ print(слова[поз - 1])
444
+ print(слова)
443
445
  Вывести_исключение(сл); return False
444
446
  сл_ = сл.lower()
445
447
  for поз in [i for i, x in enumerate(слова) if x[1] == сл_]:
446
- if поз == 0 or слова[поз - 1][1] in ('\n', '\t'):
448
+ if поз == 0 or слова[поз - 1][0] in (4, 5, 6):
447
449
  Вывести_исключение(сл_); return False
448
450
 
449
451
  for поз in [i for i, x in enumerate(слова) if x[1] == 'Вернуть']:
450
- if поз == len(слова) - 1 or слова[поз + 1][1] == '\n':
452
+ if поз == len(слова) - 1 or слова[поз + 1][0] == 4:
451
453
  Вывести_исключение('Вернуть'); return False
452
454
 
453
455
  for поз in [i for i, x in enumerate(слова) if x[1] == 'Возврат']:
454
- if поз != len(слова) - 1 and слова[поз + 1][1] != '\n':
456
+ if поз != len(слова) - 1 and слова[поз + 1][0] != 4:
455
457
  Вывести_исключение('Возврат'); return False
456
458
 
457
459
  return True
@@ -1,12 +1,29 @@
1
- Русская версия языка Python, реализованная в виде транслятора кода в код Python. Транслятор устанавливается как пакет соответствующей командой:
1
+ Metadata-Version: 2.1
2
+ Name: rupython
3
+ Version: 1.1.0
4
+ Summary: Исполнитель кода Русского Питона
5
+ Description-Content-Type: text/markdown
6
+ License-File: LICENSE
2
7
 
3
- `pip install rupython`
8
+ Русская версия языка Python, реализованная в виде транслятора кода в код Python.
4
9
 
5
10
  Русский Питон почти полностью идентичен оригинальному языку с англоязычной лексической базой, основное отличие заключается в использовании русских названий для именования сущностей в коде. Данный инструмент создан для достижения двух целей:
6
11
 
7
12
  * Повышение производительности труда работников, выполняющих задачи автоматизации процессов и формализации алгоритмов, за счёт применения лексики на родном им языке, что априори повышает усвоение и читаемость кода.
8
13
  * Упрощение освоения навыков алгоритмизации и составления компьютерных программ учащимися путём устранения искусственного препятствия в виде необходимости оперировать лексикой иностранного языка.
9
14
 
15
+ Приложения на Русском Питоне могут использовать все возможности оригинального Python, включая всё богатство подключаемых пакетов и библиотек. Код может быть написан на обоих вариантах языка.
16
+
17
+ ### Установка
18
+
19
+ Транслятор устанавливается как пакет соответствующей командой:
20
+
21
+ `pip install rupython`
22
+
23
+ Если "pip" выдаёт ошибку "externally-managed-environment" (под некоторыми версиями ОС Linux), то установка производится следущей командой:
24
+
25
+ `pip install rupython --break-system-packages`
26
+
10
27
  Код модулей Русского Питона размещается в файлах с расширением **.крп**. Для интеграции в операционную систему необходимо ассоциировать эти файлы с транслятором. Например, для ОС Windows это выполняется следующими консольными командами:
11
28
 
12
29
  ```
@@ -14,8 +31,6 @@ assoc .крп = "Код на Русском Питоне"
14
31
  ftype "Код на Русском Питоне"=py -m rupython "%%1" %%*
15
32
  ```
16
33
 
17
- Приложения на Русском Питоне могут использовать все возможности оригинального Python, включая всё богатство подключаемых пакетов и библиотек. Код может быть написан на обоих вариантах языка.
18
-
19
34
  Исходный код размещён тут: https://github.com/russkiy/rupython
20
35
 
21
36
  ### Примеры кода
@@ -3,7 +3,7 @@ from pathlib import Path as Путь
3
3
 
4
4
  Установить(
5
5
  name = 'rupython',
6
- version = '1.0.11',
6
+ version = '1.1.0',
7
7
  description = "Исполнитель кода Русского Питона",
8
8
  packages = [ 'rupython', 'rupython.Модули' ],
9
9
  long_description = (Путь(__file__).parent / "README.md").read_text("UTF-8"),
File without changes
File without changes
File without changes