mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-21 09:45:53 +03:00
feat(meta-compile,meta-edit,form-compile,form-edit,mxl-compile,skd-compile,skd-edit): вывод meta-info принимается на входе
Вывод читающего навыка модель несёт обратно в компилятор, а тот его не понимал. Из 41 метки, которую печатает meta-info, в словаре typeSynonyms не было 33: «ДокументОбъект.Заказ» из источников подписки meta-compile отвергал с «Неизвестный тип», хотя сам же печатал эту форму через meta-info. Не принимались и «ПВХСсылка.ВидыСубконто», и «Характеристика.Виды» — при том что Characteristic.Xxx описан в спеке как штатная форма DSL. Добавлены русские имена объектных типов, менеджеров и наборов записей. Аббревиатуры (ПВХ/ПВР, РС/РН/РБ/РР) приняты наравне с полными именами: вывод навыка сокращает долгие виды, чтобы в списке на сорок реквизитов не терялось имя объекта, и раз он их печатает — обязан принимать. В Resolve-TypeStr снимаются хвосты, которые дописывает глоссарий meta-info: суффикс «(все)», счётчик «— типов: N» и раскрытие после стрелки. Срезаются только эти известные формы — круглые скобки заняты параметризованными типами вроде Число(15,2), слепой срез сломал бы их. Функция под гардом check-inline-drift, поэтому правка синхронна во всех семи навыках и обоих портах. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
7cbc8e9b7f
commit
74e88e75c2
@@ -1,4 +1,4 @@
|
|||||||
# form-compile v1.198 — Compile 1C managed form from JSON or object metadata (гвард на группу additionalColumns без ключа columns)
|
# form-compile v1.199 — Compile 1C managed form from JSON or object metadata
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
[CmdletBinding(PositionalBinding=$false)]
|
[CmdletBinding(PositionalBinding=$false)]
|
||||||
param(
|
param(
|
||||||
@@ -2496,6 +2496,17 @@ function Resolve-TypeStr {
|
|||||||
$typeStr = $typeStr.Substring($typeStr.IndexOf(':') + 1)
|
$typeStr = $typeStr.Substring($typeStr.IndexOf(':') + 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Хвосты, которые дописывает вывод meta-info к множествам типов: суффикс обобщённого метатипа
|
||||||
|
# и счётчик состава. Копипаста строки оттуда — обычный путь, поэтому хвост снимаем молча.
|
||||||
|
# Срезаем ТОЛЬКО эти известные формы: круглые скобки заняты параметризованными типами
|
||||||
|
# (Число(15,2)), слепой срез скобок сломал бы их.
|
||||||
|
$typeStr = ($typeStr -replace '\s*\((?:все|all)\)\s*$', '').Trim()
|
||||||
|
$typeStr = ($typeStr -replace '\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '').Trim()
|
||||||
|
$typeStr = ($typeStr -replace '\s*\((?:типов|types):\s*\d+\)\s*$', '').Trim()
|
||||||
|
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||||
|
# раскрытие справа — берём левую часть, она и есть тип.
|
||||||
|
if ($typeStr -match '^(.+?)\s*(?:→|->)\s*.+$') { $typeStr = $Matches[1].Trim() }
|
||||||
|
|
||||||
# Параметризованные типы: Number(15,2), Строка(100)
|
# Параметризованные типы: Number(15,2), Строка(100)
|
||||||
if ($typeStr -match '^([^(]+)\((.+)\)$') {
|
if ($typeStr -match '^([^(]+)\((.+)\)$') {
|
||||||
$baseName = $Matches[1].Trim()
|
$baseName = $Matches[1].Trim()
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# form-compile v1.198 — Compile 1C managed form from JSON or object metadata (гвард на группу additionalColumns без ключа columns)
|
# form-compile v1.199 — Compile 1C managed form from JSON or object metadata
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
import argparse
|
import argparse
|
||||||
import copy
|
import copy
|
||||||
@@ -3908,6 +3908,18 @@ def resolve_type_str(type_str):
|
|||||||
type_str = type_str[4:]
|
type_str = type_str[4:]
|
||||||
elif '.' in type_str and re.match(r'^d\d+p\d+:', type_str):
|
elif '.' in type_str and re.match(r'^d\d+p\d+:', type_str):
|
||||||
type_str = type_str[type_str.index(':') + 1:]
|
type_str = type_str[type_str.index(':') + 1:]
|
||||||
|
# Хвосты, которые дописывает вывод meta-info к множествам типов: суффикс обобщённого метатипа
|
||||||
|
# и счётчик состава. Копипаста строки оттуда — обычный путь, поэтому хвост снимаем молча.
|
||||||
|
# Срезаем ТОЛЬКО эти известные формы: круглые скобки заняты параметризованными типами
|
||||||
|
# (Число(15,2)), слепой срез скобок сломал бы их.
|
||||||
|
type_str = re.sub(r'\s*\((?:все|all)\)\s*$', '', type_str).strip()
|
||||||
|
type_str = re.sub(r'\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '', type_str).strip()
|
||||||
|
type_str = re.sub(r'\s*\((?:типов|types):\s*\d+\)\s*$', '', type_str).strip()
|
||||||
|
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||||
|
# раскрытие справа — берём левую часть, она и есть тип.
|
||||||
|
m = re.match(r'^(.+?)\s*(?:→|->)\s*.+$', type_str)
|
||||||
|
if m:
|
||||||
|
type_str = m.group(1).strip()
|
||||||
# Параметризованные типы: Number(15,2), Строка(100)
|
# Параметризованные типы: Number(15,2), Строка(100)
|
||||||
m = re.match(r'^([^(]+)\((.+)\)$', type_str)
|
m = re.match(r'^([^(]+)\((.+)\)$', type_str)
|
||||||
if m:
|
if m:
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# form-edit v1.18 — Edit 1C managed form elements (+esc_xml/esc_xml_text: разное экранирование атрибута и текста)
|
# form-edit v1.19 — Edit 1C managed form elements
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
[CmdletBinding(PositionalBinding=$false)]
|
[CmdletBinding(PositionalBinding=$false)]
|
||||||
param(
|
param(
|
||||||
@@ -403,6 +403,17 @@ function Resolve-TypeStr {
|
|||||||
$typeStr = $typeStr.Substring($typeStr.IndexOf(':') + 1)
|
$typeStr = $typeStr.Substring($typeStr.IndexOf(':') + 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Хвосты, которые дописывает вывод meta-info к множествам типов: суффикс обобщённого метатипа
|
||||||
|
# и счётчик состава. Копипаста строки оттуда — обычный путь, поэтому хвост снимаем молча.
|
||||||
|
# Срезаем ТОЛЬКО эти известные формы: круглые скобки заняты параметризованными типами
|
||||||
|
# (Число(15,2)), слепой срез скобок сломал бы их.
|
||||||
|
$typeStr = ($typeStr -replace '\s*\((?:все|all)\)\s*$', '').Trim()
|
||||||
|
$typeStr = ($typeStr -replace '\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '').Trim()
|
||||||
|
$typeStr = ($typeStr -replace '\s*\((?:типов|types):\s*\d+\)\s*$', '').Trim()
|
||||||
|
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||||
|
# раскрытие справа — берём левую часть, она и есть тип.
|
||||||
|
if ($typeStr -match '^(.+?)\s*(?:→|->)\s*.+$') { $typeStr = $Matches[1].Trim() }
|
||||||
|
|
||||||
# Параметризованные типы: Number(15,2), Строка(100)
|
# Параметризованные типы: Number(15,2), Строка(100)
|
||||||
if ($typeStr -match '^([^(]+)\((.+)\)$') {
|
if ($typeStr -match '^([^(]+)\((.+)\)$') {
|
||||||
$baseName = $Matches[1].Trim()
|
$baseName = $Matches[1].Trim()
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# form-edit v1.18 — Edit 1C managed form elements (Python port) (+esc_xml/esc_xml_text: разное экранирование атрибута и текста)
|
# form-edit v1.19 — Edit 1C managed form elements (Python port)
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
import argparse
|
import argparse
|
||||||
import json
|
import json
|
||||||
@@ -530,6 +530,18 @@ def resolve_type_str(type_str):
|
|||||||
type_str = type_str[4:]
|
type_str = type_str[4:]
|
||||||
elif '.' in type_str and re.match(r'^d\d+p\d+:', type_str):
|
elif '.' in type_str and re.match(r'^d\d+p\d+:', type_str):
|
||||||
type_str = type_str[type_str.index(':') + 1:]
|
type_str = type_str[type_str.index(':') + 1:]
|
||||||
|
# Хвосты, которые дописывает вывод meta-info к множествам типов: суффикс обобщённого метатипа
|
||||||
|
# и счётчик состава. Копипаста строки оттуда — обычный путь, поэтому хвост снимаем молча.
|
||||||
|
# Срезаем ТОЛЬКО эти известные формы: круглые скобки заняты параметризованными типами
|
||||||
|
# (Число(15,2)), слепой срез скобок сломал бы их.
|
||||||
|
type_str = re.sub(r'\s*\((?:все|all)\)\s*$', '', type_str).strip()
|
||||||
|
type_str = re.sub(r'\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '', type_str).strip()
|
||||||
|
type_str = re.sub(r'\s*\((?:типов|types):\s*\d+\)\s*$', '', type_str).strip()
|
||||||
|
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||||
|
# раскрытие справа — берём левую часть, она и есть тип.
|
||||||
|
m = re.match(r'^(.+?)\s*(?:→|->)\s*.+$', type_str)
|
||||||
|
if m:
|
||||||
|
type_str = m.group(1).strip()
|
||||||
# Параметризованные типы: Number(15,2), Строка(100)
|
# Параметризованные типы: Number(15,2), Строка(100)
|
||||||
m = re.match(r'^([^(]+)\((.+)\)$', type_str)
|
m = re.match(r'^([^(]+)\((.+)\)$', type_str)
|
||||||
if m:
|
if m:
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# meta-compile v1.112 — Compile 1C metadata object from JSON
|
# meta-compile v1.113 — Compile 1C metadata object from JSON
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
[CmdletBinding(PositionalBinding=$false)]
|
[CmdletBinding(PositionalBinding=$false)]
|
||||||
param(
|
param(
|
||||||
@@ -668,6 +668,48 @@ $script:typeSynonyms["бизнеспроцессссылка"] = "Bus
|
|||||||
$script:typeSynonyms["задачассылка"] = "TaskRef"
|
$script:typeSynonyms["задачассылка"] = "TaskRef"
|
||||||
$script:typeSynonyms["определяемыйтип"] = "DefinedType"
|
$script:typeSynonyms["определяемыйтип"] = "DefinedType"
|
||||||
$script:typeSynonyms["definedtype"] = "DefinedType"
|
$script:typeSynonyms["definedtype"] = "DefinedType"
|
||||||
|
# Русские имена объектных типов, менеджеров и наборов записей — те самые метки, которые печатает
|
||||||
|
# meta-info. Без них раундтрип «прочитал вывод → подал на вход» рвался: `ДокументОбъект.Заказ` из
|
||||||
|
# источников подписки компилятор отвергал с «Неизвестный тип», хотя сам же печатал эту форму
|
||||||
|
# через meta-info. Аббревиатуры (ПВХ/ПВР, РС/РН/РБ/РР) приняты наравне с полными именами: вывод
|
||||||
|
# навыка сокращает долгие виды, чтобы в списке на сорок реквизитов не терялось имя объекта.
|
||||||
|
# Состав держит гард tests/skills/check-typeset-coverage.mjs.
|
||||||
|
$script:typeSynonyms["бизнеспроцессменеджер"] = "BusinessProcessManager"
|
||||||
|
$script:typeSynonyms["бизнеспроцессобъект"] = "BusinessProcessObject"
|
||||||
|
$script:typeSynonyms["документменеджер"] = "DocumentManager"
|
||||||
|
$script:typeSynonyms["документобъект"] = "DocumentObject"
|
||||||
|
$script:typeSynonyms["журналдокументовменеджер"] = "DocumentJournalManager"
|
||||||
|
$script:typeSynonyms["задачаменеджер"] = "TaskManager"
|
||||||
|
$script:typeSynonyms["задачаобъект"] = "TaskObject"
|
||||||
|
$script:typeSynonyms["константаменеджерзначения"] = "ConstantValueManager"
|
||||||
|
$script:typeSynonyms["любаяссылка"] = "AnyRef"
|
||||||
|
$script:typeSynonyms["любаяссылкаиб"] = "AnyIBRef"
|
||||||
|
$script:typeSynonyms["наборзаписейперерасчета"] = "RecalculationRecordSet"
|
||||||
|
$script:typeSynonyms["наборзаписейпоследовательности"] = "SequenceRecordSet"
|
||||||
|
$script:typeSynonyms["наборзаписейрб"] = "AccountingRegisterRecordSet"
|
||||||
|
$script:typeSynonyms["наборзаписейрн"] = "AccumulationRegisterRecordSet"
|
||||||
|
$script:typeSynonyms["наборзаписейрр"] = "CalculationRegisterRecordSet"
|
||||||
|
$script:typeSynonyms["наборзаписейрс"] = "InformationRegisterRecordSet"
|
||||||
|
$script:typeSynonyms["обработкаменеджер"] = "DataProcessorManager"
|
||||||
|
$script:typeSynonyms["отчетменеджер"] = "ReportManager"
|
||||||
|
$script:typeSynonyms["пврменеджер"] = "ChartOfCalculationTypesManager"
|
||||||
|
$script:typeSynonyms["пвробъект"] = "ChartOfCalculationTypesObject"
|
||||||
|
$script:typeSynonyms["пврссылка"] = "ChartOfCalculationTypesRef"
|
||||||
|
$script:typeSynonyms["пвхменеджер"] = "ChartOfCharacteristicTypesManager"
|
||||||
|
$script:typeSynonyms["пвхобъект"] = "ChartOfCharacteristicTypesObject"
|
||||||
|
$script:typeSynonyms["пвхссылка"] = "ChartOfCharacteristicTypesRef"
|
||||||
|
$script:typeSynonyms["перечислениеменеджер"] = "EnumManager"
|
||||||
|
$script:typeSynonyms["планобменаменеджер"] = "ExchangePlanManager"
|
||||||
|
$script:typeSynonyms["планобменаобъект"] = "ExchangePlanObject"
|
||||||
|
$script:typeSynonyms["плансчетовменеджер"] = "ChartOfAccountsManager"
|
||||||
|
$script:typeSynonyms["плансчетовобъект"] = "ChartOfAccountsObject"
|
||||||
|
$script:typeSynonyms["регистрбухгалтериименеджер"] = "AccountingRegisterManager"
|
||||||
|
$script:typeSynonyms["регистрнакопленияменеджер"] = "AccumulationRegisterManager"
|
||||||
|
$script:typeSynonyms["регистррасчетаменеджер"] = "CalculationRegisterManager"
|
||||||
|
$script:typeSynonyms["регистрсведенийменеджер"] = "InformationRegisterManager"
|
||||||
|
$script:typeSynonyms["справочникменеджер"] = "CatalogManager"
|
||||||
|
$script:typeSynonyms["справочникобъект"] = "CatalogObject"
|
||||||
|
$script:typeSynonyms["характеристика"] = "Characteristic"
|
||||||
# English lowercase ref synonyms
|
# English lowercase ref synonyms
|
||||||
$script:typeSynonyms["catalogref"] = "CatalogRef"
|
$script:typeSynonyms["catalogref"] = "CatalogRef"
|
||||||
$script:typeSynonyms["documentref"] = "DocumentRef"
|
$script:typeSynonyms["documentref"] = "DocumentRef"
|
||||||
@@ -690,6 +732,17 @@ function Resolve-TypeStr {
|
|||||||
$typeStr = $typeStr.Substring($typeStr.IndexOf(':') + 1)
|
$typeStr = $typeStr.Substring($typeStr.IndexOf(':') + 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Хвосты, которые дописывает вывод meta-info к множествам типов: суффикс обобщённого метатипа
|
||||||
|
# и счётчик состава. Копипаста строки оттуда — обычный путь, поэтому хвост снимаем молча.
|
||||||
|
# Срезаем ТОЛЬКО эти известные формы: круглые скобки заняты параметризованными типами
|
||||||
|
# (Число(15,2)), слепой срез скобок сломал бы их.
|
||||||
|
$typeStr = ($typeStr -replace '\s*\((?:все|all)\)\s*$', '').Trim()
|
||||||
|
$typeStr = ($typeStr -replace '\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '').Trim()
|
||||||
|
$typeStr = ($typeStr -replace '\s*\((?:типов|types):\s*\d+\)\s*$', '').Trim()
|
||||||
|
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||||
|
# раскрытие справа — берём левую часть, она и есть тип.
|
||||||
|
if ($typeStr -match '^(.+?)\s*(?:→|->)\s*.+$') { $typeStr = $Matches[1].Trim() }
|
||||||
|
|
||||||
# Параметризованные типы: Number(15,2), Строка(100)
|
# Параметризованные типы: Number(15,2), Строка(100)
|
||||||
if ($typeStr -match '^([^(]+)\((.+)\)$') {
|
if ($typeStr -match '^([^(]+)\((.+)\)$') {
|
||||||
$baseName = $Matches[1].Trim()
|
$baseName = $Matches[1].Trim()
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# meta-compile v1.112 — Compile 1C metadata object from JSON
|
# meta-compile v1.113 — Compile 1C metadata object from JSON
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
@@ -775,6 +775,49 @@ type_synonyms = {
|
|||||||
'задачассылка': 'TaskRef',
|
'задачассылка': 'TaskRef',
|
||||||
'определяемыйтип': 'DefinedType',
|
'определяемыйтип': 'DefinedType',
|
||||||
'definedtype': 'DefinedType',
|
'definedtype': 'DefinedType',
|
||||||
|
# Русские имена объектных типов, менеджеров и наборов записей — те самые метки, которые
|
||||||
|
# печатает meta-info. Без них раундтрип «прочитал вывод → подал на вход» рвался:
|
||||||
|
# `ДокументОбъект.Заказ` из источников подписки компилятор отвергал с «Неизвестный тип»,
|
||||||
|
# хотя сам же печатал эту форму через meta-info. Аббревиатуры (ПВХ/ПВР, РС/РН/РБ/РР) приняты
|
||||||
|
# наравне с полными именами: вывод навыка сокращает долгие виды, чтобы в списке на сорок
|
||||||
|
# реквизитов не терялось имя объекта.
|
||||||
|
# Состав держит гард tests/skills/check-typeset-coverage.mjs.
|
||||||
|
'бизнеспроцессменеджер': 'BusinessProcessManager',
|
||||||
|
'бизнеспроцессобъект': 'BusinessProcessObject',
|
||||||
|
'документменеджер': 'DocumentManager',
|
||||||
|
'документобъект': 'DocumentObject',
|
||||||
|
'журналдокументовменеджер': 'DocumentJournalManager',
|
||||||
|
'задачаменеджер': 'TaskManager',
|
||||||
|
'задачаобъект': 'TaskObject',
|
||||||
|
'константаменеджерзначения': 'ConstantValueManager',
|
||||||
|
'любаяссылка': 'AnyRef',
|
||||||
|
'любаяссылкаиб': 'AnyIBRef',
|
||||||
|
'наборзаписейперерасчета': 'RecalculationRecordSet',
|
||||||
|
'наборзаписейпоследовательности': 'SequenceRecordSet',
|
||||||
|
'наборзаписейрб': 'AccountingRegisterRecordSet',
|
||||||
|
'наборзаписейрн': 'AccumulationRegisterRecordSet',
|
||||||
|
'наборзаписейрр': 'CalculationRegisterRecordSet',
|
||||||
|
'наборзаписейрс': 'InformationRegisterRecordSet',
|
||||||
|
'обработкаменеджер': 'DataProcessorManager',
|
||||||
|
'отчетменеджер': 'ReportManager',
|
||||||
|
'пврменеджер': 'ChartOfCalculationTypesManager',
|
||||||
|
'пвробъект': 'ChartOfCalculationTypesObject',
|
||||||
|
'пврссылка': 'ChartOfCalculationTypesRef',
|
||||||
|
'пвхменеджер': 'ChartOfCharacteristicTypesManager',
|
||||||
|
'пвхобъект': 'ChartOfCharacteristicTypesObject',
|
||||||
|
'пвхссылка': 'ChartOfCharacteristicTypesRef',
|
||||||
|
'перечислениеменеджер': 'EnumManager',
|
||||||
|
'планобменаменеджер': 'ExchangePlanManager',
|
||||||
|
'планобменаобъект': 'ExchangePlanObject',
|
||||||
|
'плансчетовменеджер': 'ChartOfAccountsManager',
|
||||||
|
'плансчетовобъект': 'ChartOfAccountsObject',
|
||||||
|
'регистрбухгалтериименеджер': 'AccountingRegisterManager',
|
||||||
|
'регистрнакопленияменеджер': 'AccumulationRegisterManager',
|
||||||
|
'регистррасчетаменеджер': 'CalculationRegisterManager',
|
||||||
|
'регистрсведенийменеджер': 'InformationRegisterManager',
|
||||||
|
'справочникменеджер': 'CatalogManager',
|
||||||
|
'справочникобъект': 'CatalogObject',
|
||||||
|
'характеристика': 'Characteristic',
|
||||||
# English lowercase ref synonyms
|
# English lowercase ref synonyms
|
||||||
'catalogref': 'CatalogRef',
|
'catalogref': 'CatalogRef',
|
||||||
'documentref': 'DocumentRef',
|
'documentref': 'DocumentRef',
|
||||||
@@ -826,6 +869,18 @@ def resolve_type_str(type_str):
|
|||||||
type_str = type_str[4:]
|
type_str = type_str[4:]
|
||||||
elif '.' in type_str and re.match(r'^d\d+p\d+:', type_str):
|
elif '.' in type_str and re.match(r'^d\d+p\d+:', type_str):
|
||||||
type_str = type_str[type_str.index(':') + 1:]
|
type_str = type_str[type_str.index(':') + 1:]
|
||||||
|
# Хвосты, которые дописывает вывод meta-info к множествам типов: суффикс обобщённого метатипа
|
||||||
|
# и счётчик состава. Копипаста строки оттуда — обычный путь, поэтому хвост снимаем молча.
|
||||||
|
# Срезаем ТОЛЬКО эти известные формы: круглые скобки заняты параметризованными типами
|
||||||
|
# (Число(15,2)), слепой срез скобок сломал бы их.
|
||||||
|
type_str = re.sub(r'\s*\((?:все|all)\)\s*$', '', type_str).strip()
|
||||||
|
type_str = re.sub(r'\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '', type_str).strip()
|
||||||
|
type_str = re.sub(r'\s*\((?:типов|types):\s*\d+\)\s*$', '', type_str).strip()
|
||||||
|
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||||
|
# раскрытие справа — берём левую часть, она и есть тип.
|
||||||
|
m = re.match(r'^(.+?)\s*(?:→|->)\s*.+$', type_str)
|
||||||
|
if m:
|
||||||
|
type_str = m.group(1).strip()
|
||||||
# Параметризованные типы: Number(15,2), Строка(100)
|
# Параметризованные типы: Number(15,2), Строка(100)
|
||||||
m = re.match(r'^([^(]+)\((.+)\)$', type_str)
|
m = re.match(r'^([^(]+)\((.+)\)$', type_str)
|
||||||
if m:
|
if m:
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# meta-edit v1.52 — Edit existing 1C metadata object XML
|
# meta-edit v1.53 — Edit existing 1C metadata object XML
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
[CmdletBinding(PositionalBinding=$false)]
|
[CmdletBinding(PositionalBinding=$false)]
|
||||||
param(
|
param(
|
||||||
@@ -498,6 +498,48 @@ $script:typeSynonyms["бизнеспроцессссылка"] = "Bus
|
|||||||
$script:typeSynonyms["задачассылка"] = "TaskRef"
|
$script:typeSynonyms["задачассылка"] = "TaskRef"
|
||||||
$script:typeSynonyms["определяемыйтип"] = "DefinedType"
|
$script:typeSynonyms["определяемыйтип"] = "DefinedType"
|
||||||
$script:typeSynonyms["definedtype"] = "DefinedType"
|
$script:typeSynonyms["definedtype"] = "DefinedType"
|
||||||
|
# Русские имена объектных типов, менеджеров и наборов записей — те самые метки, которые печатает
|
||||||
|
# meta-info. Без них раундтрип «прочитал вывод → подал на вход» рвался: `ДокументОбъект.Заказ` из
|
||||||
|
# источников подписки компилятор отвергал с «Неизвестный тип», хотя сам же печатал эту форму
|
||||||
|
# через meta-info. Аббревиатуры (ПВХ/ПВР, РС/РН/РБ/РР) приняты наравне с полными именами: вывод
|
||||||
|
# навыка сокращает долгие виды, чтобы в списке на сорок реквизитов не терялось имя объекта.
|
||||||
|
# Состав держит гард tests/skills/check-typeset-coverage.mjs.
|
||||||
|
$script:typeSynonyms["бизнеспроцессменеджер"] = "BusinessProcessManager"
|
||||||
|
$script:typeSynonyms["бизнеспроцессобъект"] = "BusinessProcessObject"
|
||||||
|
$script:typeSynonyms["документменеджер"] = "DocumentManager"
|
||||||
|
$script:typeSynonyms["документобъект"] = "DocumentObject"
|
||||||
|
$script:typeSynonyms["журналдокументовменеджер"] = "DocumentJournalManager"
|
||||||
|
$script:typeSynonyms["задачаменеджер"] = "TaskManager"
|
||||||
|
$script:typeSynonyms["задачаобъект"] = "TaskObject"
|
||||||
|
$script:typeSynonyms["константаменеджерзначения"] = "ConstantValueManager"
|
||||||
|
$script:typeSynonyms["любаяссылка"] = "AnyRef"
|
||||||
|
$script:typeSynonyms["любаяссылкаиб"] = "AnyIBRef"
|
||||||
|
$script:typeSynonyms["наборзаписейперерасчета"] = "RecalculationRecordSet"
|
||||||
|
$script:typeSynonyms["наборзаписейпоследовательности"] = "SequenceRecordSet"
|
||||||
|
$script:typeSynonyms["наборзаписейрб"] = "AccountingRegisterRecordSet"
|
||||||
|
$script:typeSynonyms["наборзаписейрн"] = "AccumulationRegisterRecordSet"
|
||||||
|
$script:typeSynonyms["наборзаписейрр"] = "CalculationRegisterRecordSet"
|
||||||
|
$script:typeSynonyms["наборзаписейрс"] = "InformationRegisterRecordSet"
|
||||||
|
$script:typeSynonyms["обработкаменеджер"] = "DataProcessorManager"
|
||||||
|
$script:typeSynonyms["отчетменеджер"] = "ReportManager"
|
||||||
|
$script:typeSynonyms["пврменеджер"] = "ChartOfCalculationTypesManager"
|
||||||
|
$script:typeSynonyms["пвробъект"] = "ChartOfCalculationTypesObject"
|
||||||
|
$script:typeSynonyms["пврссылка"] = "ChartOfCalculationTypesRef"
|
||||||
|
$script:typeSynonyms["пвхменеджер"] = "ChartOfCharacteristicTypesManager"
|
||||||
|
$script:typeSynonyms["пвхобъект"] = "ChartOfCharacteristicTypesObject"
|
||||||
|
$script:typeSynonyms["пвхссылка"] = "ChartOfCharacteristicTypesRef"
|
||||||
|
$script:typeSynonyms["перечислениеменеджер"] = "EnumManager"
|
||||||
|
$script:typeSynonyms["планобменаменеджер"] = "ExchangePlanManager"
|
||||||
|
$script:typeSynonyms["планобменаобъект"] = "ExchangePlanObject"
|
||||||
|
$script:typeSynonyms["плансчетовменеджер"] = "ChartOfAccountsManager"
|
||||||
|
$script:typeSynonyms["плансчетовобъект"] = "ChartOfAccountsObject"
|
||||||
|
$script:typeSynonyms["регистрбухгалтериименеджер"] = "AccountingRegisterManager"
|
||||||
|
$script:typeSynonyms["регистрнакопленияменеджер"] = "AccumulationRegisterManager"
|
||||||
|
$script:typeSynonyms["регистррасчетаменеджер"] = "CalculationRegisterManager"
|
||||||
|
$script:typeSynonyms["регистрсведенийменеджер"] = "InformationRegisterManager"
|
||||||
|
$script:typeSynonyms["справочникменеджер"] = "CatalogManager"
|
||||||
|
$script:typeSynonyms["справочникобъект"] = "CatalogObject"
|
||||||
|
$script:typeSynonyms["характеристика"] = "Characteristic"
|
||||||
$script:typeSynonyms["catalogref"] = "CatalogRef"
|
$script:typeSynonyms["catalogref"] = "CatalogRef"
|
||||||
$script:typeSynonyms["documentref"] = "DocumentRef"
|
$script:typeSynonyms["documentref"] = "DocumentRef"
|
||||||
$script:typeSynonyms["enumref"] = "EnumRef"
|
$script:typeSynonyms["enumref"] = "EnumRef"
|
||||||
@@ -576,6 +618,17 @@ function Resolve-TypeStr {
|
|||||||
$typeStr = $typeStr.Substring($typeStr.IndexOf(':') + 1)
|
$typeStr = $typeStr.Substring($typeStr.IndexOf(':') + 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Хвосты, которые дописывает вывод meta-info к множествам типов: суффикс обобщённого метатипа
|
||||||
|
# и счётчик состава. Копипаста строки оттуда — обычный путь, поэтому хвост снимаем молча.
|
||||||
|
# Срезаем ТОЛЬКО эти известные формы: круглые скобки заняты параметризованными типами
|
||||||
|
# (Число(15,2)), слепой срез скобок сломал бы их.
|
||||||
|
$typeStr = ($typeStr -replace '\s*\((?:все|all)\)\s*$', '').Trim()
|
||||||
|
$typeStr = ($typeStr -replace '\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '').Trim()
|
||||||
|
$typeStr = ($typeStr -replace '\s*\((?:типов|types):\s*\d+\)\s*$', '').Trim()
|
||||||
|
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||||
|
# раскрытие справа — берём левую часть, она и есть тип.
|
||||||
|
if ($typeStr -match '^(.+?)\s*(?:→|->)\s*.+$') { $typeStr = $Matches[1].Trim() }
|
||||||
|
|
||||||
# Параметризованные типы: Number(15,2), Строка(100)
|
# Параметризованные типы: Number(15,2), Строка(100)
|
||||||
if ($typeStr -match '^([^(]+)\((.+)\)$') {
|
if ($typeStr -match '^([^(]+)\((.+)\)$') {
|
||||||
$baseName = $Matches[1].Trim()
|
$baseName = $Matches[1].Trim()
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# meta-edit v1.52 — Edit existing 1C metadata object XML
|
# meta-edit v1.53 — Edit existing 1C metadata object XML
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
@@ -537,6 +537,49 @@ type_synonyms = {
|
|||||||
"задачассылка": "TaskRef",
|
"задачассылка": "TaskRef",
|
||||||
"определяемыйтип": "DefinedType",
|
"определяемыйтип": "DefinedType",
|
||||||
"definedtype": "DefinedType",
|
"definedtype": "DefinedType",
|
||||||
|
# Русские имена объектных типов, менеджеров и наборов записей — те самые метки, которые
|
||||||
|
# печатает meta-info. Без них раундтрип «прочитал вывод → подал на вход» рвался:
|
||||||
|
# `ДокументОбъект.Заказ` из источников подписки компилятор отвергал с «Неизвестный тип»,
|
||||||
|
# хотя сам же печатал эту форму через meta-info. Аббревиатуры (ПВХ/ПВР, РС/РН/РБ/РР) приняты
|
||||||
|
# наравне с полными именами: вывод навыка сокращает долгие виды, чтобы в списке на сорок
|
||||||
|
# реквизитов не терялось имя объекта.
|
||||||
|
# Состав держит гард tests/skills/check-typeset-coverage.mjs.
|
||||||
|
"бизнеспроцессменеджер": "BusinessProcessManager",
|
||||||
|
"бизнеспроцессобъект": "BusinessProcessObject",
|
||||||
|
"документменеджер": "DocumentManager",
|
||||||
|
"документобъект": "DocumentObject",
|
||||||
|
"журналдокументовменеджер": "DocumentJournalManager",
|
||||||
|
"задачаменеджер": "TaskManager",
|
||||||
|
"задачаобъект": "TaskObject",
|
||||||
|
"константаменеджерзначения": "ConstantValueManager",
|
||||||
|
"любаяссылка": "AnyRef",
|
||||||
|
"любаяссылкаиб": "AnyIBRef",
|
||||||
|
"наборзаписейперерасчета": "RecalculationRecordSet",
|
||||||
|
"наборзаписейпоследовательности": "SequenceRecordSet",
|
||||||
|
"наборзаписейрб": "AccountingRegisterRecordSet",
|
||||||
|
"наборзаписейрн": "AccumulationRegisterRecordSet",
|
||||||
|
"наборзаписейрр": "CalculationRegisterRecordSet",
|
||||||
|
"наборзаписейрс": "InformationRegisterRecordSet",
|
||||||
|
"обработкаменеджер": "DataProcessorManager",
|
||||||
|
"отчетменеджер": "ReportManager",
|
||||||
|
"пврменеджер": "ChartOfCalculationTypesManager",
|
||||||
|
"пвробъект": "ChartOfCalculationTypesObject",
|
||||||
|
"пврссылка": "ChartOfCalculationTypesRef",
|
||||||
|
"пвхменеджер": "ChartOfCharacteristicTypesManager",
|
||||||
|
"пвхобъект": "ChartOfCharacteristicTypesObject",
|
||||||
|
"пвхссылка": "ChartOfCharacteristicTypesRef",
|
||||||
|
"перечислениеменеджер": "EnumManager",
|
||||||
|
"планобменаменеджер": "ExchangePlanManager",
|
||||||
|
"планобменаобъект": "ExchangePlanObject",
|
||||||
|
"плансчетовменеджер": "ChartOfAccountsManager",
|
||||||
|
"плансчетовобъект": "ChartOfAccountsObject",
|
||||||
|
"регистрбухгалтериименеджер": "AccountingRegisterManager",
|
||||||
|
"регистрнакопленияменеджер": "AccumulationRegisterManager",
|
||||||
|
"регистррасчетаменеджер": "CalculationRegisterManager",
|
||||||
|
"регистрсведенийменеджер": "InformationRegisterManager",
|
||||||
|
"справочникменеджер": "CatalogManager",
|
||||||
|
"справочникобъект": "CatalogObject",
|
||||||
|
"характеристика": "Characteristic",
|
||||||
"catalogref": "CatalogRef",
|
"catalogref": "CatalogRef",
|
||||||
"documentref": "DocumentRef",
|
"documentref": "DocumentRef",
|
||||||
"enumref": "EnumRef",
|
"enumref": "EnumRef",
|
||||||
@@ -602,6 +645,18 @@ def resolve_type_str(type_str):
|
|||||||
type_str = type_str[4:]
|
type_str = type_str[4:]
|
||||||
elif '.' in type_str and re.match(r'^d\d+p\d+:', type_str):
|
elif '.' in type_str and re.match(r'^d\d+p\d+:', type_str):
|
||||||
type_str = type_str[type_str.index(':') + 1:]
|
type_str = type_str[type_str.index(':') + 1:]
|
||||||
|
# Хвосты, которые дописывает вывод meta-info к множествам типов: суффикс обобщённого метатипа
|
||||||
|
# и счётчик состава. Копипаста строки оттуда — обычный путь, поэтому хвост снимаем молча.
|
||||||
|
# Срезаем ТОЛЬКО эти известные формы: круглые скобки заняты параметризованными типами
|
||||||
|
# (Число(15,2)), слепой срез скобок сломал бы их.
|
||||||
|
type_str = re.sub(r'\s*\((?:все|all)\)\s*$', '', type_str).strip()
|
||||||
|
type_str = re.sub(r'\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '', type_str).strip()
|
||||||
|
type_str = re.sub(r'\s*\((?:типов|types):\s*\d+\)\s*$', '', type_str).strip()
|
||||||
|
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||||
|
# раскрытие справа — берём левую часть, она и есть тип.
|
||||||
|
m = re.match(r'^(.+?)\s*(?:→|->)\s*.+$', type_str)
|
||||||
|
if m:
|
||||||
|
type_str = m.group(1).strip()
|
||||||
# Параметризованные типы: Number(15,2), Строка(100)
|
# Параметризованные типы: Number(15,2), Строка(100)
|
||||||
m = re.match(r'^([^(]+)\((.+)\)$', type_str)
|
m = re.match(r'^([^(]+)\((.+)\)$', type_str)
|
||||||
if m:
|
if m:
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# mxl-compile v1.55 — Compile 1C spreadsheet from JSON
|
# mxl-compile v1.56 — Compile 1C spreadsheet from JSON
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
[CmdletBinding(PositionalBinding=$false)]
|
[CmdletBinding(PositionalBinding=$false)]
|
||||||
param(
|
param(
|
||||||
@@ -776,6 +776,17 @@ function Resolve-TypeStr {
|
|||||||
$typeStr = $typeStr.Substring($typeStr.IndexOf(':') + 1)
|
$typeStr = $typeStr.Substring($typeStr.IndexOf(':') + 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Хвосты, которые дописывает вывод meta-info к множествам типов: суффикс обобщённого метатипа
|
||||||
|
# и счётчик состава. Копипаста строки оттуда — обычный путь, поэтому хвост снимаем молча.
|
||||||
|
# Срезаем ТОЛЬКО эти известные формы: круглые скобки заняты параметризованными типами
|
||||||
|
# (Число(15,2)), слепой срез скобок сломал бы их.
|
||||||
|
$typeStr = ($typeStr -replace '\s*\((?:все|all)\)\s*$', '').Trim()
|
||||||
|
$typeStr = ($typeStr -replace '\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '').Trim()
|
||||||
|
$typeStr = ($typeStr -replace '\s*\((?:типов|types):\s*\d+\)\s*$', '').Trim()
|
||||||
|
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||||
|
# раскрытие справа — берём левую часть, она и есть тип.
|
||||||
|
if ($typeStr -match '^(.+?)\s*(?:→|->)\s*.+$') { $typeStr = $Matches[1].Trim() }
|
||||||
|
|
||||||
# Параметризованные типы: Number(15,2), Строка(100)
|
# Параметризованные типы: Number(15,2), Строка(100)
|
||||||
if ($typeStr -match '^([^(]+)\((.+)\)$') {
|
if ($typeStr -match '^([^(]+)\((.+)\)$') {
|
||||||
$baseName = $Matches[1].Trim()
|
$baseName = $Matches[1].Trim()
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# mxl-compile v1.55 — Compile 1C spreadsheet from JSON
|
# mxl-compile v1.56 — Compile 1C spreadsheet from JSON
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
import argparse
|
import argparse
|
||||||
import hashlib
|
import hashlib
|
||||||
@@ -573,6 +573,18 @@ def resolve_type_str(type_str):
|
|||||||
type_str = type_str[4:]
|
type_str = type_str[4:]
|
||||||
elif '.' in type_str and re.match(r'^d\d+p\d+:', type_str):
|
elif '.' in type_str and re.match(r'^d\d+p\d+:', type_str):
|
||||||
type_str = type_str[type_str.index(':') + 1:]
|
type_str = type_str[type_str.index(':') + 1:]
|
||||||
|
# Хвосты, которые дописывает вывод meta-info к множествам типов: суффикс обобщённого метатипа
|
||||||
|
# и счётчик состава. Копипаста строки оттуда — обычный путь, поэтому хвост снимаем молча.
|
||||||
|
# Срезаем ТОЛЬКО эти известные формы: круглые скобки заняты параметризованными типами
|
||||||
|
# (Число(15,2)), слепой срез скобок сломал бы их.
|
||||||
|
type_str = re.sub(r'\s*\((?:все|all)\)\s*$', '', type_str).strip()
|
||||||
|
type_str = re.sub(r'\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '', type_str).strip()
|
||||||
|
type_str = re.sub(r'\s*\((?:типов|types):\s*\d+\)\s*$', '', type_str).strip()
|
||||||
|
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||||
|
# раскрытие справа — берём левую часть, она и есть тип.
|
||||||
|
m = re.match(r'^(.+?)\s*(?:→|->)\s*.+$', type_str)
|
||||||
|
if m:
|
||||||
|
type_str = m.group(1).strip()
|
||||||
|
|
||||||
# Параметризованные типы: Number(15,2), Строка(100)
|
# Параметризованные типы: Number(15,2), Строка(100)
|
||||||
m = re.match(r'^([^(]+)\((.+)\)$', type_str)
|
m = re.match(r'^([^(]+)\((.+)\)$', type_str)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# skd-compile v1.122 — Compile 1C DCS from JSON (+write_xml_file/write_utf8_bom: общий эталон записи)
|
# skd-compile v1.123 — Compile 1C DCS from JSON
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
[CmdletBinding(PositionalBinding=$false)]
|
[CmdletBinding(PositionalBinding=$false)]
|
||||||
param(
|
param(
|
||||||
@@ -436,6 +436,17 @@ function Resolve-TypeStr {
|
|||||||
$typeStr = $typeStr.Substring($typeStr.IndexOf(':') + 1)
|
$typeStr = $typeStr.Substring($typeStr.IndexOf(':') + 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Хвосты, которые дописывает вывод meta-info к множествам типов: суффикс обобщённого метатипа
|
||||||
|
# и счётчик состава. Копипаста строки оттуда — обычный путь, поэтому хвост снимаем молча.
|
||||||
|
# Срезаем ТОЛЬКО эти известные формы: круглые скобки заняты параметризованными типами
|
||||||
|
# (Число(15,2)), слепой срез скобок сломал бы их.
|
||||||
|
$typeStr = ($typeStr -replace '\s*\((?:все|all)\)\s*$', '').Trim()
|
||||||
|
$typeStr = ($typeStr -replace '\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '').Trim()
|
||||||
|
$typeStr = ($typeStr -replace '\s*\((?:типов|types):\s*\d+\)\s*$', '').Trim()
|
||||||
|
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||||
|
# раскрытие справа — берём левую часть, она и есть тип.
|
||||||
|
if ($typeStr -match '^(.+?)\s*(?:→|->)\s*.+$') { $typeStr = $Matches[1].Trim() }
|
||||||
|
|
||||||
# Параметризованные типы: Number(15,2), Строка(100)
|
# Параметризованные типы: Number(15,2), Строка(100)
|
||||||
if ($typeStr -match '^([^(]+)\((.+)\)$') {
|
if ($typeStr -match '^([^(]+)\((.+)\)$') {
|
||||||
$baseName = $Matches[1].Trim()
|
$baseName = $Matches[1].Trim()
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# skd-compile v1.122 — Compile 1C DCS from JSON (+write_xml_file/write_utf8_bom: общий эталон записи)
|
# skd-compile v1.123 — Compile 1C DCS from JSON
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
import argparse
|
import argparse
|
||||||
import json
|
import json
|
||||||
@@ -423,6 +423,18 @@ def resolve_type_str(type_str):
|
|||||||
type_str = type_str[4:]
|
type_str = type_str[4:]
|
||||||
elif '.' in type_str and re.match(r'^d\d+p\d+:', type_str):
|
elif '.' in type_str and re.match(r'^d\d+p\d+:', type_str):
|
||||||
type_str = type_str[type_str.index(':') + 1:]
|
type_str = type_str[type_str.index(':') + 1:]
|
||||||
|
# Хвосты, которые дописывает вывод meta-info к множествам типов: суффикс обобщённого метатипа
|
||||||
|
# и счётчик состава. Копипаста строки оттуда — обычный путь, поэтому хвост снимаем молча.
|
||||||
|
# Срезаем ТОЛЬКО эти известные формы: круглые скобки заняты параметризованными типами
|
||||||
|
# (Число(15,2)), слепой срез скобок сломал бы их.
|
||||||
|
type_str = re.sub(r'\s*\((?:все|all)\)\s*$', '', type_str).strip()
|
||||||
|
type_str = re.sub(r'\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '', type_str).strip()
|
||||||
|
type_str = re.sub(r'\s*\((?:типов|types):\s*\d+\)\s*$', '', type_str).strip()
|
||||||
|
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||||
|
# раскрытие справа — берём левую часть, она и есть тип.
|
||||||
|
m = re.match(r'^(.+?)\s*(?:→|->)\s*.+$', type_str)
|
||||||
|
if m:
|
||||||
|
type_str = m.group(1).strip()
|
||||||
# Параметризованные типы: Number(15,2), Строка(100)
|
# Параметризованные типы: Number(15,2), Строка(100)
|
||||||
m = re.match(r'^([^(]+)\((.+)\)$', type_str)
|
m = re.match(r'^([^(]+)\((.+)\)$', type_str)
|
||||||
if m:
|
if m:
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# skd-edit v1.40 — Atomic 1C DCS editor
|
# skd-edit v1.41 — Atomic 1C DCS editor
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
# NB: парный .py собирает выражения автодат вне f-string ради совместимости с python 3.9 (PEP 701).
|
# NB: парный .py собирает выражения автодат вне f-string ради совместимости с python 3.9 (PEP 701).
|
||||||
[CmdletBinding(PositionalBinding=$false)]
|
[CmdletBinding(PositionalBinding=$false)]
|
||||||
@@ -267,6 +267,17 @@ function Resolve-TypeStr {
|
|||||||
$typeStr = $typeStr.Substring($typeStr.IndexOf(':') + 1)
|
$typeStr = $typeStr.Substring($typeStr.IndexOf(':') + 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Хвосты, которые дописывает вывод meta-info к множествам типов: суффикс обобщённого метатипа
|
||||||
|
# и счётчик состава. Копипаста строки оттуда — обычный путь, поэтому хвост снимаем молча.
|
||||||
|
# Срезаем ТОЛЬКО эти известные формы: круглые скобки заняты параметризованными типами
|
||||||
|
# (Число(15,2)), слепой срез скобок сломал бы их.
|
||||||
|
$typeStr = ($typeStr -replace '\s*\((?:все|all)\)\s*$', '').Trim()
|
||||||
|
$typeStr = ($typeStr -replace '\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '').Trim()
|
||||||
|
$typeStr = ($typeStr -replace '\s*\((?:типов|types):\s*\d+\)\s*$', '').Trim()
|
||||||
|
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||||
|
# раскрытие справа — берём левую часть, она и есть тип.
|
||||||
|
if ($typeStr -match '^(.+?)\s*(?:→|->)\s*.+$') { $typeStr = $Matches[1].Trim() }
|
||||||
|
|
||||||
# Параметризованные типы: Number(15,2), Строка(100)
|
# Параметризованные типы: Number(15,2), Строка(100)
|
||||||
if ($typeStr -match '^([^(]+)\((.+)\)$') {
|
if ($typeStr -match '^([^(]+)\((.+)\)$') {
|
||||||
$baseName = $Matches[1].Trim()
|
$baseName = $Matches[1].Trim()
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# skd-edit v1.40 — Atomic 1C DCS editor (Python port)
|
# skd-edit v1.41 — Atomic 1C DCS editor (Python port)
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
import argparse
|
import argparse
|
||||||
import json
|
import json
|
||||||
@@ -382,6 +382,18 @@ def resolve_type_str(type_str):
|
|||||||
type_str = type_str[4:]
|
type_str = type_str[4:]
|
||||||
elif '.' in type_str and re.match(r'^d\d+p\d+:', type_str):
|
elif '.' in type_str and re.match(r'^d\d+p\d+:', type_str):
|
||||||
type_str = type_str[type_str.index(':') + 1:]
|
type_str = type_str[type_str.index(':') + 1:]
|
||||||
|
# Хвосты, которые дописывает вывод meta-info к множествам типов: суффикс обобщённого метатипа
|
||||||
|
# и счётчик состава. Копипаста строки оттуда — обычный путь, поэтому хвост снимаем молча.
|
||||||
|
# Срезаем ТОЛЬКО эти известные формы: круглые скобки заняты параметризованными типами
|
||||||
|
# (Число(15,2)), слепой срез скобок сломал бы их.
|
||||||
|
type_str = re.sub(r'\s*\((?:все|all)\)\s*$', '', type_str).strip()
|
||||||
|
type_str = re.sub(r'\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '', type_str).strip()
|
||||||
|
type_str = re.sub(r'\s*\((?:типов|types):\s*\d+\)\s*$', '', type_str).strip()
|
||||||
|
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||||
|
# раскрытие справа — берём левую часть, она и есть тип.
|
||||||
|
m = re.match(r'^(.+?)\s*(?:→|->)\s*.+$', type_str)
|
||||||
|
if m:
|
||||||
|
type_str = m.group(1).strip()
|
||||||
# Параметризованные типы: Number(15,2), Строка(100)
|
# Параметризованные типы: Number(15,2), Строка(100)
|
||||||
m = re.match(r'^([^(]+)\((.+)\)$', type_str)
|
m = re.match(r'^([^(]+)\((.+)\)$', type_str)
|
||||||
if m:
|
if m:
|
||||||
|
|||||||
Reference in New Issue
Block a user