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 f394ce5..1cb896f 100644 Binary files a/foxbin2prg.exe and b/foxbin2prg.exe differ 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 4eb5c40..7330f17 100644 Binary files a/foxbin2prg.pjt and b/foxbin2prg.pjt differ diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx index f2ebf87..2ba66db 100644 Binary files a/foxbin2prg.pjx and b/foxbin2prg.pjx differ 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