320 lines
10 KiB
JavaScript
320 lines
10 KiB
JavaScript
import { XMLParser, XMLBuilder, XMLValidator } from "fast-xml-parser";
|
|
|
|
const input = `
|
|
<PartInfo>
|
|
<Name>MD11_OBS_AUDIO_PNL_VHF1_VOL_KB</Name>
|
|
<AnimLength>10</AnimLength>
|
|
<Animation>
|
|
<Parameter>
|
|
<Code>(L:MD11_OBS_AUDIO_PNL_VHF1_VOL_KB, enum) 1 *</Code>
|
|
<Lag>100</Lag>
|
|
</Parameter>
|
|
</Animation>
|
|
<MouseRect>
|
|
<Cursor>HAND</Cursor>
|
|
<MouseFlags>WheelUp+WheelDown+LeftSingle</MouseFlags>
|
|
<CallbackCode>(M:Event) 'WheelUp' scmp 0 == if{ 96272 (>L:CEVENT) } (M:Event)
|
|
'WheelDown' scmp 0 == if{ 96273 (>L:CEVENT) } (M:Event) 'LeftSingle'
|
|
scmp 0 == if{ 96274 (>L:CEVENT) }</CallbackCode>
|
|
</MouseRect>
|
|
</PartInfo>
|
|
<PartInfo>
|
|
<Name>MD11_OBS_AUDIO_PNL_VHF2_VOL_KB</Name>
|
|
<AnimLength>10</AnimLength>
|
|
<Animation>
|
|
<Parameter>
|
|
<Code>(L:MD11_OBS_AUDIO_PNL_VHF2_VOL_KB, enum) 1 *</Code>
|
|
<Lag>100</Lag>
|
|
</Parameter>
|
|
</Animation>
|
|
<MouseRect>
|
|
<Cursor>HAND</Cursor>
|
|
<MouseFlags>WheelUp+WheelDown+LeftSingle</MouseFlags>
|
|
<CallbackCode>(M:Event) 'WheelUp' scmp 0 == if{ 96275 (>L:CEVENT) } (M:Event)
|
|
'WheelDown' scmp 0 == if{ 96276 (>L:CEVENT) } (M:Event) 'LeftSingle'
|
|
scmp 0 == if{ 96277 (>L:CEVENT) }</CallbackCode>
|
|
</MouseRect>
|
|
</PartInfo>
|
|
<PartInfo>
|
|
<Name>MD11_OBS_AUDIO_PNL_VHF3_VOL_KB</Name>
|
|
<AnimLength>10</AnimLength>
|
|
<Animation>
|
|
<Parameter>
|
|
<Code>(L:MD11_OBS_AUDIO_PNL_VHF3_VOL_KB, enum) 1 *</Code>
|
|
<Lag>100</Lag>
|
|
</Parameter>
|
|
</Animation>
|
|
<MouseRect>
|
|
<Cursor>HAND</Cursor>
|
|
<MouseFlags>WheelUp+WheelDown+LeftSingle</MouseFlags>
|
|
<CallbackCode>(M:Event) 'WheelUp' scmp 0 == if{ 96278 (>L:CEVENT) } (M:Event)
|
|
'WheelDown' scmp 0 == if{ 96279 (>L:CEVENT) } (M:Event) 'LeftSingle'
|
|
scmp 0 == if{ 96280 (>L:CEVENT) }</CallbackCode>
|
|
</MouseRect>
|
|
</PartInfo>
|
|
<PartInfo>
|
|
<Name>MD11_OBS_AUDIO_PNL_HF1_VOL_KB</Name>
|
|
<AnimLength>10</AnimLength>
|
|
<Animation>
|
|
<Parameter>
|
|
<Code>(L:MD11_OBS_AUDIO_PNL_HF1_VOL_KB, enum) 1 *</Code>
|
|
<Lag>100</Lag>
|
|
</Parameter>
|
|
</Animation>
|
|
<MouseRect>
|
|
<Cursor>HAND</Cursor>
|
|
<MouseFlags>WheelUp+WheelDown+LeftSingle</MouseFlags>
|
|
<CallbackCode>(M:Event) 'WheelUp' scmp 0 == if{ 96281 (>L:CEVENT) } (M:Event)
|
|
'WheelDown' scmp 0 == if{ 96282 (>L:CEVENT) } (M:Event) 'LeftSingle'
|
|
scmp 0 == if{ 96283 (>L:CEVENT) }</CallbackCode>
|
|
</MouseRect>
|
|
</PartInfo>
|
|
<PartInfo>
|
|
<Name>MD11_OBS_AUDIO_PNL_HF2_VOL_KB</Name>
|
|
<AnimLength>10</AnimLength>
|
|
<Animation>
|
|
<Parameter>
|
|
<Code>(L:MD11_OBS_AUDIO_PNL_HF2_VOL_KB, enum) 1 *</Code>
|
|
<Lag>100</Lag>
|
|
</Parameter>
|
|
</Animation>
|
|
<MouseRect>
|
|
<Cursor>HAND</Cursor>
|
|
<MouseFlags>WheelUp+WheelDown+LeftSingle</MouseFlags>
|
|
<CallbackCode>(M:Event) 'WheelUp' scmp 0 == if{ 96284 (>L:CEVENT) } (M:Event)
|
|
'WheelDown' scmp 0 == if{ 96285 (>L:CEVENT) } (M:Event) 'LeftSingle'
|
|
scmp 0 == if{ 96286 (>L:CEVENT) }</CallbackCode>
|
|
</MouseRect>
|
|
</PartInfo>
|
|
<PartInfo>
|
|
<Name>MD11_OBS_AUDIO_PNL_SAT_VOL_KB</Name>
|
|
<AnimLength>10</AnimLength>
|
|
<Animation>
|
|
<Parameter>
|
|
<Code>(L:MD11_OBS_AUDIO_PNL_SAT_VOL_KB, enum) 1 *</Code>
|
|
<Lag>100</Lag>
|
|
</Parameter>
|
|
</Animation>
|
|
<MouseRect>
|
|
<Cursor>HAND</Cursor>
|
|
<MouseFlags>WheelUp+WheelDown+LeftSingle</MouseFlags>
|
|
<CallbackCode>(M:Event) 'WheelUp' scmp 0 == if{ 96287 (>L:CEVENT) } (M:Event)
|
|
'WheelDown' scmp 0 == if{ 96288 (>L:CEVENT) } (M:Event) 'LeftSingle'
|
|
scmp 0 == if{ 96289 (>L:CEVENT) }</CallbackCode>
|
|
</MouseRect>
|
|
</PartInfo>
|
|
<PartInfo>
|
|
<Name>MD11_OBS_AUDIO_PNL_INT_VOL_KB</Name>
|
|
<AnimLength>10</AnimLength>
|
|
<Animation>
|
|
<Parameter>
|
|
<Code>(L:MD11_OBS_AUDIO_PNL_INT_VOL_KB, enum) 1 *</Code>
|
|
<Lag>100</Lag>
|
|
</Parameter>
|
|
</Animation>
|
|
<MouseRect>
|
|
<Cursor>HAND</Cursor>
|
|
<MouseFlags>WheelUp+WheelDown+LeftSingle</MouseFlags>
|
|
<CallbackCode>(M:Event) 'WheelUp' scmp 0 == if{ 96290 (>L:CEVENT) } (M:Event)
|
|
'WheelDown' scmp 0 == if{ 96291 (>L:CEVENT) } (M:Event) 'LeftSingle'
|
|
scmp 0 == if{ 96292 (>L:CEVENT) }</CallbackCode>
|
|
</MouseRect>
|
|
</PartInfo>
|
|
<PartInfo>
|
|
<Name>MD11_OBS_AUDIO_PNL_CAB_VOL_KB</Name>
|
|
<AnimLength>10</AnimLength>
|
|
<Animation>
|
|
<Parameter>
|
|
<Code>(L:MD11_OBS_AUDIO_PNL_CAB_VOL_KB, enum) 1 *</Code>
|
|
<Lag>100</Lag>
|
|
</Parameter>
|
|
</Animation>
|
|
<MouseRect>
|
|
<Cursor>HAND</Cursor>
|
|
<MouseFlags>WheelUp+WheelDown+LeftSingle</MouseFlags>
|
|
<CallbackCode>(M:Event) 'WheelUp' scmp 0 == if{ 96293 (>L:CEVENT) } (M:Event)
|
|
'WheelDown' scmp 0 == if{ 96294 (>L:CEVENT) } (M:Event) 'LeftSingle'
|
|
scmp 0 == if{ 96295 (>L:CEVENT) }</CallbackCode>
|
|
</MouseRect>
|
|
</PartInfo>
|
|
<PartInfo>
|
|
<Name>MD11_OBS_AUDIO_PNL_PA_VOL_KB</Name>
|
|
<AnimLength>10</AnimLength>
|
|
<Animation>
|
|
<Parameter>
|
|
<Code>(L:MD11_OBS_AUDIO_PNL_PA_VOL_KB, enum) 1 *</Code>
|
|
<Lag>100</Lag>
|
|
</Parameter>
|
|
</Animation>
|
|
<MouseRect>
|
|
<Cursor>HAND</Cursor>
|
|
<MouseFlags>WheelUp+WheelDown+LeftSingle</MouseFlags>
|
|
<CallbackCode>(M:Event) 'WheelUp' scmp 0 == if{ 96296 (>L:CEVENT) } (M:Event)
|
|
'WheelDown' scmp 0 == if{ 96297 (>L:CEVENT) } (M:Event) 'LeftSingle'
|
|
scmp 0 == if{ 96298 (>L:CEVENT) }</CallbackCode>
|
|
</MouseRect>
|
|
</PartInfo>
|
|
<PartInfo>
|
|
<Name>MD11_OBS_AUDIO_PNL_VOR1_VOL_KB</Name>
|
|
<AnimLength>10</AnimLength>
|
|
<Animation>
|
|
<Parameter>
|
|
<Code>(L:MD11_OBS_AUDIO_PNL_VOR1_VOL_KB, enum) 1 *</Code>
|
|
<Lag>100</Lag>
|
|
</Parameter>
|
|
</Animation>
|
|
<MouseRect>
|
|
<Cursor>HAND</Cursor>
|
|
<MouseFlags>WheelUp+WheelDown+LeftSingle</MouseFlags>
|
|
<CallbackCode>(M:Event) 'WheelUp' scmp 0 == if{ 96299 (>L:CEVENT) } (M:Event)
|
|
'WheelDown' scmp 0 == if{ 96300 (>L:CEVENT) } (M:Event) 'LeftSingle'
|
|
scmp 0 == if{ 96301 (>L:CEVENT) }</CallbackCode>
|
|
</MouseRect>
|
|
</PartInfo>
|
|
<PartInfo>
|
|
<Name>MD11_OBS_AUDIO_PNL_VOR2_VOL_KB</Name>
|
|
<AnimLength>10</AnimLength>
|
|
<Animation>
|
|
<Parameter>
|
|
<Code>(L:MD11_OBS_AUDIO_PNL_VOR2_VOL_KB, enum) 1 *</Code>
|
|
<Lag>100</Lag>
|
|
</Parameter>
|
|
</Animation>
|
|
<MouseRect>
|
|
<Cursor>HAND</Cursor>
|
|
<MouseFlags>WheelUp+WheelDown+LeftSingle</MouseFlags>
|
|
<CallbackCode>(M:Event) 'WheelUp' scmp 0 == if{ 96302 (>L:CEVENT) } (M:Event)
|
|
'WheelDown' scmp 0 == if{ 96303 (>L:CEVENT) } (M:Event) 'LeftSingle'
|
|
scmp 0 == if{ 96304 (>L:CEVENT) }</CallbackCode>
|
|
</MouseRect>
|
|
</PartInfo>
|
|
<PartInfo>
|
|
<Name>MD11_OBS_AUDIO_PNL_ILS1_VOL_KB</Name>
|
|
<AnimLength>10</AnimLength>
|
|
<Animation>
|
|
<Parameter>
|
|
<Code>(L:MD11_OBS_AUDIO_PNL_ILS1_VOL_KB, enum) 1 *</Code>
|
|
<Lag>100</Lag>
|
|
</Parameter>
|
|
</Animation>
|
|
<MouseRect>
|
|
<Cursor>HAND</Cursor>
|
|
<MouseFlags>WheelUp+WheelDown+LeftSingle</MouseFlags>
|
|
<CallbackCode>(M:Event) 'WheelUp' scmp 0 == if{ 96305 (>L:CEVENT) } (M:Event)
|
|
'WheelDown' scmp 0 == if{ 96306 (>L:CEVENT) } (M:Event) 'LeftSingle'
|
|
scmp 0 == if{ 96307 (>L:CEVENT) }</CallbackCode>
|
|
</MouseRect>
|
|
</PartInfo>
|
|
<PartInfo>
|
|
<Name>MD11_OBS_AUDIO_PNL_ILS2_VOL_KB</Name>
|
|
<AnimLength>10</AnimLength>
|
|
<Animation>
|
|
<Parameter>
|
|
<Code>(L:MD11_OBS_AUDIO_PNL_ILS2_VOL_KB, enum) 1 *</Code>
|
|
<Lag>100</Lag>
|
|
</Parameter>
|
|
</Animation>
|
|
<MouseRect>
|
|
<Cursor>HAND</Cursor>
|
|
<MouseFlags>WheelUp+WheelDown+LeftSingle</MouseFlags>
|
|
<CallbackCode>(M:Event) 'WheelUp' scmp 0 == if{ 96308 (>L:CEVENT) } (M:Event)
|
|
'WheelDown' scmp 0 == if{ 96309 (>L:CEVENT) } (M:Event) 'LeftSingle'
|
|
scmp 0 == if{ 96310 (>L:CEVENT) }</CallbackCode>
|
|
</MouseRect>
|
|
</PartInfo>
|
|
<PartInfo>
|
|
<Name>MD11_OBS_AUDIO_PNL_ADF1_VOL_KB</Name>
|
|
<AnimLength>10</AnimLength>
|
|
<Animation>
|
|
<Parameter>
|
|
<Code>(L:MD11_OBS_AUDIO_PNL_ADF1_VOL_KB, enum) 1 *</Code>
|
|
<Lag>100</Lag>
|
|
</Parameter>
|
|
</Animation>
|
|
<MouseRect>
|
|
<Cursor>HAND</Cursor>
|
|
<MouseFlags>WheelUp+WheelDown+LeftSingle</MouseFlags>
|
|
<CallbackCode>(M:Event) 'WheelUp' scmp 0 == if{ 96311 (>L:CEVENT) } (M:Event)
|
|
'WheelDown' scmp 0 == if{ 96312 (>L:CEVENT) } (M:Event) 'LeftSingle'
|
|
scmp 0 == if{ 96313 (>L:CEVENT) }</CallbackCode>
|
|
</MouseRect>
|
|
</PartInfo>
|
|
<PartInfo>
|
|
<Name>MD11_OBS_AUDIO_PNL_ADF2_VOL_KB</Name>
|
|
<AnimLength>10</AnimLength>
|
|
<Animation>
|
|
<Parameter>
|
|
<Code>(L:MD11_OBS_AUDIO_PNL_ADF2_VOL_KB, enum) 1 *</Code>
|
|
<Lag>100</Lag>
|
|
</Parameter>
|
|
</Animation>
|
|
<MouseRect>
|
|
<Cursor>HAND</Cursor>
|
|
<MouseFlags>WheelUp+WheelDown+LeftSingle</MouseFlags>
|
|
<CallbackCode>(M:Event) 'WheelUp' scmp 0 == if{ 96314 (>L:CEVENT) } (M:Event)
|
|
'WheelDown' scmp 0 == if{ 96315 (>L:CEVENT) } (M:Event) 'LeftSingle'
|
|
scmp 0 == if{ 96316 (>L:CEVENT) }</CallbackCode>
|
|
</MouseRect>
|
|
</PartInfo>
|
|
<PartInfo>
|
|
<Name>MD11_OBS_AUDIO_PNL_MKR_VOL_KB</Name>
|
|
<AnimLength>10</AnimLength>
|
|
<Animation>
|
|
<Parameter>
|
|
<Code>(L:MD11_OBS_AUDIO_PNL_MKR_VOL_KB, enum) 1 *</Code>
|
|
<Lag>100</Lag>
|
|
</Parameter>
|
|
</Animation>
|
|
<MouseRect>
|
|
<Cursor>HAND</Cursor>
|
|
<MouseFlags>WheelUp+WheelDown+LeftSingle</MouseFlags>
|
|
<CallbackCode>(M:Event) 'WheelUp' scmp 0 == if{ 96317 (>L:CEVENT) } (M:Event)
|
|
'WheelDown' scmp 0 == if{ 96318 (>L:CEVENT) } (M:Event) 'LeftSingle'
|
|
scmp 0 == if{ 96319 (>L:CEVENT) }</CallbackCode>
|
|
</MouseRect>
|
|
</PartInfo>
|
|
`;
|
|
|
|
function convert(element) {
|
|
const codes = [
|
|
...element.MouseRect.CallbackCode.matchAll(/([\d]*)[\s]*\(>L:CEVENT\)/gm),
|
|
].map((m) => m[1]);
|
|
|
|
return {
|
|
"@_Name": "MD11_Infinite_Knob_Push",
|
|
NODE_NAME: element.Name,
|
|
ANIM_LENGTH_KNOB: 10,
|
|
ANIM_CODE: `10 (L:${element.Name}) 1 * -`,
|
|
ANIM_NAME_PUSH: `${element.Name.replace("KB", "BT")}`,
|
|
ANIM_CODE_PUSH: `(L:${element.Name.replace("KB", "BT")}) 10 *`,
|
|
INC_CODE: `${codes[0]} (>L:CEVENT)`,
|
|
DEC_CODE: `${codes[1]} (>L:CEVENT)`,
|
|
PUSH_CODE: `${codes[2]} (>L:CEVENT)`,
|
|
REL_CODE: null,
|
|
};
|
|
}
|
|
|
|
const parser = new XMLParser({
|
|
ignoreAttributes: false,
|
|
});
|
|
let jObj = parser.parse(input);
|
|
|
|
const output = [];
|
|
|
|
if (Array.isArray(jObj.PartInfo)) {
|
|
jObj.PartInfo.forEach((element) => {
|
|
output.push(convert(element));
|
|
});
|
|
} else {
|
|
output.push(convert(jObj.PartInfo));
|
|
}
|
|
|
|
const builder = new XMLBuilder({
|
|
ignoreAttributes: false,
|
|
arrayNodeName: "UseTemplate",
|
|
format: true,
|
|
});
|
|
const xmlContent = builder.build(output);
|
|
|
|
console.log(xmlContent);
|