xkhofmann-tfdidesign-md11-f.../convertToVOLKB.mjs
2025-01-24 16:38:55 +01:00

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) &apos;WheelUp&apos; scmp 0 == if{ 96272 (&gt;L:CEVENT) } (M:Event)
&apos;WheelDown&apos; scmp 0 == if{ 96273 (&gt;L:CEVENT) } (M:Event) &apos;LeftSingle&apos;
scmp 0 == if{ 96274 (&gt;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) &apos;WheelUp&apos; scmp 0 == if{ 96275 (&gt;L:CEVENT) } (M:Event)
&apos;WheelDown&apos; scmp 0 == if{ 96276 (&gt;L:CEVENT) } (M:Event) &apos;LeftSingle&apos;
scmp 0 == if{ 96277 (&gt;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) &apos;WheelUp&apos; scmp 0 == if{ 96278 (&gt;L:CEVENT) } (M:Event)
&apos;WheelDown&apos; scmp 0 == if{ 96279 (&gt;L:CEVENT) } (M:Event) &apos;LeftSingle&apos;
scmp 0 == if{ 96280 (&gt;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) &apos;WheelUp&apos; scmp 0 == if{ 96281 (&gt;L:CEVENT) } (M:Event)
&apos;WheelDown&apos; scmp 0 == if{ 96282 (&gt;L:CEVENT) } (M:Event) &apos;LeftSingle&apos;
scmp 0 == if{ 96283 (&gt;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) &apos;WheelUp&apos; scmp 0 == if{ 96284 (&gt;L:CEVENT) } (M:Event)
&apos;WheelDown&apos; scmp 0 == if{ 96285 (&gt;L:CEVENT) } (M:Event) &apos;LeftSingle&apos;
scmp 0 == if{ 96286 (&gt;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) &apos;WheelUp&apos; scmp 0 == if{ 96287 (&gt;L:CEVENT) } (M:Event)
&apos;WheelDown&apos; scmp 0 == if{ 96288 (&gt;L:CEVENT) } (M:Event) &apos;LeftSingle&apos;
scmp 0 == if{ 96289 (&gt;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) &apos;WheelUp&apos; scmp 0 == if{ 96290 (&gt;L:CEVENT) } (M:Event)
&apos;WheelDown&apos; scmp 0 == if{ 96291 (&gt;L:CEVENT) } (M:Event) &apos;LeftSingle&apos;
scmp 0 == if{ 96292 (&gt;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) &apos;WheelUp&apos; scmp 0 == if{ 96293 (&gt;L:CEVENT) } (M:Event)
&apos;WheelDown&apos; scmp 0 == if{ 96294 (&gt;L:CEVENT) } (M:Event) &apos;LeftSingle&apos;
scmp 0 == if{ 96295 (&gt;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) &apos;WheelUp&apos; scmp 0 == if{ 96296 (&gt;L:CEVENT) } (M:Event)
&apos;WheelDown&apos; scmp 0 == if{ 96297 (&gt;L:CEVENT) } (M:Event) &apos;LeftSingle&apos;
scmp 0 == if{ 96298 (&gt;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) &apos;WheelUp&apos; scmp 0 == if{ 96299 (&gt;L:CEVENT) } (M:Event)
&apos;WheelDown&apos; scmp 0 == if{ 96300 (&gt;L:CEVENT) } (M:Event) &apos;LeftSingle&apos;
scmp 0 == if{ 96301 (&gt;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) &apos;WheelUp&apos; scmp 0 == if{ 96302 (&gt;L:CEVENT) } (M:Event)
&apos;WheelDown&apos; scmp 0 == if{ 96303 (&gt;L:CEVENT) } (M:Event) &apos;LeftSingle&apos;
scmp 0 == if{ 96304 (&gt;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) &apos;WheelUp&apos; scmp 0 == if{ 96305 (&gt;L:CEVENT) } (M:Event)
&apos;WheelDown&apos; scmp 0 == if{ 96306 (&gt;L:CEVENT) } (M:Event) &apos;LeftSingle&apos;
scmp 0 == if{ 96307 (&gt;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) &apos;WheelUp&apos; scmp 0 == if{ 96308 (&gt;L:CEVENT) } (M:Event)
&apos;WheelDown&apos; scmp 0 == if{ 96309 (&gt;L:CEVENT) } (M:Event) &apos;LeftSingle&apos;
scmp 0 == if{ 96310 (&gt;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) &apos;WheelUp&apos; scmp 0 == if{ 96311 (&gt;L:CEVENT) } (M:Event)
&apos;WheelDown&apos; scmp 0 == if{ 96312 (&gt;L:CEVENT) } (M:Event) &apos;LeftSingle&apos;
scmp 0 == if{ 96313 (&gt;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) &apos;WheelUp&apos; scmp 0 == if{ 96314 (&gt;L:CEVENT) } (M:Event)
&apos;WheelDown&apos; scmp 0 == if{ 96315 (&gt;L:CEVENT) } (M:Event) &apos;LeftSingle&apos;
scmp 0 == if{ 96316 (&gt;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) &apos;WheelUp&apos; scmp 0 == if{ 96317 (&gt;L:CEVENT) } (M:Event)
&apos;WheelDown&apos; scmp 0 == if{ 96318 (&gt;L:CEVENT) } (M:Event) &apos;LeftSingle&apos;
scmp 0 == if{ 96319 (&gt;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);