From 61eddf1b62c58766eeba5bc84235551d76b263b5 Mon Sep 17 00:00:00 2001 From: Michael R Sweet Date: Sun, 17 Nov 2024 17:15:44 -0500 Subject: [PATCH] Update docos (Issue #334) --- CHANGES.md | 1 + doc/mxml.3 | 85 +++++++------- doc/mxml.epub | Bin 726164 -> 726302 bytes doc/mxml.html | 307 +++++++++++++++++++++++++------------------------- mxml-node.c | 115 ++++++++++--------- 5 files changed, 253 insertions(+), 255 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 4430c5d..79da937 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -8,6 +8,7 @@ Changes in Mini-XML 4.0.4 - Fixed an issue when reporting errors with a `NULL` options pointer (Issue #329) - Fixed some compiler warnings (Issue #333) +- Fixed some documentation issues (Issue #334) - Dropped unused `long long` config tests (Issue #335) diff --git a/doc/mxml.3 b/doc/mxml.3 index 1dd6630..38e1044 100644 --- a/doc/mxml.3 +++ b/doc/mxml.3 @@ -1,4 +1,4 @@ -.TH mxml 3 "Mini-XML API" "2024-03-20" "Mini-XML API" +.TH mxml 3 "Mini-XML API" "2024-11-17" "Mini-XML API" .SH NAME mxml \- Mini-XML API .SH INCLUDE FILE @@ -852,10 +852,9 @@ mxml_node_t * mxmlNewCDATA ( .fi .PP The new CDATA node is added to the end of the specified parent's child -list. The constant \fBMXML_NO_PARENT\fR can be used to specify that the new -CDATA node has no parent. The data string must be nul-terminated and -is copied into the new node. CDATA nodes currently use the -\fBMXML_TYPE_ELEMENT\fR type. +list. The constant \fBNULL\fR can be used to specify that the new CDATA node +has no parent. The data string must be nul-terminated and is copied into the +new node. .SS mxmlNewCDATAf Create a new formatted CDATA node. .PP @@ -867,10 +866,10 @@ mxml_node_t * mxmlNewCDATAf ( ); .fi .PP -The new CDATA node is added to the end of the specified parent's -child list. The constant \fBMXML_NO_PARENT\fR can be used to specify that -the new opaque string node has no parent. The format string must be -nul-terminated and is formatted into the new node. +The new CDATA node is added to the end of the specified parent's child list. +The constant \fBNULL\fR can be used to specify that the new opaque string node +has no parent. The format string must be nul-terminated and is formatted +into the new node. .SS mxmlNewComment Create a new comment node. .PP @@ -882,9 +881,9 @@ mxml_node_t * mxmlNewComment ( .fi .PP The new comment node is added to the end of the specified parent's child -list. The constant \fBMXML_NO_PARENT\fR can be used to specify that the new -comment node has no parent. The comment string must be nul-terminated and -is copied into the new node. +list. The constant \fBNULL\fR can be used to specify that the new comment node +has no parent. The comment string must be nul-terminated and is copied into +the new node. .SS mxmlNewCommentf Create a new formatted comment string node. .PP @@ -897,9 +896,9 @@ mxml_node_t * mxmlNewCommentf ( .fi .PP The new comment string node is added to the end of the specified parent's -child list. The constant \fBMXML_NO_PARENT\fR can be used to specify that -the new opaque string node has no parent. The format string must be -nul-terminated and is formatted into the new node. +child list. The constant \fBNULL\fR can be used to specify that the new opaque +string node has no parent. The format string must be nul-terminated and is +formatted into the new node. .SS mxmlNewCustom Create a new custom data node. .PP @@ -926,7 +925,7 @@ mxml_node_t * mxmlNewDeclaration ( .fi .PP The new declaration node is added to the end of the specified parent's child -list. The constant \fBMXML_NO_PARENT\fR can be used to specify that the new +list. The constant \fBNULL\fR can be used to specify that the new declaration node has no parent. The declaration string must be nul- terminated and is copied into the new node. .SS mxmlNewDeclarationf @@ -941,7 +940,7 @@ mxml_node_t * mxmlNewDeclarationf ( .fi .PP The new declaration node is added to the end of the specified parent's -child list. The constant \fBMXML_NO_PARENT\fR can be used to specify that +child list. The constant \fBNULL\fR can be used to specify that the new opaque string node has no parent. The format string must be nul-terminated and is formatted into the new node. .SS mxmlNewDirective @@ -955,9 +954,9 @@ mxml_node_t * mxmlNewDirective ( .fi .PP The new processing instruction node is added to the end of the specified -parent's child list. The constant \fBMXML_NO_PARENT\fR can be used to specify -that the new processing instruction node has no parent. The data string must -be nul-terminated and is copied into the new node. +parent's child list. The constant \fBNULL\fR can be used to specify that the new +processing instruction node has no parent. The data string must be +nul-terminated and is copied into the new node. .SS mxmlNewDirectivef Create a new formatted processing instruction node. .PP @@ -969,9 +968,9 @@ mxml_node_t * mxmlNewDirectivef ( ); .fi .PP -The new processing instruction node is added to the end of the specified parent's -child list. The constant \fBMXML_NO_PARENT\fR can be used to specify that -the new opaque string node has no parent. The format string must be +The new processing instruction node is added to the end of the specified +parent's child list. The constant \fBNULL\fR can be used to specify that the new +opaque string node has no parent. The format string must be nul-terminated and is formatted into the new node. .SS mxmlNewElement Create a new element node. @@ -984,8 +983,8 @@ mxml_node_t * mxmlNewElement ( .fi .PP The new element node is added to the end of the specified parent's child -list. The constant \fBMXML_NO_PARENT\fR can be used to specify that the new -element node has no parent. +list. The constant \fBNULL\fR can be used to specify that the new element node +has no parent. .SS mxmlNewInteger Create a new integer node. .PP @@ -997,8 +996,8 @@ mxml_node_t * mxmlNewInteger ( .fi .PP The new integer node is added to the end of the specified parent's child -list. The constant \fBMXML_NO_PARENT\fR can be used to specify that the new -integer node has no parent. +list. The constant \fBNULL\fR can be used to specify that the new integer node +has no parent. .SS mxmlNewOpaque Create a new opaque string. .PP @@ -1010,9 +1009,9 @@ mxml_node_t * mxmlNewOpaque ( .fi .PP The new opaque string node is added to the end of the specified parent's -child list. The constant \fBMXML_NO_PARENT\fR can be used to specify that -the new opaque string node has no parent. The opaque string must be nul- -terminated and is copied into the new node. +child list. The constant \fBNULL\fR can be used to specify that the new opaque +string node has no parent. The opaque string must be nul-terminated and is +copied into the new node. .SS mxmlNewOpaquef Create a new formatted opaque string node. .PP @@ -1025,9 +1024,9 @@ mxml_node_t * mxmlNewOpaquef ( .fi .PP The new opaque string node is added to the end of the specified parent's -child list. The constant \fBMXML_NO_PARENT\fR can be used to specify that -the new opaque string node has no parent. The format string must be -nul-terminated and is formatted into the new node. +child list. The constant \fBNULL\fR can be used to specify that the new opaque +string node has no parent. The format string must be nul-terminated and is +formatted into the new node. .SS mxmlNewReal Create a new real number node. .PP @@ -1039,8 +1038,8 @@ mxml_node_t * mxmlNewReal ( .fi .PP The new real number node is added to the end of the specified parent's -child list. The constant \fBMXML_NO_PARENT\fR can be used to specify that -the new real number node has no parent. +child list. The constant \fBNULL\fR can be used to specify that the new real +number node has no parent. .SS mxmlNewText Create a new text fragment node. .PP @@ -1053,10 +1052,10 @@ mxml_node_t * mxmlNewText ( .fi .PP The new text node is added to the end of the specified parent's child -list. The constant \fBMXML_NO_PARENT\fR can be used to specify that the new -text node has no parent. The whitespace parameter is used to specify -whether leading whitespace is present before the node. The text -string must be nul-terminated and is copied into the new node. +list. The constant \fBNULL\fR can be used to specify that the new text node has +no parent. The whitespace parameter is used to specify whether leading +whitespace is present before the node. The text string must be +nul-terminated and is copied into the new node. .SS mxmlNewTextf Create a new formatted text fragment node. .PP @@ -1070,10 +1069,10 @@ mxml_node_t * mxmlNewTextf ( .fi .PP The new text node is added to the end of the specified parent's child -list. The constant \fBMXML_NO_PARENT\fR can be used to specify that the new -text node has no parent. The whitespace parameter is used to specify -whether leading whitespace is present before the node. The format -string must be nul-terminated and is formatted into the new node. +list. The constant \fBNULL\fR can be used to specify that the new text node has +no parent. The whitespace parameter is used to specify whether leading +whitespace is present before the node. The format string must be +nul-terminated and is formatted into the new node. .SS mxmlNewXML Create a new XML document tree. .PP diff --git a/doc/mxml.epub b/doc/mxml.epub index b21df93e7cb9004e791f48abe7a8e0efbfedf58b..0993b7646a94e8b3c3b94ebd2aaf5a6235a1e59d 100644 GIT binary patch delta 27357 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 delta 27198 zcmV)CK*GPCsw|YLEDlgh0|XQR00000J6d#Dkq$NlJ6d#Dkw_y1J6d#Dk#E}sJ6d#D zlTHC3e>+-qSg{~T7B*%80G_1+01yBG08d3iP*X2rZ)ABccxZHOZ0)`2cH35#DEyyK zfl{yPP%cuE9VeBtV^yncIib^}e4)c^J&YS@dk^!$hK3DI8|L^|=k9Kyx9zNQ6 z^mq{LO`$`4p9OEDEJ`n;@m8rp*%+(2f5*5(SSrh}rcsbzEudH)eag2-S+=qJ{U84E z{KekM-amS$$@nVx-(C=$hNF*XX|kM;p9GiZaUMN|m!o8wq)&p=DSX7|3A8_)gtK^h z^(4r`c{YS0#S{H0i~lEj5xPeRn0suHuLbCRhs#x)XbxA zR%qtiQZo-%7)?Ao+aiKMtzE|B{2W*F+r=mRI*u>4khnxC0gUyypz??`!*Cj(!On~T zx1v2j3A55(VbG=X2sIecP-O;Q-8UV|)|#^d18;!^B=@WEX(}zu= zt5;NQ4{gjCCIkdl?N6u0g&{D)ATt=!e4gOAhL>r$s3zouFXL#Ge=tBl3FgT>!s5`v zd@G($lG0=}d+~sl{w7pjvnGowe8)tA-ypwx62v*6?C5C~fp+FJPt=TnHtSI$#dn^* zcAg#wh50Zx0=NyQ(Ig+H;W%DqW~Hs~#O6x{CetK@5z!OyX4aPgjAfyiOT=ar(RvY7wf*u7mdTB%LwoE$uh`cvN0KjfYjh zU`@dVGBtLmt4Gq40Zi%2X(N?mOR=ZXRcH!< zq=SRAip+pD!RTcsFQ5W!Fi<8u0HnaFGMvf3&7yG}27O>l6F376sqQcvokz2Xdl86M zr<@ALV;v$!#5I0}|3azZ`{ZSPrs%idPTZpHPBNx}f630b+`zBBUw+yBew%1H9Ot&> z9E=mfQ}M%qgh)8sAz*AYpN!8RLbb(i;Vk?8_JUq_IfZf^5O~!Pa7=Vmf8-7-h{w-1 z;(4AX<0VO&8@mVA6O8GRj7i2GXR!7eVC*!&$3+OITbRN$K25{)3P?tn2Up257=`m- znZfBce+fW@8B^hL2&dvnJO%hj(tyD#3qX*73TY5779bXoU;;D=&iBh4s{Z#fCg__2 zFN+X=fpvy+fS$4R8AsVxpoh0elM4dC{5%3WGo2=vSX;@_fW7(E6JDJqDnX|4F3j#N zj1Y?@li=OS%i(tc^gzEJeoH?u(>Qm&lYS-Qe_8Q_u$at9R(~7XRvo;+nZwd$Ih-@b zIOPxzvmc}JkjWHacEBf!Wy&HZ?j-h!6VZ!z9>ZBA9i3l!`Z(VEIp{+hQ3!~)Nvken z_Kp&F2B0sVftVJ|qFDmFx6A;seN8VHizEdA3)9m$r;U!L5s@fVa)6u@=FsZtGN<3r ze~Eq$F2d;&dd3}v?c*K- z1^s`;!^2b3oAA%g0nu?D%?Nr)X1s(ba}m&SxoH$m_!o>00LRn!O97q?04fbe&@ll6 zHVlV@@Qii|HZa4r#y&i4a2GG*`B*x`f7<->GMs*tmlLO_D9nI&25>Yo9nQmx_>3Q$ zx|Aj3LGuC#C70c%!SgPfjsYs-*+Mo~$}f^+%CM6FGy>)l4d+1uI4?(5qh%1Oo$8+aOKfI`a!yrY3wBt?b?f7E0o zOA}3?S85+m10ZSOZy6q(8p^crJVqP^TKRYW0Tl3Sclehff)6wbH1G;~xQM370!D7R(p0koi_N*_ucB_QviH`rY^2;V#bfzkruBv0MP-i>M_yrQv*- z^x^U^=a+Fb1$Oy8lAm25fS+d5e@EYM)03vbglbtbi|~+k7Jwj+BvZyqq#GK=<`BT> z+%p79y%ih)CIVSMjn05}gP;UFJ)L6z($5F)+M(Y z%D3|oQGePuS)}xU83_}>a}P~-e-NA^XMoNK zGJtb{M5CDzOpRC+&?y{0E+otbT0w>cKgUxIoyG2PsB_wY7-od4=pW|~AQCV<5*358 z*$5_w%X6vNAF{rfMm2!*Zjb>tn~q^=0c+z6*a=)2I?RPcgbA?r-W)Jzm_(PsIS4_> zDp2J~pp2!fN1h}gf?d%{e}M1+J3JSVVLmlkrg5^&VE+k9FB3qeD?;`K@p^_gfoc#U zPk|G|N&s=pXkH5Vfv6^MdUr?lB>46(-)?DuNR!zjhn|R10|-O+MtYb-mj?K0geee? z3z{iy@0OBxPGGk_(io>nPMuAnXpABvvoS^9pg*7^G(Q7qz*=;tf9HU((M2-FPJo*5 zWalz@looIk5L7_y2FjN+ztvQb$rBOZi#BpwDs`e)}QMr6fjUGa2p`E$WKkBPGB3&#DNBo8i|1a z6gylJZ+2-^CO1E`e+ zVpIgpAS@n7kxQumWfmi#qILtJX-F6elN?@rz4Zy@cKOP%e`Y#|uSC89;})n|!2KLY zIS4aZ-3Cs9z)nGoT}~z&yRYyeIK~J6CMv29RBhxv0R*R4LE*?iD+mM$W=`4#L|HZ(cpx zeue)IlQ}Y&e`Jzh0^FN*X7Rd|q1c2{NGB zGeA>g!zuRjSV;xEnZ-Hmo{dJq5KaJBsu}%j3qEiY<>4JnXkpI7i^%G6@$n2!_wz}7 zraDzX5Fm&kI~ot1Q(;W94&X|Z!nSc+&^-`tBAc<2Q0R=5${bkWq`6D8Vdd05m@x&z z;b<}qf8oSKllo9SZMPDvzN%7OhywpTgdb0W6A}n`$M94nkWDQJV3TCR9l$Yfn8#3x z=LXW(L<k9}dF2Q%tqK?M5Crac z1l$G*>fh+Mrd0bt*{^~{9F0g!u<(^6nYliCf4YZXIV#|vfFWdAGKxtE!E?ockE8tzj)x)2i*$q~ zcAdqiBv8^=NNaULA_XyiI7vc{MS|*ZmZRyGieWT_AADU!b>#p&4-^^2Jx%%SA|us| zf9xe5^FD$)A(cL3fPSliO3+59LF|=|T_}i~rG9*;VZi^tf7X6)KlP?=e3PmBA40tP z@s0ZNZ5fI#Nf_rn9NJt*D33ak+tkhy!~R)Qg()5rI)F}#cv?p`N2&(U`yt9te}L|8 z>{<^bGi%F+vnc070Mch_u-xA*|oF?_(X)nGbb*7S1S*Fam}qb=Nf z(ilqpCjmXd$r3t-o(vKxi>$4!tzUj&`Hj8}%38Nl2S=}8?;oD%F7^U-x#Q_(IK)G| zDli;&?CRa|$ zyG`ZA!Q1`kCkH?7Tb)_zKotK{zM=5+dmWP3eu(?8_T7zTj;-|KB&TZ$z^KPPgA~mtZjsQB(a9>iwVOd_KPd0x({pnlizAg0=&F zyTA9UX;H|^gZ160oARyA!$)6lsgu1C3vMOnG~Fp?<=f7PsZL7jj(Hx^0u8)`@sZGJ?uJt&twgux$khq{9GuA#IAB_&`;g~~ z(nmyJbYXt1DEl@Fr@ACQ)PTkbfUJ>H;K2(Jetlj-H?6~PPD(=***A7y@k@1(dkHV~ zsrf(Plt(&J`;=D&Mc5G5M()4^wBIcJEOQ>Fs>p+h3}(}FO47QqaGE7Xk>}iB($bQuR>_Jl4_@sT zlm&SHr*&6`xCy;tzJ;V+HY5y2z_0Mu;To$uUU6M3R*S9;d9fyASfyU|rmno9xMZ*u zi|XbNj#g}(%EZb0(J7Rmzk{loqP?qz3o437(dscB)An5he~Q-y!=Q0w0rsqtGAy@r)iK>^gsI5JZpAuCdu0$g zf2tc4KjLV2+e`L1!9Tes78p(ZgEBFt&z2J4G zQ;5E4RGJIvvtbF3Sqt(b7IxOs{@^TXEjH4;)u`yCCBq2mQh-ilG(oZZ8pvG|)itNE ze(lk2v+cfmrqb6Gr`Wh}e_yJ*Kfa9r#8fO9EoW>{e^uHC#h-cdX_PP1xvNp)^AxI7 z!{CgJe>e1z8>iB4zn)7szIm!|wY!%1#;ny~LOBI#uUNA+I#mcubHh6gI1=m1NZi-5 zF{Zz2YRIhDA%<1>Sv3hgS;Yg1{n)e7Jh5Nmafr(KIo^VYS+uFSSJS1C)}$+21hw^S zdcwfcMW?8CQNfI;I1tpx(#{;WYtdG(1*-MQf1U)tGk?Iw)D5||qf`^NwMFGiR5Kbf zGf|fcUu8TnSb^3Qn%AKR+lX`)wz1zvNMkS&flD!J{JYshE9!O0S2#G}{gu$FFW9}` zgW!QC=(zsNg{`53mEI=#KPoNwpt)UbqB{tpe6+Q-)mTNLR1bX*5RRA;x`*dJ-%{3y ze;Ed9jC@gjgqWzM>~ojT0>Wq#Z>&L>Gd~UBx=q#%A9$2AeB9m^efsBM0W>Et`uQCZ{=2 zIa3vdbe|3g&DBr`M1+51_a#5FErVm%f8~l8Snf@jpEJo-PwoX7HqETEPgihCKg_ZV z8FqzA{2ys*rA`40Xm2ZE?J$}JvtAwvAD;Wdcy95X2f}nfq#TdX!vb9d!W<8+%23J? zoTRdGN@#a#B-1`~qi9S()D?}If;L*?4}6d8lo?1HGFuSrKH;raobzmjXU_F%f2f&t zK5DW_7tNXpquQ%J{H_IeWQS}?ux;jOD734{!11lz$pdc(ehIAvg^s4zdf~#N*pV(X zHfyDw48_PuZ;86~nqD#V$kw=`jD0`bQKe>$u3r)}3X%sZe|k5isMIrFSA)1jH#b~b z@<9uwBC15A`M6%Zj}&~!Wf;E=e@V|TuSn5Ozc2Vq%OZ7{p7Ci;fzu+SdlY@wWlR02 z&l=@)b{E`*^GdXJw$&MS@Gsz7mBbjl^pT~oK$DEHRzOn)kZ8R#2>9O`gbf`u9R#e2 zs?{(NXL_-J{CxlL#rr)veO+@hbVtqakQ$VZ95*%DnxbYL?$UhjML{qOf8M=)bvM>z z1tp|7BUxtr?V7yK0y|3@%A#iJs0e7C*3_f3b!VzOxOoU_nBX&cGf9%I|5}{M+nb(k zO<`vsE9`uU9jHSz-NwZ^DoP?=4KgxA6~)SzlRkQF*wrM_jIDn?Oq5OR0yFeK-Wty; z(N`MNANUAtzbX%trIy$QBAjawu|oN4so|!cpy^ z2Y}dI%Ml{mR1!kM-iP@)+QyRL6N3CuYu=~2IXpTv21@bSoOH{UO^o!dP}x%7pp_ZA zuJhqRjB2u=PhdSoPqWQ}AtZbZPm_yi6V5JqJXP0vK_Bn(rW>A{?ecHpe{EX#NJ~5F|C!MCeZAD>#pF1di#IXuRT#9XuJGS~Lg1`RD6Iwrze?aJGcS%<)afgix4ZLw#MqY9qd zEx3WpCu+%Tc%gM3f5?j3J_FWD+aTew*79l)&Z3+=(4c`K-{7z_nrIY$;LkL#AC*B8 z89BH*h9mTEbbNGZMQrCAjZBeJ@%{YilWRheMnHQ2!T|^}ZU3Z=qJ(ml?~GiV$W2)> z<+&T~ zJF}*$F6735l`eb%RhVS6&V(-ru=3we(5X}6I%o`mWgIZZl6xn{xy#UMGP6`C@wg=1 zt9ub?ud|ceHP6ko=v6xAb#)Yv-}4Tvrcqa`W@&4h^`L!gdKC)qug#Mr|a4K@xpN-vzQtg)jDP>jb5A|qFs;E&n=ofkwPHPV4@ww>0?g@(Uf9RR2KKgNE6B3X!CL!<(H8J>nOYPlx0!JyGL6HrBy;lg?V?CG$8IpDyWXJPhhL^ zX6)9!Qcg>)Rq5-3!Vz9K*wCgXulaXrr^ThIU+*4uGrK(;mN(k*t!lB+)zNh!i-3S!?f3*w)f9(VU4bBr)U{K|?<{SySK|_6$ zw+@qPgD+m+sjA&ct?{k2C)B`ow?a*h7aE%^tTIlca*cng^vtZn z8{0shhXXuHq)rm zIZ@xFD)+LEZiyN|%f^~bPK9gr9>m!j??D_@$$RkFTJPVj_n-}QY?zFxW`bmyFP6DP zY7KLY`oEmbgFio_u*35tC;wW6e_G5TA@N--8HZw)Ud9+uSy{&bW??v9To&p=nr!wv z`w2?FrX(&!Coc1)tEXU;mj(jZu_Jpa;RZAMzG!(bST!``U{Zk5!tL{QOdB6Ex5sD_jMG+$SrwTjRf2kdS_;s{{Ice6> z4j|TAnpw-*JX}jFkJi%4*K29z@mgB>W-YCJTXr0z+)S$y5JdDt#YGf}SVSD|p9lq1 zN`RX*<8}eN+aNCo>wNYs@Gx|cmVd6dnf4Cqm6s1EF0NA zCn0qz!}Azj<;>}f<6KR3m0jD-S7O9ec#Qa5!?kw8b4*hPf6KPsW(Dm;={Rq+6wcY{ znvrn)Q3BE^qEsamuYF_pB|itR>A7sfkLQgsn(J%bq>AY_Fo_}@&Blue6BzNN`L}x$ zh)&z7jsulGU^5f4=N6Dq-Ic2p-+J>1a|LyU$fJKM(?Gq%YJroi#=)@mRx&2TDrCwix4M z^ht~$oG?{ZjtirLQaP${640IFbHVBqA4W*GdL^X`xpq3`d>SqsG^N8a8H-kmxEIv$ zx1cfpHmU#s%PYcfTU5pkzW@OAw5eZ}rJ$-2awu$Se?-UguV{okm7X>1!I#Br)7UG7M;<2x%FJk21e6b_{_KPG>fBq6N z{kz8Ce?UJ);$jS9n$C1wV{}Y&7Hv4E2(+?IS6#m`|6|dDe|NqGz9uvE&6_-TEpf}( zjw``J-DXMDP@VG^gl8?6)y&y(Q8mwn>%T@9p~32(Chjn5x+G_*=romr%p1he?s5@m0^x|Z@lUzl%4wo19fRnVgTQU z;Z1G3b{e-9f14=8CuUnc&~bSlQNmQ~^c*f05eVE$m81D1+=}K=1dIbH18hI@We<2<&+f`oHC1PC_K<5BIR4ABp?5s63-^x>;e|(m?ug_YWa>foYqDxCXDmkDkvd6x#F461Y zS=^G~S+2h7saj^B&l9(_kNDIP!eht1_}F$YF88TEPu$XlK3678?A&{!WJ!X&cr&}` zCA`@oxNz7O71dhbBo3Oz={Tqxr3@?JE$c}&=89W$0e8FkinqmI+k@LY*WfT0f0z_& ztb)gO-^Z@^xF46DzO5JQ!e{Z^{;U`+Q@X1-?OUQdfYshr``mbKltV*HIi%3siUV+9 zsg7K%zizOAmSmvd#c#iT5d zS$;K*vhyh73`i<43@QY+N0|x_f5Y>T2dc7VKGsJ=uNc>)VPN|1u^6eQ5T{0pwTl+j zptCF*kz0C1bb+F1k%1netW1SYm7~czPQ)@)@v&Z+?w1s$*EzCOt)7=cNFW475>)gD zmj-l<3DFYeoyZU7+1jG!7)W3Wc4;gIvRol(MN5dVqfh9^YVyzDCx!AW5PrMgV<+l`m*hMBn&&mifD&@z zMx`&_^hyy>CUi$7K;HtbSI{!c({)sLO#Z`I8$;$z3biR@$svaXaS^*~Fq4)@Z333a zLuUeSS~&KEJXsmhDC$TTe-JOnG3f>(SsAZoYgI_4 zo3t*F>JOaaYKw14oj?n__Q8LCE>zx=T4eq_JJM}BlQqxhmKdMUf3{f1$R7e~4r2_m zs$#ffLI*hL=pg!ty9ZK$h{_2R5G!NdWAc2c+jr;CVZK)lg}9fNq-;f<3Ej5bAC2gd$j?mvaokB6GRs;7!!eWbB$Vt{EC0EbiGfw-4doF27UPOzC^Bg8~ zE8M-4`=KHu2ssU8Q4zMnWu5>E#v}6M&eIUJ43e*7pwca{kCT&j!=&5bUSXn+v6hu| zqg{@|61Z9^HFVC9j2dwbKW@_+zjKBhG~aKNo<@T*!w^|^f8BTn8D3gi{Zr+%WZWCf zCMD^(yjHu7jt9{k%0c}K&x4+A=-0Dt&w6MTRC@EM^ycfHWBOnE{%u79SY)r)=;ww*dc^pNx@fL)U?LzhBMo}zf4 zl}Niapi|qLf6S?I-Q?LUU9u`#!HTWKigp6UWS*zVRD$=IlpraFBNs0xP{}#V`z!AtSVe!p=CWqhiK1f3XOL{>%Y?WDjK5 zF3}wUQ08LVtg(Qoa%1?gat@Pncwlrl)Qe!*(GEO9C3TPDp+zh3u}z*>oedUuVKpI3 z_t!72&rK77wHtetHlkbhWSxBQJjqIVenepad&w^zi)Yex?gq`;(`q+@-s4A&ptm;# zMllCie?!_(0c>w!6>|&P=(*xJKn3=J(^%#4vHn1ySW{FM@d&`K0jf0EGOYULcs*Qi zg)-N;S|~x;CrhgdQd}yr_D(d-ohHfRc2Y80>%bFfA%L2dz$$CcRak}@D{qf^E(KA> z&|?fEtiIM#PgiKMVtP_{lucnd&)aQ0;2>^$e$O=F;xGZ_UQ1##OD87UNp8BS2`VLT| ze~M{R6q02F#+$^rW2in6SNv9SIM0*I2oI_toTr7hVaO~FsW^)9oYh! zE8IToAv{?EZZ;C16IQS147z+~@utb)f8qCQSGKF+qqTlGW?Zvf2pMgPaZ5My1^?9uvw?709o4ZAxJk{<~2_f2&PH zD+tY9pGi?hs3aAAiwoB05%AAK<4YjFTG!Mt7|5@tn(ZOAN*(0V-!vLUv1W4qfWoEN z>nggi=C&%tu!*uOxo{BoF#AZ#WpxS?5`RFZ7)b;oQw}+LP8>a%UvL0l)oTL1W{ZR` z2Hu^#9DZl&Wd-$nJP9tL?Qkv)e<&d&v?PUSo5Ud!CHSn%>>bXwq|-&+k2>aF!T*Lc z5b?$*=jTsmvnN^hpK>DZ9~>VA-+jCDFkty-lf`Fuoi8bjF=pIl?@Z?qe&gJUO+dAM zU6#DZ>A%P6zt8Go?=I(Ad^V3XY+Xem07PA=oBx0kR&W{{=#zPVKB%kve;P~pE04pg zK~UTAi}1={^&H@=e$0PI>DE8yc)rX5oNC5QCH%G7p}H=n&oR4P+qG#^a;UwW$DitB zBE362_?bm|)4;EV?akZeq+qOgFZAoW;hopT`iYJad=@4JpYo^GVC%wr4m4**fu61v z_l~lnpe~0<8F#TvJ4d)1e`8=~qzlQYUz-BCavAZApD2{?7glC-^Ln#9fdhLgnZUmd z6#grl+{}=0wF>A;zMdd|R%pa5gCpjo*?a$w%OU;$bP-@xc6WKSi^Y z4NRCm7mksIw`o>_K4R|ZG)>Y~LVMx}U`|RA-LsRN~ke9kAP?MEzA0W z+XgmH>s(6*FqOMo<*c&GBU4A9(*SX|uBbv~M_)gz>IhMzrl*~9Ph6w2t4Ci~b;U^5 ztus}pvb%5oQq`S=e@E%movKsW-M2gIMEMuUo*X?~hS?=hAWspne`Cn{oR0_r3g9ft zCzebU&qV<1jKVA}Y~{1}$T5IjTl@n9+;~ywFFR^0pE^xo04vi3WALyZ4c!J16HNo~ z8dHU1?3kWuzl2>l{9^f@G)5GtoU~F&a(arOOpx zH^zDi)Rn8;`0yFxt8s7&e?B_*9qx^hqvN3g+sRqgf9+#9x7JS-IR%>-dj+f%zs8ur z?RP{vk5en69g->})~@npZTTw&pGB2+y+dq$N+PRUtp5+c9<-s4f#DUk?Ubr#LSscPpj9IAF6@joZ{&lCMm;e_QVX$+ejI1F!K zaj${Rf2w@dmCnUIG(Bxk7GW~u<$|Z|Cx94wJB`lbOcE4i9$u4u{u`-!rL~SO@9J)v zG{`QJ+(a_n7 zGOid`8m!cZjy8psyH=+9Ze2X(e~Wf>sQ9I`F$_@~V{C!M5>p6zAcCQy zdD5b4$PL$y=6jfi6mXHX!g@l5Nl?yUcZ>kl$oFvC1dcLK+aO#FEO5Tl5MkLk{yY2t z0SVXH2@P-Q#BoCyoOICsh!{CV)z6|lcQX#V-jDWefwAzY!WrnRDkGxx$rHP@+_}Tp zf1FX^65{lxu`)Kat|{ioUNMxS5(pFvEDJtpkPHM2D3TMX)-MF%HACLc_^E|P7O?30 zn%JIw;e;*H%;7WrUD^DpS9wg`#zR?gy)5bXHbh(AU1h3r(K<>7ba1-4;H&^Uu|M{!Ew|gfCM~BwXL9m~OY;V6}vxP`I*r37r)JZT3hwnYky=Dwu?Y5PX421=j5>{m3&5m7LDN?cLIcI@u?75-iZ30~#e}k26 zcD|2hfJW0O%<#ev9!v(N!i0go>yWWqc(K9hO)dK$)sAW6ir!n*5Y>=zIO$G#49K{6 z1p3HPB}~1g!psTYO2xK$hn?OD--TytH^4yz?Y(YrE&?3q5p~Zhz0wM~rgi{ha-Q^;v3gvX{67_KAXnB zgs%M!f>X{^gWUuB6Q)76KN)8o{7l(Ri=Tb;v(zWKu_3$vs~zf`L^wm!e@nIg@Z#t> z8VgcQtKyd?=d?wcXC9PMDdn!Mp=V?>(1eRmK(@{_jH~*k)MX65&78sO%NpFRCEAGf zG*y>^cwLEq*OmHrUCDpfmHu~K34pJk0@%+Y*O;laOmQrkyNX5MT;EDCzx|%!M5F0z zixz}Ty^SWuy9J)#5Yy$+e{R;@lUtXrs?%$bbtLQu6Fboc%JnP`i2h-2qzb$(pu8w; zn&nH2EVzuO)2&ujTn^#iMTX#CZ|A1Tq_oIB;w=e?a7K3HYd$Nb1-W)tC9*)}65eN* zgvN^FLWmL?pI<^gV`WBo(}N&=UY3tzR%g*rvUAkLRf~X*1X?iee{Ajjru}ZT$??-( zF)QLAct9h7zsOVIj|>C2vQ!ebEqXNc;FTOEUd@`(8?)q9r!VfN8@3V=qO$SjxL;L2 zPZmz)L7)d!Rb?{PHENA7a2&j4JQ8#()yZIz(IB9IItc;FBbENGT&+?Viy9MqL&&H% zBtvwi^IqjamG{sDe{TA!Qz;1{t!A>?M6j<~Ioo#P6c9G@=1WX-^c*M84LwzZ)4=XN zo0=F+gI+L185s&NYiHi=8}f)=On z!gXuRBD#pY;zj9OQ`!^@CXdH6t?Ok)M71A^eg9C^_t~m_uZI#D_fs`IuLEj_zaKPmI2Lb>29 z!Q0d%_@5|E25rZMQh3%bT|63GQFg!SRViJ(O#yVoye&$g&i4|WKa_*mmqwnb_&*N? z2(|*1e_$O@#;lC;T`ShFx}UI4nHn?I3-_i%Q5Ft5&Q9{A7gpdijwjS-9()8zjxO|N z>IN7Ya>mglgfkOTG+42c`Pg$fW}K!#%>p)cF&2|{_DHT6sz4}g;H4gB5%86HoXrNb zeg0syJd=WXOZmM^ppXkhxv?NyT$K$vB|Ia2f9&9jsE%iM?G>yVvqoD4Tj~vh2M?_A)(v?tO~WhCh<|lfqsAexV9f}i zEz|2e4S>iGf7h5UXw%-H_-XwtUnKzM0CpF;h1LrRh*`H$&ygJH<OLBX~1{m7KBBhPXXU)d9CZvshW|qsr-ioENhqwP}QK0^% zeQgDX58xOJC%u|=&{IZB2*7AZpNf?MHqg2T9XN|i?NzGu{gV#WHIviK5#j}RRcmFC#sVsxie~^Gde1NzI8Zw{b&ttQ)U@>GBc zf*5%7+t^hPRj|RDp;9Eh#!=Re@C7F`P=TFwS7f6Ktdo@MR%6!ne_X+U(E0rG;O+5= z$BfV^ba-^QUp=yy8usK4U83i6LpvT1QPa)vq4k*@JnhA=bu%@MI4%~d9nV17JfAg% zeId8ThVdWt`5!>7e)+|+VdQd~G%Ug`0O}ZU>2l6tq3RR8`$i#l{Z-=_4#|viIK0*% z+#lG-ofp)XHKm%V{;mJqd>4 z<2NcjSk{;~t=Kx>_?p(Wa@9&8Rz+B!TVDSbPZijx%aXPhfA>opRLIKb9Cb#+vuSb~ zPTi0Je+ODLrO-#Nrr-9&D2g+?Fl3ZyUcNhgju>*hVF)RXqZCY7wXJL75cb9r3?F_- zExMLcl`sWP8ZWpWl#yEwc5A2G6H)pap$?Na_3#K6NV|P^aYe*-!gJHYndp^n`EWee z#pyTSYK_OGf0C6gOA?;8#rcYnXLkNrO$~+zd>KWWjoml;H>}uWD3()D0;TbeGidhv z91TtITMEC=cX@i>Z^KV`H})>^8(|G46g0Hc=7&k z`!A2)Y9A%-V5qu>X-!(ZGGXaB}=HdISR} z_2R6}e_$8Wa6}1C=*wwz7SHG6icP{jjT6zO*RO-tO`0e-fV#SSJe{yk)Z(;b*$?G<-IbL2cAT1ls{7? zWSlr5wNT^lM`3B0*bufFdfoDCCtCMaRW=tyTtJG3_K_FB_Eg zX1XY2ooKj}SAj7Mm++-z@NK{1e{id4$Gr-MO?)Ue>5gOK*8QSTmYfFB*~frAnX7bE@Z$ZBeu6_T3Gof7_PMlZA`z zI$nzX5|`e?flJ+t*_K83q@SrXdHNhgj7fz4ZJyJW7V5xGfT_9w;w|s|UIq*+B0b zz`&B(tU?U%mgQQ3+4=;_p$8hVNy=Janbzf;+_o1|Li6z`Ove}wCGmM^Nw82+rb*Xs+?y`7R=!C@@C08vZm5wqc|Be~*bZp|QtRq5wq& zLOFx=&hSp3;&|p}N2FH9_(b<_w3FFWu`Zlmk-t1SNuqgA1Ey%{J)Xzt*{J$~E$Y?d zA-UuuleBV1vze6|q*^$2LT=Bs--P+OVcGc9j$g~&ur@*C4O>9{H8E}+N`GZOj00Ie zr@RiMThP+h8_D2We^JA1T@fK5*}Y9+|)=*al)pe~C!(?fl3X8R?+gdXGGc zFrkog_1{zW0ote9ZWYaIg!s3o4wyg#ZFWtrcedc|bW_TS-i?KE%WECg+ZSU!au(ez zzVZrwhI>p$#Y3#w+RWyA$zDlkEA=~RV-XybSB?9;5;%@5Q}Yf0$+hl5Qh}tb;++6W zXGe^4#72S_q;HtEr|*+qP}9Pi&)O+qP}nPRDjS z$;-R<{k)G+HLLbof3s@UoO__czkubWI#^6eo!`M3e+#@|USSsRHABqOLLFZ| zp2XGC_RPA$JdsW^cs!`uqZy@wuE$4GyHFKgKi?#9TlDFA=U~a8IlroT_gp71_3zU$ zlZTzFEF@3=*$;K19#aY1PQF$a!K{jog?_c>hQAl8tL-jEpHxJZArklH9182>5JIhZ zVHf!)&fv@2;FU_XS{1$-H)lJ?NXsL94?=0wqQrS-%$Pu3#Dcp`JVDCH45NSJh3&iK z17OWS0itk@XSiOml-*v!9llX10qE&B>)fq2LN;%zy1Ju#-FnK(pw)Hdl}-?iEQ#xi zS_#j`jAaMJ9J{cqv%1ZJ+K2le{{Sj09V0EjT&gUt@kFZJqXpZsxEqD1cZ7}h=yS_m#+6K&YP)n)&%#FlnyVg66;s2<4J zXMz$BlIL354}za`AD%NGUOOul)=N{>y$?UezanJYe5?0QMJfs~Z z?66%-jW_Pysq`!pTmaWSk_C}u@-5p_h(#2@7jeuWlOENtGW$ADHFR&54t}Dop~)G3#Mhg5 z3;b(YE>WuKGrwuo!F#k)(rq42XaZO5ZGwJ12|x#Bkn4?I$bK{uCI_3%5!2Sk_uQzx+_&r6|(jl zc?rc^z0LdnQOVfWL^MxBtjk4A9My*ds6}7d!i8gaoLW88rX2~4rdCsng*4m8ZCL8E zblQzZixj&_adc~dk@RO1H~>Yv&Bd`${)gmLM06X@-4(IgeuBH#rCe>!Ud#lXQ19Em z59kPZQS_jwf&EDqmH4WjDu~+vPTeOS1rzM93UiY6qqA`q*)Rjwdqnc}(2@A5~7vH9`Q$u}ow<4=o$C z_4N{kpfV4Ga23OpTAE(PYWbz)%~HR`Rm%4YW=2A)L_2!n!9S zYRhpSg6v|+rMK5*DLIQk{YO)oLO8nUHOG^F+R0g;iUeiIp$kD;USlYcjT5$?aWff{ zq4V3a(zYO_S!4g>)ya&3nZFsPU((@3j}aEXTKk64N{BC=$y}Ta$2O?jnhSqTvZi&V zATxMQrE>ImE*i?W9>|pw7$Mope(9x+!lxKCIh}aqGFhgw)m4=2gKw&6Hz9vq#UOZ! zK_`XP06j+0Y>p9c3WEqXt$rbOr$Z*KM4?Zz0t`_N5JX}u4-x-PP&{wWQl}eq#W*_Y zl%#0DSeHxD2Zo{Knt4g*5k8g=6L_{6EI0QnAH?vN(2yiBbq0p1H^{qvt-$oC z;r>2#&b(Hb8MOMt-tKlnu5^g5qAG@zE?0y5S=ttB1W|||XU;_UqKj{ihdOD-IXfQ( z7f+L!Xi2LCu1;P>4T7`1tYCpR3>d#F)=LqF0ae_A0>&8UFDcNpaLV+;od|=K3kZZ$ zPS3-5dj&}aB%|QDK}c3HEjd_4_Vbl#Ac&dVaVen?yyzgXVDPqSOul5G54adekwIXr z0S_EGB9o}nd2-94Yhf{oz)?rJF*F(dx~ga@8PHMIg}f#bCu0Do zBe<`@G%Q#n%C%RGV&drgPw8|xj7#ZNv!QvseY7O|x-4FWcD!JYw(qqtX^5X{x)%!m z3%|OI`iI?|jRHrsK=~Ez0QE6;56DXh*bFC;-KEXyE5B+#TSQ!`v94i+t@|;emSTh@b5L2+2mcbG1pwbO6&DHz1Mx@Gwjnji3xDaeH<1Oh_L+>p?^@xh*3^ka=*1wjr%yb(6P6b zD#~of%0-LC=aj;I5J`YYdG$hm$;R8KtNI?bJjq$tt1T_3+7NBDP#*#HC;e=IkX?h_ zU_Dowy?pSc#-K%X9gC5TQnWJ?HB)pV*foa@v-O(XUHLizBz2FgG&X55DtPSBq40lY zBe72Gu>A0$_{W%japlP<6rv7B?Ye}Iak!W~YrfECGng0kjnzW)(P@03yNi0r5S!4G z+Zs9!9d^rO5DgsNrv@J?3wjd)gQovT>)JhiwqP5Wu}%JS!=%UNhKli$-+3)Th}{({ z22(A}ca2obL|z%DmE=9q!RtL1wM=)w@4+%#)PmrqA}1t=x^dnpNV}_Q?;F5HK3R@6 zTeFWS<5D@~5K9#ma>7on0l|WDAtRZwyFpQdA50J)*l*~{*lUPsQM*nD`f$$rG`r83 z3%o1B^VFe*m6q5on?|Pzx6i6_1TCv1`%e|caXH^k>OP1mcsVg-cFz%XamB1> zHC#JEB3IY^@ow>6-(t#gaA>YFhz=?!ao9jK(U26(WKf|fRHq^Zax(>bnf{nh2U|T& znRMpDn4z=J39HF}USE!XRvU3ss8QmsAv(5O!X^?K#pdnzz@rW)->w2Fx+|k>H zsB_~ydM9QZq>t4Sq=v3NEIw+zQb>n+35=)ZXF6b!As?Eznqnkn5cLrzjVXB~6^~dP z1-FHYv8XcOs>9BtIMdFK!Nn|DCr~dd$MUZ<1;$hLq7_ILurNmd&@nGH`EHs3R|@?8 z2c-1GH36ZQDe2z2Ikfc%H9x)HE5aPBz{%N*4=}7%KxC8C|K%f#1g=fvl52}b_?ey`E0hX|#!ykP9%r-{e?MPu_E52wUWctrMac52hb@1&gOq ztI#K&9hLfc4>pWPq;-dk%w(ww5p|1E_*g{@B@pWX5>cF`k}i%!d8p``M zCjbq@4&x`fnd9de+!pXmx6dU(Mb-JW{`_r~OX?Dk+a{(4#!~Dx%g0k$mH=GHp_Aej zJHc1P!FY;pR9=`g1sz57Nv2C09}xLZy~=t-+FD?KxI?i?gKNuzaQ?(T%EPBplxmj5 z%dXM{5--qxi>o(GFy{Hd(wo@x) zTjbgD1aA%XCcwl(i+Vk+2UGYr_W+Wu9L_5s?e-fD5x6*SdP~ebJbf~i*G&ih7=H=P@DqJjp4Z z9E}U-Zi%O!6z5u&jzQH95;$;9yY!LcB8L50r9K!ui;{DWqard)D*3Ia(M#O@_HE^u z6G`RXP!YdqwjyvM>YK$e8^^1PryY}lsSSxB>){0fF z%}?(k{_WNi_L)SqZAxY7Kwl~8f;_CiYZ(5p-9>5g1ZQTj4TOb3rs9jir0`j&-U@5& za03OOUtC#r(<&N4mtg)(q7RBD-2f?hg-%CySVI>ghygCN*inR`uoxVULUn9lVpwqy zV!6VvA3h7Fc#HwK4$8ane(S*B5YcieY#PFNbE2ukV@i}nEyu2vY&`4mDR`)ug*mUd z(qXJsmC_J^6d$Dv-X^S>05HNWpY?NFW#-P^12wtyedXL&I=Mq2Kz3}EI*F}zo z-{SU9pC4QN?4NuRT^(K9h6&<8d5P&PN}6rT23&^X1UJCBR%3T#gF@E-Rk~ zg4go!X^%U7xFOZam-;lde$V75lv0opRJ8zxx!vQr8(mssgsw9Qv)(ySPar$Cc%mQH z2)&J_+7x>YwmJMmDJOElu(?kAy)Ax%SUR6&BV5gsy&1D=eCufi{Sq5GxK{BYb?Lga z9pGtAo{epN?yjPpoz!zF+qSO9CY3u`M;ZlnO=_r|fz!+Ss1}XZXR}~|-=k^ij5)J* z4(G^2n-1lqMquF-ZK4SrN zcvnFa)VvGa7|jd#@)JjzXt$-NhTxCSL3Sxyc{!owM5-xepnU?8b>3lswGCd~Uf-OY zvt%%d55-d$AueZxA@>XFB{lEjxYO+UuLiOxKL~gwtX0MCOGY zDw|ezmyMr&FjK$AE!>WraM9J#CX;Mj)o7i;D1WZlpf3-tGJ}Mhn9>@@v+GLAfATJw z=r=JDc~yQHR6qe9vb_kX(a5M&#qmq7%Y>XWf?hHYR_h%(BC#UoOR}B`97=SL73$** z9Gi*C3#L)d76#MEz28!tnBz+HC-O5v)3JTF63l+Wl~drn29wU zFP1>WR=$j7zS5zLbLBi$BINnzBRpKGf6aGOqPn>dfj%1L)i+i@1>l$w01!T3P zx?iO&5z>GtvBhSE1RVF5a*p2myKckIYRKfzU~+%xC9mW5-73w^bExklX{G`L56DCC zL8yfn_uEj!+up-nBn37BL`2JpU*9WSex$L3h_Oyer#Ag4&)6_1bUmls9(+jUx2wUn%~Ex z8c?RtNJdEX2n4GqoDPoGyJQL3Taiabc<8{9mH-cYlG#M1I2g*|3CNicQm3MV+fP93 zJ)J8ILw3|wO%?Jmsw(&|f!9_YoKmp>uKSU#Vqw~v zjrHk*p=18Po=LF<%chNjM1RSJQH1X>V{UdO-XnMz1#qxfff#6!9`dDK?Eq4{1QcNM znJ@~(NJ(|KERs{+YnS^yj&)jH1A-;JXb3XAB~+p2cuY1l@!zo{f^?vzN1q>?KXtDR zqvW2(>Yz=V21QvVqjHZ$8kLjhSP{NlM=CA8N0eC3o#8k?$DAe{A?NEV1lTRHUv0Em zB!4$y(r|6t>8K@d4$);0Iocvw+&BNsejt>yU|DO?0X7PfLOAn2*}lJ4;f+8TIOFu} zS)Sv_`^xo6UU3M?vG_Z`og(_v8@B``sYHG8$TGD~PPaNwoV4O8?axNuDcyAPRu~@~ zbaLbN=W6z1;2SJNG#~P6u1`KT%wz(Fr|~#pV&M| zQFAkOC$0yI7h_I!c5zjD0-?nv{X@HBQ@p=M>-$FKsWQI1i~g2zxfu#45(KmYIReA|>@ViLynD2ljztKY1Nw;f@+z-yh2Om|3C&?z*th zDCTqNrNvm%INF5@Q!LUp98nlF!o$0UXx1RT?U7F80)oN`#KgG9*^G6{c$r~uh5qPo zK}08wGENQ7vqp<4`k<~!u5KxwPGBkbve+J0MqVXP0>T()pX^N1eq#ZTcJ3|_@E}3L zLzG<>8-#i+99P>)e?=|=G}&iu=fBvtn^fQEO#Q?(zvu6~9xCT;9H=-Dx$Fa+x$-ut zSPArcqqW9m-dnu#3niQ^^`bVVyN^UYdzxhski_d};HCh;Q+|wv9}rK0n*sv<6&%u> zgt(~w?}Xzx#UIX_M-Aw1OnDlhg#1X!-z!*23w6lG(d#=f@im22btwRBdUm@$+&zg4 zF%*BduJ*Zc`+6Pgi+xvF3c$A=ZL@_&wz84GyX*vho}GAn2{R9xrcnu^sxYIL1m}K% zIw#vsh%dhTtX5h+o=km`a`1#Mfx#)Slx~>G8~v@toC?I~?gy?J{Ud>)#-PKa^<$H( zA1+=B8}0MO_$99*-|R&%$V9(31J}Oe4iN3$@K>oOOphnA!61 zk@DH|u~BR~OHo3!7}7Mq@1DRst5za4So`h#!!lYsH0z1cG0O?ekUz~Fs%mmEj5Uzm zhm4u|!}M@(FAVJEc1-#5LJQegMU2Ez3~rN@6md{mp(+VurE2C1%<<$IbZAomy|bo9rioUCs;i$mV0q<|c8_KQ z&M7s_j_wJ^A*GQ)|1o_)gSasFxu~OSOQpl`tcdKL=l~^QOmUsJCFM@`=ip4iFgKp%*%jN-N8Y6PX&rtmavJA^d6d-G%ar!t?Gbav+$ z15tzt-bxOhfg3>22e%x#W{W}9f1S^FCSMFW#k#b9D@Jx>s+6RDwqDf}Z$PPmA?rH> zS|F<0M-ktzrhkT=H{03mXVdCMc+0-r~sv^g(gZT@Uy_JU;mfBc5JX?PWXx$8ACg- zmN-J!8a5Ens`5lg{}ZtpvQg71Zw~?30>VaLOu$5C$qK&@a4yhSo#(0kCn`uN^;kwf zRuz};h*pP*j5{!$d;Sn18LtsD8-RRTI)_Uz3cv`aPH^+tny(7hz^uYsj&kjU17_a1 z!#j`>s!Qhwn_gS0aZHu(WGB40t~ho|Ui{iHzZELl5bj0yKp65i)gg{e`_`d;xUDbE z-`+YymRiV5jnWU`yL#%9GFHQ?cn2dsWEUDQmdTo z5mr2X)M3y#NYn0u1l!Y!E0R=zA)OZWusQ8g}vx20?V& z(fF!T#zadIi^iR|@#v_p0{F4pXL74u$QX&Wc$8hJl9)tKJQD6B!aaxA=sjPrHs3$j zHtyJFmpN#_)go+`iPAfNZy$en($zr?SRnyi2#?13$XhRqSu-c)5DwPR`R+YsTR9qOvyGyw=IxB<`V-j=7w7mZUiOwnDJN$dT3rcY;qk8F*xg;fiZ4Xy}EUrsM198|iX(I6rrhGe4^NLbp zM8^2-fOfZ>kxt00ToVZ%BX*+Voz6~&6j3D;>{`72bl%*Y5~?eOqOFE)3P<&6)Sj_{ z?hB%(nF}0rT9C5)NhGA%F-sg);+rB|8Tpm;Vdz{;}Qn?UYxqp29|&YWzLtzX~tH7|0`&^NnyH5Ie0Mu+q?Bzv}CHR`e+175xeRKUim<*dw^rK(+_pc8GJ zdoszm0a2)ITeUDNsrg&8E8$k@U{c&#p23d0{9e-_CYKx~gH74O3bz{v$>@eN2-j>y zSefSx_TPmddUCy;*wkMLv>}{@P)O8Jdv=mB}RlO$49I<*mOOFe`U;mJs0s){b zK%6$U#Oj?`Lw%7)h?eE$5UYdz9=qE@dul7Nj`O^_x*`=MqtmcgHK!Em5kP9Kb!Onj z0TSahiv~!7!c(pM0#7^CF)%GU2tqiR;Fnf0mdYR>!sn6M%ptRT$50GR(48_;6CP_( zKHMG5^qO+1gQ~2V47E!wkdAJ;L@9RF=^)yVRx#-d1K?aj zbj7Dy^T|6J;>|YZ%0&#hI3LajhMWMA)vY`q2N(*LO3Z>Y#HOWFNLw1@+nP0=E+SoS zDMRmSV0*T@t?4O1GYRfMr{Gm1Wo1T1G@Bp#hF`z9tljbENLLaMOf8Edvb>$O;_Z#8 z6{Y+)x*H`S97+Q8bL7Xtx7RDvHtO>jO}03-9FR}pH`syToyUw!;yH9cbL3)D5`VgW zL!ZYA!&hCyIALpvGegw}oX*M)#mVucj4>d3(t7Xxf z(0DlW<>sW3?7_E8j$Co5uMb4*Eg&=n(MlQ!$}t;@3$Wz`r3hCJ9&01A)-ARdTqo-P{=eu(3+i~izs-){->+PR$aZM6R4rYU!o~lsHrkt#L6y% zJ)LXJME0|L7=z$GEE!I_&}6AEmHQw_#f7-8;;-+$s=YL*$Y)ep{X(LXk2ZJX@BJfOi72MVt3Xf`1G40mTkeZnaaDcf z&~TH8NPSkPN!tE=f9d=pWJqA+0_rk`+ufOG^`K26D_b?tzsR}W3Q+mubY$mh&Q#n` zy4W>jRLRnmrJil1A#T1@O`Ol;m*I&o;*P*0QVHBxnT&F6Jt^W3;KByqyx z@uv&xGtwFOYQR$7C*+;3ZD5DHlY`6m1I#_xp%3U!SmkMCuTvq|uF0h--^%{NLD9<+6mFefh4M}Y7iYWYUQvWNvr9eGHGOav`fXn9q%6|B_k*$W4%jTRqMWkA0O4f$Kn zt$yCCdrv~98_Ybu+0Q-vpKB~9$WDe;%lR??lm2B-vFR|y{o@BrS%AGHR`dp!>>BV= zyD5`C-!qX=g{@o##)=L$%z6kFu4@~QZ?&^_W^S89_Y2zh-^lXvGEUXb zqI>wa60Q5T;06((^!PzeKv$v}u?r+Tc97!JJyulPcbt-*ccU8;!W=}KeWU0aqiq;EMB0C^a zp?D?VF*|TVDzvC+z9lE-6)+o;23Qf-Xbdh)1ieirL8fz;Y1x@n1Wb{0I$K&~$rEIS zGMUG69;6WQ$O-b?OnsZYZydaUeT{zF^KTasMJ1!V&=!W#{K5lJEY;4_)NPnS-(kMIl!PGmK|rF2 zCZo^1)G)-$3k+)S<<3$&FuXaBVkpab3<|0>a@E z&I(5WN@ssHDT`6=xaEv;PK}z| zq+=diDLJVR!iray#eX|1a4qqm=mDZ$cv9FmUyp_&O+=yH!SKC+kFqBecLpDX_?En3 z`2;^B&PSBCi(ngmdmRVDEG>=ZyTmZ{Peh|rmPpqOn+KrB(qa!it|F``C>c5m(4a0u zV8{Zm!{=84l=Ri`8P7+ZfX!08w>A(=L2>;7G?vs)dw#13W5K25Eux|cPJB>i$)6v0z5eMe}b4&0O;_n|E-+R;o1IMm7&86 z{Using Mini-XML

API Basics

Every piece of information in an XML file is stored in memory in "nodes". Nodes are represented by mxml_node_t pointers. Each node has an associated type, value(s), a parent node, sibling nodes (previous and next), potentially first and last child nodes, and an optional user data pointer.

For example, if you have an XML file like the following:

-
<?xml version="1.0" encoding="utf-8"?>
-<data>
-    <node>val1</node>
-    <node>val2</node>
-    <node>val3</node>
-    <group>
-        <node>val4</node>
-        <node>val5</node>
-        <node>val6</node>
-    </group>
-    <node>val7</node>
-    <node>val8</node>
-</data>
+
<?xml version="1.0" encoding="utf-8"?>
+<data>
+    <node>val1</node>
+    <node>val2</node>
+    <node>val3</node>
+    <group>
+        <node>val4</node>
+        <node>val5</node>
+        <node>val6</node>
+    </group>
+    <node>val7</node>
+    <node>val8</node>
+</data>
 

the node tree for the file would look like the following in memory:

<?xml version="1.0" encoding="utf-8"?>
@@ -562,7 +562,7 @@ 

Load Options

mxmlOptionsSetTypeValue(options, MXML_TYPE_OPAQUE);
 

For more complex XML documents, you can specify a callback that returns the type of value for a given element node using the mxmlOptionsSetTypeCallback function. For example, to specify a callback function called my_type_cb that has no callback data:

-
mxmlOptionsSetTypeValue(options, my_type_cb, /*cbdata*/NULL);
+
mxmlOptionsSetTypeCallback(options, my_type_cb, /*cbdata*/NULL);
 

The my_type_cb function accepts the callback data pointer (NULL in this case) and the mxml_node_t pointer for the current element and returns a mxml_type_t enumeration value specifying the value type for child nodes. For example, the following function looks at the "type" attribute and the element name to determine the value types of the node's children:

mxml_type_t
@@ -1445,7 +1445,7 @@ 

Functions

mxmlAdd

Add a node to a tree.

-void mxmlAdd(mxml_node_t *parent, mxml_add_t add, mxml_node_t *child, mxml_node_t *node);

+void mxmlAdd(mxml_node_t *parent, mxml_add_t add, mxml_node_t *child, mxml_node_t *node);

Parameters

@@ -1466,7 +1466,7 @@

Discussion

mxmlDelete

Delete a node and all of its children.

-void mxmlDelete(mxml_node_t *node);

+void mxmlDelete(mxml_node_t *node);

Parameters

parent
@@ -1479,7 +1479,7 @@

Discussion

mxmlElementClearAttr

Remove an attribute from an element.

-void mxmlElementClearAttr(mxml_node_t *node, const char *name);

+void mxmlElementClearAttr(mxml_node_t *node, constchar *name);

Parameters

node
@@ -1492,7 +1492,7 @@

Discussion

mxmlElementGetAttr

Get the value of an attribute.

-const char *mxmlElementGetAttr(mxml_node_t *node, const char *name);

+constchar *mxmlElementGetAttr(mxml_node_t *node, constchar *name);

Parameters

node
@@ -1509,7 +1509,7 @@

Discussion

mxmlElementGetAttrByIndex

Get an attribute by index.

-const char *mxmlElementGetAttrByIndex(mxml_node_t *node, size_t idx, const char **name);

+constchar *mxmlElementGetAttrByIndex(mxml_node_t *node, size_t idx, constchar **name);

Parameters

node
@@ -1543,7 +1543,7 @@

Discussion

mxmlElementSetAttr

Set an attribute for an element.

-void mxmlElementSetAttr(mxml_node_t *node, const char *name, const char *value);

+void mxmlElementSetAttr(mxml_node_t *node, constchar *name, constchar *value);

Parameters

node
@@ -1560,7 +1560,7 @@

Discussion

mxmlElementSetAttrf

Set an attribute with a formatted value.

-void mxmlElementSetAttrf(mxml_node_t *node, const char *name, const char *format, ...);

+void mxmlElementSetAttrf(mxml_node_t *node, constchar *name, constchar *format, ...);

Parameters

node
@@ -1579,7 +1579,7 @@

Discussion

mxmlFindElement

Find the named element.

-mxml_node_t *mxmlFindElement(mxml_node_t *node, mxml_node_t *top, const char *element, const char *attr, const char *value, mxml_descend_t descend);

+mxml_node_t *mxmlFindElement(mxml_node_t *node, mxml_node_t *top, constchar *element, constchar *attr, constchar *value, mxml_descend_t descend);

Parameters

node
@@ -1610,7 +1610,7 @@

Discussion

mxmlFindPath

Find a node with the given path.

-mxml_node_t *mxmlFindPath(mxml_node_t *top, const char *path);

+mxml_node_t *mxmlFindPath(mxml_node_t *top, constchar *path);

Parameters

node
@@ -1631,7 +1631,7 @@

Discussion

mxmlGetCDATA

Get the value for a CDATA node.

-const char *mxmlGetCDATA(mxml_node_t *node);

+constchar *mxmlGetCDATA(mxml_node_t *node);

Parameters

top
@@ -1645,7 +1645,7 @@

Discussion

mxmlGetComment

Get the value for a comment node.

-const char *mxmlGetComment(mxml_node_t *node);

+constchar *mxmlGetComment(mxml_node_t *node);

Parameters

node
@@ -1659,7 +1659,7 @@

Discussion

mxmlGetCustom

Get the value for a custom node.

-const void *mxmlGetCustom(mxml_node_t *node);

+constvoid *mxmlGetCustom(mxml_node_t *node);

Parameters

node
@@ -1673,7 +1673,7 @@

Discussion

mxmlGetDeclaration

Get the value for a declaration node.

-const char *mxmlGetDeclaration(mxml_node_t *node);

+constchar *mxmlGetDeclaration(mxml_node_t *node);

Parameters

node
@@ -1687,7 +1687,7 @@

Discussion

mxmlGetDirective

Get the value for a processing instruction node.

-const char *mxmlGetDirective(mxml_node_t *node);

+constchar *mxmlGetDirective(mxml_node_t *node);

Parameters

node
@@ -1701,7 +1701,7 @@

Discussion

mxmlGetElement

Get the name for an element node.

-const char *mxmlGetElement(mxml_node_t *node);

+constchar *mxmlGetElement(mxml_node_t *node);

Parameters

node
@@ -1730,7 +1730,7 @@

mxmlGetInteger

Get the integer value from the specified node or its first child.

-long mxmlGetInteger(mxml_node_t *node);

+long mxmlGetInteger(mxml_node_t *node);

Parameters

node
@@ -1771,7 +1771,7 @@

Return Value

mxmlGetOpaque

Get an opaque string value for a node or its first child.

-const char *mxmlGetOpaque(mxml_node_t *node);

+constchar *mxmlGetOpaque(mxml_node_t *node);

Parameters

node
@@ -1812,7 +1812,7 @@

Discussion

mxmlGetReal

Get the real value for a node or its first child.

-double mxmlGetReal(mxml_node_t *node);

+double mxmlGetReal(mxml_node_t *node);

Parameters

node
@@ -1841,7 +1841,7 @@

Discussion

mxmlGetText

Get the text value for a node or its first child.

-const char *mxmlGetText(mxml_node_t *node, bool *whitespace);

+constchar *mxmlGetText(mxml_node_t *node, bool *whitespace);

Parameters

node
@@ -1879,7 +1879,7 @@

Discussion

mxmlGetUserData

Get the user data pointer for a node.

-void *mxmlGetUserData(mxml_node_t *node);

+void *mxmlGetUserData(mxml_node_t *node);

Parameters

node
@@ -1892,7 +1892,7 @@

Discussion

mxmlIndexDelete

Delete an index.

-void mxmlIndexDelete(mxml_index_t *ind);

+void mxmlIndexDelete(mxml_index_t *ind);

Parameters

node
@@ -1918,7 +1918,7 @@

Discussion

mxmlIndexFind

Find the next matching node.

-mxml_node_t *mxmlIndexFind(mxml_index_t *ind, const char *element, const char *value);

+mxml_node_t *mxmlIndexFind(mxml_index_t *ind, constchar *element, constchar *value);

Parameters

ind
@@ -1951,7 +1951,7 @@

Return Value

mxmlIndexNew

Create a new index.

-mxml_index_t *mxmlIndexNew(mxml_node_t *node, const char *element, const char *attr);

+mxml_index_t *mxmlIndexNew(mxml_node_t *node, constchar *element, constchar *attr);

Parameters

ind
@@ -1990,7 +1990,7 @@

Discussion

mxmlLoadFd

Load a file descriptor into an XML node tree.

-mxml_node_t *mxmlLoadFd(mxml_node_t *top, mxml_options_t *options, int fd);

+mxml_node_t *mxmlLoadFd(mxml_node_t *top, mxml_options_t *options, int fd);

Parameters

node
@@ -2038,7 +2038,7 @@

Discussion

mxmlLoadFilename

Load a file into an XML node tree.

-mxml_node_t *mxmlLoadFilename(mxml_node_t *top, mxml_options_t *options, const char *filename);

+mxml_node_t *mxmlLoadFilename(mxml_node_t *top, mxml_options_t *options, constchar *filename);

Parameters

top
@@ -2062,7 +2062,7 @@

Discussion

mxmlLoadIO

Load an XML node tree using a read callback.

-mxml_node_t *mxmlLoadIO(mxml_node_t *top, mxml_options_t *options, mxml_io_cb_t io_cb, void *io_cbdata);

+mxml_node_t *mxmlLoadIO(mxml_node_t *top, mxml_options_t *options, mxml_io_cb_t io_cb, void *io_cbdata);

Parameters

top
@@ -2101,7 +2101,7 @@

Discussion

mxmlLoadString

Load a string into an XML node tree.

-mxml_node_t *mxmlLoadString(mxml_node_t *top, mxml_options_t *options, const char *s);

+mxml_node_t *mxmlLoadString(mxml_node_t *top, mxml_options_t *options, constchar *s);

Parameters

top
@@ -2125,11 +2125,11 @@

Discussion

mxmlNewCDATA

Create a new CDATA node.

-mxml_node_t *mxmlNewCDATA(mxml_node_t *parent, const char *data);

+mxml_node_t *mxmlNewCDATA(mxml_node_t *parent, constchar *data);

Parameters

top
- +
parentParent node or MXML_NO_PARENT
Parent node or NULL
data Data string
@@ -2137,18 +2137,17 @@

Return Value

New node

Discussion

The new CDATA node is added to the end of the specified parent's child -list. The constant MXML_NO_PARENT can be used to specify that the new -CDATA node has no parent. The data string must be nul-terminated and -is copied into the new node. CDATA nodes currently use the -MXML_TYPE_ELEMENT type.

+list. The constant NULL can be used to specify that the new CDATA node +has no parent. The data string must be nul-terminated and is copied into the +new node.

mxmlNewCDATAf

Create a new formatted CDATA node.

-mxml_node_t *mxmlNewCDATAf(mxml_node_t *parent, const char *format, ...);

+mxml_node_t *mxmlNewCDATAf(mxml_node_t *parent, const char *format, ...);

Parameters

- + @@ -2157,18 +2156,18 @@

Parameters

Return Value

New node

Discussion

-

The new CDATA node is added to the end of the specified parent's -child list. The constant MXML_NO_PARENT can be used to specify that -the new opaque string node has no parent. The format string must be -nul-terminated and is formatted into the new node.

+

The new CDATA node is added to the end of the specified parent's child list. +The constant NULL can be used to specify that the new opaque string node +has no parent. The format string must be nul-terminated and is formatted +into the new node.

mxmlNewComment

Create a new comment node.

-mxml_node_t *mxmlNewComment(mxml_node_t *parent, const char *comment);

+mxml_node_t *mxmlNewComment(mxml_node_t *parent, constchar *comment);

Parameters

parentParent node or MXML_NO_PARENT
Parent node or NULL
format Printf-style format string
...
- +
parentParent node or MXML_NO_PARENT
Parent node or NULL
comment Comment string
@@ -2176,17 +2175,17 @@

Return Value

New node

Discussion

The new comment node is added to the end of the specified parent's child -list. The constant MXML_NO_PARENT can be used to specify that the new -comment node has no parent. The comment string must be nul-terminated and -is copied into the new node.

+list. The constant NULL can be used to specify that the new comment node +has no parent. The comment string must be nul-terminated and is copied into +the new node.

mxmlNewCommentf

Create a new formatted comment string node.

-mxml_node_t *mxmlNewCommentf(mxml_node_t *parent, const char *format, ...);

+mxml_node_t *mxmlNewCommentf(mxml_node_t *parent, const char *format, ...);

Parameters

- + @@ -2196,17 +2195,17 @@

Return Value

New node

Discussion

The new comment string node is added to the end of the specified parent's -child list. The constant MXML_NO_PARENT can be used to specify that -the new opaque string node has no parent. The format string must be -nul-terminated and is formatted into the new node.

+child list. The constant NULL can be used to specify that the new opaque +string node has no parent. The format string must be nul-terminated and is +formatted into the new node.

mxmlNewCustom

Create a new custom data node.

-mxml_node_t *mxmlNewCustom(mxml_node_t *parent, void *data, mxml_custfree_cb_t free_cb, void *free_cbdata);

+mxml_node_t *mxmlNewCustom(mxml_node_t *parent, void *data, mxml_custfree_cb_t free_cb, void *free_cbdata);

Parameters

parentParent node or MXML_NO_PARENT
Parent node or NULL
format Printf-style format string
...
- + @@ -2223,11 +2222,11 @@

Discussion

mxmlNewDeclaration

Create a new declaraction node.

-mxml_node_t *mxmlNewDeclaration(mxml_node_t *parent, const char *declaration);

+mxml_node_t *mxmlNewDeclaration(mxml_node_t *parent, constchar *declaration);

Parameters

parentParent node or MXML_NO_PARENT
Parent node or NULL
data Pointer to data
free_cb
- +
parentParent node or MXML_NO_PARENT
Parent node or NULL
declaration Declaration string
@@ -2235,17 +2234,17 @@

Return Value

New node

Discussion

The new declaration node is added to the end of the specified parent's child -list. The constant MXML_NO_PARENT can be used to specify that the new +list. The constant NULL can be used to specify that the new declaration node has no parent. The declaration string must be nul- terminated and is copied into the new node.

mxmlNewDeclarationf

Create a new formatted declaration node.

-mxml_node_t *mxmlNewDeclarationf(mxml_node_t *parent, const char *format, ...);

+mxml_node_t *mxmlNewDeclarationf(mxml_node_t *parent, const char *format, ...);

Parameters

- + @@ -2255,17 +2254,17 @@

Return Value

New node

Discussion

The new declaration node is added to the end of the specified parent's -child list. The constant MXML_NO_PARENT can be used to specify that +child list. The constant NULL can be used to specify that the new opaque string node has no parent. The format string must be nul-terminated and is formatted into the new node.

mxmlNewDirective

Create a new processing instruction node.

-mxml_node_t *mxmlNewDirective(mxml_node_t *parent, const char *directive);

+mxml_node_t *mxmlNewDirective(mxml_node_t *parent, constchar *directive);

Parameters

parentParent node or MXML_NO_PARENT
Parent node or NULL
format Printf-style format string
...
- +
parentParent node or MXML_NO_PARENT
Parent node or NULL
directive Directive string
@@ -2273,17 +2272,17 @@

Return Value

New node

Discussion

The new processing instruction node is added to the end of the specified -parent's child list. The constant MXML_NO_PARENT can be used to specify -that the new processing instruction node has no parent. The data string must -be nul-terminated and is copied into the new node.

+parent's child list. The constant NULL can be used to specify that the new +processing instruction node has no parent. The data string must be +nul-terminated and is copied into the new node.

mxmlNewDirectivef

Create a new formatted processing instruction node.

-mxml_node_t *mxmlNewDirectivef(mxml_node_t *parent, const char *format, ...);

+mxml_node_t *mxmlNewDirectivef(mxml_node_t *parent, const char *format, ...);

Parameters

- + @@ -2292,18 +2291,18 @@

Parameters

Return Value

New node

Discussion

-

The new processing instruction node is added to the end of the specified parent's -child list. The constant MXML_NO_PARENT can be used to specify that -the new opaque string node has no parent. The format string must be +

The new processing instruction node is added to the end of the specified +parent's child list. The constant NULL can be used to specify that the new +opaque string node has no parent. The format string must be nul-terminated and is formatted into the new node.

mxmlNewElement

Create a new element node.

-mxml_node_t *mxmlNewElement(mxml_node_t *parent, const char *name);

+mxml_node_t *mxmlNewElement(mxml_node_t *parent, constchar *name);

Parameters

parentParent node or MXML_NO_PARENT
Parent node or NULL
format Printf-style format string
...
- +
parentParent node or MXML_NO_PARENT
Parent node or NULL
name Name of element
@@ -2311,16 +2310,16 @@

Return Value

New node

Discussion

The new element node is added to the end of the specified parent's child -list. The constant MXML_NO_PARENT can be used to specify that the new -element node has no parent.

+list. The constant NULL can be used to specify that the new element node +has no parent.

mxmlNewInteger

Create a new integer node.

-mxml_node_t *mxmlNewInteger(mxml_node_t *parent, long integer);

+mxml_node_t *mxmlNewInteger(mxml_node_t *parent, long integer);

Parameters

- +
parentParent node or MXML_NO_PARENT
Parent node or NULL
integer Integer value
@@ -2328,16 +2327,16 @@

Return Value

New node

Discussion

The new integer node is added to the end of the specified parent's child -list. The constant MXML_NO_PARENT can be used to specify that the new -integer node has no parent.

+list. The constant NULL can be used to specify that the new integer node +has no parent.

mxmlNewOpaque

Create a new opaque string.

-mxml_node_t *mxmlNewOpaque(mxml_node_t *parent, const char *opaque);

+mxml_node_t *mxmlNewOpaque(mxml_node_t *parent, const char *opaque);

Parameters

- +
parentParent node or MXML_NO_PARENT
Parent node or NULL
opaque Opaque string
@@ -2345,17 +2344,17 @@

Return Value

New node

Discussion

The new opaque string node is added to the end of the specified parent's -child list. The constant MXML_NO_PARENT can be used to specify that -the new opaque string node has no parent. The opaque string must be nul- -terminated and is copied into the new node.

+child list. The constant NULL can be used to specify that the new opaque +string node has no parent. The opaque string must be nul-terminated and is +copied into the new node.

mxmlNewOpaquef

Create a new formatted opaque string node.

-mxml_node_t *mxmlNewOpaquef(mxml_node_t *parent, const char *format, ...);

+mxml_node_t *mxmlNewOpaquef(mxml_node_t *parent, const char *format, ...);

Parameters

- + @@ -2365,17 +2364,17 @@

Return Value

New node

Discussion

The new opaque string node is added to the end of the specified parent's -child list. The constant MXML_NO_PARENT can be used to specify that -the new opaque string node has no parent. The format string must be -nul-terminated and is formatted into the new node.

+child list. The constant NULL can be used to specify that the new opaque +string node has no parent. The format string must be nul-terminated and is +formatted into the new node.

mxmlNewReal

Create a new real number node.

-mxml_node_t *mxmlNewReal(mxml_node_t *parent, double real);

+mxml_node_t *mxmlNewReal(mxml_node_t *parent, double real);

Parameters

parentParent node or MXML_NO_PARENT
Parent node or NULL
format Printf-style format string
...
- +
parentParent node or MXML_NO_PARENT
Parent node or NULL
real Real number value
@@ -2383,16 +2382,16 @@

Return Value

New node

Discussion

The new real number node is added to the end of the specified parent's -child list. The constant MXML_NO_PARENT can be used to specify that -the new real number node has no parent.

+child list. The constant NULL can be used to specify that the new real +number node has no parent.

mxmlNewText

Create a new text fragment node.

-mxml_node_t *mxmlNewText(mxml_node_t *parent, bool whitespace, const char *string);

+mxml_node_t *mxmlNewText(mxml_node_t *parent, bool whitespace, const char *string);

Parameters

- + @@ -2402,18 +2401,18 @@

Return Value

New node

Discussion

The new text node is added to the end of the specified parent's child -list. The constant MXML_NO_PARENT can be used to specify that the new -text node has no parent. The whitespace parameter is used to specify -whether leading whitespace is present before the node. The text -string must be nul-terminated and is copied into the new node.

+list. The constant NULL can be used to specify that the new text node has +no parent. The whitespace parameter is used to specify whether leading +whitespace is present before the node. The text string must be +nul-terminated and is copied into the new node.

mxmlNewTextf

Create a new formatted text fragment node.

-mxml_node_t *mxmlNewTextf(mxml_node_t *parent, bool whitespace, const char *format, ...);

+mxml_node_t *mxmlNewTextf(mxml_node_t *parent, bool whitespace, constchar *format, ...);

Parameters

parentParent node or MXML_NO_PARENT
Parent node or NULL
whitespace true = leading whitespace, false = no whitespace
string
- + @@ -2425,14 +2424,14 @@

Return Value

New node

Discussion

The new text node is added to the end of the specified parent's child -list. The constant MXML_NO_PARENT can be used to specify that the new -text node has no parent. The whitespace parameter is used to specify -whether leading whitespace is present before the node. The format -string must be nul-terminated and is formatted into the new node.

+list. The constant NULL can be used to specify that the new text node has +no parent. The whitespace parameter is used to specify whether leading +whitespace is present before the node. The format string must be +nul-terminated and is formatted into the new node.

mxmlNewXML

Create a new XML document tree.

-mxml_node_t *mxmlNewXML(const char *version);

+mxml_node_t *mxmlNewXML(constchar *version);

Parameters

parentParent node or MXML_NO_PARENT
Parent node or NULL
whitespace true = leading whitespace, false = no whitespace
format
@@ -2446,7 +2445,7 @@

Discussion

mxmlOptionsDelete

Free load/save options.

-void mxmlOptionsDelete(mxml_options_t *options);

+void mxmlOptionsDelete(mxml_options_t *options);

Parameters

version
@@ -2455,7 +2454,7 @@

Parameters

mxmlOptionsNew

Allocate load/save options.

-mxml_options_t *mxmlOptionsNew(void);

+mxml_options_t *mxmlOptionsNew(void);

Return Value

Options

Discussion

@@ -2488,7 +2487,7 @@

Discussion

mxmlOptionsSetCustomCallbacks

Set the custom data callbacks.

-void mxmlOptionsSetCustomCallbacks(mxml_options_t *options, mxml_custload_cb_t load_cb, mxml_custsave_cb_t save_cb, void *cbdata);

+void mxmlOptionsSetCustomCallbacks(mxml_options_t *options, mxml_custload_cb_t load_cb, mxml_custsave_cb_t save_cb, void *cbdata);

Parameters

options
@@ -2596,7 +2595,7 @@

Discussion

mxmlOptionsSetEntityCallback

Set the entity lookup callback to use when loading XML data.

-void mxmlOptionsSetEntityCallback(mxml_options_t *options, mxml_entity_cb_t cb, void *cbdata);

+void mxmlOptionsSetEntityCallback(mxml_options_t *options, mxml_entity_cb_t cb, void *cbdata);

Parameters

options
@@ -2631,7 +2630,7 @@

Discussion

mxmlOptionsSetErrorCallback

Set the error message callback.

-void mxmlOptionsSetErrorCallback(mxml_options_t *options, mxml_error_cb_t cb, void *cbdata);

+void mxmlOptionsSetErrorCallback(mxml_options_t *options, mxml_error_cb_t cb, void *cbdata);

Parameters

options
@@ -2660,7 +2659,7 @@

Discussion

mxmlOptionsSetSAXCallback

Set the SAX callback to use when reading XML data.

-void mxmlOptionsSetSAXCallback(mxml_options_t *options, mxml_sax_cb_t cb, void *cbdata);

+void mxmlOptionsSetSAXCallback(mxml_options_t *options, mxml_sax_cb_t cb, void *cbdata);

Parameters

options
@@ -2707,7 +2706,7 @@

Discussion

mxmlOptionsSetTypeCallback

Set the type callback for child/value nodes.

-void mxmlOptionsSetTypeCallback(mxml_options_t *options, mxml_type_cb_t cb, void *cbdata);

+void mxmlOptionsSetTypeCallback(mxml_options_t *options, mxml_type_cb_t cb, void *cbdata);

Parameters

options
@@ -2752,7 +2751,7 @@

Discussion

mxmlOptionsSetTypeValue

Set the type to use for all child/value nodes.

-void mxmlOptionsSetTypeValue(mxml_options_t *options, mxml_type_t type);

+void mxmlOptionsSetTypeValue(mxml_options_t *options, mxml_type_t type);

Parameters

options
@@ -2765,7 +2764,7 @@

Discussion

mxmlOptionsSetWhitespaceCallback

Set the whitespace callback.

-void mxmlOptionsSetWhitespaceCallback(mxml_options_t *options, mxml_ws_cb_t cb, void *cbdata);

+void mxmlOptionsSetWhitespaceCallback(mxml_options_t *options, mxml_ws_cb_t cb, void *cbdata);

Parameters

options
@@ -2794,7 +2793,7 @@

Discussion

mxmlOptionsSetWrapMargin

Set the wrap margin when saving XML data.

-void mxmlOptionsSetWrapMargin(mxml_options_t *options, int column);

+void mxmlOptionsSetWrapMargin(mxml_options_t *options, int column);

Parameters

options
@@ -2808,7 +2807,7 @@

Discussion

mxmlRelease

Release a node.

-int mxmlRelease(mxml_node_t *node);

+int mxmlRelease(mxml_node_t *node);

Parameters

options
@@ -2822,7 +2821,7 @@

Discussion

mxmlRemove

Remove a node from its parent.

-void mxmlRemove(mxml_node_t *node);

+void mxmlRemove(mxml_node_t *node);

Parameters

node
@@ -2834,7 +2833,7 @@

Discussion

mxmlRetain

Retain a node.

-int mxmlRetain(mxml_node_t *node);

+int mxmlRetain(mxml_node_t *node);

Parameters

node
@@ -2845,7 +2844,7 @@

Return Value

mxmlSaveAllocString

Save an XML tree to an allocated string.

-char *mxmlSaveAllocString(mxml_node_t *node, mxml_options_t *options);

+char *mxmlSaveAllocString(mxml_node_t *node, mxml_options_t *options);

Parameters

node
@@ -2869,7 +2868,7 @@

Discussion

mxmlSaveFd

Save an XML tree to a file descriptor.

-bool mxmlSaveFd(mxml_node_t *node, mxml_options_t *options, int fd);

+bool mxmlSaveFd(mxml_node_t *node, mxml_options_t *options, int fd);

Parameters

node
@@ -2890,7 +2889,7 @@

Discussion

mxmlSaveFile

Save an XML tree to a file.

-bool mxmlSaveFile(mxml_node_t *node, mxml_options_t *options, FILE *fp);

+bool mxmlSaveFile(mxml_node_t *node, mxml_options_t *options, FILE *fp);

Parameters

node
@@ -2911,7 +2910,7 @@

Discussion

mxmlSaveFilename

Save an XML tree to a file.

-bool mxmlSaveFilename(mxml_node_t *node, mxml_options_t *options, const char *filename);

+bool mxmlSaveFilename(mxml_node_t *node, mxml_options_t *options, constchar *filename);

Parameters

node
@@ -2932,7 +2931,7 @@

Discussion

mxmlSaveIO

Save an XML tree using a callback.

-bool mxmlSaveIO(mxml_node_t *node, mxml_options_t *options, mxml_io_cb_t io_cb, void *io_cbdata);

+bool mxmlSaveIO(mxml_node_t *node, mxml_options_t *options, mxml_io_cb_t io_cb, void *io_cbdata);

Parameters

node
@@ -2972,7 +2971,7 @@

Discussion

mxmlSaveString

Save an XML node tree to a string.

-size_t mxmlSaveString(mxml_node_t *node, mxml_options_t *options, char *buffer, size_t bufsize);

+size_t mxmlSaveString(mxml_node_t *node, mxml_options_t *options, char *buffer, size_t bufsize);

Parameters

node
@@ -2995,7 +2994,7 @@

Discussion

mxmlSetCDATA

Set the data for a CDATA node.

-bool mxmlSetCDATA(mxml_node_t *node, const char *data);

+bool mxmlSetCDATA(mxml_node_t *node, constchar *data);

Parameters

node
@@ -3011,7 +3010,7 @@

Discussion

mxmlSetCDATAf

Set the data for a CDATA to a formatted string.

-bool mxmlSetCDATAf(mxml_node_t *node, const char *format, ...);

+bool mxmlSetCDATAf(mxml_node_t *node, constchar *format, ...);

Parameters

node
@@ -3029,7 +3028,7 @@

Discussion

mxmlSetComment

Set a comment to a literal string.

-bool mxmlSetComment(mxml_node_t *node, const char *comment);

+bool mxmlSetComment(mxml_node_t *node, constchar *comment);

Parameters

node
@@ -3044,7 +3043,7 @@

Discussion

mxmlSetCommentf

Set a comment to a formatted string.

-bool mxmlSetCommentf(mxml_node_t *node, const char *format, ...);

+bool mxmlSetCommentf(mxml_node_t *node, constchar *format, ...);

Parameters

node
@@ -3061,7 +3060,7 @@

Discussion

mxmlSetCustom

Set the data and destructor of a custom data node.

-bool mxmlSetCustom(mxml_node_t *node, void *data, mxml_custfree_cb_t free_cb, void *free_cbdata);

+bool mxmlSetCustom(mxml_node_t *node, void *data, mxml_custfree_cb_t free_cb, void *free_cbdata);

Parameters

node
@@ -3082,7 +3081,7 @@

Discussion

mxmlSetDeclaration

Set a declaration to a literal string.

-bool mxmlSetDeclaration(mxml_node_t *node, const char *declaration);

+bool mxmlSetDeclaration(mxml_node_t *node, constchar *declaration);

Parameters

node
@@ -3097,7 +3096,7 @@

Discussion

mxmlSetDeclarationf

Set a declaration to a formatted string.

-bool mxmlSetDeclarationf(mxml_node_t *node, const char *format, ...);

+bool mxmlSetDeclarationf(mxml_node_t *node, constchar *format, ...);

Parameters

node
@@ -3114,7 +3113,7 @@

Discussion

mxmlSetDirective

Set a processing instruction to a literal string.

-bool mxmlSetDirective(mxml_node_t *node, const char *directive);

+bool mxmlSetDirective(mxml_node_t *node, constchar *directive);

Parameters

node
@@ -3129,7 +3128,7 @@

Discussion

mxmlSetDirectivef

Set a processing instruction to a formatted string.

-bool mxmlSetDirectivef(mxml_node_t *node, const char *format, ...);

+bool mxmlSetDirectivef(mxml_node_t *node, constchar *format, ...);

Parameters

node
@@ -3147,7 +3146,7 @@

Discussion

mxmlSetElement

Set the name of an element node.

-bool mxmlSetElement(mxml_node_t *node, const char *name);

+bool mxmlSetElement(mxml_node_t *node, constchar *name);

Parameters

node
@@ -3163,7 +3162,7 @@

Discussion

mxmlSetInteger

Set the value of an integer node.

-bool mxmlSetInteger(mxml_node_t *node, long integer);

+bool mxmlSetInteger(mxml_node_t *node, long integer);

Parameters

node
@@ -3179,7 +3178,7 @@

Discussion

mxmlSetOpaque

Set the value of an opaque node.

-bool mxmlSetOpaque(mxml_node_t *node, const char *opaque);

+bool mxmlSetOpaque(mxml_node_t *node, constchar *opaque);

Parameters

node
@@ -3195,7 +3194,7 @@

Discussion

mxmlSetOpaquef

Set the value of an opaque string node to a formatted string.

-bool mxmlSetOpaquef(mxml_node_t *node, const char *format, ...);

+bool mxmlSetOpaquef(mxml_node_t *node, constchar *format, ...);

Parameters

node
@@ -3213,7 +3212,7 @@

Discussion

mxmlSetReal

Set the value of a real value node.

-bool mxmlSetReal(mxml_node_t *node, double real);

+bool mxmlSetReal(mxml_node_t *node, double real);

Parameters

node
@@ -3229,7 +3228,7 @@

Discussion

mxmlSetText

Set the value of a text node.

-bool mxmlSetText(mxml_node_t *node, bool whitespace, const char *string);

+bool mxmlSetText(mxml_node_t *node, bool whitespace, constchar *string);

Parameters

node
@@ -3247,7 +3246,7 @@

Discussion

mxmlSetTextf

Set the value of a text node to a formatted string.

-bool mxmlSetTextf(mxml_node_t *node, bool whitespace, const char *format, ...);

+bool mxmlSetTextf(mxml_node_t *node, bool whitespace, constchar *format, ...);

Parameters

node
@@ -3267,7 +3266,7 @@

Discussion

mxmlSetUserData

Set the user data pointer for a node.

-bool mxmlSetUserData(mxml_node_t *node, void *data);

+bool mxmlSetUserData(mxml_node_t *node, void *data);

Parameters

node
diff --git a/mxml-node.c b/mxml-node.c index f7ab9f0..e139aee 100644 --- a/mxml-node.c +++ b/mxml-node.c @@ -186,14 +186,13 @@ mxmlGetRefCount(mxml_node_t *node) // I - Node // 'mxmlNewCDATA()' - Create a new CDATA node. // // The new CDATA node is added to the end of the specified parent's child -// list. The constant `MXML_NO_PARENT` can be used to specify that the new -// CDATA node has no parent. The data string must be nul-terminated and -// is copied into the new node. CDATA nodes currently use the -// `MXML_TYPE_ELEMENT` type. +// list. The constant `NULL` can be used to specify that the new CDATA node +// has no parent. The data string must be nul-terminated and is copied into the +// new node. // mxml_node_t * // O - New node -mxmlNewCDATA(mxml_node_t *parent, // I - Parent node or `MXML_NO_PARENT` +mxmlNewCDATA(mxml_node_t *parent, // I - Parent node or `NULL` const char *data) // I - Data string { mxml_node_t *node; // New node @@ -222,14 +221,14 @@ mxmlNewCDATA(mxml_node_t *parent, // I - Parent node or `MXML_NO_PARENT` // // 'mxmlNewCDATAf()' - Create a new formatted CDATA node. // -// The new CDATA node is added to the end of the specified parent's -// child list. The constant `MXML_NO_PARENT` can be used to specify that -// the new opaque string node has no parent. The format string must be -// nul-terminated and is formatted into the new node. +// The new CDATA node is added to the end of the specified parent's child list. +// The constant `NULL` can be used to specify that the new opaque string node +// has no parent. The format string must be nul-terminated and is formatted +// into the new node. // mxml_node_t * // O - New node -mxmlNewCDATAf(mxml_node_t *parent, // I - Parent node or `MXML_NO_PARENT` +mxmlNewCDATAf(mxml_node_t *parent, // I - Parent node or `NULL` const char *format, // I - Printf-style format string ...) // I - Additional args as needed { @@ -262,13 +261,13 @@ mxmlNewCDATAf(mxml_node_t *parent, // I - Parent node or `MXML_NO_PARENT` // 'mxmlNewComment()' - Create a new comment node. // // The new comment node is added to the end of the specified parent's child -// list. The constant `MXML_NO_PARENT` can be used to specify that the new -// comment node has no parent. The comment string must be nul-terminated and -// is copied into the new node. +// list. The constant `NULL` can be used to specify that the new comment node +// has no parent. The comment string must be nul-terminated and is copied into +// the new node. // mxml_node_t * // O - New node -mxmlNewComment(mxml_node_t *parent, // I - Parent node or `MXML_NO_PARENT` +mxmlNewComment(mxml_node_t *parent, // I - Parent node or `NULL` const char *comment) // I - Comment string { mxml_node_t *node; // New node @@ -298,13 +297,13 @@ mxmlNewComment(mxml_node_t *parent, // I - Parent node or `MXML_NO_PARENT` // 'mxmlNewCommentf()' - Create a new formatted comment string node. // // The new comment string node is added to the end of the specified parent's -// child list. The constant `MXML_NO_PARENT` can be used to specify that -// the new opaque string node has no parent. The format string must be -// nul-terminated and is formatted into the new node. +// child list. The constant `NULL` can be used to specify that the new opaque +// string node has no parent. The format string must be nul-terminated and is +// formatted into the new node. // mxml_node_t * // O - New node -mxmlNewCommentf(mxml_node_t *parent, // I - Parent node or `MXML_NO_PARENT` +mxmlNewCommentf(mxml_node_t *parent, // I - Parent node or `NULL` const char *format, // I - Printf-style format string ...) // I - Additional args as needed { @@ -343,7 +342,7 @@ mxmlNewCommentf(mxml_node_t *parent, // I - Parent node or `MXML_NO_PARENT` mxml_node_t * // O - New node mxmlNewCustom( - mxml_node_t *parent, // I - Parent node or `MXML_NO_PARENT` + mxml_node_t *parent, // I - Parent node or `NULL` void *data, // I - Pointer to data mxml_custfree_cb_t free_cb, // I - Free callback function or `NULL` if none needed void *free_cbdata) // I - Free callback data @@ -369,14 +368,14 @@ mxmlNewCustom( // 'mxmlNewDeclaration()' - Create a new declaraction node. // // The new declaration node is added to the end of the specified parent's child -// list. The constant `MXML_NO_PARENT` can be used to specify that the new +// list. The constant `NULL` can be used to specify that the new // declaration node has no parent. The declaration string must be nul- // terminated and is copied into the new node. // mxml_node_t * // O - New node mxmlNewDeclaration( - mxml_node_t *parent, // I - Parent node or `MXML_NO_PARENT` + mxml_node_t *parent, // I - Parent node or `NULL` const char *declaration) // I - Declaration string { mxml_node_t *node; // New node @@ -406,14 +405,14 @@ mxmlNewDeclaration( // 'mxmlNewDeclarationf()' - Create a new formatted declaration node. // // The new declaration node is added to the end of the specified parent's -// child list. The constant `MXML_NO_PARENT` can be used to specify that +// child list. The constant `NULL` can be used to specify that // the new opaque string node has no parent. The format string must be // nul-terminated and is formatted into the new node. // mxml_node_t * // O - New node mxmlNewDeclarationf( - mxml_node_t *parent, // I - Parent node or `MXML_NO_PARENT` + mxml_node_t *parent, // I - Parent node or `NULL` const char *format, // I - Printf-style format string ...) // I - Additional args as needed { @@ -446,13 +445,13 @@ mxmlNewDeclarationf( // 'mxmlNewDirective()' - Create a new processing instruction node. // // The new processing instruction node is added to the end of the specified -// parent's child list. The constant `MXML_NO_PARENT` can be used to specify -// that the new processing instruction node has no parent. The data string must -// be nul-terminated and is copied into the new node. +// parent's child list. The constant `NULL` can be used to specify that the new +// processing instruction node has no parent. The data string must be +// nul-terminated and is copied into the new node. // mxml_node_t * // O - New node -mxmlNewDirective(mxml_node_t *parent, // I - Parent node or `MXML_NO_PARENT` +mxmlNewDirective(mxml_node_t *parent, // I - Parent node or `NULL` const char *directive)// I - Directive string { mxml_node_t *node; // New node @@ -481,14 +480,14 @@ mxmlNewDirective(mxml_node_t *parent, // I - Parent node or `MXML_NO_PARENT` // // 'mxmlNewDirectivef()' - Create a new formatted processing instruction node. // -// The new processing instruction node is added to the end of the specified parent's -// child list. The constant `MXML_NO_PARENT` can be used to specify that -// the new opaque string node has no parent. The format string must be +// The new processing instruction node is added to the end of the specified +// parent's child list. The constant `NULL` can be used to specify that the new +// opaque string node has no parent. The format string must be // nul-terminated and is formatted into the new node. // mxml_node_t * // O - New node -mxmlNewDirectivef(mxml_node_t *parent, // I - Parent node or `MXML_NO_PARENT` +mxmlNewDirectivef(mxml_node_t *parent, // I - Parent node or `NULL` const char *format, // I - Printf-style format string ...) // I - Additional args as needed { @@ -521,12 +520,12 @@ mxmlNewDirectivef(mxml_node_t *parent, // I - Parent node or `MXML_NO_PARENT` // 'mxmlNewElement()' - Create a new element node. // // The new element node is added to the end of the specified parent's child -// list. The constant `MXML_NO_PARENT` can be used to specify that the new -// element node has no parent. +// list. The constant `NULL` can be used to specify that the new element node +// has no parent. // mxml_node_t * // O - New node -mxmlNewElement(mxml_node_t *parent, // I - Parent node or `MXML_NO_PARENT` +mxmlNewElement(mxml_node_t *parent, // I - Parent node or `NULL` const char *name) // I - Name of element { mxml_node_t *node; // New node @@ -550,12 +549,12 @@ mxmlNewElement(mxml_node_t *parent, // I - Parent node or `MXML_NO_PARENT` // 'mxmlNewInteger()' - Create a new integer node. // // The new integer node is added to the end of the specified parent's child -// list. The constant `MXML_NO_PARENT` can be used to specify that the new -// integer node has no parent. +// list. The constant `NULL` can be used to specify that the new integer node +// has no parent. // mxml_node_t * // O - New node -mxmlNewInteger(mxml_node_t *parent, // I - Parent node or `MXML_NO_PARENT` +mxmlNewInteger(mxml_node_t *parent, // I - Parent node or `NULL` long integer) // I - Integer value { mxml_node_t *node; // New node @@ -575,13 +574,13 @@ mxmlNewInteger(mxml_node_t *parent, // I - Parent node or `MXML_NO_PARENT` // 'mxmlNewOpaque()' - Create a new opaque string. // // The new opaque string node is added to the end of the specified parent's -// child list. The constant `MXML_NO_PARENT` can be used to specify that -// the new opaque string node has no parent. The opaque string must be nul- -// terminated and is copied into the new node. +// child list. The constant `NULL` can be used to specify that the new opaque +// string node has no parent. The opaque string must be nul-terminated and is +// copied into the new node. // mxml_node_t * // O - New node -mxmlNewOpaque(mxml_node_t *parent, // I - Parent node or `MXML_NO_PARENT` +mxmlNewOpaque(mxml_node_t *parent, // I - Parent node or `NULL` const char *opaque) // I - Opaque string { mxml_node_t *node; // New node @@ -605,13 +604,13 @@ mxmlNewOpaque(mxml_node_t *parent, // I - Parent node or `MXML_NO_PARENT` // 'mxmlNewOpaquef()' - Create a new formatted opaque string node. // // The new opaque string node is added to the end of the specified parent's -// child list. The constant `MXML_NO_PARENT` can be used to specify that -// the new opaque string node has no parent. The format string must be -// nul-terminated and is formatted into the new node. +// child list. The constant `NULL` can be used to specify that the new opaque +// string node has no parent. The format string must be nul-terminated and is +// formatted into the new node. // mxml_node_t * // O - New node -mxmlNewOpaquef(mxml_node_t *parent, // I - Parent node or `MXML_NO_PARENT` +mxmlNewOpaquef(mxml_node_t *parent, // I - Parent node or `NULL` const char *format, // I - Printf-style format string ...) // I - Additional args as needed { @@ -644,12 +643,12 @@ mxmlNewOpaquef(mxml_node_t *parent, // I - Parent node or `MXML_NO_PARENT` // 'mxmlNewReal()' - Create a new real number node. // // The new real number node is added to the end of the specified parent's -// child list. The constant `MXML_NO_PARENT` can be used to specify that -// the new real number node has no parent. +// child list. The constant `NULL` can be used to specify that the new real +// number node has no parent. // mxml_node_t * // O - New node -mxmlNewReal(mxml_node_t *parent, // I - Parent node or `MXML_NO_PARENT` +mxmlNewReal(mxml_node_t *parent, // I - Parent node or `NULL` double real) // I - Real number value { mxml_node_t *node; // New node @@ -669,14 +668,14 @@ mxmlNewReal(mxml_node_t *parent, // I - Parent node or `MXML_NO_PARENT` // 'mxmlNewText()' - Create a new text fragment node. // // The new text node is added to the end of the specified parent's child -// list. The constant `MXML_NO_PARENT` can be used to specify that the new -// text node has no parent. The whitespace parameter is used to specify -// whether leading whitespace is present before the node. The text -// string must be nul-terminated and is copied into the new node. +// list. The constant `NULL` can be used to specify that the new text node has +// no parent. The whitespace parameter is used to specify whether leading +// whitespace is present before the node. The text string must be +// nul-terminated and is copied into the new node. // mxml_node_t * // O - New node -mxmlNewText(mxml_node_t *parent, // I - Parent node or `MXML_NO_PARENT` +mxmlNewText(mxml_node_t *parent, // I - Parent node or `NULL` bool whitespace, // I - `true` = leading whitespace, `false` = no whitespace const char *string) // I - String { @@ -704,14 +703,14 @@ mxmlNewText(mxml_node_t *parent, // I - Parent node or `MXML_NO_PARENT` // 'mxmlNewTextf()' - Create a new formatted text fragment node. // // The new text node is added to the end of the specified parent's child -// list. The constant `MXML_NO_PARENT` can be used to specify that the new -// text node has no parent. The whitespace parameter is used to specify -// whether leading whitespace is present before the node. The format -// string must be nul-terminated and is formatted into the new node. +// list. The constant `NULL` can be used to specify that the new text node has +// no parent. The whitespace parameter is used to specify whether leading +// whitespace is present before the node. The format string must be +// nul-terminated and is formatted into the new node. // mxml_node_t * // O - New node -mxmlNewTextf(mxml_node_t *parent, // I - Parent node or `MXML_NO_PARENT` +mxmlNewTextf(mxml_node_t *parent, // I - Parent node or `NULL` bool whitespace, // I - `true` = leading whitespace, `false` = no whitespace const char *format, // I - Printf-style format string ...) // I - Additional args as needed
node