From 8cea2ff6d07ee5f3c724b2d5e8ae8df5a95190cd Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 7 Aug 2014 00:11:46 +0200 Subject: [PATCH 1/8] Changeset: 394 fdbozzo - 06/08/2014 23:45:03: - Arreglo bug ";" y "," antes de EndText --- ...or_base__IdentificarBloquesDeExclusion.prg | 62 ++++++++++++++++-- foxbin2prg.exe | Bin 442980 -> 442960 bytes foxbin2prg.pj2 | 4 +- foxbin2prg.pjt | Bin 599781 -> 602145 bytes foxbin2prg.pjx | Bin 8993 -> 8993 bytes foxbin2prg.prg | 5 +- 6 files changed, 62 insertions(+), 9 deletions(-) diff --git a/TESTS/ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion.prg b/TESTS/ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion.prg index 0b50c40..b5cc86e 100644 --- a/TESTS/ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion.prg +++ b/TESTS/ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion.prg @@ -89,7 +89,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as laLineasExclusion_Esperadas( 8) = .T. laLineasExclusion_Esperadas( 9) = .T. - TEXT TO lcMethod NOSHOW TEXTMERGE FLAGS 1 PRETEXT 1+2+4 + TEXT TO lcMethod NOSHOW TEXTMERGE FLAGS 1 PRETEXT 1+2 <> myMethod_B *-- Code Block <> @@ -132,7 +132,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as laLineasExclusion_Esperadas( 8) = .T. laLineasExclusion_Esperadas( 9) = .T. - TEXT TO lcMethod NOSHOW TEXTMERGE FLAGS 1 PRETEXT 1+2+4 + TEXT TO lcMethod NOSHOW TEXTMERGE FLAGS 1 PRETEXT 1+2 <> myMethod_B *-- Code Block <> @@ -176,7 +176,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as laLineasExclusion_Esperadas( 8) = .T. laLineasExclusion_Esperadas( 9) = .T. - TEXT TO lcMethod NOSHOW TEXTMERGE FLAGS 1 PRETEXT 1+2+4 + TEXT TO lcMethod NOSHOW TEXTMERGE FLAGS 1 PRETEXT 1+2 <> myMethod_B *-- Code Block <> @@ -211,7 +211,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as laExpected_Pos(1,1) = 0 laExpected_Pos(1,2) = 0 - TEXT TO lcMethod NOSHOW TEXTMERGE FLAGS 1 PRETEXT 1+2+4 + TEXT TO lcMethod NOSHOW TEXTMERGE FLAGS 1 PRETEXT 1+2 <> myMethod_B *-- Code Block IF !FOUND() @@ -292,7 +292,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as laLineasExclusion_Esperadas(I) = .T. ENDFOR - TEXT TO lcMethod NOSHOW TEXTMERGE FLAGS 1 PRETEXT 1+2+4 + TEXT TO lcMethod NOSHOW TEXTMERGE FLAGS 1 PRETEXT 1+2 <> myMethod_B *-- Code Block IF ODBC_Query.odbc @@ -335,4 +335,56 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as ENDFUNC + ******************************************************************************************************************************************* + FUNCTION Deberia_EncontrarBloque_TEXT_ENDTEXT_CuandoEvaluaUnaLineaQueTerminaConUn_EndText_YLineaAnteriorTerminaEn_Coma + LOCAL lcMethod, laLineas(1), lnLineas, laPos(1,2), lnPos_Count, laExpected_Pos(1,2) ; + , laLineasExclusion(23), laLineasExclusion_Esperadas(23) + LOCAL loObj AS c_conversor_prg_a_bin OF "FOXBIN2PRG.PRG" + loObj = THIS.icObj + + *-- Input and expected params + STORE '' TO lcMethod + laExpected_Pos(1,1) = 3 + laExpected_Pos(1,2) = 13 + FOR I = 3 TO 13 + laLineasExclusion_Esperadas(I) = .T. + ENDFOR + + TEXT TO lcMethod NOSHOW TEXTMERGE FLAGS 1 PRETEXT 1+2 + <> Init + Local lcRowSource + <> To lcRowSource Textmerge Noshow + Overview,ItemDtl, + Forecasting,Forecasting, + Purchase Orders,PurchaseOrders, + Sales Orders,SalesOrders, + Sales History,History, + Inventory,Bins, + Inventory History,InventoryHistory, + Configuration,PartsInfo, + Operations,Operations, + <> + + + This.RowSource = Chrtran(lcRowSource, CRLF, '') + This.ControlSource = 'Thisform.cStartPage' + This.Value = ReadSetting('Item Detail Start Page', 'ItemDtl', .F., .T.) + <> + <> Valid + WriteSetting('Item Detail Start Page', This.Value, .F., .T.) + Thisform.comboPartno.SetFocus() + <> + ENDTEXT + + lnLineas = ALINES( laLineas, lcMethod ) + + *-- Test + loObj.identificarBloquesDeExclusion( @laLineas, lnLineas, , @laLineasExclusion, @lnPos_Count, @laPos ) + + *-- Evaluación de resultados + THIS.Evaluate_results( @laExpected_Pos, @laPos, lnPos_Count, @laLineasExclusion_Esperadas, @laLineasExclusion ) + + ENDFUNC + + ENDDEFINE diff --git a/foxbin2prg.exe b/foxbin2prg.exe index e954cebb74f1a1b5411082a40db0f7efa747c677..bec295d4c751556990be517334ceac28f18981f1 100644 GIT binary patch delta 11322 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 diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index 5607e989bcf56aa1c61a0ed0c5d4ecc33cbb9e5f..4eb5c404d23d70ae079c95930fb2fad03d7c8ea2 100644 GIT binary patch delta 17996 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 delta 15671 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 delta 633 zcmXw$Ur1A77{=dsZs(};xVD*d%z2K&Rv_XzXXot95F)A-5x8KNb>W3U7eYc3!j^te z7eONOFszHf1zmIz6hY-hhTavFSP5ZB5<&C_+=UR7QeSHC#gCWo{loKoZ#7@d`^{!G z`OyEwuX;|l&-5HD`nP*zp6hd6+KYVAF!F{B*Kz(mo$X)hNaIKt)YBYrwwczuaIIm9dI=-la=WwB3Fz{XSB8D3T4`4&G7bA_rSKo`x#tHt2 z(V*aY{FI!ymQ_h6S%;QgRES zh~TG~jtH$XwWrW9G7hFgDIALyco>zakRDl>dOn1gdP({Ap2$0n(?%(9WtC_fuZ*%X`+?|A0}7p`X5X4@{UtS6j_qbq f&<|lN(ST%^rFGgwO*3-8ZJOSW?V29JjjqaHz(c#o diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 623586d..6a661ad 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -3164,10 +3164,11 @@ DEFINE CLASS c_conversor_base AS SESSION DO CASE CASE .elTextoEvaluadoEsElTokenIndicado( @lcLine, @ta_ID_Bloques, lnLen_IDFinBQ, X, 1 ) ; AND NOT THIS.currentLineIsPreviousLineContinuation( @taCodeLines, I ) + *-- Busca el primer marcador (#IF o TEXT) lnAnidamientos = lnAnidamientos + 1 - CASE .elTextoEvaluadoEsElTokenIndicado( @lcLine, @ta_ID_Bloques, lnLen_IDFinBQ, X, 2 ) ; - AND NOT THIS.currentLineIsPreviousLineContinuation( @taCodeLines, I ) + CASE .elTextoEvaluadoEsElTokenIndicado( @lcLine, @ta_ID_Bloques, lnLen_IDFinBQ, X, 2 ) + *-- Busca el segundo marcador (#ENDIF o ENDTEXT) lnAnidamientos = lnAnidamientos - 1 IF lnAnidamientos = 0 From be00affc504cf2d01b8b8405c4085a5c8a60d461 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 7 Aug 2014 00:14:48 +0200 Subject: [PATCH 2/8] =?UTF-8?q?Changeset:=20395=20fdbozzo=20-=2007/08/2014?= =?UTF-8?q?=2000:12:10:=20-=20Actualizaci=C3=B3n=20del=20txt=20de=20versi?= =?UTF-8?q?=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 853cf99..39805a3 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -2,8 +2,8 @@ Lparameters toUpdateInfo Local lcNote With toUpdateInfo - .VersionNumber = 'v1.19.29' - .VersionDate = Date(2014,08,01) + .VersionNumber = 'v1.19.30' + .VersionDate = Date(2014,08,07) .SourceFileUrl = 'http://vfpxrepository.com/dl/thorupdate/Projects/FoxBin2Prg/FoxBin2Prg.Zip' .Link = 'http://vfpx.codeplex.com/wikipage?title=FoxBin2PRG' @@ -17,8 +17,11 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg Change History ------------------------------------------------------------- +2014/08/07 v1.19.30 +- Bug Fix vcx/scx: Bad EndText block detection when the previous line end with "," or ";" (Jim Nelson) + 2014/08/01 v1.19.29 -- Bug Fix vcx/scx: Bad text/endtext block detection when there is a line that begins with a "text" field and previous line end with "," in regards of ";" (M_N_M) +- Bug Fix vcx/scx: Bad Text block detection when the previous line ends with "," (M_N_M) - Optimizations and refactoring 2014/07/26 v1.19.28 From b474a27803ffbe91658823173047c85317711ae4 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 7 Aug 2014 00:17:56 +0200 Subject: [PATCH 3/8] =?UTF-8?q?Changeset:=20396=20fdbozzo=20-=2007/08/2014?= =?UTF-8?q?=2000:15:13:=20-=20Actualizaci=C3=B3n=20log=20interno=20de=20Fo?= =?UTF-8?q?xBin2Prg.prg?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.exe | Bin 442960 -> 442960 bytes foxbin2prg.prg | 2 ++ 2 files changed, 2 insertions(+) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index bec295d4c751556990be517334ceac28f18981f1..f394ce5d31ed57305b40f8b41893678b6c9ab000 100644 GIT binary patch delta 6593 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 delta 6593 zcmWmIb$nIzAII_cIrrQXmyPbxOr)e?l;mI=A@xHYHINX6fy6)&yh;pdsR0foq!|c~ z&e7eBfzsWI5{f9l*Z%nOct1Zo+E`3h+}9)M4iXRVa>oVZFlfk)t<$O$P@ z1|EffAoo};UBlz}eoX@H)=2j$OksoJGW%!Y%T~Y=%1fr4R58^0XX=2H`loms~iv zp>J_7{2qCEUPIsGczm23)yhzcpYxx26!GBGprJyJRF*H9LmocLP*Yc`fftkSCmQ+? zN8`C;4Mk2hG#HP-*U1Uf4IRW|aGn{4Ml;g!1YC3`JHWVxr{b6-L+2O|UCw_Jg)e6r znlanZGd7ruhtDH=puNmv`uFSu0FmyZ3 z&{q5eC+#-W;ExIH=lNke_`TbU*wIAdr8 zu8aRAmq<6X5I4rh$YnANt;Nl82Kl?ohIZiIxaJi@+in@!TAnPqA;K8go1N3Q+eU@^dipS#DW@6*%@J`K&y zU5;y2^r=rJpOWxvoSQkleN~@UV3$X4GWk%1PrGnwYy@li^lLqz{-Dr+LZ13QU1y@t zmxoh^$4B~PFh$nJ18@qtOgp{=C*pJDtW5l~@npP%+^@4wtMFzVMiXe)$ERobDh|Z6 zvx9x=kXL$zgM|`&Dlx;S=@iQFtftTODPyir;V1(7nG&KwxvUOK0Zdy2(e^`(H-%~P>aiBDH1=##d2FZ zRnXE%oSjE`R$)sW!l~gh_zk&LMN4iWo~Tgf|JUGfgr!~-MzF!qnwE;yv$PohfRB(9 z8e6)GH{+s_meN~U%3fId9S>}4>F9@+hGU1h;Imju!}?lUgL~q)<1OtSY^hlhE*U=e zxuw*grP+9Xkiv&wTe?1qJ*1F|Cy%z2GSSjYd=3woV#!aJiYh8S#&yY+ey}tGhw|*l zk;g5xv<(-*Ve2eiOSP1z82uiPTW@LFc1v&JrntclOO19~>WPCf6kdX}`z;Ni@ChD! zz*2?tmX_gV_yT$HB};jWbA#c=mo4?aX{kQGjh~SF-{z?COI-Gjr4Q~~nu#+fqi5t= zKEF2ON%$4Hc&J|kOK|;nQ#c0t=Jac431%{!GnZde!~D8|EuQ7th5UM2)~|9UIRZSh zoL~K`_%#cEf^%2(Yjt(M(s2UrSi`TYHT`;k$KWZo{EDvaml4j{#rMej>-d!|oa>)N zp$|Q^d?UXKv%yw;mKoYocE-rukK*l$3?ZWzKZJ+*y7# z!g+9jyp+)%=f_uP`*miMU!UMv*xBM&+%JALeVZGUxn#z#oGrht8l}0x@k4T}2wM}& z&}@0sd)Bg*r-iLx)^eOe3e8&Ds@UDu&v+&7(ZklK@wV!e&s?u@r}ndz^0}>V@iSav zgsn}C2lzF8D-0UhXcg-5^aqbYX?=8LM{r+$J$!T zsE>2wqvSj^>c%)9Zb{BHi4VoaaSd|%WLw>FNxWyet;;hwLR=R2nrZ8sBwKTFWt@GM zt!}f~30w~!N?~W#1Z_2`AT^;dZH=vmKiO)J-@^%OZ7o~J7vT4C^$oTPZR87Zm(0KK zu+@B*t;4uC&LBTcV<+$cod1liPK>yU+z*IF|ghq@${prNYeL;o**|M>sl$ zSK$Qm;yR9cRN;jLA0d~HaWooxOxN#`*EDzZ9B08d$uHYDGOJ4Eae=l@P?g&{il9(| zLM*ulqb{z5Cz59|8saMW7&(K{6j#I9+Bqu7XpU>(NOFPq9ks?SaeeY+Mgnew*ONc( zImb`bEqxbPe-04e4PewYL zjeRtjlA|1bG{(^-9Et;D9o?Gj=moBhN3f7IW;&`>oi`^uEI8MZv)Iv(6oyeKOD@0K z(G{GGyOHN@a1>HQ`We^RFUW89IU0oD;5~;OtvKQ+9osalbL0=x9bLmU z@R#J`R~%K0V1a{!Q6QDoU_6D)4tS5;`HrJ+Z~~sdLh$$#&I+E3e0e)4{Rmlifm+(Q{lsx@iSA}Xzzu|wQT-}Uz z^&@_Pv$8VHXynd0{}u3OE=TKd257nE$Vt6i#p3?>D0$c*SMhinE|TD?E3453 zcnkiUymFMQ>-ZX8JI+;^sjiyW<({A=w;&Js-ql!K0pe8=a9#pc9jnYUr94bRcv;Jvt;=V@VfPjB!8ypNoc*HirloPO2-`wMtFTFldo23-G&6rO;k zZ+SY#22ps-+n(~3v>AX zi}9N#o?15bbRI9mSIAqVJY8-WIS0tjGEd`h16+?h zcD1KnxHH~HUbV;5b9@|MBcDFxDLA_cA4uUD*!8QY22JE!Xsp1+v|CyUGm9Q{>Xo<(ML7M7Jbnj3f&IhI9c z=9k}Q6sl>fD2q(19G3v!AlG7znSvkU*WFqF4UV@}okijk3K1+aH?qhaiJ#)GU)b8p zqVX(#g?o=?1;d)JC~G)hS=I+rZ1rbN*AM5y1?I2-{od9dTo5lxwzYvJ+y&eU_x#yb zS(b1^SfYJ^Gd8mRd&8P7nL<2;l-;&U@3r+955(umTUcV5EU|vX{qD1(Wl5ET71Bz) z;)$)#Sx~%-kKhuW9eqas-^lvmDlVJoDBDa&ztR71;eF&)8)( zam5O*-eDZWjqok<4aRBQ7zdMRp9^W1=P5)}XkE|Mw{*KW+G9L!!0#}d>27oAZUb?j z(XQNuv|O6iIGjeVMYB4CC*w!t2%1kU%_kY(B|o9J+{T&Lef~}QKfUB)J$@xC$NYZ< z#JHYfX%ps?r}gxP;q-!E@rqKO66ghg;j6e*WsjZq6xEQU!xig$ z%Er{Y7XO3ylG`xVE^5To%zb3^^|YlQy`(V{QTZT8*`H3t)LMo@VK#`I?8$rRDQhGX z4^AULXXd)tlvi&Yk%c*eiREAvD_ne(oSS*zUNi0w+?rf~d0 * *--------------------------------------------------------------------------------------------------- @@ -135,6 +136,7 @@ * 02/06/2014 Doug Hennig MEJORA v1.19.22: Agregada funcionalidad para exportar los datos de las tablas al archivo db2 (Agregado en v1.19.27) * 21/07/2014 Edyshor PROPUESTA DE MEJORA db2 v1.19.27: Sería útil poder filtrar tablas y datos cuando se elige DBF_Conversion_Support:4 (Agregado en v1.19.28) * 29/07/2014 M_N_M REPORTE BUG vcx/scx v1.19.28: Los campos de tabla con nombre "text" a veces provocan corrupción del binario generado (Arreglado en v1.19.29) +* 07/08/2014 Jim Nelson REPORTE BUG vcx/scx v1.19.29: Cuando la línea anterior a un ENDTEXT termina en ";" o "," no se reconoce como ENDTEXT sino como continuación (Arreglado en v1.19.30) * * *--------------------------------------------------------------------------------------------------- From 965926e135b48815080c18a842b1ca48e187ae5d Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 9 Aug 2014 14:39:32 +0200 Subject: [PATCH 4/8] =?UTF-8?q?Changeset:=20398=20fdbozzo=20-=2008/08/2014?= =?UTF-8?q?=2016:16:51:=20-=20Arreglo=20bug=20orden=20de=20m=C3=A9todos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TESTS/DATOS_READONLY/lib_controles.vc2 | 4 +- TESTS/ut__foxbin2prg.prg | 3 +- foxbin2prg.prg | 316 +++++++++++++++++++------ 3 files changed, 253 insertions(+), 70 deletions(-) diff --git a/TESTS/DATOS_READONLY/lib_controles.vc2 b/TESTS/DATOS_READONLY/lib_controles.vc2 index d4f4f4b..4027987 100644 --- a/TESTS/DATOS_READONLY/lib_controles.vc2 +++ b/TESTS/DATOS_READONLY/lib_controles.vc2 @@ -3486,7 +3486,7 @@ DEFINE CLASS f_combobox AS f_base OF "lib_controles.vcx" WhatsThisHelpID = -1, ; Width = 200 *< END OBJECT: BaseClass="combobox" /> - + PROCEDURE Cl_ComboDropdown1.Init this.AddListItem('Este es el valor.A1') this.AddListItem('Este es el valor.A2', this.NewItemId, 2) @@ -13870,7 +13870,7 @@ DEFINE CLASS f_listbox AS f_base OF "lib_controles.vcx" WhatsThisHelpID = -1, ; Width = 224 *< END OBJECT: BaseClass="listbox" /> - + PROCEDURE Cl_ListBox1.Init this.AddListItem('Este es el valor.A1') this.AddListItem('Este es el valor.A2', this.NewItemId, 2) diff --git a/TESTS/ut__foxbin2prg.prg b/TESTS/ut__foxbin2prg.prg index 81a72b7..d64e5ef 100644 --- a/TESTS/ut__foxbin2prg.prg +++ b/TESTS/ut__foxbin2prg.prg @@ -148,6 +148,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg loObj.get_PropsFrom_PROTECTED( toReg_Esperado.PROTECTED, .F., @laProtected_Esperado, @lnProtected_Count_Esperado, '' ) *-- Methods + STORE 0 TO lnMethods_Count, lnMethods_Count_Esperado loObj.get_ADD_OBJECT_METHODS( toReg, toReg, '', @laMethods, '', @lnMethods_Count, '', 0, '', 0, loFoxBin2Prg ) loObj.get_ADD_OBJECT_METHODS( toReg_Esperado, toReg_Esperado, '', @laMethods_Esperado, '', @lnMethods_Count_Esperado, '', 0, '', 0, loFoxBin2Prg ) lcExtraData = tcParent + '.' + tcObjName + ' (' + tcClass + ')' @@ -256,7 +257,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg THIS.assertequals( lnMethods_Count_Esperado, lnMethods_Count, "Cantidad de METHODS para " + lcExtraData ) FOR I = 1 TO lnMethods_Count_Esperado - THIS.asserttrue( ASCAN( laMethods, laMethods_Esperado(I,1), 1, -1, 1, 0+2+4) > 0 ; + THIS.asserttrue( ASCAN( laMethods, laMethods_Esperado(I,1), 1, -1, 1, 1+2+4) > 0 ; , ' Comprobación de que existe el Method "' + TRANSFORM(laMethods_Esperado(I,1)) + '"' + " para " + lcExtraData ) ENDFOR diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 176702e..4f0ab70 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -8170,12 +8170,14 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -8239,17 +8241,18 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base #ENDIF TRY - LOCAL lcMethodName + LOCAL lcMethodName, lnMethodCount WITH THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG' - .SortMethod( toRegObj.METHODS, @taMethods, @taCode, '', @tnMethodCount ; + lnMethodCount = tnMethodCount + .Method2Array( toRegObj.METHODS, @taMethods, @taCode, '', @tnMethodCount ; , @taPropsAndComments, tnPropsAndComments_Count, @taProtected, tnProtected_Count, @toFoxBin2Prg ) *-- Ubico los métodos protegidos y les cambio la definición. *-- Los métodos se deben generar con la ruta completa, porque si no es imposible saber a que objeto corresponden, *-- o si son de la clase. - IF tnMethodCount > 0 THEN - FOR I = 1 TO tnMethodCount + IF tnMethodCount - lnMethodCount > 0 THEN + FOR I = lnMethodCount + 1 TO tnMethodCount IF taMethods(I,2) = 0 LOOP ENDIF @@ -8272,9 +8275,11 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *-- Genero el método SIN indentar, ya que se hace luego *-- Sustituyo el TEXT/ENDTEXT aquí porque a veces quita espacios de la derecha, y eso es peligroso - tcMethods = tcMethods + CR_LF + 'PROCEDURE ' + lcMethodName - tcMethods = tcMethods + CR_LF + .IndentarMemo( taCode(taMethods(I,2)) ) - tcMethods = tcMethods + CR_LF + 'ENDPROC' + *tcMethods = tcMethods + CR_LF + 'PROCEDURE ' + lcMethodName + *tcMethods = tcMethods + CR_LF + .IndentarMemo( taCode(taMethods(I,2)) ) + *tcMethods = tcMethods + CR_LF + 'ENDPROC' + taCode(taMethods(I,2)) = 'PROCEDURE ' + lcMethodName + CR_LF + .IndentarMemo( taCode(taMethods(I,2)) ) + CR_LF + 'ENDPROC' + taMethods(I,1) = lcMethodName ENDFOR ENDIF ENDWITH && THIS @@ -8291,6 +8296,93 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDPROC + ******************************************************************************************************************* + PROCEDURE get_CLASS_METHODS + LPARAMETERS tnMethodCount, taMethods, taCode, taProtected, taPropsAndComments + *-- DEFINIR MÉTODOS DE LA CLASE + *-- Ubico los métodos protegidos y les cambio la definición + EXTERNAL ARRAY taMethods, taCode, taProtected, taPropsAndComments + + TRY + LOCAL lcMethod, lcMethodName, lnProtectedItem, lnCommentRow, lcProcDef, lcMethods, lnLen + STORE '' TO lcMethod, lcMethodName, lcProcDef, lcMethods + + IF tnMethodCount > 0 THEN + WITH THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG' + FOR I = 1 TO tnMethodCount + lcMethodName = CHRTRAN( taMethods(I,1), '^', '' ) + lnProtectedItem = ASCAN( taProtected, taMethods(I,1), 1, 0, 0, 1+2+4) + + IF lnProtectedItem = 0 + lnProtectedItem = ASCAN( taProtected, taMethods(I,1) + '^', 1, 0, 0, 1+2+4) + + IF lnProtectedItem = 0 + *-- Método común + lcProcDef = 'PROCEDURE' + ELSE + *-- Método oculto + lcProcDef = 'HIDDEN PROCEDURE' + ENDIF + ELSE + *-- Método protegido + lcProcDef = 'PROTECTED PROCEDURE' + ENDIF + + lnCommentRow = ASCAN( taPropsAndComments, '*' + lcMethodName, 1, 0, 1, 1+2+4+8) + + *-- Nombre del método + *TEXT TO lcMethods ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> <> <> + *ENDTEXT + *lcMethods = lcMethods + CR_LF + lcProcDef + ' ' + taMethods(I,1) + lcMethod = lcProcDef + ' ' + taMethods(I,1) + + *-- Comentarios del método (si tiene) + IF lnCommentRow > 0 AND NOT EMPTY(taPropsAndComments(lnCommentRow,2)) + *TEXT TO lcMethods ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 + * <<>> && <> + *ENDTEXT + *lcMethods = lcMethods + C_TAB + C_TAB + taPropsAndComments(lnCommentRow,2) + lcMethod = lcMethod + C_TAB + C_TAB + '&' + '& ' + taPropsAndComments(lnCommentRow,2) + ENDIF + + *-- Código del método + IF taMethods(I,2) > 0 THEN + *lcMethods = lcMethods + CR_LF + .IndentarMemo( taCode(taMethods(I,2)), C_TAB + C_TAB ) + *lcMethod = lcMethod + CR_LF + .IndentarMemo( taCode(taMethods(I,2)), C_TAB + C_TAB ) + taCode(taMethods(I,2)) = lcMethod + CR_LF + .IndentarMemo( taCode(taMethods(I,2)) ) + CR_LF + 'ENDPROC' + ELSE + lnLen = ALEN(taCode,1) + 1 + DIMENSION taCode( lnLen ) + taCode( lnLen ) = lcMethod + CR_LF + 'ENDPROC' + taMethods(I,2) = lnLen + ENDIF + + *lcMethods = lcMethods + CR_LF + C_TAB + 'ENDPROC' + *lcMethods = lcMethods + CR_LF + + *lcMethod = lcMethod + CR_LF + C_TAB + 'ENDPROC' + *lcMethod = lcMethod + CR_LF + *lcMethods = lcMethods + lcMethod + ENDFOR + + ENDWITH && THIS + *C_FB2PRG_CODE = C_FB2PRG_CODE + C_TAB + lcMethods &&+ CR_LF + + ENDIF + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + ENDTRY + + RETURN + ENDPROC + + ******************************************************************************************************************* PROCEDURE get_NombresObjetosOLEPublic LPARAMETERS ta_NombresObjsOle @@ -8511,16 +8603,18 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ******************************************************************************************************************* PROCEDURE IndentarMemo - LPARAMETERS tcMethod, tcIndentation + LPARAMETERS tcMethod, tcIndentation, tlKeepProcHeader *-- INDENTA EL CÓDIGO DE UN MÉTODO DADO Y QUITA LA CABECERA DE MÉTODO (PROCEDURE/ENDPROC) SI LA ENCUENTRA TRY - LOCAL I, X, lcMethod, llProcedure, lnInicio, lnFin, laLineas(1) + LOCAL I, X, lcMethod, llProcedure, lnInicio, lnFin, laLineas(1), lnOffset lcMethod = '' - llProcedure = ( LEFT(tcMethod,10) == 'PROCEDURE ' ; - OR LEFT(tcMethod,17) == 'HIDDEN PROCEDURE ' ; - OR LEFT(tcMethod,20) == 'PROTECTED PROCEDURE ' ) lnInicio = 1 + lnOffset = 0 lnFin = ALINES(laLineas, tcMethod) + llProcedure = ( LEFT(laLineas(1),10) == 'PROCEDURE ' ; + OR LEFT(laLineas(1),17) == 'HIDDEN PROCEDURE ' ; + OR LEFT(laLineas(1),20) == 'PROTECTED PROCEDURE ' ) + IF VARTYPE(tcIndentation) # 'C' tcIndentation = '' ENDIF @@ -8546,15 +8640,20 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *-- Si encuentra la cabecera de un PROCEDURE, la saltea IF llProcedure - lnInicio = 2 - lnFin = lnFin - 1 + lnOffset = 1 ENDIF - FOR I = lnInicio TO lnFin + FOR I = lnInicio + lnOffset TO lnFin - lnOffset *-- TEXT/ENDTEXT aquí da error 2044 de recursividad. No usar. lcMethod = lcMethod + CR_LF + tcIndentation + laLineas(I) ENDFOR + IF llProcedure AND tlKeepProcHeader + laLineas(lnInicio) = C_TAB + laLineas(lnInicio) + laLineas(lnFin) = C_TAB + laLineas(lnFin) + lcMethod = CR_LF + laLineas(lnInicio) + lcMethod + CR_LF + laLineas(lnFin) + ENDIF + lcMethod = SUBSTR(lcMethod,3) && Quito el primer ENTER (CR+LF) CATCH TO loEx @@ -8632,6 +8731,75 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ******************************************************************************************************************* PROCEDURE SortMethod + LPARAMETERS tcMethod, taMethods, taCode, tcSorted, tnMethodCount, taPropsAndComments, tnPropsAndComments_Count ; + , taProtected, tnProtected_Count, toFoxBin2Prg + + EXTERNAL ARRAY taMethods, taCode, taPropsAndComments, taProtected + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF + + TRY + LOCAL I, I2, laMethods(1,3), lnDeleted, lcMethodName, lnMethodPos, lcMethodType, loEx AS EXCEPTION + + IF tnMethodCount > 0 THEN + + *-- taMethods[1,3] + *-- 1.Nombre Método + *-- 2.Posición Original + *-- 3.Tipo (HIDDEN/PROTECTED/NORMAL) + + *-- Alphabetical ordering of methods + IF THIS.l_MethodSort_Enabled + ASORT(taMethods,1,-1,0,1) + ENDIF + + *FOR I = 1 TO tnMethodCount + * IF taMethods(I,2) > 0 THEN + * tcSorted = m.tcSorted + taCode( taMethods(I,2) ) + * ENDIF + *ENDFOR + + DIMENSION laMethods(tnMethodCount,3) + lnDeleted = 0 + + FOR I = tnMethodCount TO 1 STEP -1 + IF taMethods(I,2) > 0 THEN + IF '.' $ taMethods(I,1) + *-- Los métodos con '.' los mando a otro array + lnDeleted = lnDeleted + 1 + laMethods(lnDeleted,1) = taMethods(I,1) + laMethods(lnDeleted,2) = taMethods(I,2) + laMethods(lnDeleted,3) = taMethods(I,3) + ADEL( taMethods, I ) + ENDIF + ENDIF + ENDFOR + + FOR I = lnDeleted TO 1 STEP -1 + *-- Los métodos con '.' los paso al final + I2 = tnMethodCount - lnDeleted + (lnDeleted - I) + 1 + taMethods(I2,1) = laMethods(I,1) + taMethods(I2,2) = laMethods(I,2) + taMethods(I2,3) = laMethods(I,3) + ENDFOR + + ENDIF + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + ENDTRY + + RETURN + ENDPROC && SordMethod + + + ******************************************************************************************************************* + PROCEDURE Method2Array LPARAMETERS tcMethod, taMethods, taCode, tcSorted, tnMethodCount, taPropsAndComments, tnPropsAndComments_Count ; , taProtected, tnProtected_Count, toFoxBin2Prg *-- 29/10/2013 Fernando D. Bozzo @@ -8653,18 +8821,20 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base LOCAL lnLineCount, laLine(1), I, lnTextNodes, tcSorted, lnProtectedLine, lcMethod, lnLine_Len, lcLine, llProcOpen ; , laLineasExclusion(1), lnBloquesExclusion ; , loEx AS EXCEPTION - DIMENSION taMethods(1,3) - STORE '' TO taMethods, tcSorted, taCode - tnMethodCount = 0 + *DIMENSION taMethods(1,3) + *STORE '' TO taMethods, tcSorted, taCode + *tnMethodCount = 0 IF NOT EMPTY(m.tcMethod) AND LEFT(m.tcMethod,9) == "ENDPROC"+CHR(13)+CHR(10) tcMethod = SUBSTR(m.tcMethod,10) ENDIF IF NOT EMPTY(m.tcMethod) - DIMENSION laLine(1), taMethods(1,3) - STORE '' TO laLine, taMethods, taCode - STORE 0 TO tnMethodCount, lnTextNodes + DIMENSION laLine(1) &&, taMethods(1,3) + STORE '' TO laLine + STORE 0 TO lnTextNodes + *STORE '' TO taMethods, taCode + *STORE 0 TO tnMethodCount lnLineCount = ALINES(laLine, m.tcMethod) && NO aplicar nungún formato ni limpieza, que es el CÓDIGO FUENTE @@ -8749,7 +8919,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base LOOP ENDIF - taCode(tnMethodCount) = taCode(tnMethodCount) + laLine(I) + CR_LF + taCode(tnMethodCount) = taCode(tnMethodCount) + laLine(I) &&+ CR_LF llProcOpen = .F. CASE tnMethodCount = 0 OR NOT llProcOpen AND LEFT( LTRIM(laLine(I)),1 ) = '*' @@ -8790,18 +8960,6 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDIF ENDIF ENDFOR - - *-- Alphabetical ordering of methods - IF THIS.l_MethodSort_Enabled - ASORT(taMethods,1,-1,0,1) - ENDIF - - FOR I = 1 TO tnMethodCount - IF taMethods(I,2) > 0 THEN - m.tcSorted = m.tcSorted + taCode(taMethods(I,2)) - ENDIF - ENDFOR - ENDIF CATCH TO loEx @@ -8813,7 +8971,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDTRY RETURN - ENDPROC && SordMethod + ENDPROC && Method2Array ******************************************************************************************************************* @@ -8894,29 +9052,33 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ******************************************************************************************************************* PROCEDURE write_ALL_OBJECT_METHODS - LPARAMETERS tcMethods, taPropsAndComments, tnPropsAndComments_Count, taProtected, tnProtected_Count, toFoxBin2Prg + LPARAMETERS tcMethods, taMethods, taCode, tnMethodCount, taPropsAndComments, tnPropsAndComments_Count, taProtected, tnProtected_Count, toFoxBin2Prg *-- Finalmente, todos los métodos los ordeno y escribo juntos LOCAL laMethods(1), laCode(1), lnMethodCount, I, lcMethods - IF NOT EMPTY(tcMethods) + IF tnMethodCount > 0 THEN STORE '' TO lcMethods DIMENSION laMethods(1,3) WITH THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG' - .SortMethod( @tcMethods, @laMethods, @laCode, '', @lnMethodCount ; + .SortMethod( @tcMethods, @taMethods, @taCode, '', @tnMethodCount ; , @taPropsAndComments, tnPropsAndComments_Count, @taProtected, tnProtected_Count, @toFoxBin2Prg ) - FOR I = 1 TO lnMethodCount + lcMethods = C_TAB + + FOR I = 1 TO tnMethodCount *-- Genero los métodos indentados *-- Sustituyo el TEXT/ENDTEXT aquí porque a veces quita espacios de la derecha, y eso es peligroso - IF laMethods(I,2) = 0 + IF taMethods(I,2) = 0 LOOP ENDIF - lcMethods = lcMethods + CR_LF + C_TAB + laMethods(I,3) + C_PROCEDURE + ' ' + laMethods(I,1) - lcMethods = lcMethods + CR_LF + .IndentarMemo( laCode(laMethods(I,2)), CHR(9) + CHR(9) ) - lcMethods = lcMethods + CR_LF + C_TAB + C_ENDPROC + *lcMethods = lcMethods + CR_LF + C_TAB + laMethods(I,3) + C_PROCEDURE + ' ' + laMethods(I,1) + *lcMethods = lcMethods + CR_LF + .IndentarMemo( laCode(laMethods(I,2)), CHR(9) + CHR(9) ) + *lcMethods = lcMethods + CR_LF + C_TAB + C_ENDPROC + + lcMethods = lcMethods + CR_LF + .IndentarMemo( taCode(taMethods(I,2)), CHR(9) + CHR(9), .T. ) lcMethods = lcMethods + CR_LF ENDFOR ENDWITH && THIS @@ -8936,13 +9098,13 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base EXTERNAL ARRAY taMethods, taCode, taProtected, taPropsAndComments TRY - LOCAL lcMethod, lnProtectedItem, lnCommentRow, lcProcDef, lcMethods - STORE '' TO lcMethod, lcProcDef, lcMethods + LOCAL lcMethod, lcMethodName, lnProtectedItem, lnCommentRow, lcProcDef, lcMethods + STORE '' TO lcMethod, lcMethodName, lcProcDef, lcMethods IF tnMethodCount > 0 THEN WITH THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG' FOR I = 1 TO tnMethodCount - lcMethod = CHRTRAN( taMethods(I,1), '^', '' ) + lcMethodName = CHRTRAN( taMethods(I,1), '^', '' ) lnProtectedItem = ASCAN( taProtected, taMethods(I,1), 1, 0, 0, 1+2+4) IF lnProtectedItem = 0 @@ -8960,28 +9122,35 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base lcProcDef = 'PROTECTED PROCEDURE' ENDIF - lnCommentRow = ASCAN( taPropsAndComments, '*' + lcMethod, 1, 0, 1, 1+2+4+8) + lnCommentRow = ASCAN( taPropsAndComments, '*' + lcMethodName, 1, 0, 1, 1+2+4+8) *-- Nombre del método - TEXT TO lcMethods ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <> <> - ENDTEXT + *TEXT TO lcMethods ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> <> <> + *ENDTEXT + *lcMethods = lcMethods + CR_LF + lcProcDef + ' ' + taMethods(I,1) + lcMethod = CR_LF + lcProcDef + ' ' + taMethods(I,1) *-- Comentarios del método (si tiene) IF lnCommentRow > 0 AND NOT EMPTY(taPropsAndComments(lnCommentRow,2)) - TEXT TO lcMethods ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 - <<>> && <> - ENDTEXT + *TEXT TO lcMethods ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 + * <<>> && <> + *ENDTEXT + *lcMethods = lcMethods + C_TAB + C_TAB + taPropsAndComments(lnCommentRow,2) + lcMethod = lcMethod + C_TAB + C_TAB + taPropsAndComments(lnCommentRow,2) ENDIF *-- Código del método - *-- Sustituyo el TEXT/ENDTEXT aquí porque a veces quita espacios de la derecha, y eso es peligroso IF taMethods(I,2) > 0 THEN - lcMethods = lcMethods + CR_LF + .IndentarMemo( taCode(taMethods(I,2)), C_TAB + C_TAB ) + *lcMethods = lcMethods + CR_LF + .IndentarMemo( taCode(taMethods(I,2)), C_TAB + C_TAB ) + lcMethod = lcMethod + CR_LF + .IndentarMemo( taCode(taMethods(I,2)), C_TAB + C_TAB ) ENDIF - lcMethods = lcMethods + CR_LF + C_TAB + 'ENDPROC' - lcMethods = lcMethods + CR_LF + *lcMethods = lcMethods + CR_LF + C_TAB + 'ENDPROC' + *lcMethods = lcMethods + CR_LF + lcMethod = lcMethod + CR_LF + C_TAB + 'ENDPROC' + lcMethod = lcMethod + CR_LF + lcMethods = lcMethods + lcMethod ENDFOR ENDWITH && THIS @@ -9889,6 +10058,10 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg SCAN ALL FOR TABLABIN.PLATFORM = "WINDOWS" AND TABLABIN.RESERVED1=="Class" + STORE 0 TO lnMethodCount + STORE '' TO laMethods, laCode + + loRegClass = NULL SCATTER MEMO NAME loRegClass IF toFoxBin2Prg.l_NoTimestamps @@ -9964,12 +10137,15 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg *-- OBTENGO LOS MÉTODOS DE LA CLASE PARA POSTERIOR TRATAMIENTO - DIMENSION laMethods(1,3) - laMethods = '' - .SortMethod( loRegClass.METHODS, @laMethods, @laCode, '', @lnMethodCount ; + DIMENSION laMethods(1,3), laCode(1) + STORE '' TO laMethods, laCode + lnMethodCount = 0 + + .Method2Array( loRegClass.METHODS, @laMethods, @laCode, '', @lnMethodCount ; , @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count, @toFoxBin2Prg ) - .write_CLASS_METHODS( @lnMethodCount, @laMethods, @laCode, @laProtected, @laPropsAndComments ) + *.write_CLASS_METHODS( @lnMethodCount, @laMethods, @laCode, @laProtected, @laPropsAndComments ) + .get_CLASS_METHODS( @lnMethodCount, @laMethods, @laCode, @laProtected, @laPropsAndComments ) lnLastClass = 1 lcMethods = '' @@ -9998,7 +10174,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg , @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count, @toFoxBin2Prg ) ENDSCAN - .write_ALL_OBJECT_METHODS( @lcMethods, @laPropsAndComments, lnPropsAndComments_Count, @laProtected ; + .write_ALL_OBJECT_METHODS( @lcMethods, @laMethods, @laCode, @lnMethodCount, @laPropsAndComments, lnPropsAndComments_Count, @laProtected ; , lnProtected_Count, @toFoxBin2Prg ) GOTO RECORD (lnRecno) @@ -10125,6 +10301,9 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg AND (EMPTY(TABLABIN.PARENT) ; AND (TABLABIN.BASECLASS == 'dataenvironment' OR TABLABIN.BASECLASS == 'form' OR TABLABIN.BASECLASS == 'formset' ) ) + STORE 0 TO lnMethodCount + STORE '' TO laMethods, laCode + loRegClass = NULL SCATTER MEMO NAME loRegClass @@ -10202,12 +10381,15 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg *-- OBTENGO LOS MÉTODOS DE LA CLASE PARA POSTERIOR TRATAMIENTO - DIMENSION laMethods(1,3) - laMethods = '' - .SortMethod( loRegClass.METHODS, @laMethods, @laCode, '', @lnMethodCount ; + DIMENSION laMethods(1,3), laCode(1) + STORE '' TO laMethods, laCode + lnMethodCount = 0 + + .Method2Array( loRegClass.METHODS, @laMethods, @laCode, '', @lnMethodCount ; , @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count, @toFoxBin2Prg ) - .write_CLASS_METHODS( @lnMethodCount, @laMethods, @laCode, @laProtected, @laPropsAndComments ) + *.write_CLASS_METHODS( @lnMethodCount, @laMethods, @laCode, @laProtected, @laPropsAndComments ) + .get_CLASS_METHODS( @lnMethodCount, @laMethods, @laCode, @laProtected, @laPropsAndComments ) lnLastClass = 1 lcMethods = '' @@ -10238,7 +10420,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg , @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count, @toFoxBin2Prg ) ENDSCAN - .write_ALL_OBJECT_METHODS( @lcMethods, @laPropsAndComments, lnPropsAndComments_Count, @laProtected ; + .write_ALL_OBJECT_METHODS( @lcMethods, @laMethods, @laCode, @lnMethodCount, @laPropsAndComments, lnPropsAndComments_Count, @laProtected ; , lnProtected_Count, @toFoxBin2Prg ) GOTO RECORD (lnRecno) From dc5f469354d355c516e49febda71001902461b7e Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 10 Aug 2014 11:01:05 +0200 Subject: [PATCH 5/8] =?UTF-8?q?Changeset:=20399=20fdbozzo=20-=2009/08/2014?= =?UTF-8?q?=2014:39:34:=20-=20Agregado=20caso=20de=20prueba=20para=20orden?= =?UTF-8?q?=20de=20m=C3=A9todos=20(basado=20en=20el=20enviado=20por=20Ryan?= =?UTF-8?q?)=20-=20Limpieza=20de=20c=C3=B3digo=20-=20Actualizaci=C3=B3n=20?= =?UTF-8?q?de=20historial=20en=20header=20foxbin2prg.prg?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 3 +- TESTS/ut__foxbin2prg.prg | 58 +++++ ...or_base__IdentificarBloquesDeExclusion.prg | 26 ++- foxbin2prg.exe | Bin 442960 -> 444147 bytes foxbin2prg.pj2 | 2 + foxbin2prg.pjt | Bin 602145 -> 609976 bytes foxbin2prg.pjx | Bin 8993 -> 9123 bytes foxbin2prg.prg | 218 ++++-------------- 8 files changed, 128 insertions(+), 179 deletions(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 39805a3..a342996 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -18,7 +18,8 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg Change History ------------------------------------------------------------- 2014/08/07 v1.19.30 -- Bug Fix vcx/scx: Bad EndText block detection when the previous line end with "," or ";" (Jim Nelson) +- Bug Fix vcx/scx: Bad EndText block detection when the previous line ends with "," or ";" (Jim Nelson) +- Bug Fix vcx/scx: Some methods are not alphabetically sorted in some inheritance situations (Ryan Harris) 2014/08/01 v1.19.29 - Bug Fix vcx/scx: Bad Text block detection when the previous line ends with "," (M_N_M) diff --git a/TESTS/ut__foxbin2prg.prg b/TESTS/ut__foxbin2prg.prg index d64e5ef..49ca7ef 100644 --- a/TESTS/ut__foxbin2prg.prg +++ b/TESTS/ut__foxbin2prg.prg @@ -873,6 +873,64 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg ENDFUNC + ******************************************************************************************************************************************* + FUNCTION Deberia_Ejecutar_FOXBIN2PRG_ParaLaLibreria_CLASSLIB_METHOD_ORDER_BUG_TEST_VCX_YValidarEl_BUG_DelOrdenDeMetodosDeClases_v1_19_29 + LOCAL lnCodError, lnCodError_Esperado ; + , lc_File, lc_InputFile, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado, loReg, lcTipoBinario, lcTXT0, lcTXT1 ; + , loModulo AS CL_CLASE OF "FOXBIN2PRG.PRG" ; + , loCnv AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ; + , loEx AS EXCEPTION + #IF .F. + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + #ENDIF + + TRY + loEx = NULL + loCnv = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG") + *loCnv.l_Debug = .F. + loCnv.l_ShowErrors = .F. + *loCnv.l_Test = .T. + *loCnv.l_PropSort_Enabled = .F. && Para buscar diferencias + *loCnv.l_MethodSort_Enabled = .F. && Para buscar diferencias + + + *-- DATOS DE ENTRADA + STORE 0 TO lnCodError + lc_File = 'CLASSLIB_METHOD_ORDER_BUG_TEST.VCX' + lc_InputFile = FORCEPATH( lc_File, oFXU_LIB.cPathDatosReadOnly ) + lc_OutputFile = FORCEPATH( lc_File, oFXU_LIB.cPathDatosTest ) + lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) ) + + oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) ) + + loCnv.Convertir( lc_OutputFile, .F., .F., .T. ) + *loCnv.Convertir( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), .F., .F., .T. ) + + *-- Comparo resultados + lcTXT0 = FORCEPATH( FORCEEXT(lc_File,'VC2'), ADDBS( oFXU_LIB.cPathDatosReadOnly ) ) + lcTXT1 = FORCEPATH( FORCEEXT(lc_File,'VC2'), ADDBS( oFXU_LIB.cPathDatosTest ) ) + + llEqual = ( FILETOSTR( lcTXT0 ) == FILETOSTR( lcTXT1 ) ) + + THIS.messageout( "Se comparan archivos VC2, para saber si hay cambios" ) + THIS.messageout( "lcTXT0 = " + lcTXT0 ) + THIS.messageout( "lcTXT1 = " + lcTXT1 ) + + THIS.asserttrue( llEqual, "COMPARACIÓN DE VC2" ) + + CATCH TO loEx + THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado ) + + FINALLY + USE IN (SELECT("ARCHIVOBIN_IN")) + USE IN (SELECT("TABLABIN")) + STORE NULL TO loModulo, loCnv + RELEASE loModulo, loCnv + ENDTRY + + ENDFUNC + + ******************************************************************************************************************************************* FUNCTION Deberia_Ejecutar_FOXBIN2PRG_ParaLaLibreria_FB2P_TEST_VCX_YValidarEl_BUG_Del_PROCEDURE_SIN_ENDPROC LOCAL lnCodError, lnCodError_Esperado ; diff --git a/TESTS/ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion.prg b/TESTS/ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion.prg index b5cc86e..df7d0bd 100644 --- a/TESTS/ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion.prg +++ b/TESTS/ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion.prg @@ -72,32 +72,36 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as ******************************************************************************************************************************************* FUNCTION Deberia_ObtenerLaUbicacionDelBloque_IF_ENDIF_CuandoCodigoCon_IF_ENDIF_predominante_esEvaluado LOCAL lcMethod, laLineas(1), lnLineas, laPos(1,2), lnPos_Count, laExpected_Pos(2,2) ; - , laLineasExclusion(10), laLineasExclusion_Esperadas(10) + , laLineasExclusion(12), laLineasExclusion_Esperadas(12) LOCAL loObj AS c_conversor_prg_a_bin OF "FOXBIN2PRG.PRG" loObj = THIS.icObj *-- Input and expected params STORE '' TO lcMethod laExpected_Pos(1,1) = 3 - laExpected_Pos(1,2) = 5 - laExpected_Pos(2,1) = 7 - laExpected_Pos(2,2) = 9 + laExpected_Pos(1,2) = 6 + laExpected_Pos(2,1) = 8 + laExpected_Pos(2,2) = 11 laLineasExclusion_Esperadas( 3) = .T. laLineasExclusion_Esperadas( 4) = .T. laLineasExclusion_Esperadas( 5) = .T. laLineasExclusion_Esperadas( 7) = .T. laLineasExclusion_Esperadas( 8) = .T. laLineasExclusion_Esperadas( 9) = .T. + laLineasExclusion_Esperadas(10) = .T. + laLineasExclusion_Esperadas(11) = .T. TEXT TO lcMethod NOSHOW TEXTMERGE FLAGS 1 PRETEXT 1+2 <> myMethod_B *-- Code Block <> <> + value ; <> *-- Code Block <> <> + value , <> <> ENDTEXT @@ -138,7 +142,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as <> <> <> - *-- Code Block + *-- Code Block ; <> <> <> @@ -159,32 +163,36 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as ******************************************************************************************************************************************* FUNCTION Deberia_ObtenerLaUbicacionDelBloque_TEXT_ENDTEXT_CuandoCodigoCon_TEXT_ENDTEXT_predominante_esEvaluado LOCAL lcMethod, laLineas(1), lnLineas, laPos(1,2), lnPos_Count, laExpected_Pos(2,2) ; - , laLineasExclusion(10), laLineasExclusion_Esperadas(10) + , laLineasExclusion(12), laLineasExclusion_Esperadas(12) LOCAL loObj AS c_conversor_prg_a_bin OF "FOXBIN2PRG.PRG" loObj = THIS.icObj *-- Input and expected params STORE '' TO lcMethod laExpected_Pos(1,1) = 3 - laExpected_Pos(1,2) = 5 - laExpected_Pos(2,1) = 7 - laExpected_Pos(2,2) = 9 + laExpected_Pos(1,2) = 6 + laExpected_Pos(2,1) = 8 + laExpected_Pos(2,2) = 11 laLineasExclusion_Esperadas( 3) = .T. laLineasExclusion_Esperadas( 4) = .T. laLineasExclusion_Esperadas( 5) = .T. laLineasExclusion_Esperadas( 7) = .T. laLineasExclusion_Esperadas( 8) = .T. laLineasExclusion_Esperadas( 9) = .T. + laLineasExclusion_Esperadas(10) = .T. + laLineasExclusion_Esperadas(11) = .T. TEXT TO lcMethod NOSHOW TEXTMERGE FLAGS 1 PRETEXT 1+2 <> myMethod_B *-- Code Block <> <> + value ; <> *-- Code Block <> <> + value , <> <> ENDTEXT diff --git a/foxbin2prg.exe b/foxbin2prg.exe index f394ce5d31ed57305b40f8b41893678b6c9ab000..1cb896f228c1878835cd50e62371b357fe85a8f0 100644 GIT binary patch delta 17275 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 diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2 index d657dc4..9e072a9 100644 --- a/foxbin2prg.pj2 +++ b/foxbin2prg.pj2 @@ -109,6 +109,7 @@ WITH loProject.FILES .ADD('tests\ut__foxbin2prg__c_conversor_prg_a_bin__analizarasignacion_tag_indicado.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" /> .ADD('tests\ut__foxbin2prg__c_conversor_prg_a_bin__insert_allobjects.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" /> .ADD('tests\ut__foxbin2prg__c_foxbin2prg__evaluarconfiguracion.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" /> + .ADD('tests\ut__foxbin2prg__c_foxbin2prg__filenamefoundinfilter.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="0" /> * .ITEM('__newproject.f2b').Remove() @@ -137,6 +138,7 @@ WITH loProject.FILES .ITEM(lcCurdir + 'tests\ut__foxbin2prg__c_conversor_prg_a_bin__analizarasignacion_tag_indicado.prg').Exclude = .T. .ITEM(lcCurdir + 'tests\ut__foxbin2prg__c_conversor_prg_a_bin__insert_allobjects.prg').Exclude = .T. .ITEM(lcCurdir + 'tests\ut__foxbin2prg__c_foxbin2prg__evaluarconfiguracion.prg').Exclude = .T. + .ITEM(lcCurdir + 'tests\ut__foxbin2prg__c_foxbin2prg__filenamefoundinfilter.prg').Exclude = .T. * * diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index 4eb5c404d23d70ae079c95930fb2fad03d7c8ea2..7330f17a269dfa6715014ffb2905437abd9d4528 100644 GIT binary patch delta 22570 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 delta 17593 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 diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 4f0ab70..f886dec 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -97,6 +97,7 @@ * 21/07/2014 FDBOZZO v1.19.28 Mejora: Agregada funcionalidad para filtrado de tablas y datos cuando se elige DBF_Conversion_Support:4 (Edyshor) * 29/07/2014 FDBOZZO v1.19.29 Arreglo bug vcx/scx: Un campo de tabla llamado "text" que comienza la línea puede confundirse con la estructura TEXT/ENDTEXT y reconocer mal el resto del código * 07/08/2014 FDBOZZO v1.19.30 Arreglo bug vcx/scx: Cuando la línea anterior a un ENDTEXT termina en ";" o "," no se reconoce como ENDTEXT sino como continuación (Jim Nelson) +* 08/08/2014 FDBOZZO v1.19.30 Arreglo bug vcx/vct v1.19.29: En ciertos casos de herencia no se mantiene el orden alfabetico de algunos metodos (Ryan Harris) * * *--------------------------------------------------------------------------------------------------- @@ -137,6 +138,7 @@ * 21/07/2014 Edyshor PROPUESTA DE MEJORA db2 v1.19.27: Sería útil poder filtrar tablas y datos cuando se elige DBF_Conversion_Support:4 (Agregado en v1.19.28) * 29/07/2014 M_N_M REPORTE BUG vcx/scx v1.19.28: Los campos de tabla con nombre "text" a veces provocan corrupción del binario generado (Arreglado en v1.19.29) * 07/08/2014 Jim Nelson REPORTE BUG vcx/scx v1.19.29: Cuando la línea anterior a un ENDTEXT termina en ";" o "," no se reconoce como ENDTEXT sino como continuación (Arreglado en v1.19.30) +* 08/08/2014 Ryan Harris REPORTE BUG vcx/vct v1.19.29: En ciertos casos de herencia no se mantiene el orden alfabetico de algunos metodos (solucionado en v1.19.30) * * *--------------------------------------------------------------------------------------------------- @@ -1131,9 +1133,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM IF .l_AllowMultiConfig AND .l_ConfigEvaluated AND .l_Main_CFG_Loaded lo_CFG = CREATEOBJECT('CL_CFG') - lo_Configuration.Add( lo_CFG, lc_CFG_Path ) + lo_Configuration.Add( lo_CFG, lc_CFG_Path ) ELSE - lo_Configuration.Add( NULL, lc_CFG_Path ) + lo_Configuration.Add( NULL, lc_CFG_Path ) ENDIF FOR I = 1 TO ALINES( laConfig, FILETOSTR( lcConfigFile ), 1+4 ) @@ -1290,8 +1292,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDCASE ENDFOR - IF .l_AllowMultiConfig AND .l_Main_CFG_Loaded AND lo_Configuration.Count > 0 - .n_CFG_Actual = lo_Configuration.Count &&lo_Configuration.GetKey( UPPER( JUSTPATH( lcConfigFile ) ) ) + IF .l_AllowMultiConfig AND .l_Main_CFG_Loaded AND lo_Configuration.Count > 0 + .n_CFG_Actual = lo_Configuration.Count &&lo_Configuration.GetKey( UPPER( JUSTPATH( lcConfigFile ) ) ) ENDIF ENDIF && llExisteConfig @@ -1378,18 +1380,18 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM * tcFilename (v! IN ) Nombre del archivo a evaluar * tcFilters (v! IN ) Filtros a evaluar (*,??E.*,R*.*) *--------------------------------------------------------------------------------------------------- - LPARAMETERS tcFilename, tcFilters - + LPARAMETERS tcFileName, tcFilters + LOCAL llFound, laFiltros(1) - tcFilename = UPPER(tcFilename) + tcFileName = UPPER(tcFileName) FOR I = 1 TO ALINES( laFiltros, tcFilters + ',', 1+4, ',' ) - IF LIKE( UPPER(laFiltros(I)), tcFilename ) + IF LIKE( UPPER(laFiltros(I)), tcFileName ) llFound = .T. EXIT ENDIF ENDFOR - + RETURN llFound ENDFUNC @@ -2718,8 +2720,8 @@ DEFINE CLASS c_conversor_base AS SESSION RETURN llEncontrado ENDPROC - - + + PROCEDURE decode_SpecialCodes_1_31 *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) @@ -3035,7 +3037,7 @@ DEFINE CLASS c_conversor_base AS SESSION * tcAsignacion (v! IN ) Asignación completa con variable, igualdad y valor * tcPropName (@! OUT) Nombre de la variable * tcValue (@? OUT) Valor - * toClase (v! IN ) + * toClase (v! IN ) * taCodeLines (@! IN ) Líneas de código a analizar * tnCodeLines (v! IN ) Cantidad de líneas de código * I (@! IN/OUT) Línea actual @@ -4618,11 +4620,11 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base lcPropsMemo = .objectProps2Memo( toObjeto, toClase ) lcMethodsMemo = .objectMethods2Memo( toObjeto, toClase ) - IF EMPTY(toObjeto._TIMESTAMP) - toObjeto._TIMESTAMP = THIS.RowTimeStamp(DATETIME()) + IF EMPTY(toObjeto._TimeStamp) + toObjeto._TimeStamp = THIS.RowTimeStamp(DATETIME()) ENDIF - IF EMPTY(toObjeto._UNIQUEID) - toObjeto._UNIQUEID = SYS(2015) + IF EMPTY(toObjeto._UniqueID) + toObjeto._UniqueID = SYS(2015) ENDIF *-- Inserto el objeto @@ -4703,11 +4705,11 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base FOR X = 1 TO toClase._AddObject_Count loObjeto = toClase._AddObjects( X ) - IF EMPTY(loObjeto._TIMESTAMP) - loObjeto._TIMESTAMP = THIS.RowTimeStamp(DATETIME()) + IF EMPTY(loObjeto._TimeStamp) + loObjeto._TimeStamp = THIS.RowTimeStamp(DATETIME()) ENDIF - IF EMPTY(loObjeto._UNIQUEID) - loObjeto._UNIQUEID = SYS(2015) + IF EMPTY(loObjeto._UniqueID) + loObjeto._UniqueID = SYS(2015) ENDIF laObjNames( X, 1 ) = loObjeto._Nombre @@ -5875,11 +5877,11 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin LOOP ENDIF - IF EMPTY(loClase._TIMESTAMP) - loClase._TIMESTAMP = THIS.RowTimeStamp(DATETIME()) + IF EMPTY(loClase._TimeStamp) + loClase._TimeStamp = THIS.RowTimeStamp(DATETIME()) ENDIF - IF EMPTY(loClase._UNIQUEID) - loClase._UNIQUEID = SYS(2015) + IF EMPTY(loClase._UniqueID) + loClase._UniqueID = SYS(2015) ENDIF *-- Inserto la clase @@ -6178,11 +6180,11 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin LOOP ENDIF - IF EMPTY(loClase._TIMESTAMP) - loClase._TIMESTAMP = THIS.RowTimeStamp(DATETIME()) + IF EMPTY(loClase._TimeStamp) + loClase._TimeStamp = THIS.RowTimeStamp(DATETIME()) ENDIF - IF EMPTY(loClase._UNIQUEID) - loClase._UNIQUEID = SYS(2015) + IF EMPTY(loClase._UniqueID) + loClase._UniqueID = SYS(2015) ENDIF *-- Inserto la clase @@ -6417,8 +6419,8 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin lcMainProg = LOWER( SYS(2014, toProject._MainProg, ADDBS(toProject._HomeDir) ) ) ENDIF - IF EMPTY(toProject._TIMESTAMP) - toProject._TIMESTAMP = THIS.RowTimeStamp(DATETIME()) + IF EMPTY(toProject._TimeStamp) + toProject._TimeStamp = THIS.RowTimeStamp(DATETIME()) ENDIF IF EMPTY(toProject._ID) toProject._ID = INT(VAL(SYS(3))) @@ -6457,8 +6459,8 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin *-- Agrego los ARCHIVOS FOR EACH loFile IN toProject FOXOBJECT - IF EMPTY(loFile._TIMESTAMP) - loFile._TIMESTAMP = THIS.RowTimeStamp(DATETIME()) + IF EMPTY(loFile._TimeStamp) + loFile._TimeStamp = THIS.RowTimeStamp(DATETIME()) ENDIF IF EMPTY(loFile._ID) loFile._ID = INT(VAL(SYS(3))) @@ -8185,7 +8187,6 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base + [] ; + [] ; + [] ; - + [] ; + [] ; + [] ; + [] ; @@ -8274,10 +8275,6 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDIF *-- Genero el método SIN indentar, ya que se hace luego - *-- Sustituyo el TEXT/ENDTEXT aquí porque a veces quita espacios de la derecha, y eso es peligroso - *tcMethods = tcMethods + CR_LF + 'PROCEDURE ' + lcMethodName - *tcMethods = tcMethods + CR_LF + .IndentarMemo( taCode(taMethods(I,2)) ) - *tcMethods = tcMethods + CR_LF + 'ENDPROC' taCode(taMethods(I,2)) = 'PROCEDURE ' + lcMethodName + CR_LF + .IndentarMemo( taCode(taMethods(I,2)) ) + CR_LF + 'ENDPROC' taMethods(I,1) = lcMethodName ENDFOR @@ -8331,25 +8328,15 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base lnCommentRow = ASCAN( taPropsAndComments, '*' + lcMethodName, 1, 0, 1, 1+2+4+8) *-- Nombre del método - *TEXT TO lcMethods ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - * <<>> <> <> - *ENDTEXT - *lcMethods = lcMethods + CR_LF + lcProcDef + ' ' + taMethods(I,1) lcMethod = lcProcDef + ' ' + taMethods(I,1) *-- Comentarios del método (si tiene) IF lnCommentRow > 0 AND NOT EMPTY(taPropsAndComments(lnCommentRow,2)) - *TEXT TO lcMethods ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 - * <<>> && <> - *ENDTEXT - *lcMethods = lcMethods + C_TAB + C_TAB + taPropsAndComments(lnCommentRow,2) lcMethod = lcMethod + C_TAB + C_TAB + '&' + '& ' + taPropsAndComments(lnCommentRow,2) ENDIF *-- Código del método IF taMethods(I,2) > 0 THEN - *lcMethods = lcMethods + CR_LF + .IndentarMemo( taCode(taMethods(I,2)), C_TAB + C_TAB ) - *lcMethod = lcMethod + CR_LF + .IndentarMemo( taCode(taMethods(I,2)), C_TAB + C_TAB ) taCode(taMethods(I,2)) = lcMethod + CR_LF + .IndentarMemo( taCode(taMethods(I,2)) ) + CR_LF + 'ENDPROC' ELSE lnLen = ALEN(taCode,1) + 1 @@ -8357,18 +8344,8 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base taCode( lnLen ) = lcMethod + CR_LF + 'ENDPROC' taMethods(I,2) = lnLen ENDIF - - *lcMethods = lcMethods + CR_LF + C_TAB + 'ENDPROC' - *lcMethods = lcMethods + CR_LF - - *lcMethod = lcMethod + CR_LF + C_TAB + 'ENDPROC' - *lcMethod = lcMethod + CR_LF - *lcMethods = lcMethods + lcMethod ENDFOR - ENDWITH && THIS - *C_FB2PRG_CODE = C_FB2PRG_CODE + C_TAB + lcMethods &&+ CR_LF - ENDIF CATCH TO loEx @@ -8593,7 +8570,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base tnProtected_Count = tnProtected_Count - 1 ENDIF ENDFOR - + DIMENSION taProtected(tnProtected_Count) ENDIF @@ -8754,12 +8731,6 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ASORT(taMethods,1,-1,0,1) ENDIF - *FOR I = 1 TO tnMethodCount - * IF taMethods(I,2) > 0 THEN - * tcSorted = m.tcSorted + taCode( taMethods(I,2) ) - * ENDIF - *ENDFOR - DIMENSION laMethods(tnMethodCount,3) lnDeleted = 0 @@ -8812,29 +8783,24 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *-- ESTRUCTURA DE LOS ARRAYS CREADOS: *-- taMethods[1,3] - *-- Nombre Método - *-- Posición Original - *-- Tipo (HIDDEN/PROTECTED/NORMAL) + *-- 1.Nombre Método + *-- 2.Posición Original + *-- 3.Tipo (HIDDEN/PROTECTED/NORMAL) *-- taCode[1] - *-- Bloque de código del método en su posición original + *-- 1.Bloque de código del método en su posición original TRY LOCAL lnLineCount, laLine(1), I, lnTextNodes, tcSorted, lnProtectedLine, lcMethod, lnLine_Len, lcLine, llProcOpen ; , laLineasExclusion(1), lnBloquesExclusion ; , loEx AS EXCEPTION - *DIMENSION taMethods(1,3) - *STORE '' TO taMethods, tcSorted, taCode - *tnMethodCount = 0 IF NOT EMPTY(m.tcMethod) AND LEFT(m.tcMethod,9) == "ENDPROC"+CHR(13)+CHR(10) tcMethod = SUBSTR(m.tcMethod,10) ENDIF IF NOT EMPTY(m.tcMethod) - DIMENSION laLine(1) &&, taMethods(1,3) + DIMENSION laLine(1) STORE '' TO laLine STORE 0 TO lnTextNodes - *STORE '' TO taMethods, taCode - *STORE 0 TO tnMethodCount lnLineCount = ALINES(laLine, m.tcMethod) && NO aplicar nungún formato ni limpieza, que es el CÓDIGO FUENTE @@ -8869,7 +8835,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF THIS.identificarBloquesDeExclusion( @laLine, lnLineCount, .F., @laLineasExclusion, @lnBloquesExclusion ) - + *-- Analyze and count line methods, get method names and consolidate block code FOR I = 1 TO lnLineCount IF toFoxBin2Prg.l_DropNullCharsFromCode @@ -8881,7 +8847,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base DO CASE CASE laLineasExclusion(I) taCode(tnMethodCount) = taCode(tnMethodCount) + laLine(I) + CR_LF - + CASE lnTextNodes = 0 AND UPPER( LEFT(laLine(I), 10) ) == 'PROCEDURE ' tnMethodCount = tnMethodCount + 1 DIMENSION taMethods(tnMethodCount, 3), taCode(tnMethodCount) @@ -9057,7 +9023,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *-- Finalmente, todos los métodos los ordeno y escribo juntos LOCAL laMethods(1), laCode(1), lnMethodCount, I, lcMethods - IF tnMethodCount > 0 THEN + IF tnMethodCount > 0 THEN STORE '' TO lcMethods DIMENSION laMethods(1,3) @@ -9074,10 +9040,6 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base LOOP ENDIF - *lcMethods = lcMethods + CR_LF + C_TAB + laMethods(I,3) + C_PROCEDURE + ' ' + laMethods(I,1) - *lcMethods = lcMethods + CR_LF + .IndentarMemo( laCode(laMethods(I,2)), CHR(9) + CHR(9) ) - *lcMethods = lcMethods + CR_LF + C_TAB + C_ENDPROC - lcMethods = lcMethods + CR_LF + .IndentarMemo( taCode(taMethods(I,2)), CHR(9) + CHR(9), .T. ) lcMethods = lcMethods + CR_LF ENDFOR @@ -9090,86 +9052,6 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDPROC - ******************************************************************************************************************* - PROCEDURE write_CLASS_METHODS - LPARAMETERS tnMethodCount, taMethods, taCode, taProtected, taPropsAndComments - *-- DEFINIR MÉTODOS DE LA CLASE - *-- Ubico los métodos protegidos y les cambio la definición - EXTERNAL ARRAY taMethods, taCode, taProtected, taPropsAndComments - - TRY - LOCAL lcMethod, lcMethodName, lnProtectedItem, lnCommentRow, lcProcDef, lcMethods - STORE '' TO lcMethod, lcMethodName, lcProcDef, lcMethods - - IF tnMethodCount > 0 THEN - WITH THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG' - FOR I = 1 TO tnMethodCount - lcMethodName = CHRTRAN( taMethods(I,1), '^', '' ) - lnProtectedItem = ASCAN( taProtected, taMethods(I,1), 1, 0, 0, 1+2+4) - - IF lnProtectedItem = 0 - lnProtectedItem = ASCAN( taProtected, taMethods(I,1) + '^', 1, 0, 0, 1+2+4) - - IF lnProtectedItem = 0 - *-- Método común - lcProcDef = 'PROCEDURE' - ELSE - *-- Método oculto - lcProcDef = 'HIDDEN PROCEDURE' - ENDIF - ELSE - *-- Método protegido - lcProcDef = 'PROTECTED PROCEDURE' - ENDIF - - lnCommentRow = ASCAN( taPropsAndComments, '*' + lcMethodName, 1, 0, 1, 1+2+4+8) - - *-- Nombre del método - *TEXT TO lcMethods ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - * <<>> <> <> - *ENDTEXT - *lcMethods = lcMethods + CR_LF + lcProcDef + ' ' + taMethods(I,1) - lcMethod = CR_LF + lcProcDef + ' ' + taMethods(I,1) - - *-- Comentarios del método (si tiene) - IF lnCommentRow > 0 AND NOT EMPTY(taPropsAndComments(lnCommentRow,2)) - *TEXT TO lcMethods ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 - * <<>> && <> - *ENDTEXT - *lcMethods = lcMethods + C_TAB + C_TAB + taPropsAndComments(lnCommentRow,2) - lcMethod = lcMethod + C_TAB + C_TAB + taPropsAndComments(lnCommentRow,2) - ENDIF - - *-- Código del método - IF taMethods(I,2) > 0 THEN - *lcMethods = lcMethods + CR_LF + .IndentarMemo( taCode(taMethods(I,2)), C_TAB + C_TAB ) - lcMethod = lcMethod + CR_LF + .IndentarMemo( taCode(taMethods(I,2)), C_TAB + C_TAB ) - ENDIF - - *lcMethods = lcMethods + CR_LF + C_TAB + 'ENDPROC' - *lcMethods = lcMethods + CR_LF - lcMethod = lcMethod + CR_LF + C_TAB + 'ENDPROC' - lcMethod = lcMethod + CR_LF - lcMethods = lcMethods + lcMethod - ENDFOR - - ENDWITH && THIS - C_FB2PRG_CODE = C_FB2PRG_CODE + C_TAB + lcMethods &&+ CR_LF - - ENDIF - - CATCH TO loEx - IF THIS.l_Debug AND _VFP.STARTMODE = 0 - SET STEP ON - ENDIF - - THROW - ENDTRY - - RETURN - ENDPROC - - ******************************************************************************************************************* PROCEDURE write_CLASS_PROPERTIES LPARAMETERS toRegClass, taPropsAndValues, taPropsAndComments, taProtected ; @@ -10144,7 +10026,6 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg .Method2Array( loRegClass.METHODS, @laMethods, @laCode, '', @lnMethodCount ; , @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count, @toFoxBin2Prg ) - *.write_CLASS_METHODS( @lnMethodCount, @laMethods, @laCode, @laProtected, @laPropsAndComments ) .get_CLASS_METHODS( @lnMethodCount, @laMethods, @laCode, @laProtected, @laPropsAndComments ) lnLastClass = 1 @@ -10388,7 +10269,6 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg .Method2Array( loRegClass.METHODS, @laMethods, @laCode, '', @lnMethodCount ; , @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count, @toFoxBin2Prg ) - *.write_CLASS_METHODS( @lnMethodCount, @laMethods, @laCode, @laProtected, @laPropsAndComments ) .get_CLASS_METHODS( @lnMethodCount, @laMethods, @laCode, @laProtected, @laPropsAndComments ) lnLastClass = 1 @@ -11405,7 +11285,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg toFoxBin2Prg.writeLog(' ' + JUSTFNAME(.c_InputFile) + ' está en el filtro DBF_Conversion_Excluded (' + toFoxBin2Prg.DBF_Conversion_Excluded + ')' ) EXIT ENDIF - + loDBFUtils.getDBFmetadata( .c_InputFile, @ln_HexFileType, @ll_FileHasCDX, @ll_FileHasMemo, @ll_FileIsDBC, @lc_DBC_Name ) lc_FileTypeDesc = loDBFUtils.fileTypeDescription(ln_HexFileType) lnDatabases_Count = ADATABASES(laDatabases) @@ -16206,7 +16086,7 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE IF FILE(lcTableCFG) toFoxBin2Prg.writeLog() toFoxBin2Prg.writeLog('* Found configuration file: ' + lcTableCFG) - + *-- Leer valores de configuración FOR I = 1 TO ALINES( laConfig, FILETOSTR( lcTableCFG ), 1+4 ) lcConfigItem = LOWER( laConfig(I) ) @@ -16225,15 +16105,15 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE ENDCASE ENDFOR - + IF NOT EMPTY(lc_DBF_Conversion_Order) lcIndexFile = FORCEEXT(tc_InputFile,'IDX') INDEX ON &lc_DBF_Conversion_Order. TO (lcIndexFile) COMPACT toFoxBin2Prg.writeLog(' > Using Index order key: ' + lc_DBF_Conversion_Order) ENDIF - + ENDIF - + *** DH 06/02/2014: added _Records loRecords = THIS._Records lcText = lcText + loRecords.toText(@laFields, lnFieldCount, lc_DBF_Conversion_Condition) @@ -16855,7 +16735,7 @@ DEFINE CLASS CL_DBF_RECORDS AS CL_COL_BASE ENDTEXT loRecord = CREATEOBJECT('CL_DBF_RECORD') - + IF EMPTY(tc_DBF_Conversion_Condition) tc_DBF_Conversion_Condition = '.T.' ENDIF From 15835ddd94c670dc77e6b10311ea3ab19df5a356 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 10 Aug 2014 11:42:46 +0200 Subject: [PATCH 6/8] Changeset: 401 fdbozzo - 10/08/2014 11:42:25: --- .../classlib_method_order_bug_test.vc2 | 205 ++++++++++++++++++ .../classlib_method_order_bug_test.vct | Bin 0 -> 9576 bytes .../classlib_method_order_bug_test.vcx | Bin 0 -> 3104 bytes 3 files changed, 205 insertions(+) create mode 100644 TESTS/DATOS_READONLY/classlib_method_order_bug_test.vc2 create mode 100644 TESTS/DATOS_READONLY/classlib_method_order_bug_test.vct create mode 100644 TESTS/DATOS_READONLY/classlib_method_order_bug_test.vcx diff --git a/TESTS/DATOS_READONLY/classlib_method_order_bug_test.vc2 b/TESTS/DATOS_READONLY/classlib_method_order_bug_test.vc2 new file mode 100644 index 0000000..1d465d4 --- /dev/null +++ b/TESTS/DATOS_READONLY/classlib_method_order_bug_test.vc2 @@ -0,0 +1,205 @@ +*-------------------------------------------------------------------------------------------------------------------------------------------------------- +* (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!! +* (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!! +*-------------------------------------------------------------------------------------------------------------------------------------------------------- +*< FOXBIN2PRG: Version="1.19" SourceFile="classlib_method_order_bug_test.vcx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries) +* +* +DEFINE CLASS grdbase AS grid + *< CLASSDATA: Baseclass="grid" Timestamp="" Scale="Pixels" Uniqueid="" /> + + *-- OBJECTDATA items order determines ZOrder / El orden de los items OBJECTDATA determina el ZOrder + *< OBJECTDATA: ObjPath="Column1.Header1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="Column1.Text1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="Column2.Header1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="Column2.Text1" UniqueID="" Timestamp="" /> + + * + *m: canresort + *m: commoncolumnclick && Generic column click handler + *m: createtag && Create a grid indexd tag for sorting + *m: resizecover + *m: visible_assign + * + + ColumnCount = 2 + Height = 200 + Name = "grdbase" + Width = 320 + Column1.Name = "Column1" + Column2.Name = "Column2" + + ADD OBJECT 'Column1.Header1' AS header WITH ; + Caption = "Header1", ; + Name = "Header1" + *< END OBJECT: BaseClass="header" /> + + ADD OBJECT 'Column1.Text1' AS textbox WITH ; + BackColor = 255,255,255, ; + BorderStyle = 0, ; + ForeColor = 0,0,0, ; + Margin = 0, ; + Name = "Text1" + *< END OBJECT: BaseClass="textbox" /> + + ADD OBJECT 'Column2.Header1' AS header WITH ; + Caption = "Header1", ; + Name = "Header1" + *< END OBJECT: BaseClass="header" /> + + ADD OBJECT 'Column2.Text1' AS textbox WITH ; + BackColor = 255,255,255, ; + BorderStyle = 0, ; + ForeColor = 0,0,0, ; + Margin = 0, ; + Name = "Text1" + *< END OBJECT: BaseClass="textbox" /> + + PROCEDURE canresort + * + * CanResort + * + RETURN .T. + ENDPROC + + PROCEDURE Click + * + * Do some things here + * + DODEFAULT() + ENDPROC + + PROCEDURE commoncolumnclick && Generic column click handler + * + * Common behavior when clicked + * + LPARAMETERS toColumn + ENDPROC + + PROCEDURE createtag && Create a grid indexd tag for sorting + * + * Index on each column's ControlSource + * + ENDPROC + + PROCEDURE DblClick + * + * Double-clicked! + * + RETURN DODEFAULT() + ENDPROC + + PROCEDURE Destroy + * + * Destroy the grid + * + RETURN .T. + ENDPROC + + PROCEDURE Resize + * + * React to resizing the grid + * + ENDPROC + + PROCEDURE resizecover + * + * ResizeCover if one exists + * + ENDPROC + + PROCEDURE visible_assign + LPARAMETERS vNewVal + *To do: Modify this routine for the Assign method + THIS.Visible = m.vNewVal + + ENDPROC + + PROCEDURE When + * + * When what? + * + ENDPROC + + PROCEDURE Column1.Text1.Click + * + * Call common method + * + this.Parent.Parent.commoncolumnclick(this) + ENDPROC + + PROCEDURE Column2.Text1.Click + * + * Call common method + * + this.Parent.Parent.commoncolumnclick(this) + ENDPROC + +ENDDEFINE + +DEFINE CLASS grdgeneral AS grdbase OF "classlib.vcx" + *< CLASSDATA: Baseclass="grid" Timestamp="" Scale="Pixels" Uniqueid="" /> + + Name = "grdgeneral" + Column1.Header1.Name = "Header1" + Column1.Name = "Column1" + Column1.Text1.Name = "Text1" + Column2.Header1.Name = "Header1" + Column2.Name = "Column2" + Column2.Text1.Name = "Text1" + + PROCEDURE canresort + * + * Call default logic. + * + IF NOT DODEFAULT() + RETURN .F. + ENDIF + ENDPROC + + PROCEDURE commoncolumnclick && Generic column click handler + *!****************************************************************************** + *!* Method: grdGeneral::CommonColumnClick() + *!* Returns: Logical + LPARAMETERS toColumn + + * + * Call default logic. + * + IF NOT DODEFAULT() + RETURN .F. + ENDIF + + * + * Measure Success + * + LOCAL llSuccess as Boolean + llSuccess = .T. + + ** TODO + + * + * Return logical, success(T) or failure(F) + * + RETURN llSuccess + ENDPROC + + PROCEDURE Init + * + * Call default logic. + * + IF NOT DODEFAULT() + RETURN .F. + ENDIF + ENDPROC + + PROCEDURE Column1.Text1.Click + * + * Call default logic. + * + IF NOT DODEFAULT() + RETURN .F. + ENDIF + ENDPROC + +ENDDEFINE diff --git a/TESTS/DATOS_READONLY/classlib_method_order_bug_test.vct b/TESTS/DATOS_READONLY/classlib_method_order_bug_test.vct new file mode 100644 index 0000000000000000000000000000000000000000..1894eb37475f7f052efbf1346d76bba36ea98231 GIT binary patch literal 9576 zcmeHMUu+yl8K1k@aeV2uNvhI91DXV)I>9;lF11vQs&d{tH>aNO!rj>^Pt|&Fe79u1 zOZN60r%x3;!9z={(o(5vg~S8uLn~UTQXddc2vvv*i9YfI0wgMg1Og&NV)OfEXZH5u zb(}_4(uy13=l$m2H#;-me7|qLW$Z+kF_r?2(*NfQ(B2u)o`NYw^z)bP}%+G>x7} z$G6+b-T$!pk1d|27kFP09tr7pHEMGLbV1cVgXccb(<)DotNT#2#MtN9{p^*i2D`%8 zKk-Y^@84;5Z48Ck%~WP0K%W(FBRTt!VSX#HF=YrpD@?pCiPysoN>uM12Aoh0Rjd77DJd~G(z8#$ zp3xb+t$L;h{1|%n{ZreHDSuqJ!nZA)ayl(so?YHG-L@lq9CpieebMv$fFrYR_v{r% zJOwLicU&s5d|?J6Fgx6k95*?cQ*OI$vC-yKv5Lb?0&KT~4iIKPEi7+c_~;+5S^6iD zoqaCN7*TSXS)m?eXFpU8-o=t10sjImy-M27X4nLK3r3dgYKk3Tt$JuhseJybDeWy| zM|Guxr@3k_9{rg|^Fr-}};*lIto3iq>y+=3sfyn>V0 zRrUZYtvC__-cltKtR#AY?_K`6Di~wuyTbjo$^m~^LDEHbJavZ6%D)#;MnrWF%a-wf zv{|1AX>=l_yaaj?Gyxh1y$5;_4YPP20DTpF2Xrs^Nziw}zX5sxJZZ%*!T$wBau0&W zp+%=b$H9|~D)>vFDe(7zegOVGP!2pH<%i(^43ck4Xt{$LVu!9QKaU%rH z711@@0piiKdY`WM%94MJ@lv_)U8qc+I ziJgaaC7X$lx?U5PmQ4p@S{`qEb9~Wj+pCv30XO%(K2EHVr#I*dUJQ@Cb^^#p$t{QG z05G|hi-aYf*4iz#F90)5+tE)`ULp>~-3q^C9Uf;KbY#MnFgY}5%w2~Gov>|PZ zy$Z2{iw(OM^mY;vc8GeLR)8(wQZTF(7C=ZVwo~`Ghg9-l+~9{`(cDgtcZDCmc&T10 zFBF%mt*N*VG?;}xW$GnLULS__w6wmWeN2|Bt=&~pcsjM9FgHAhU6h25v+7PPbkz(V zlLgW8<2*p|S=?9lL!C9ez8gRV3fatAVRyQcpMl?Y-fjn7RGcXwqn#(^o57t5d*^ey zM&+ZL!gV!;frodUlYf^*ZoOl#35c{WK^&HPhG2pZ=ca_k_)*TNxs2~Y@gzFYb37-w1Y!;pyBJ$b|JTV?HcU}vj#^! zf^c=laL4P|7Hl^_qq4wj^%fsG@00rIE`;{IvJkVcN}GQbc~5VngeWwn;wI>1&%~>i5e7%|(%wp* z{gGW{MMj?KaH4_l13d{MUS3CccvGt1u8Jdlj#;QXU|~l3OlqssNS{q7rjNVfTK^En zMx~ntgIfTLds)Jwgup~W%@9cnH;pI+W8Vh-0z|Wr2(!cVM+oD7@=j#>*}-v%Jd3^d zm|{c7`?)oUS7WGSr}i{SiTI8o)1r)?&*5I#mJv78nVSn^1mQ7|Hi7Pncnj5~A%ec| z_U3q%d_=ma$8Yb0n86+`k`l8h%wFFYyxF%b(F?E8)w)rva>r3+-0bmr&vS%{YvZ8w z(J%@DIj4B5UaDs^N@O^Z(AA}{IK5ExRO=*1WMtK}9Sk_NK$FjAl*1c|jrqHS-AgbX zYOKAsr$3AA>5pMHh?3Kn4p0z_oa+x%0}5DCVCl25J~wMmD>^6{^TCe}`QS&`n^#io z>;HvYUawcn#oFdU)K{~gd5!AoPm!`{&9kFFE+iR=>; zut@)PaF&xIs3S{^5b~$O65j@>uDEs>>sH^R_abyMP`}#-CFy+;lzarEM3kJ~cybIC z1SNk{4KAWBg-;%j_0dpr=b>UZDA}z(0atWHDHddUR<6a?))*sw(Abg)JRhj0^l2&y za5V7fXL7uXJ|w+^1*bJ9(D^MG0-y)M69DDG2MT})=U)T=d(fA`OF-IThe_TY1El`} D;k+(t literal 0 HcmV?d00001 diff --git a/TESTS/DATOS_READONLY/classlib_method_order_bug_test.vcx b/TESTS/DATOS_READONLY/classlib_method_order_bug_test.vcx new file mode 100644 index 0000000000000000000000000000000000000000..3ffee3fd9d00a464f2e4a8c16c5ef418ee0e06c9 GIT binary patch literal 3104 zcmeHJ&1=*^6d!AAw?bR3U$t1fiaoSa%*(TZ6B3delwkjSfsHmV9 zFM=}R^M3PwFE2BjR%weh zZy|)l8qdQ9rC~iGrGn;+m=*(~uY-vNw~%tt7%NjF&+!(RjS}t{jM|RIN`w@79~svR znr*u^tQ)>js;}S$Q%9QZ3BiXon+gur8-km|hl?7coR#&3;3dtXMTf(L4TRyAS)!I> zP@AwsIPOs0p?Co-9fC9J95VBj3E5x>j_1?Oy!(6yD|qk?n1u=kgfK0vzCe>4gjA*s zRuf`Tn_A;Ek7s8FHdVtx!uTOq!&AV=YTzpHat$2shE3MMGr*76z_Y-oYv4KHr$X>D z#z&e9n}Lz%Ypp>4Oidk(J4o1lc0|d+1B(Es?9k z8w#&(Ho7v|B|&@!{une5{ffUHT&}>+OK0LD)$PCA=zYHY_t9Ub3F6K*Ht=)w2X5oh z)TpVrljV}h)ZunQ(rtto&>UherxAzAN#K)WkB487*8Se^tlnhTMd7?e;1NghH6}}` zT^)qH0r?^{hM3E5(d^wOOugC7ahn9*C-!*RA!!|XGA0VABm$2(imyJInpJ*mCFDNH zpFuw&=JHlFdx(ERnnaH08@6F;-%{E?`BmsF zVlEFvv)S#04DWDr+};CzTkP?&Po#C^$zF)UR}z6o9L3j|ETzos#yNnzbtfSch`H=X z%;gXK-Cb_X?M>j9#U3wvM_Nao?2#yZE)jUdQGD>*=>LMGGuh>RgnR?}GW0uQE}cED iUxNR%*NwUD=q02D>X#mA9r@chAPR>h0zY}Zxa%)vz5QeW literal 0 HcmV?d00001 From 7ca5b643c8112b2b723dddf455029d013b3ce6b9 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 10 Aug 2014 11:49:14 +0200 Subject: [PATCH 7/8] Changeset: 403 fdbozzo - 10/08/2014 11:47:52: --- FoxBin2PRGVersionFile.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index a342996..9667216 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -20,6 +20,7 @@ Change History ------------------------------------------------------------- 2014/08/07 v1.19.30 - Bug Fix vcx/scx: Bad EndText block detection when the previous line ends with "," or ";" (Jim Nelson) - Bug Fix vcx/scx: Some methods are not alphabetically sorted in some inheritance situations (Ryan Harris) +- Added FoxUnit test cases to bug fix confirmation of both 2014/08/01 v1.19.29 - Bug Fix vcx/scx: Bad Text block detection when the previous line ends with "," (M_N_M) From aa597e8a966407db146a0350400d57929cdd7d09 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 10 Aug 2014 13:27:09 +0200 Subject: [PATCH 8/8] =?UTF-8?q?Changeset:=20406=20fdbozzo=20-=2010/08/2014?= =?UTF-8?q?=2013:25:59:=20-=20Agregados=20scripts=20de=20compilaci=C3=B3n?= =?UTF-8?q?=20por=20lenguaje?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2Prg__Compilar_en_Español.vbs | 21 +++++++++++++++++++++ FoxBin2Prg__Compile_in_English.vbs | 22 ++++++++++++++++++++++ FoxBin2Prg__kompilieren_auf_Deutsch.vbs | 22 ++++++++++++++++++++++ 3 files changed, 65 insertions(+) create mode 100644 FoxBin2Prg__Compilar_en_Español.vbs create mode 100644 FoxBin2Prg__Compile_in_English.vbs create mode 100644 FoxBin2Prg__kompilieren_auf_Deutsch.vbs diff --git a/FoxBin2Prg__Compilar_en_Español.vbs b/FoxBin2Prg__Compilar_en_Español.vbs new file mode 100644 index 0000000..9c30316 --- /dev/null +++ b/FoxBin2Prg__Compilar_en_Español.vbs @@ -0,0 +1,21 @@ +'--------------------------------------------------------------------------------------------------- +' FoxBin2Prg__Compilar_en_Español.vbs - 10/08/2014 - Fernando D. Bozzo (fdbozzo@gmail.com) +'--------------------------------------------------------------------------------------------------- +' - FoxBin2Prg ya viene en Español por defecto, pero si lo llega a necesitar, solo ejecute este script. +'--------------------------------------------------------------------------------------------------- +Const ForReading = 1 +Dim WSHShell, FileSystemObject +Dim oVFP9, nExitCode, cOrigFile, cDestFile +Dim nRet +Set WSHShell = WScript.CreateObject("WScript.Shell") +Set FileSystemObject = WScript.CreateObject("Scripting.FileSystemObject") +Set oVFP9 = CreateObject("VisualFoxPro.Application.9") +foxbin2prg_exe = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg.exe") +nExitCode = 0 +cOrigFile = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg.h") +cPath = FileSystemObject.GetParentFolderName( cOrigFile ) +nRet = FileSystemObject.DeleteFile( cOrigFile, True ) +oVFP9.DoCmd( "SET DEFAULT TO '" & cPath & "'" ) +oVFP9.DoCmd( "BUILD EXE foxbin2prg.exe FROM foxbin2prg.pjx RECOMPILE" ) +WSHShell.run foxbin2prg_exe +WScript.Quit(nExitCode) diff --git a/FoxBin2Prg__Compile_in_English.vbs b/FoxBin2Prg__Compile_in_English.vbs new file mode 100644 index 0000000..1306797 --- /dev/null +++ b/FoxBin2Prg__Compile_in_English.vbs @@ -0,0 +1,22 @@ +'--------------------------------------------------------------------------------------------------- +' FoxBin2Prg__Compile_in_English.vbs - 10/08/2014 - Fernando D. Bozzo (fdbozzo@gmail.com) +'--------------------------------------------------------------------------------------------------- +' - Just execute on FoxBin2Prg main directory, and you get an EXE with texts translated +'--------------------------------------------------------------------------------------------------- +Const ForReading = 1 +Dim WSHShell, FileSystemObject +Dim oVFP9, nExitCode, cOrigFile, cDestFile +Dim nRet +Set WSHShell = WScript.CreateObject("WScript.Shell") +Set FileSystemObject = WScript.CreateObject("Scripting.FileSystemObject") +Set oVFP9 = CreateObject("VisualFoxPro.Application.9") +foxbin2prg_exe = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg.exe") +nExitCode = 0 +cOrigFile = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg_en.h") +cDestFile = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg.h") +cPath = FileSystemObject.GetParentFolderName( cOrigFile ) +nRet = FileSystemObject.CopyFile( cOrigFile, cDestFile, True ) +oVFP9.DoCmd( "SET DEFAULT TO '" & cPath & "'" ) +oVFP9.DoCmd( "BUILD EXE foxbin2prg.exe FROM foxbin2prg.pjx RECOMPILE" ) +WSHShell.run foxbin2prg_exe +WScript.Quit(nExitCode) diff --git a/FoxBin2Prg__kompilieren_auf_Deutsch.vbs b/FoxBin2Prg__kompilieren_auf_Deutsch.vbs new file mode 100644 index 0000000..e7a5ab1 --- /dev/null +++ b/FoxBin2Prg__kompilieren_auf_Deutsch.vbs @@ -0,0 +1,22 @@ +'--------------------------------------------------------------------------------------------------- +' FoxBin2Prg__kompilieren_auf_Deutsch.vbs - 10/08/2014 - Fernando D. Bozzo (fdbozzo@gmail.com) +'--------------------------------------------------------------------------------------------------- +' - Führen Sie einfach auf FoxBin2Prg Hauptverzeichnis, und Sie erhalten eine EXE-Datei mit Texten übersetzt bekommen +'--------------------------------------------------------------------------------------------------- +Const ForReading = 1 +Dim WSHShell, FileSystemObject +Dim oVFP9, nExitCode, cOrigFile, cDestFile +Dim nRet +Set WSHShell = WScript.CreateObject("WScript.Shell") +Set FileSystemObject = WScript.CreateObject("Scripting.FileSystemObject") +Set oVFP9 = CreateObject("VisualFoxPro.Application.9") +foxbin2prg_exe = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg.exe") +nExitCode = 0 +cOrigFile = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg_de.h") +cDestFile = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg.h") +cPath = FileSystemObject.GetParentFolderName( cOrigFile ) +nRet = FileSystemObject.CopyFile( cOrigFile, cDestFile, True ) +oVFP9.DoCmd( "SET DEFAULT TO '" & cPath & "'" ) +oVFP9.DoCmd( "BUILD EXE foxbin2prg.exe FROM foxbin2prg.pjx RECOMPILE" ) +WSHShell.run foxbin2prg_exe +WScript.Quit(nExitCode)