fix(meta-edit): первый ребёнок в пустом ChildObjects вставал вровень с контейнером

Get-ChildIndent брал отступ из первого пробельного узла контейнера. В контейнере с детьми это
отступ ПЕРЕД первым ребёнком — верно; в пустом (только что раскрытом) единственный пробельный
узел — отступ ЗАКРЫВАЮЩЕГО тега, то есть уровень самого контейнера. Первый добавленный реквизит,
команда или таблица получали отступ <ChildObjects>, а не на табуляцию глубже. То же во вложенном
ChildObjects табличной части.

Платформа такой файл принимает и при выгрузке нормализует, поэтому дефект косметический —
но он задевал любой объект, а сравнивать наш вывод с выгрузкой становилось неудобно.

Эталоны четырёх кейсов пересняты: git diff -w пуст, меняются только отступы. Все 23 снэпшота
meta-edit, доезжающие до платформы, приняты 8.3.24.1691.

Кейс eds-add-table-twice объявил skipPlatformVerify: он нарочно удаляет файл таблицы, оставляя
висячую регистрацию, — платформа отказывает по условию кейса, а не из-за дефекта навыка.

Радиус проверен: та же эвристика есть в cf-edit, form-edit, interface-edit и cfe-borrow (семья
get_child_indent из списка долга check-inline-drift, не сведена). У form-edit пустой контейнер
обрабатывается верно — проверено добавлением элемента в форму с <ChildItems/>; у cf-edit и
cfe-borrow ветка недостижима: в ChildObjects конфигурации всегда есть <Language>.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBsZA5cr2WFThtgp7i5WVi
This commit is contained in:
Nick Shirokov
2026-09-06 20:15:26 +03:00
co-authored by Claude Opus 5
parent 11c0450d2a
commit 5c79b494cd
7 changed files with 318 additions and 262 deletions
+13 -3
View File
@@ -1,4 +1,4 @@
# meta-edit v1.49 — Edit existing 1C metadata object XML # meta-edit v1.50 — 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(
@@ -749,11 +749,21 @@ function Import-Fragment([string]$xmlString) {
} }
function Get-ChildIndent($container) { function Get-ChildIndent($container) {
# В контейнере с детьми первый пробельный узел — это отступ ПЕРЕД первым ребёнком.
# В пустом (только что раскрытом) единственный пробельный узел — отступ ЗАКРЫВАЮЩЕГО
# тега, то есть уровень самого контейнера: ребёнку нужен на табуляцию глубже. Без этой
# поправки первый ребёнок вставал вровень с <ChildObjects>.
$hasElements = $false
foreach ($child in $container.ChildNodes) {
if ($child.NodeType -eq 'Element') { $hasElements = $true; break }
}
foreach ($child in $container.ChildNodes) { foreach ($child in $container.ChildNodes) {
if ($child.NodeType -eq 'Whitespace' -or $child.NodeType -eq 'SignificantWhitespace') { if ($child.NodeType -eq 'Whitespace' -or $child.NodeType -eq 'SignificantWhitespace') {
$text = $child.Value $text = $child.Value
if ($text -match '^\r?\n(\t+)$') { return $Matches[1] } $found = $null
if ($text -match '^\r?\n(\t+)') { return $Matches[1] } if ($text -match '^\r?\n(\t+)$') { $found = $Matches[1] }
elseif ($text -match '^\r?\n(\t+)') { $found = $Matches[1] }
if ($null -ne $found) { return $(if ($hasElements) { $found } else { "$found`t" }) }
} }
} }
# Fallback: count depth # Fallback: count depth
@@ -1,5 +1,5 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# meta-edit v1.49 — Edit existing 1C metadata object XML # meta-edit v1.50 — 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
@@ -757,17 +757,23 @@ def import_fragment(xml_string):
def get_child_indent(container): def get_child_indent(container):
"""Detect indentation of children inside a container element.""" """Detect indentation of children inside a container element."""
# В контейнере с детьми первый пробельный узел — это отступ ПЕРЕД первым ребёнком.
# В пустом (только что раскрытом) единственный пробельный узел — отступ ЗАКРЫВАЮЩЕГО
# тега, то есть уровень самого контейнера: ребёнку нужен на табуляцию глубже. Без этой
# поправки первый ребёнок вставал вровень с <ChildObjects>.
has_elements = len(container) > 0
extra = "" if has_elements else "\t"
# Check container.text (text before first child) # Check container.text (text before first child)
if container.text and "\n" in container.text: if container.text and "\n" in container.text:
after_nl = container.text.rsplit("\n", 1)[-1] after_nl = container.text.rsplit("\n", 1)[-1]
if after_nl and not after_nl.strip(): if after_nl and not after_nl.strip():
return after_nl return after_nl + extra
# Check tail of child elements # Check tail of child elements
for child in container: for child in container:
if child.tail and "\n" in child.tail: if child.tail and "\n" in child.tail:
after_nl = child.tail.rsplit("\n", 1)[-1] after_nl = child.tail.rsplit("\n", 1)[-1]
if after_nl and not after_nl.strip(): if after_nl and not after_nl.strip():
return after_nl return after_nl + extra
# Fallback: count depth # Fallback: count depth
depth = 0 depth = 0
current = container current = container
@@ -7,21 +7,61 @@
"input": { "input": {
"type": "ExternalDataSource", "type": "ExternalDataSource",
"name": "PG", "name": "PG",
"tables": { "products": { "keyFields": ["id"], "fields": ["id: Number(10,0)"] } } "tables": {
"products": {
"keyFields": [
"id"
],
"fields": [
"id: Number(10,0)"
]
}
}
}, },
"args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" } "args": {
"-JsonPath": "{inputFile}",
"-OutputDir": "{workDir}"
}
}, },
{ {
"script": "meta-edit/scripts/meta-edit", "script": "meta-edit/scripts/meta-edit",
"input": { "add": { "tables": { "sales": ["id: Number(10,0)"] } } }, "input": {
"args": { "-DefinitionFile": "{inputFile}", "-ObjectPath": "{workDir}/ExternalDataSources/PG.xml" } "add": {
"tables": {
"sales": [
"id: Number(10,0)"
]
}
}
},
"args": {
"-DefinitionFile": "{inputFile}",
"-ObjectPath": "{workDir}/ExternalDataSources/PG.xml"
}
}, },
{ "deletePath": "ExternalDataSources/PG/Tables/sales.xml" } {
"deletePath": "ExternalDataSources/PG/Tables/sales.xml"
}
], ],
"params": { "objectPath": "ExternalDataSources/PG.xml" }, "params": {
"input": { "add": { "tables": { "sales": ["id: Number(10,0)"] } } }, "objectPath": "ExternalDataSources/PG.xml"
},
"input": {
"add": {
"tables": {
"sales": [
"id: Number(10,0)"
]
}
}
},
"expect": { "expect": {
"stdoutContains": ["already exists"], "stdoutContains": [
"filesAbsent": ["ExternalDataSources/PG/Tables/sales.xml"] "already exists"
} ],
"filesAbsent": [
"ExternalDataSources/PG/Tables/sales.xml"
]
},
"skipPlatformVerify": "кейс нарочно удаляет файл таблицы, оставляя висячую регистрацию: такую конфигурацию платформа не загрузит по условию кейса, а не из-за дефекта навыка"
} }
@@ -87,50 +87,50 @@
<ExecuteAfterWriteDataHistoryVersionProcessing>false</ExecuteAfterWriteDataHistoryVersionProcessing> <ExecuteAfterWriteDataHistoryVersionProcessing>false</ExecuteAfterWriteDataHistoryVersionProcessing>
</Properties> </Properties>
<ChildObjects> <ChildObjects>
<Attribute uuid="UUID-012"> <Attribute uuid="UUID-012">
<Properties> <Properties>
<Name>ИНН</Name> <Name>ИНН</Name>
<Synonym> <Synonym>
<v8:item> <v8:item>
<v8:lang>ru</v8:lang> <v8:lang>ru</v8:lang>
<v8:content>Инн</v8:content> <v8:content>Инн</v8:content>
</v8:item> </v8:item>
</Synonym> </Synonym>
<Comment/> <Comment/>
<Type> <Type>
<v8:Type>xs:string</v8:Type> <v8:Type>xs:string</v8:Type>
<v8:StringQualifiers> <v8:StringQualifiers>
<v8:Length>12</v8:Length> <v8:Length>12</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength> <v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers> </v8:StringQualifiers>
</Type> </Type>
<PasswordMode>false</PasswordMode> <PasswordMode>false</PasswordMode>
<Format/> <Format/>
<EditFormat/> <EditFormat/>
<ToolTip/> <ToolTip/>
<MarkNegatives>false</MarkNegatives> <MarkNegatives>false</MarkNegatives>
<Mask/> <Mask/>
<MultiLine>false</MultiLine> <MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit> <ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/> <MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/> <MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue> <FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:type="xs:string"/> <FillValue xsi:type="xs:string"/>
<FillChecking>DontCheck</FillChecking> <FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems> <ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/> <ChoiceParameterLinks/>
<ChoiceParameters/> <ChoiceParameters/>
<QuickChoice>Auto</QuickChoice> <QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput> <CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/> <ChoiceForm/>
<LinkByType/> <LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput> <ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Use>ForItem</Use> <Use>ForItem</Use>
<Indexing>DontIndex</Indexing> <Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch> <FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory> <DataHistory>Use</DataHistory>
</Properties> </Properties>
</Attribute> </Attribute>
</ChildObjects> </ChildObjects>
</Catalog> </Catalog>
</MetaDataObject> </MetaDataObject>
@@ -87,27 +87,27 @@
<ExecuteAfterWriteDataHistoryVersionProcessing>false</ExecuteAfterWriteDataHistoryVersionProcessing> <ExecuteAfterWriteDataHistoryVersionProcessing>false</ExecuteAfterWriteDataHistoryVersionProcessing>
</Properties> </Properties>
<ChildObjects> <ChildObjects>
<Command uuid="UUID-012"> <Command uuid="UUID-012">
<Properties> <Properties>
<Name>ОткрытьДосье</Name> <Name>ОткрытьДосье</Name>
<Synonym> <Synonym>
<v8:item> <v8:item>
<v8:lang>ru</v8:lang> <v8:lang>ru</v8:lang>
<v8:content>Открыть досье</v8:content> <v8:content>Открыть досье</v8:content>
</v8:item> </v8:item>
</Synonym> </Synonym>
<Comment/> <Comment/>
<Group>FormNavigationPanelGoTo</Group> <Group>FormNavigationPanelGoTo</Group>
<CommandParameterType/> <CommandParameterType/>
<ParameterUseMode>Single</ParameterUseMode> <ParameterUseMode>Single</ParameterUseMode>
<ModifiesData>false</ModifiesData> <ModifiesData>false</ModifiesData>
<Representation>Auto</Representation> <Representation>Auto</Representation>
<ToolTip/> <ToolTip/>
<Picture/> <Picture/>
<Shortcut/> <Shortcut/>
<OnMainServerUnavalableBehavior>Auto</OnMainServerUnavalableBehavior> <OnMainServerUnavalableBehavior>Auto</OnMainServerUnavalableBehavior>
</Properties> </Properties>
</Command> </Command>
</ChildObjects> </ChildObjects>
</Catalog> </Catalog>
</MetaDataObject> </MetaDataObject>
@@ -87,143 +87,143 @@
<ExecuteAfterWriteDataHistoryVersionProcessing>false</ExecuteAfterWriteDataHistoryVersionProcessing> <ExecuteAfterWriteDataHistoryVersionProcessing>false</ExecuteAfterWriteDataHistoryVersionProcessing>
</Properties> </Properties>
<ChildObjects> <ChildObjects>
<TabularSection uuid="UUID-012"> <TabularSection uuid="UUID-012">
<InternalInfo> <InternalInfo>
<xr:GeneratedType name="CatalogTabularSection.Контрагенты.КонтактнаяИнформация" category="TabularSection"> <xr:GeneratedType name="CatalogTabularSection.Контрагенты.КонтактнаяИнформация" category="TabularSection">
<xr:TypeId>UUID-013</xr:TypeId> <xr:TypeId>UUID-013</xr:TypeId>
<xr:ValueId>UUID-014</xr:ValueId> <xr:ValueId>UUID-014</xr:ValueId>
</xr:GeneratedType> </xr:GeneratedType>
<xr:GeneratedType name="CatalogTabularSectionRow.Контрагенты.КонтактнаяИнформация" category="TabularSectionRow"> <xr:GeneratedType name="CatalogTabularSectionRow.Контрагенты.КонтактнаяИнформация" category="TabularSectionRow">
<xr:TypeId>UUID-015</xr:TypeId> <xr:TypeId>UUID-015</xr:TypeId>
<xr:ValueId>UUID-016</xr:ValueId> <xr:ValueId>UUID-016</xr:ValueId>
</xr:GeneratedType> </xr:GeneratedType>
</InternalInfo> </InternalInfo>
<Properties> <Properties>
<Name>КонтактнаяИнформация</Name> <Name>КонтактнаяИнформация</Name>
<Synonym> <Synonym>
<v8:item> <v8:item>
<v8:lang>ru</v8:lang> <v8:lang>ru</v8:lang>
<v8:content>Контактная информация</v8:content> <v8:content>Контактная информация</v8:content>
</v8:item> </v8:item>
</Synonym> </Synonym>
<Comment/> <Comment/>
<ToolTip/> <ToolTip/>
<FillChecking>DontCheck</FillChecking> <FillChecking>DontCheck</FillChecking>
<StandardAttributes> <StandardAttributes>
<xr:StandardAttribute name="LineNumber"> <xr:StandardAttribute name="LineNumber">
<xr:LinkByType/> <xr:LinkByType/>
<xr:FillChecking>DontCheck</xr:FillChecking> <xr:FillChecking>DontCheck</xr:FillChecking>
<xr:MultiLine>false</xr:MultiLine> <xr:MultiLine>false</xr:MultiLine>
<xr:FillFromFillingValue>false</xr:FillFromFillingValue> <xr:FillFromFillingValue>false</xr:FillFromFillingValue>
<xr:CreateOnInput>Auto</xr:CreateOnInput> <xr:CreateOnInput>Auto</xr:CreateOnInput>
<xr:MaxValue xsi:nil="true"/> <xr:MaxValue xsi:nil="true"/>
<xr:ToolTip/> <xr:ToolTip/>
<xr:ExtendedEdit>false</xr:ExtendedEdit> <xr:ExtendedEdit>false</xr:ExtendedEdit>
<xr:Format/> <xr:Format/>
<xr:ChoiceForm/> <xr:ChoiceForm/>
<xr:QuickChoice>Auto</xr:QuickChoice> <xr:QuickChoice>Auto</xr:QuickChoice>
<xr:ChoiceHistoryOnInput>Auto</xr:ChoiceHistoryOnInput> <xr:ChoiceHistoryOnInput>Auto</xr:ChoiceHistoryOnInput>
<xr:EditFormat/> <xr:EditFormat/>
<xr:PasswordMode>false</xr:PasswordMode> <xr:PasswordMode>false</xr:PasswordMode>
<xr:DataHistory>Use</xr:DataHistory> <xr:DataHistory>Use</xr:DataHistory>
<xr:MarkNegatives>false</xr:MarkNegatives> <xr:MarkNegatives>false</xr:MarkNegatives>
<xr:MinValue xsi:nil="true"/> <xr:MinValue xsi:nil="true"/>
<xr:Synonym/> <xr:Synonym/>
<xr:Comment/> <xr:Comment/>
<xr:FullTextSearch>Use</xr:FullTextSearch> <xr:FullTextSearch>Use</xr:FullTextSearch>
<xr:ChoiceParameterLinks/> <xr:ChoiceParameterLinks/>
<xr:FillValue xsi:nil="true"/> <xr:FillValue xsi:nil="true"/>
<xr:Mask/> <xr:Mask/>
<xr:ChoiceParameters/> <xr:ChoiceParameters/>
</xr:StandardAttribute> </xr:StandardAttribute>
</StandardAttributes> </StandardAttributes>
<Use>ForItem</Use> <Use>ForItem</Use>
</Properties> </Properties>
<ChildObjects> <ChildObjects>
<Attribute uuid="UUID-017"> <Attribute uuid="UUID-017">
<Properties> <Properties>
<Name>Тип</Name> <Name>Тип</Name>
<Synonym> <Synonym>
<v8:item> <v8:item>
<v8:lang>ru</v8:lang> <v8:lang>ru</v8:lang>
<v8:content>Тип</v8:content> <v8:content>Тип</v8:content>
</v8:item> </v8:item>
</Synonym> </Synonym>
<Comment/> <Comment/>
<Type> <Type>
<v8:Type>xs:string</v8:Type> <v8:Type>xs:string</v8:Type>
<v8:StringQualifiers> <v8:StringQualifiers>
<v8:Length>50</v8:Length> <v8:Length>50</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength> <v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers> </v8:StringQualifiers>
</Type> </Type>
<PasswordMode>false</PasswordMode> <PasswordMode>false</PasswordMode>
<Format/> <Format/>
<EditFormat/> <EditFormat/>
<ToolTip/> <ToolTip/>
<MarkNegatives>false</MarkNegatives> <MarkNegatives>false</MarkNegatives>
<Mask/> <Mask/>
<MultiLine>false</MultiLine> <MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit> <ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/> <MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/> <MaxValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking> <FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems> <ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/> <ChoiceParameterLinks/>
<ChoiceParameters/> <ChoiceParameters/>
<QuickChoice>Auto</QuickChoice> <QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput> <CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/> <ChoiceForm/>
<LinkByType/> <LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput> <ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Indexing>DontIndex</Indexing> <Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch> <FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory> <DataHistory>Use</DataHistory>
</Properties> </Properties>
</Attribute> </Attribute>
<Attribute uuid="UUID-018"> <Attribute uuid="UUID-018">
<Properties> <Properties>
<Name>Значение</Name> <Name>Значение</Name>
<Synonym> <Synonym>
<v8:item> <v8:item>
<v8:lang>ru</v8:lang> <v8:lang>ru</v8:lang>
<v8:content>Значение</v8:content> <v8:content>Значение</v8:content>
</v8:item> </v8:item>
</Synonym> </Synonym>
<Comment/> <Comment/>
<Type> <Type>
<v8:Type>xs:string</v8:Type> <v8:Type>xs:string</v8:Type>
<v8:StringQualifiers> <v8:StringQualifiers>
<v8:Length>250</v8:Length> <v8:Length>250</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength> <v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers> </v8:StringQualifiers>
</Type> </Type>
<PasswordMode>false</PasswordMode> <PasswordMode>false</PasswordMode>
<Format/> <Format/>
<EditFormat/> <EditFormat/>
<ToolTip/> <ToolTip/>
<MarkNegatives>false</MarkNegatives> <MarkNegatives>false</MarkNegatives>
<Mask/> <Mask/>
<MultiLine>false</MultiLine> <MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit> <ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/> <MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/> <MaxValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking> <FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems> <ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/> <ChoiceParameterLinks/>
<ChoiceParameters/> <ChoiceParameters/>
<QuickChoice>Auto</QuickChoice> <QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput> <CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/> <ChoiceForm/>
<LinkByType/> <LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput> <ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Indexing>DontIndex</Indexing> <Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch> <FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory> <DataHistory>Use</DataHistory>
</Properties> </Properties>
</Attribute> </Attribute>
</ChildObjects> </ChildObjects>
</TabularSection> </TabularSection>
</ChildObjects> </ChildObjects>
</Catalog> </Catalog>
</MetaDataObject> </MetaDataObject>
@@ -87,50 +87,50 @@
<ExecuteAfterWriteDataHistoryVersionProcessing>false</ExecuteAfterWriteDataHistoryVersionProcessing> <ExecuteAfterWriteDataHistoryVersionProcessing>false</ExecuteAfterWriteDataHistoryVersionProcessing>
</Properties> </Properties>
<ChildObjects> <ChildObjects>
<Attribute uuid="UUID-012"> <Attribute uuid="UUID-012">
<Properties> <Properties>
<Name>ИНН</Name> <Name>ИНН</Name>
<Synonym> <Synonym>
<v8:item> <v8:item>
<v8:lang>ru</v8:lang> <v8:lang>ru</v8:lang>
<v8:content>Инн</v8:content> <v8:content>Инн</v8:content>
</v8:item> </v8:item>
</Synonym> </Synonym>
<Comment/> <Comment/>
<Type> <Type>
<v8:Type>xs:string</v8:Type> <v8:Type>xs:string</v8:Type>
<v8:StringQualifiers> <v8:StringQualifiers>
<v8:Length>12</v8:Length> <v8:Length>12</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength> <v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers> </v8:StringQualifiers>
</Type> </Type>
<PasswordMode>false</PasswordMode> <PasswordMode>false</PasswordMode>
<Format/> <Format/>
<EditFormat/> <EditFormat/>
<ToolTip/> <ToolTip/>
<MarkNegatives>false</MarkNegatives> <MarkNegatives>false</MarkNegatives>
<Mask/> <Mask/>
<MultiLine>false</MultiLine> <MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit> <ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/> <MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/> <MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue> <FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:type="xs:string"/> <FillValue xsi:type="xs:string"/>
<FillChecking>DontCheck</FillChecking> <FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems> <ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/> <ChoiceParameterLinks/>
<ChoiceParameters/> <ChoiceParameters/>
<QuickChoice>Auto</QuickChoice> <QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput> <CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/> <ChoiceForm/>
<LinkByType/> <LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput> <ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Use>ForItem</Use> <Use>ForItem</Use>
<Indexing>DontIndex</Indexing> <Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch> <FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory> <DataHistory>Use</DataHistory>
</Properties> </Properties>
</Attribute> </Attribute>
</ChildObjects> </ChildObjects>
</Catalog> </Catalog>
</MetaDataObject> </MetaDataObject>