From 04f4e2acfbc82946ca3def654214c08071a87359 Mon Sep 17 00:00:00 2001 From: George Hazan <george.hazan@gmail.com> Date: Sat, 20 Jun 2015 13:55:58 +0000 Subject: xml api became a set of functions git-svn-id: http://svn.miranda-ng.org/main/trunk@14288 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/Actman/ua/i_inoutjson.inc | 2 +- plugins/Actman/ua/i_inoutxm.inc | 389 ++++++++++++++++++-------------------- 2 files changed, 181 insertions(+), 210 deletions(-) (limited to 'plugins/Actman/ua') diff --git a/plugins/Actman/ua/i_inoutjson.inc b/plugins/Actman/ua/i_inoutjson.inc index b560e99fb1..95f793e9f2 100644 --- a/plugins/Actman/ua/i_inoutjson.inc +++ b/plugins/Actman/ua/i_inoutjson.inc @@ -342,7 +342,7 @@ begin f:=Rewrite(fname); BlockWrite(f,res^,i*SizeOf(WideChar)); CloseHandle(f); - xmlparser.FreeMem(res); + FreeMem(res); DestroyNode(root); end; result:=1; diff --git a/plugins/Actman/ua/i_inoutxm.inc b/plugins/Actman/ua/i_inoutxm.inc index bf53ff954a..4a539a8275 100644 --- a/plugins/Actman/ua/i_inoutxm.inc +++ b/plugins/Actman/ua/i_inoutxm.inc @@ -1,6 +1,4 @@ {} -var - xmlparser:TXML_API_W; const ioAction :PWideChar = 'Action'; @@ -32,27 +30,24 @@ function ImportMenuItems(node:HXML;var MenuItem:tUAMenuItem):integer; begin result:=0; - with xmlparser do + with MenuItem do begin - with MenuItem do - begin - menu_opt:=0; - // popup - StrDupW(szMenuPopup,getAttrValue(node,ioMenuPopup)); - // name - StrDupW(szMenuNameVars,getAttrValue(node,ioMenuName)); - // show - StrDupW(szMenuShowWhenVars,getAttrValue(node,ioMenuShow)); - // used - if StrToInt(getAttrValue(node,ioMenuUsed))<>0 then - menu_opt:=menu_opt or UAF_MENUUSE; - // separated - if StrToInt(getAttrValue(node,ioMenuSeparated))<>0 then - menu_opt:=menu_opt or UAF_MENUSEP; - // no translate - if StrToInt(getAttrValue(node,ioNoTranslate))<>0 then - menu_opt:=menu_opt or UAF_NOTRANS; - end; + menu_opt:=0; + // popup + StrDupW(szMenuPopup,xmlGetAttrValue(node,ioMenuPopup)); + // name + StrDupW(szMenuNameVars,xmlGetAttrValue(node,ioMenuName)); + // show + StrDupW(szMenuShowWhenVars,xmlGetAttrValue(node,ioMenuShow)); + // used + if StrToInt(xmlGetAttrValue(node,ioMenuUsed))<>0 then + menu_opt:=menu_opt or UAF_MENUUSE; + // separated + if StrToInt(xmlGetAttrValue(node,ioMenuSeparated))<>0 then + menu_opt:=menu_opt or UAF_MENUSEP; + // no translate + if StrToInt(xmlGetAttrValue(node,ioNoTranslate))<>0 then + menu_opt:=menu_opt or UAF_NOTRANS; end; end; @@ -64,52 +59,44 @@ begin result:=0; if actnode=0 then exit; - with xmlparser do - begin - // we don't need that node as is, just it's child for UA -// actnode:=GetNthChild(actnode,ioUA,0); - - UA.flags:=0; - // ----- Common ----- - if StrToInt(getAttrValue(actnode,ioTwoState))<>0 then - UA.flags:=UA.flags or UAF_2STATE; - - if StrToInt(getAttrValue(actnode,ioSaveState))<>0 then - UA.flags:=UA.flags or UAF_SAVESTATE; - - // sub:=AddChild(actnode,ioRegister,nil); - if StrToInt(getAttrValue(actnode,ioHotkey))<>0 then - UA.flags:=UA.flags or UAF_REGHOTKEY; - if StrToInt(getAttrValue(actnode,ioToolbar))<>0 then - UA.flags:=UA.flags or UAF_REGTTBB; - if StrToInt(getAttrValue(actnode,ioTabSRMM))<>0 then - UA.flags:=UA.flags or UAF_REGTABB; - - // ----- Hotkey ----- - // nothing - - // ----- Modern CList toolbar ----- - // source - ANSI text - sub:=GetNthChild(actnode,ioToolbar,0); - WideToAnsi(GetAttrValue(sub,ioTooltip ),UA.szTTBTooltip ,MirandaCP); - WideToAnsi(GetAttrValue(sub,ioTooltipPressed),UA.szTTBTooltipPressed,MirandaCP); - - // ----- TabSRMM toolbar ----- - sub:=GetNthChild(actnode,ioTabSRMM,0); - StrDupW(UA.szTabBTooltip ,getAttrValue(sub,ioTooltip)); - StrDupW(UA.szTabBTooltipPressed,getAttrValue(sub,ioTooltipPressed)); - - // ----- Menus ----- - num:=0; - repeat - sub:=getNextChild(actnode,ioMenuItem,@num); - if sub=0 then break; - - i:=StrToInt(getAttrValue(sub,ioType)); - ImportMenuItems(sub, - UA.UAMenuItem[tMenuType(i)]); - until false; - end; + UA.flags:=0; + // ----- Common ----- + if StrToInt(xmlGetAttrValue(actnode,ioTwoState))<>0 then + UA.flags:=UA.flags or UAF_2STATE; + + if StrToInt(xmlGetAttrValue(actnode,ioSaveState))<>0 then + UA.flags:=UA.flags or UAF_SAVESTATE; + + if StrToInt(xmlGetAttrValue(actnode,ioHotkey))<>0 then + UA.flags:=UA.flags or UAF_REGHOTKEY; + if StrToInt(xmlGetAttrValue(actnode,ioToolbar))<>0 then + UA.flags:=UA.flags or UAF_REGTTBB; + if StrToInt(xmlGetAttrValue(actnode,ioTabSRMM))<>0 then + UA.flags:=UA.flags or UAF_REGTABB; + + // ----- Hotkey ----- + // nothing + + // ----- Modern CList toolbar ----- + // source - ANSI text + sub:=xmlGetNthChild(actnode,ioToolbar,0); + WideToAnsi(xmlGetAttrValue(sub,ioTooltip ),UA.szTTBTooltip ,MirandaCP); + WideToAnsi(xmlGetAttrValue(sub,ioTooltipPressed),UA.szTTBTooltipPressed,MirandaCP); + + // ----- TabSRMM toolbar ----- + sub:=xmlGetNthChild(actnode,ioTabSRMM,0); + StrDupW(UA.szTabBTooltip ,xmlGetAttrValue(sub,ioTooltip)); + StrDupW(UA.szTabBTooltipPressed,xmlGetAttrValue(sub,ioTooltipPressed)); + + // ----- Menus ----- + num:=0; + repeat + sub:=xmlGetNextChild(actnode,ioMenuItem,@num); + if sub=0 then break; + + i:=StrToInt(xmlGetAttrValue(sub,ioType)); + ImportMenuItems(sub,UA.UAMenuItem[tMenuType(i)]); + until false; end; function Import(fname:PWideChar;aflags:dword):integer; @@ -139,50 +126,45 @@ begin BlockRead(f,res^,i); CloseHandle(f); - xmlparser.cbSize:={XML_API_SIZEOF_V1;//}SizeOf(TXML_API_W); - CallService(MS_SYSTEM_GET_XI,0,lparam(@xmlparser)); - with xmlparser do - begin - root:=parseString(ChangeUnicode(res),@i,nil); - j:=0; - repeat - actnode:=getNthChild(root,ioAction,j); - if actnode=0 then break; - // search id by name? - pcw:=GetAttrValue(actnode,ioName); - ptr:=ptr1; - inc(pbyte(ptr),4); - for i:=0 to num-1 do + root:=xmlParseString(ChangeUnicode(res),@i,nil); + j:=0; + repeat + actnode:=xmlGetNthChild(root,ioAction,j); + if actnode=0 then break; + // search id by name? + pcw:=xmlGetAttrValue(actnode,ioName); + ptr:=ptr1; + inc(pbyte(ptr),4); + for i:=0 to num-1 do + begin + if (ptr.flags and ACF_SELECTED)<>0 then begin - if (ptr.flags and ACF_SELECTED)<>0 then + if StrCmpw(pcw,ptr.descr)=0 then begin - if StrCmpw(pcw,ptr.descr)=0 then + // delete old UA for overwrited actions + if (ptr.flags and ACF_OVERLOAD)<>0 then begin - // delete old UA for overwrited actions - if (ptr.flags and ACF_OVERLOAD)<>0 then + for act:=0 to HIGH(UActionList) do begin - for act:=0 to HIGH(UActionList) do + if ptr.id=UActionList[act].dwActID then begin - if ptr.id=UActionList[act].dwActID then - begin - DeleteUAction(act,true); - break; - end; + DeleteUAction(act,true); + break; end; end; - num1:=AddUAction(-1,ptr); - ImportUAction(getNthChild(actnode,ioUA,0),UActionList[num1]); - break; end; + num1:=AddUAction(-1,ptr); + ImportUAction(xmlGetNthChild(actnode,ioUA,0),UActionList[num1]); + break; end; - inc(ptr); end; - - inc(j); - until false; + inc(ptr); + end; + + inc(j); + until false; + xmlDestroyNode(root); - DestroyNode(root); - end; CallService(MS_ACT_FREELIST,0,LPARAM(ptr1)); mFreeMem(res); result:=1; @@ -197,27 +179,24 @@ end; function ExportMenuItems(node:HXML;const MenuItem:tUAMenuItem):HXML; begin - with xmlparser do + result:=xmlAddChild(node,ioMenuItem,nil); + with MenuItem do begin - result:=AddChild(node,ioMenuItem,nil); - with MenuItem do - begin - // popup - if (szMenuPopup<>nil) and (szMenuPopup^<>#0) then - AddAttr(result,ioMenuPopup,szMenuPopup); - // name - if (szMenuNameVars<>nil) and (szMenuNameVars^<>#0) then - AddAttr(result,ioMenuName,szMenuNameVars); - // show - if (szMenuShowWhenVars<>nil) and (szMenuShowWhenVars^<>#0) then - AddAttr(result,ioMenuShow,szMenuShowWhenVars); - // used - AddAttrInt(result,ioMenuUsed,ord((menu_opt AND UAF_MENUUSE)<>0)); - // separated - AddAttrInt(result,ioMenuSeparated,ord((menu_opt AND UAF_MENUSEP)<>0)); - // no translate - AddAttrInt(result,ioNoTranslate,ord((menu_opt AND UAF_NOTRANS)<>0)); - end; + // popup + if (szMenuPopup<>nil) and (szMenuPopup^<>#0) then + xmlAddAttr(result,ioMenuPopup,szMenuPopup); + // name + if (szMenuNameVars<>nil) and (szMenuNameVars^<>#0) then + xmlAddAttr(result,ioMenuName,szMenuNameVars); + // show + if (szMenuShowWhenVars<>nil) and (szMenuShowWhenVars^<>#0) then + xmlAddAttr(result,ioMenuShow,szMenuShowWhenVars); + // used + xmlAddAttrInt(result,ioMenuUsed,ord((menu_opt AND UAF_MENUUSE)<>0)); + // separated + xmlAddAttrInt(result,ioMenuSeparated,ord((menu_opt AND UAF_MENUSEP)<>0)); + // no translate + xmlAddAttrInt(result,ioNoTranslate,ord((menu_opt AND UAF_NOTRANS)<>0)); end; end; @@ -229,70 +208,66 @@ var actnode,sub:HXML; UA:pMyActionItem; begin - with xmlparser do + for i:=0 to HIGH(UActionList) do begin - for i:=0 to HIGH(UActionList) do + if UActionList[i].dwActID=id then begin - if UActionList[i].dwActID=id then + UA:=@UActionList[i]; + actnode:=xmlGetChildByAttrValue(root,ioAction,ioName,name); + if actnode=0 then break; + // we don't need that node as is, just it's child for UA + actnode:=xmlAddChild(actnode,ioUA,nil); + + // ----- Common ----- + xmlAddAttrInt(actnode,ioTwoState ,ORD((UA.flags and UAF_2STATE )<>0)); + xmlAddAttrInt(actnode,ioSaveState,ORD((UA.flags and UAF_SAVESTATE)<>0)); + + xmlAddAttrInt(actnode,ioHotkey ,ORD((UA.flags and UAF_REGHOTKEY)<>0)); + xmlAddAttrInt(actnode,ioToolbar,ORD((UA.flags and UAF_REGTTBB )<>0)); + xmlAddAttrInt(actnode,ioTabSRMM,ORD((UA.flags and UAF_REGTABB )<>0)); + + // ----- Hotkey ----- + // nothing + + // ----- Modern CList toolbar ----- + // source - ANSI text + if ((UA.szTTBTooltip <>nil) and (UA.szTTBTooltip^ <>#0)) or + ((UA.szTTBTooltipPressed<>nil) and (UA.szTTBTooltipPressed^<>#0)) then begin - UA:=@UActionList[i]; - actnode:=getChildByAttrValue(root,ioAction,ioName,name); - if actnode=0 then break; - // we don't need that node as is, just it's child for UA - actnode:=addChild(actnode,ioUA,nil); - - // ----- Common ----- - AddAttrInt(actnode,ioTwoState ,ORD((UA.flags and UAF_2STATE )<>0)); - AddAttrInt(actnode,ioSaveState,ORD((UA.flags and UAF_SAVESTATE)<>0)); - - // sub:=AddChild(actnode,ioRegister,nil); - AddAttrInt(actnode,ioHotkey ,ORD((UA.flags and UAF_REGHOTKEY)<>0)); - AddAttrInt(actnode,ioToolbar,ORD((UA.flags and UAF_REGTTBB )<>0)); - AddAttrInt(actnode,ioTabSRMM,ORD((UA.flags and UAF_REGTABB )<>0)); - - // ----- Hotkey ----- - // nothing - - // ----- Modern CList toolbar ----- - // source - ANSI text - if ((UA.szTTBTooltip <>nil) and (UA.szTTBTooltip^ <>#0)) or - ((UA.szTTBTooltipPressed<>nil) and (UA.szTTBTooltipPressed^<>#0)) then + sub:=xmlAddChild(actnode,ioToolbar,nil); + if (UA.szTTBTooltip<>nil) and (UA.szTTBTooltip^<>#0) then begin - sub:=AddChild(actnode,ioToolbar,nil); - if (UA.szTTBTooltip<>nil) and (UA.szTTBTooltip^<>#0) then - begin - AnsiToWide(UA.szTTBTooltip,pc,MirandaCP); - AddAttr(sub,ioTooltip,pc); - mFreeMem(pc); - end; - if (UA.szTTBTooltipPressed<>nil) and (UA.szTTBTooltipPressed^<>#0) then - begin - AnsiToWide(UA.szTTBTooltipPressed,pc,MirandaCP); - AddAttr(sub,ioTooltipPressed,pc); - mFreeMem(pc); - end; + AnsiToWide(UA.szTTBTooltip,pc,MirandaCP); + xmlAddAttr(sub,ioTooltip,pc); + mFreeMem(pc); end; - - // ----- TabSRMM toolbar ----- - if ((UA.szTabBTooltip <>nil) and (UA.szTabBTooltip^ <>#0)) or - ((UA.szTabBTooltipPressed<>nil) and (UA.szTabBTooltipPressed^<>#0)) then + if (UA.szTTBTooltipPressed<>nil) and (UA.szTTBTooltipPressed^<>#0) then begin - sub:=AddChild(actnode,ioTabSRMM,nil); - if (UA.szTabBTooltip<>nil) and (UA.szTabBTooltip^<>#0) then - AddAttr(sub,ioTooltip,UA.szTabBTooltip); - if (UA.szTabBTooltipPressed<>nil) and (UA.szTabBTooltipPressed^<>#0) then - AddAttr(sub,ioTooltipPressed,UA.szTabBTooltipPressed); + AnsiToWide(UA.szTTBTooltipPressed,pc,MirandaCP); + xmlAddAttr(sub,ioTooltipPressed,pc); + mFreeMem(pc); end; + end; - // ----- Menus ----- - for lmenu:=main_menu to HIGH(tMenuType) do - begin - sub:=ExportMenuItems(actnode,UA.UAMenuItem[lmenu]); - AddAttrInt(sub,ioType,ORD(lmenu)); - end; + // ----- TabSRMM toolbar ----- + if ((UA.szTabBTooltip <>nil) and (UA.szTabBTooltip^ <>#0)) or + ((UA.szTabBTooltipPressed<>nil) and (UA.szTabBTooltipPressed^<>#0)) then + begin + sub:=xmlAddChild(actnode,ioTabSRMM,nil); + if (UA.szTabBTooltip<>nil) and (UA.szTabBTooltip^<>#0) then + xmlAddAttr(sub,ioTooltip,UA.szTabBTooltip); + if (UA.szTabBTooltipPressed<>nil) and (UA.szTabBTooltipPressed^<>#0) then + xmlAddAttr(sub,ioTooltipPressed,UA.szTabBTooltipPressed); + end; - break; + // ----- Menus ----- + for lmenu:=main_menu to HIGH(tMenuType) do + begin + sub:=ExportMenuItems(actnode,UA.UAMenuItem[lmenu]); + xmlAddAttrInt(sub,ioType,ORD(lmenu)); end; + + break; end; end; end; @@ -306,47 +281,43 @@ var ptr,ptr1:pChain; begin result:=0; - xmlparser.cbSize:={XML_API_SIZEOF_V1;//}SizeOf(TXML_API_W); - CallService(MS_SYSTEM_GET_XI,0,lparam(@xmlparser)); - with xmlparser do + + // we need append file, not rewrite + i:=GetFSize(fname); + if i=0 then exit; + + mGetMem (res ,i+SizeOf(WideChar)); + FillChar(res^,i+SizeOf(WideChar),0); + f:=Reset(fname); + BlockRead(f,res^,i); + CloseHandle(f); + root:=xmlParseString(res,@i,nil); + mFreeMem(res); + + num:=CallService(MS_ACT_GETLIST,0,LPARAM(@ptr)); + if num>0 then begin - // we need append file, not rewrite - i:=GetFSize(fname); - if i=0 then exit; - - mGetMem (res ,i+SizeOf(WideChar)); - FillChar(res^,i+SizeOf(WideChar),0); - f:=Reset(fname); - BlockRead(f,res^,i); - CloseHandle(f); - root:=parseString(res,@i,nil); - mFreeMem(res); - - num:=CallService(MS_ACT_GETLIST,0,LPARAM(@ptr)); - if num>0 then + ptr1:=ptr; + inc(pbyte(ptr),4); + for i:=0 to num-1 do begin - ptr1:=ptr; - inc(pbyte(ptr),4); - for i:=0 to num-1 do + if ((aflags and ACIO_SELECTED)=0) or + ((ptr.flags and ACCF_EXPORT)<>0) then begin - if ((aflags and ACIO_SELECTED)=0) or - ((ptr.flags and ACCF_EXPORT)<>0) then - begin - WriteUAction(root,ptr.id,ptr.descr); - end; - inc(ptr); + WriteUAction(root,ptr.id,ptr.descr); end; - CallService(MS_ACT_FREELIST,0,LPARAM(ptr1)); + inc(ptr); end; + CallService(MS_ACT_FREELIST,0,LPARAM(ptr1)); + end; - res:=toString(root,@i); + res:=xmlToString(root,@i); - f:=Rewrite(fname); - BlockWrite(f,res^,i*SizeOf(WideChar)); - CloseHandle(f); - xmlparser.FreeMem(res); - DestroyNode(root); - end; + f:=Rewrite(fname); + BlockWrite(f,res^,i*SizeOf(WideChar)); + CloseHandle(f); + xmlFree(res); + xmlDestroyNode(root); result:=1; end; -- cgit v1.2.3