Changeset: 59 Changeset: 59 Arreglo bug _memberdata largo
This commit is contained in:
@@ -154,7 +154,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_prg_a_bin__analizarAsignacion_TAG_Indic
|
|||||||
|
|
||||||
*-- TEST
|
*-- TEST
|
||||||
loObj.analizarAsignacion_TAG_Indicado( @lcPropName, @lcPropValue, @laProps, @lnProp_Count ;
|
loObj.analizarAsignacion_TAG_Indicado( @lcPropName, @lcPropValue, @laProps, @lnProp_Count ;
|
||||||
, @I, lcTag_I, lcTag_F, lnLen_lcTag_I, lnLen_lcTag_F, @lcMemo )
|
, @I, lcTag_I, lcTag_F, lnLen_lcTag_I, lnLen_lcTag_F )
|
||||||
|
|
||||||
THIS.Evaluate_results( loEx, lnCodError_Esperado ;
|
THIS.Evaluate_results( loEx, lnCodError_Esperado ;
|
||||||
, @lcPropName, @lcPropValue, @laProps, @lnProp_Count ;
|
, @lcPropName, @lcPropValue, @laProps, @lnProp_Count ;
|
||||||
@@ -221,7 +221,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_prg_a_bin__analizarAsignacion_TAG_Indic
|
|||||||
|
|
||||||
*-- TEST
|
*-- TEST
|
||||||
loObj.analizarAsignacion_TAG_Indicado( @lcPropName, @lcPropValue, @laProps, @lnProp_Count ;
|
loObj.analizarAsignacion_TAG_Indicado( @lcPropName, @lcPropValue, @laProps, @lnProp_Count ;
|
||||||
, @I, lcTag_I, lcTag_F, lnLen_lcTag_I, lnLen_lcTag_F, @lcMemo )
|
, @I, lcTag_I, lcTag_F, lnLen_lcTag_I, lnLen_lcTag_F )
|
||||||
|
|
||||||
THIS.Evaluate_results( loEx, lnCodError_Esperado ;
|
THIS.Evaluate_results( loEx, lnCodError_Esperado ;
|
||||||
, @lcPropName, @lcPropValue, @laProps, @lnProp_Count ;
|
, @lcPropName, @lcPropValue, @laProps, @lnProp_Count ;
|
||||||
@@ -288,7 +288,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_prg_a_bin__analizarAsignacion_TAG_Indic
|
|||||||
|
|
||||||
*-- TEST
|
*-- TEST
|
||||||
loObj.analizarAsignacion_TAG_Indicado( @lcPropName, @lcPropValue, @laProps, @lnProp_Count ;
|
loObj.analizarAsignacion_TAG_Indicado( @lcPropName, @lcPropValue, @laProps, @lnProp_Count ;
|
||||||
, @I, lcTag_I, lcTag_F, lnLen_lcTag_I, lnLen_lcTag_F, @lcMemo )
|
, @I, lcTag_I, lcTag_F, lnLen_lcTag_I, lnLen_lcTag_F )
|
||||||
|
|
||||||
THIS.Evaluate_results( loEx, lnCodError_Esperado ;
|
THIS.Evaluate_results( loEx, lnCodError_Esperado ;
|
||||||
, @lcPropName, @lcPropValue, @laProps, @lnProp_Count ;
|
, @lcPropName, @lcPropValue, @laProps, @lnProp_Count ;
|
||||||
|
|||||||
291
foxbin2prg.prg
291
foxbin2prg.prg
@@ -48,6 +48,7 @@
|
|||||||
* 03/12/2013 FDBOZZO v1.8 Arreglo bug "Name" (otra vez), sort encapsulado y reutilizado para versiones TEXTO y BIN por seguridad
|
* 03/12/2013 FDBOZZO v1.8 Arreglo bug "Name" (otra vez), sort encapsulado y reutilizado para versiones TEXTO y BIN por seguridad
|
||||||
* 06/12/2013 FDBOZZO v1.9 Arreglo bug p<>rdida de propiedades causado por una mejora anterior
|
* 06/12/2013 FDBOZZO v1.9 Arreglo bug p<>rdida de propiedades causado por una mejora anterior
|
||||||
* 06/12/2013 FDBOZZO v1.10 Arreglo del bug de mezcla de m<>todos de una clase con la siguiente
|
* 06/12/2013 FDBOZZO v1.10 Arreglo del bug de mezcla de m<>todos de una clase con la siguiente
|
||||||
|
* 07/12/2013 FDBOZZO v1.11 Arreglo del bug de _amembers detectado por Edgar K.con la clase BlowFish.vcx (http://www.tortugaproductiva.galeon.com/docs/blowfish/index.html)
|
||||||
*
|
*
|
||||||
*---------------------------------------------------------------------------------------------------
|
*---------------------------------------------------------------------------------------------------
|
||||||
* TESTEO Y REPORTE DE BUGS (AGRADECIMIENTOS)
|
* TESTEO Y REPORTE DE BUGS (AGRADECIMIENTOS)
|
||||||
@@ -56,7 +57,8 @@
|
|||||||
* 02/12/2013 Fidel Charny REPORTE BUG: Se pierden algunas propiedades y no muestra picture si "Name" no es la <20>ltima (arreglado en v.1.7)
|
* 02/12/2013 Fidel Charny REPORTE BUG: Se pierden algunas propiedades y no muestra picture si "Name" no es la <20>ltima (arreglado en v.1.7)
|
||||||
* 03/12/2013 Fidel Charny REPORTE BUG: Se siguen perdiendo algunas propiedades por implementaci<63>n defectuosa del arreglo anterior (arreglado en v.1.8)
|
* 03/12/2013 Fidel Charny REPORTE BUG: Se siguen perdiendo algunas propiedades por implementaci<63>n defectuosa del arreglo anterior (arreglado en v.1.8)
|
||||||
* 03/12/2013 Fidel Charny REPORTE BUG: Se siguen perdiendo algunas propiedades por implementaci<63>n defectuosa de una mejora anterior (arreglado en v.1.9)
|
* 03/12/2013 Fidel Charny REPORTE BUG: Se siguen perdiendo algunas propiedades por implementaci<63>n defectuosa de una mejora anterior (arreglado en v.1.9)
|
||||||
* 06/12/2013 Fidel Charny REPORTE BUG: Cuando hay m<>todos que tienen el mismo nombre, aparecen mezclados en objetos a los que no corresponden
|
* 06/12/2013 Fidel Charny REPORTE BUG: Cuando hay m<>todos que tienen el mismo nombre, aparecen mezclados en objetos a los que no corresponden (arreglado en v.1.10)
|
||||||
|
* 07/12/2013 Edgar Kummers REPORTE BUG: Cuando se parsea una clase con un _memberdata largo, se parsea mal y se corrompe el valor (arreglado en v.1.11)
|
||||||
*
|
*
|
||||||
*---------------------------------------------------------------------------------------------------
|
*---------------------------------------------------------------------------------------------------
|
||||||
* TRAMIENTOS ESPECIALES DE ASIGNACIONES DE PROPIEDADES:
|
* TRAMIENTOS ESPECIALES DE ASIGNACIONES DE PROPIEDADES:
|
||||||
@@ -187,7 +189,12 @@ TRY
|
|||||||
SET ESCAPE OFF
|
SET ESCAPE OFF
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
IF EMPTY(tc_InputFile)
|
DO CASE
|
||||||
|
CASE VERSION(5) < 900
|
||||||
|
lnResp = 1
|
||||||
|
MESSAGEBOX( 'FOXBIN2PRG es solo para Visual FoxPro 9.0!', 0+64+4096, 'FOXBIN2PRG: SINTAXIS INFO', 60000 )
|
||||||
|
|
||||||
|
CASE EMPTY(tc_InputFile)
|
||||||
lnResp = 1
|
lnResp = 1
|
||||||
MESSAGEBOX( 'FOXBIN2PRG <cFileSpec.Ext> [cType_NA cTextName_NA cGenText_NA cDontShowErrors cDebug]' + CR_LF + CR_LF ;
|
MESSAGEBOX( 'FOXBIN2PRG <cFileSpec.Ext> [cType_NA cTextName_NA cGenText_NA cDontShowErrors cDebug]' + CR_LF + CR_LF ;
|
||||||
+ 'Ejemplo para generar los TXT de todos los VCX de c:\desa\clases, sin mostrar ventana de error y generando LOG: ' + CR_LF ;
|
+ 'Ejemplo para generar los TXT de todos los VCX de c:\desa\clases, sin mostrar ventana de error y generando LOG: ' + CR_LF ;
|
||||||
@@ -195,7 +202,7 @@ TRY
|
|||||||
+ 'Ejemplo para generar los VCX de todos los TXT de c:\desa\clases, sin mostrar ventana de error y sin LOG: ' + CR_LF ;
|
+ 'Ejemplo para generar los VCX de todos los TXT de c:\desa\clases, sin mostrar ventana de error y sin LOG: ' + CR_LF ;
|
||||||
+ ' FOXBIN2PRG "c:\desa\clases\*.vc2" "0" "0" "0" "1" "0"' ;
|
+ ' FOXBIN2PRG "c:\desa\clases\*.vc2" "0" "0" "0" "1" "0"' ;
|
||||||
, 0+64+4096, 'FOXBIN2PRG: SINTAXIS INFO', 60000 )
|
, 0+64+4096, 'FOXBIN2PRG: SINTAXIS INFO', 60000 )
|
||||||
ELSE
|
OTHERWISE
|
||||||
lcSys16 = SYS(16)
|
lcSys16 = SYS(16)
|
||||||
lcPath = SET("Path")
|
lcPath = SET("Path")
|
||||||
*SET PATH TO (JUSTPATH(lcSys16))
|
*SET PATH TO (JUSTPATH(lcSys16))
|
||||||
@@ -285,7 +292,7 @@ TRY
|
|||||||
ENDIF
|
ENDIF
|
||||||
ENDCASE
|
ENDCASE
|
||||||
|
|
||||||
ENDIF
|
ENDCASE
|
||||||
|
|
||||||
CATCH TO loEx
|
CATCH TO loEx
|
||||||
IF llExisteConfig
|
IF llExisteConfig
|
||||||
@@ -352,7 +359,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
|
|||||||
l_PropSort_Enabled = .T. && Para Unit Testing se puede cambiar a .F. para buscar diferencias
|
l_PropSort_Enabled = .T. && Para Unit Testing se puede cambiar a .F. para buscar diferencias
|
||||||
lFileMode = .F.
|
lFileMode = .F.
|
||||||
nClassTimeStamp = ''
|
nClassTimeStamp = ''
|
||||||
n_FB2PRG_Version = 1.10
|
n_FB2PRG_Version = 1.11
|
||||||
o_Conversor = NULL
|
o_Conversor = NULL
|
||||||
c_VC2 = 'VC2'
|
c_VC2 = 'VC2'
|
||||||
c_SC2 = 'SC2'
|
c_SC2 = 'SC2'
|
||||||
@@ -586,6 +593,7 @@ DEFINE CLASS c_conversor_base AS SESSION
|
|||||||
LOCAL THIS AS c_conversor_base OF 'FOXBIN2PRG.PRG'
|
LOCAL THIS AS c_conversor_base OF 'FOXBIN2PRG.PRG'
|
||||||
#ENDIF
|
#ENDIF
|
||||||
_MEMBERDATA = [<VFPData>] ;
|
_MEMBERDATA = [<VFPData>] ;
|
||||||
|
+ [<memberdata name="analizarasignacion_tag_indicado" type="method" display="analizarAsignacion_TAG_Indicado"/>] ;
|
||||||
+ [<memberdata name="buscarobjetodelmetodopornombre" type="method" display="buscarObjetoDelMetodoPorNombre"/>] ;
|
+ [<memberdata name="buscarobjetodelmetodopornombre" type="method" display="buscarObjetoDelMetodoPorNombre"/>] ;
|
||||||
+ [<memberdata name="comprobarexpresionvalida" type="method" display="comprobarExpresionValida"/>] ;
|
+ [<memberdata name="comprobarexpresionvalida" type="method" display="comprobarExpresionValida"/>] ;
|
||||||
+ [<memberdata name="convertir" type="method" display="Convertir"/>] ;
|
+ [<memberdata name="convertir" type="method" display="Convertir"/>] ;
|
||||||
@@ -658,6 +666,90 @@ DEFINE CLASS c_conversor_base AS SESSION
|
|||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
|
|
||||||
|
*******************************************************************************************************************
|
||||||
|
PROCEDURE analizarAsignacion_TAG_Indicado
|
||||||
|
*-- DETALLES: Este m<>todo est<73> pensado para leer los tags FB2P_VALUE y MEMBERDATA, que tienen esta sintaxis:
|
||||||
|
*
|
||||||
|
* _memberdata = <VFPData>
|
||||||
|
* <memberdata name="mimetodo" display="miMetodo"/>
|
||||||
|
* </VFPData> && XML Metadata for customizable properties
|
||||||
|
*
|
||||||
|
* <fb2p_value>Este es un valor especial</fb2p_value>
|
||||||
|
*
|
||||||
|
*--------------------------------------------------------------------------------------------------------------
|
||||||
|
* tcPropName (!v IN ) Nombre de la propiedad
|
||||||
|
* tcValue (!v IN ) Valor (o inicio del valor) de la propiedad
|
||||||
|
* taProps (!@ IN ) El array con las l<>neas del c<>digo donde buscar
|
||||||
|
* tnProp_Count (!@ IN ) Cantidad de l<>neas de c<>digo
|
||||||
|
* I (!@ IN ) L<>nea actualmente evaluada
|
||||||
|
* tcTAG_I (!v IN ) TAG de inicio <tag>
|
||||||
|
* tcTAG_F (!v IN ) TAG de fin </tag>
|
||||||
|
* tnLEN_TAG_I (!v IN ) Longitud del tag de inicio
|
||||||
|
* tnLEN_TAG_F (!v IN ) Longitud del tag de fin
|
||||||
|
*--------------------------------------------------------------------------------------------------------------
|
||||||
|
LPARAMETERS tcPropName, tcValue, taProps, tnProp_Count, I, tcTAG_I, tcTAG_F, tnLEN_TAG_I, tnLEN_TAG_F
|
||||||
|
EXTERNAL ARRAY taProps
|
||||||
|
LOCAL llBloqueEncontrado, loEx AS EXCEPTION
|
||||||
|
|
||||||
|
TRY
|
||||||
|
IF LEFT( tcValue, tnLEN_TAG_I) == tcTAG_I
|
||||||
|
llBloqueEncontrado = .T.
|
||||||
|
LOCAL lcLine, lnArrayCols
|
||||||
|
|
||||||
|
*-- Propiedad especial
|
||||||
|
IF tcTAG_F $ tcValue && El fin de tag est<73> "inline"
|
||||||
|
THIS.desnormalizarValorPropiedad( @tcPropName, @tcValue, '' )
|
||||||
|
EXIT
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
tcValue = ''
|
||||||
|
lnArrayCols = ALEN(taProps,2)
|
||||||
|
|
||||||
|
FOR I = I + 1 TO tnProp_Count
|
||||||
|
IF lnArrayCols = 0
|
||||||
|
lcLine = LTRIM( taProps(I), 0, ' ', CHR(9) ) && Quito espacios y TABS de la izquierda
|
||||||
|
ELSE
|
||||||
|
lcLine = LTRIM( taProps(I,1), 0, ' ', CHR(9) ) && Quito espacios y TABS de la izquierda
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
DO CASE
|
||||||
|
CASE LEFT( lcLine, tnLEN_TAG_F ) == tcTAG_F
|
||||||
|
*-- <EndTag>
|
||||||
|
tcValue = tcTAG_I + SUBSTR( tcValue, 3 ) + tcTAG_F
|
||||||
|
THIS.desnormalizarValorPropiedad( @tcPropName, @tcValue, '' )
|
||||||
|
I = I + 1
|
||||||
|
EXIT
|
||||||
|
|
||||||
|
CASE tcTAG_F $ lcLine
|
||||||
|
*-- Data-Data-Data-<EndTag>
|
||||||
|
tcValue = tcTAG_I + SUBSTR( tcValue, 3 ) + LEFT( lcLine, AT( tcTAG_F, lcLine )-1 ) + tcTAG_F
|
||||||
|
THIS.desnormalizarValorPropiedad( @tcPropName, @tcValue, '' )
|
||||||
|
I = I + 1
|
||||||
|
EXIT
|
||||||
|
|
||||||
|
OTHERWISE
|
||||||
|
*-- Data
|
||||||
|
tcValue = tcValue + CR_LF + lcLine
|
||||||
|
ENDCASE
|
||||||
|
ENDFOR
|
||||||
|
|
||||||
|
I = I - 1
|
||||||
|
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
CATCH TO loEx
|
||||||
|
IF THIS.l_Debug AND _VFP.STARTMODE = 0
|
||||||
|
SET STEP ON
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
THROW
|
||||||
|
|
||||||
|
ENDTRY
|
||||||
|
|
||||||
|
RETURN llBloqueEncontrado
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
|
||||||
*******************************************************************************************************************
|
*******************************************************************************************************************
|
||||||
PROCEDURE buscarObjetoDelMetodoPorNombre
|
PROCEDURE buscarObjetoDelMetodoPorNombre
|
||||||
LPARAMETERS tcNombreObjeto, toClase
|
LPARAMETERS tcNombreObjeto, toClase
|
||||||
@@ -1058,14 +1150,42 @@ DEFINE CLASS c_conversor_base AS SESSION
|
|||||||
|
|
||||||
*******************************************************************************************************************
|
*******************************************************************************************************************
|
||||||
PROCEDURE get_SeparatedPropAndValue
|
PROCEDURE get_SeparatedPropAndValue
|
||||||
LPARAMETERS tcAsignacion, tcProp, tcValue
|
*-- Devuelve el valor separado de la propiedad.
|
||||||
|
*-- Si se indican m<>s de 3 par<61>metros, eval<61>a el valor completo a trav<61>s de las l<>neas de c<>digo
|
||||||
|
*--------------------------------------------------------------------------------------------------------------
|
||||||
|
* taCodeLines (!@ IN ) El array con las l<>neas del c<>digo donde buscar
|
||||||
|
* tnCodeLines (!@ IN ) Cantidad de l<>neas de c<>digo
|
||||||
|
* taBloquesExclusion (!@ IN ) Array con las posiciones de inicio/fin de los bloques de exclusion
|
||||||
|
* tnBloquesExclusion (!@ IN ) Cantidad de bloques de exclusi<73>n
|
||||||
|
* toModulo (?@ OUT) Objeto con toda la informaci<63>n del m<>dulo analizado
|
||||||
|
*--------------------------------------------------------------------------------------------------------------
|
||||||
|
LPARAMETERS tcAsignacion, tcPropName, tcValue, toClase, taCodeLines, tnCodeLines, I
|
||||||
LOCAL ln_AT_Cmt
|
LOCAL ln_AT_Cmt
|
||||||
STORE '' TO tcProp, tcValue
|
STORE '' TO tcPropName, tcValue
|
||||||
|
|
||||||
|
*-- EVALUAR UNA ASIGNACI<43>N ESPEC<45>FICA INLINE
|
||||||
IF '=' $ tcAsignacion
|
IF '=' $ tcAsignacion
|
||||||
ln_AT_Cmt = AT( '=', tcAsignacion)
|
ln_AT_Cmt = AT( '=', tcAsignacion)
|
||||||
tcProp = ALLTRIM( LEFT( tcAsignacion, ln_AT_Cmt - 2 ), 0, ' ', CHR(9) ) && Quito espacios y TABS
|
tcPropName = ALLTRIM( LEFT( tcAsignacion, ln_AT_Cmt - 2 ), 0, ' ', CHR(9) ) && Quito espacios y TABS
|
||||||
tcValue = ALLTRIM( SUBSTR( tcAsignacion, ln_AT_Cmt + 2 ) )
|
tcValue = ALLTRIM( SUBSTR( tcAsignacion, ln_AT_Cmt + 2 ) )
|
||||||
|
|
||||||
|
IF PCOUNT() > 3
|
||||||
|
*-- EVALUAR UNA ASIGNACI<43>N QUE PUEDE SER MULTIL<49>NEA (memberdata, fb2p_value, etc)
|
||||||
|
DO CASE
|
||||||
|
CASE THIS.analizarAsignacion_TAG_Indicado( @tcPropName, @tcValue, @taCodeLines, tnCodeLines, @I ;
|
||||||
|
, C_FB2P_VALUE_I, C_FB2P_VALUE_F, C_LEN_FB2P_VALUE_I, C_LEN_FB2P_VALUE_F )
|
||||||
|
*-- FB2P_VALUE
|
||||||
|
|
||||||
|
CASE THIS.analizarAsignacion_TAG_Indicado( @tcPropName, @tcValue, @taCodeLines, tnCodeLines, @I ;
|
||||||
|
, C_MEMBERDATA_I, C_MEMBERDATA_F, C_LEN_MEMBERDATA_I, C_LEN_MEMBERDATA_F )
|
||||||
|
*-- MEMBERDATA
|
||||||
|
|
||||||
|
OTHERWISE
|
||||||
|
*-- Propiedad normal
|
||||||
|
THIS.desnormalizarValorPropiedad( @tcPropName, @tcValue, '' )
|
||||||
|
|
||||||
|
ENDCASE
|
||||||
|
ENDIF
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
@@ -1221,8 +1341,9 @@ DEFINE CLASS c_conversor_base AS SESSION
|
|||||||
EXTERNAL ARRAY taPropsAndValues
|
EXTERNAL ARRAY taPropsAndValues
|
||||||
|
|
||||||
TRY
|
TRY
|
||||||
LOCAL I, X, laPropsAndValues(1,2)
|
LOCAL I, X, lnArrayCols, laPropsAndValues(1,2)
|
||||||
DIMENSION laPropsAndValues( tnPropsAndValues_Count, 2 )
|
lnArrayCols = ALEN( taPropsAndValues, 2 )
|
||||||
|
DIMENSION laPropsAndValues( tnPropsAndValues_Count, lnArrayCols )
|
||||||
ACOPY( taPropsAndValues, laPropsAndValues )
|
ACOPY( taPropsAndValues, laPropsAndValues )
|
||||||
|
|
||||||
IF m.tnSortType >= 1
|
IF m.tnSortType >= 1
|
||||||
@@ -1248,11 +1369,13 @@ DEFINE CLASS c_conversor_base AS SESSION
|
|||||||
ASORT( laPropsAndValues, 1, -1, 0, 1)
|
ASORT( laPropsAndValues, 1, -1, 0, 1)
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
*-- Quitar el agregado
|
|
||||||
|
|
||||||
FOR I = 1 TO m.tnPropsAndValues_Count
|
FOR I = 1 TO m.tnPropsAndValues_Count
|
||||||
taPropsAndValues(I,1) = SUBSTR( laPropsAndValues(I,1), 2 )
|
taPropsAndValues(I,1) = SUBSTR( laPropsAndValues(I,1), 2 ) && Quitar el car<61>cter agregado
|
||||||
taPropsAndValues(I,2) = laPropsAndValues(I,2)
|
taPropsAndValues(I,2) = laPropsAndValues(I,2)
|
||||||
|
IF lnArrayCols >= 3
|
||||||
|
taPropsAndValues(I,3) = laPropsAndValues(I,3)
|
||||||
|
ENDIF
|
||||||
|
|
||||||
DO CASE
|
DO CASE
|
||||||
CASE m.tnSortType <> 2
|
CASE m.tnSortType <> 2
|
||||||
@@ -1279,6 +1402,9 @@ DEFINE CLASS c_conversor_base AS SESSION
|
|||||||
X = X + 1
|
X = X + 1
|
||||||
taPropsAndValues(X,1) = laPropsAndValues(I,1)
|
taPropsAndValues(X,1) = laPropsAndValues(I,1)
|
||||||
taPropsAndValues(X,2) = laPropsAndValues(I,2)
|
taPropsAndValues(X,2) = laPropsAndValues(I,2)
|
||||||
|
IF lnArrayCols >= 3
|
||||||
|
taPropsAndValues(X,3) = laPropsAndValues(I,3)
|
||||||
|
ENDIF
|
||||||
ENDIF
|
ENDIF
|
||||||
ENDFOR
|
ENDFOR
|
||||||
|
|
||||||
@@ -1292,6 +1418,9 @@ DEFINE CLASS c_conversor_base AS SESSION
|
|||||||
X = X + 1
|
X = X + 1
|
||||||
taPropsAndValues(X,1) = laPropsAndValues(I,1)
|
taPropsAndValues(X,1) = laPropsAndValues(I,1)
|
||||||
taPropsAndValues(X,2) = laPropsAndValues(I,2)
|
taPropsAndValues(X,2) = laPropsAndValues(I,2)
|
||||||
|
IF lnArrayCols >= 3
|
||||||
|
taPropsAndValues(X,3) = laPropsAndValues(I,3)
|
||||||
|
ENDIF
|
||||||
ENDIF
|
ENDIF
|
||||||
ENDFOR
|
ENDFOR
|
||||||
ENDIF
|
ENDIF
|
||||||
@@ -1347,7 +1476,6 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
|
|||||||
LOCAL THIS AS c_conversor_prg_a_bin OF 'FOXBIN2PRG.PRG'
|
LOCAL THIS AS c_conversor_prg_a_bin OF 'FOXBIN2PRG.PRG'
|
||||||
#ENDIF
|
#ENDIF
|
||||||
_MEMBERDATA = [<VFPData>] ;
|
_MEMBERDATA = [<VFPData>] ;
|
||||||
+ [<memberdata name="analizarasignacion_tag_indicado" type="method" display="analizarAsignacion_TAG_Indicado"/>] ;
|
|
||||||
+ [<memberdata name="analizarbloque_add_object" type="method" display="analizarBloque_ADD_OBJECT"/>] ;
|
+ [<memberdata name="analizarbloque_add_object" type="method" display="analizarBloque_ADD_OBJECT"/>] ;
|
||||||
+ [<memberdata name="analizarbloque_defined_pam" type="method" display="analizarBloque_DEFINED_PAM"/>] ;
|
+ [<memberdata name="analizarbloque_defined_pam" type="method" display="analizarBloque_DEFINED_PAM"/>] ;
|
||||||
+ [<memberdata name="analizarbloque_define_class" type="method" display="analizarBloque_DEFINE_CLASS"/>] ;
|
+ [<memberdata name="analizarbloque_define_class" type="method" display="analizarBloque_DEFINE_CLASS"/>] ;
|
||||||
@@ -1912,55 +2040,19 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
|
|||||||
lcMemo = ''
|
lcMemo = ''
|
||||||
|
|
||||||
IF toClase._Prop_Count > 0
|
IF toClase._Prop_Count > 0
|
||||||
DIMENSION laProps( toClase._Prop_Count, 3 )
|
DIMENSION laPropsAndValues( toClase._Prop_Count, 3 )
|
||||||
ACOPY( toClase._Props, laProps )
|
ACOPY( toClase._Props, laPropsAndValues )
|
||||||
lnPropsAndValues_Count = 0
|
lnPropsAndValues_Count = toClase._Prop_Count
|
||||||
|
|
||||||
WITH THIS
|
*-- REORDENO LAS PROPIEDADES
|
||||||
*-- OBTENGO LAS PROPIEDADES Y SUS VALORES
|
THIS.sortPropsAndValues( @laPropsAndValues, lnPropsAndValues_Count, 2 )
|
||||||
FOR I = 1 TO toClase._Prop_Count
|
|
||||||
*.get_SeparatedPropAndValue( toClase._Props(I,1), @lcPropName, @lcValue )
|
|
||||||
lcPropName = toClase._Props(I,1)
|
|
||||||
lcValue = toClase._Props(I,2)
|
|
||||||
|
|
||||||
DO CASE
|
|
||||||
CASE EMPTY(lcPropName)
|
|
||||||
LOOP
|
|
||||||
|
|
||||||
CASE THIS.analizarAsignacion_TAG_Indicado( @lcPropName, @lcValue, @laProps, toClase._Prop_Count, @I ;
|
|
||||||
, C_FB2P_VALUE_I, C_FB2P_VALUE_F, C_LEN_FB2P_VALUE_I, C_LEN_FB2P_VALUE_F, @lcAsignacion )
|
|
||||||
*-- FB2P_VALUE
|
|
||||||
lnPropsAndValues_Count = lnPropsAndValues_Count + 1
|
|
||||||
|
|
||||||
CASE THIS.analizarAsignacion_TAG_Indicado( @lcPropName, @lcValue, @laProps, toClase._Prop_Count, @I ;
|
|
||||||
, C_MEMBERDATA_I, C_MEMBERDATA_F, C_LEN_MEMBERDATA_I, C_LEN_MEMBERDATA_F, @lcAsignacion )
|
|
||||||
*-- MEMBERDATA
|
|
||||||
lnPropsAndValues_Count = lnPropsAndValues_Count + 1
|
|
||||||
|
|
||||||
OTHERWISE
|
|
||||||
*-- Propiedad normal
|
|
||||||
THIS.desnormalizarValorPropiedad( @lcPropName, @lcValue, '' )
|
|
||||||
lnPropsAndValues_Count = lnPropsAndValues_Count + 1
|
|
||||||
|
|
||||||
ENDCASE
|
|
||||||
|
|
||||||
DIMENSION laPropsAndValues(lnPropsAndValues_Count,2)
|
|
||||||
laPropsAndValues(lnPropsAndValues_Count,1) = lcPropName
|
|
||||||
laPropsAndValues(lnPropsAndValues_Count,2) = lcValue
|
|
||||||
|
|
||||||
ENDFOR
|
|
||||||
|
|
||||||
|
|
||||||
*-- REORDENO LAS PROPIEDADES
|
*-- ARMO EL MEMO A DEVOLVER
|
||||||
THIS.sortPropsAndValues( @laPropsAndValues, lnPropsAndValues_Count, 2 )
|
FOR I = 1 TO lnPropsAndValues_Count
|
||||||
|
lcMemo = lcMemo + laPropsAndValues(I,1) + ' = ' + laPropsAndValues(I,2) + CR_LF
|
||||||
|
ENDFOR
|
||||||
|
|
||||||
|
|
||||||
*-- ARMO EL MEMO A DEVOLVER
|
|
||||||
FOR I = 1 TO lnPropsAndValues_Count
|
|
||||||
lcMemo = lcMemo + laPropsAndValues(I,1) + ' = ' + laPropsAndValues(I,2) + CR_LF
|
|
||||||
ENDFOR
|
|
||||||
|
|
||||||
ENDWITH && THIS
|
|
||||||
ENDIF && laProps > 0
|
ENDIF && laProps > 0
|
||||||
|
|
||||||
CATCH TO loEx
|
CATCH TO loEx
|
||||||
@@ -1993,14 +2085,6 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
|
|||||||
DIMENSION laPropsAndValues( toObjeto._Prop_Count, 2 )
|
DIMENSION laPropsAndValues( toObjeto._Prop_Count, 2 )
|
||||||
ACOPY( toObjeto._Props, laPropsAndValues )
|
ACOPY( toObjeto._Props, laPropsAndValues )
|
||||||
|
|
||||||
*WITH THIS
|
|
||||||
* FOR I = 1 TO toObjeto._Prop_Count
|
|
||||||
* .get_SeparatedPropAndValue( toObjeto._Props(I,1), @lcPropName, @lcValue )
|
|
||||||
* laPropsAndValues(I,1) = lcPropName
|
|
||||||
* laPropsAndValues(I,2) = lcValue
|
|
||||||
* ENDFOR
|
|
||||||
*ENDWITH && THIS
|
|
||||||
|
|
||||||
|
|
||||||
*-- REORDENO LAS PROPIEDADES
|
*-- REORDENO LAS PROPIEDADES
|
||||||
THIS.sortPropsAndValues( @laPropsAndValues, toObjeto._Prop_Count, 2 )
|
THIS.sortPropsAndValues( @laPropsAndValues, toObjeto._Prop_Count, 2 )
|
||||||
@@ -2356,68 +2440,6 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
|
|||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
|
|
||||||
*******************************************************************************************************************
|
|
||||||
PROCEDURE analizarAsignacion_TAG_Indicado
|
|
||||||
*-- DETALLES: Este m<>todo est<73> pensado para leer los tags FB2P_VALUE y MEMBERDATA, que tienen esta sintaxis:
|
|
||||||
*
|
|
||||||
* _memberdata = <VFPData>
|
|
||||||
* <memberdata name="mimetodo" display="miMetodo"/>
|
|
||||||
* </VFPData> && XML Metadata for customizable properties
|
|
||||||
*
|
|
||||||
* <fb2p_value>Este es un valor especial</fb2p_value>
|
|
||||||
*
|
|
||||||
LPARAMETERS tcPropName, tcValue, taProps, tnProp_Count, I, tcTAG_I, tcTAG_F, tnLEN_TAG_I, tnLEN_TAG_F, tcMemo
|
|
||||||
EXTERNAL ARRAY taProps
|
|
||||||
LOCAL llBloqueEncontrado, loEx AS EXCEPTION
|
|
||||||
|
|
||||||
TRY
|
|
||||||
IF LEFT( tcValue, tnLEN_TAG_I) == tcTAG_I
|
|
||||||
llBloqueEncontrado = .T.
|
|
||||||
LOCAL lcLine
|
|
||||||
|
|
||||||
*-- Propiedad especial
|
|
||||||
IF tcTAG_F $ tcValue && El fin de tag est<73> "inline"
|
|
||||||
THIS.desnormalizarValorPropiedad( @tcPropName, @tcValue, '' )
|
|
||||||
EXIT
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
tcValue = ''
|
|
||||||
|
|
||||||
FOR I = I + 1 TO tnProp_Count
|
|
||||||
lcLine = LTRIM( taProps(I,1), 0, ' ', CHR(9) ) && Quito espacios y TABS de la izquierda
|
|
||||||
|
|
||||||
DO CASE
|
|
||||||
CASE LEFT( lcLine, tnLEN_TAG_F ) == tcTAG_F
|
|
||||||
tcValue = tcTAG_I + SUBSTR( tcValue, 3 ) + tcTAG_F
|
|
||||||
THIS.desnormalizarValorPropiedad( @tcPropName, @tcValue, '' )
|
|
||||||
I = I + 1
|
|
||||||
EXIT
|
|
||||||
|
|
||||||
*CASE .lineIsOnlyCommentAndNoMetadata( @tcLine )
|
|
||||||
* LOOP && Saltear comentarios
|
|
||||||
|
|
||||||
OTHERWISE
|
|
||||||
tcValue = tcValue + CR_LF + lcLine
|
|
||||||
ENDCASE
|
|
||||||
ENDFOR
|
|
||||||
|
|
||||||
I = I - 1
|
|
||||||
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
CATCH TO loEx
|
|
||||||
IF THIS.l_Debug AND _VFP.STARTMODE = 0
|
|
||||||
SET STEP ON
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
THROW
|
|
||||||
|
|
||||||
ENDTRY
|
|
||||||
|
|
||||||
RETURN llBloqueEncontrado
|
|
||||||
ENDPROC
|
|
||||||
|
|
||||||
|
|
||||||
*******************************************************************************************************************
|
*******************************************************************************************************************
|
||||||
PROCEDURE analizarLineasDeProcedure
|
PROCEDURE analizarLineasDeProcedure
|
||||||
LPARAMETERS toClase, toObjeto, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto, tc_Comentario ;
|
LPARAMETERS toClase, toObjeto, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto, tc_Comentario ;
|
||||||
@@ -2562,11 +2584,11 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
|
|||||||
EXIT
|
EXIT
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
IF RIGHT(tcLine, 3) == ', ;'
|
IF RIGHT(tcLine, 3) == ', ;' && VALOR INTERMEDIO CON ", ;"
|
||||||
*toObjeto.add_Property( .desnormalizarAsignacion( LEFT(tcLine, LEN(tcLine) - 3) ) )
|
*toObjeto.add_Property( .desnormalizarAsignacion( LEFT(tcLine, LEN(tcLine) - 3) ) )
|
||||||
.get_SeparatedPropAndValue( LEFT(tcLine, LEN(tcLine) - 3), @lcProp, @lcValue )
|
.get_SeparatedPropAndValue( LEFT(tcLine, LEN(tcLine) - 3), @lcProp, @lcValue )
|
||||||
toObjeto.add_Property( @lcProp, @lcValue )
|
toObjeto.add_Property( @lcProp, @lcValue )
|
||||||
ELSE
|
ELSE && VALOR FINAL SIN ", ;" (JUSTO ANTES DEL <END OBJECT>)
|
||||||
*toObjeto.add_Property( .desnormalizarAsignacion( RTRIM(tcLine) ) )
|
*toObjeto.add_Property( .desnormalizarAsignacion( RTRIM(tcLine) ) )
|
||||||
.get_SeparatedPropAndValue( RTRIM(tcLine), @lcProp, @lcValue )
|
.get_SeparatedPropAndValue( RTRIM(tcLine), @lcProp, @lcValue )
|
||||||
toObjeto.add_Property( @lcProp, @lcValue )
|
toObjeto.add_Property( @lcProp, @lcValue )
|
||||||
@@ -2763,9 +2785,14 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
|
|||||||
EXIT
|
EXIT
|
||||||
|
|
||||||
|
|
||||||
CASE NOT llCLASS_PROPERTY_Completed AND EMPTY( toClase._Fin_Cab ) && Propiedades del DEFINE CLASS
|
CASE NOT llCLASS_PROPERTY_Completed AND EMPTY( toClase._Fin_Cab )
|
||||||
|
*-- Propiedades de la CLASE
|
||||||
|
*--
|
||||||
|
*-- NOTA: Las propiedades se agregan tal cual, incluso aunque est<73>n separadas en
|
||||||
|
*-- varias l<>neas (memberdata y fb2p_value), ya que luego se ensamblan en classProps2Memo().
|
||||||
|
*
|
||||||
*toClase.add_Property( THIS.desnormalizarAsignacion( RTRIM(tcLine) ), RTRIM(tc_Comentario) )
|
*toClase.add_Property( THIS.desnormalizarAsignacion( RTRIM(tcLine) ), RTRIM(tc_Comentario) )
|
||||||
.get_SeparatedPropAndValue( RTRIM(tcLine), @lcProp, @lcValue )
|
.get_SeparatedPropAndValue( RTRIM(tcLine), @lcProp, @lcValue, @toClase, @taCodeLines, tnCodeLines, @I )
|
||||||
toClase.add_Property( @lcProp, @lcValue, RTRIM(tc_Comentario) )
|
toClase.add_Property( @lcProp, @lcValue, RTRIM(tc_Comentario) )
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user