Changeset: 164 v1.19.11

- Soporte de #IF #ENDIF anidados (se usa para saber qué código no evaluar en busca de los identificadores de PROCEDURE)
This commit is contained in:
fernando
2014-02-11 21:10:30 +01:00
parent 484cd3dc2e
commit faf06b5967
3 changed files with 48 additions and 30 deletions

View File

@@ -107,7 +107,6 @@ DEFINE CLASS ft__foxbin2prg__c_conversor_prg_a_dbf AS FxuTestCase OF FxuTestCase
lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' )
lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' )
lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) )
loCnv.DBF_Conversion_Support = 2
oFXU_LIB.copiarArchivosParaTest( lc_File )
@@ -177,7 +176,6 @@ DEFINE CLASS ft__foxbin2prg__c_conversor_prg_a_dbf AS FxuTestCase OF FxuTestCase
lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' )
lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' )
lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) )
loCnv.DBF_Conversion_Support = 2
oFXU_LIB.copiarArchivosParaTest( lc_File )
@@ -248,7 +246,6 @@ DEFINE CLASS ft__foxbin2prg__c_conversor_prg_a_dbf AS FxuTestCase OF FxuTestCase
lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' )
lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' )
lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) )
loCnv.DBF_Conversion_Support = 2
oFXU_LIB.copiarArchivosParaTest( FORCEEXT(lc_File,'*') )
@@ -319,7 +316,6 @@ DEFINE CLASS ft__foxbin2prg__c_conversor_prg_a_dbf AS FxuTestCase OF FxuTestCase
lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' )
lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' )
lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) )
loCnv.DBF_Conversion_Support = 2
oFXU_LIB.copiarArchivosParaTest( FORCEEXT(lc_File,'*') )

View File

@@ -291,8 +291,6 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg
lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' )
lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' )
lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) )
loCnv.DBF_Conversion_Support = 2
loCnv.l_UseTimestamps = .T.
oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) )
@@ -367,8 +365,6 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg
lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' )
lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' )
lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) )
loCnv.DBF_Conversion_Support = 2
loCnv.l_UseTimestamps = .T.
oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) )

View File

@@ -2785,28 +2785,47 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
EXTERNAL ARRAY ta_ID_Bloques, taBloquesExclusion
TRY
LOCAL lnBloques, I, X, lnPrimerID, lnLen_IDFinBQ
LOCAL lnBloques, I, X, lnPrimerID, lnLen_IDFinBQ, lnID_Bloques_Count, lcWord
DIMENSION taBloquesExclusion(1,2)
STORE 0 TO tnBloquesExclusion, lnPrimerID, I, X, lnLen_IDFinBQ
IF tnCodeLines > 1
IF EMPTY(ta_ID_Bloques)
DIMENSION ta_ID_Bloques(2,2)
ta_ID_Bloques(1,1) = '#IF .F.'
ta_ID_Bloques(1,1) = '#IF'
ta_ID_Bloques(1,2) = '#ENDI'
ta_ID_Bloques(2,1) = C_TEXT
ta_ID_Bloques(2,2) = C_ENDTEXT
ta_ID_Bloques(2,1) = 'TEXT'
ta_ID_Bloques(2,2) = 'ENDT'
lnID_Bloques_Count = ALEN( ta_ID_Bloques, 1 )
ENDIF
*-- B<>squeda del ID de inicio de bloque
FOR I = 1 TO tnCodeLines
lcLine = LTRIM( STRTRAN( STRTRAN( CHRTRAN( taCodeLines(I), CHR(9), ' ' ), ' ', ' ' ), ' ', ' ' ) ) && Reduzco los espacios. Ej: '#IF .F. && cmt' ==> '#IF .F.&&cmt'
* Reduzco los espacios. Ej: '#IF .F. && cmt' ==> '#IF .F.&&cmt'
lcLine = LTRIM( STRTRAN( STRTRAN( CHRTRAN( taCodeLines(I), CHR(9), ' ' ), ' ', ' ' ), ' ', ' ' ) )
IF THIS.lineIsOnlyCommentAndNoMetadata( @lcLine )
LOOP
ENDIF
lnPrimerID = ASCAN( ta_ID_Bloques, lcLine, 1, 0, 1, 1+8 )
lnPrimerID = 0
FOR X = 1 TO lnID_Bloques_Count
IF UPPER( LEFT( lcLine, LEN(ta_ID_Bloques(X,1)) ) ) == ta_ID_Bloques(X,1)
*-- Evaluar casos especiales
lcWord = UPPER( ALLTRIM(GETWORDNUM(lcLine,1) ) )
DO CASE
CASE ta_ID_Bloques(X,1) == 'TEXT' AND NOT lcWord == 'TEXT'
LOOP
CASE ta_ID_Bloques(X,2) == 'ENDT' AND NOT lcWord == LEFT( 'ENDTEXT', LEN(lcWord) )
LOOP
ENDCASE
lnPrimerID = X
EXIT
ENDIF
ENDFOR
IF lnPrimerID > 0 && Se ha identificado un ID de bloque excluyente
tnBloquesExclusion = tnBloquesExclusion + 1
@@ -2816,13 +2835,20 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
* B<>squeda del ID de fin de bloque
FOR I = I + 1 TO tnCodeLines
lcLine = LTRIM( STRTRAN( STRTRAN( CHRTRAN( taCodeLines(I), CHR(9), ' ' ), ' ', ' ' ), ' ', ' ' ) ) && Reduzco los espacios. Ej: '#IF .F. && cmt' ==> '#IF .F.&&cmt'
* Reduzco los espacios. Ej: '#IF .F. && cmt' ==> '#IF .F.&&cmt'
lcLine = LTRIM( STRTRAN( STRTRAN( CHRTRAN( taCodeLines(I), CHR(9), ' ' ), ' ', ' ' ), ' ', ' ' ) )
IF THIS.lineIsOnlyCommentAndNoMetadata( @lcLine )
LOOP
ENDIF
IF LEFT( lcLine, lnLen_IDFinBQ ) == ta_ID_Bloques(lnPrimerID,2) && Fin de bloque encontrado (#ENDI, ENDTEXT, etc)
lcWord = UPPER( ALLTRIM(GETWORDNUM(lcLine,1) ) )
IF LEFT( UPPER(lcLine), lnLen_IDFinBQ ) == ta_ID_Bloques(lnPrimerID,2) && Fin de bloque encontrado (#ENDI, ENDTEXT, etc)
*-- Evaluar casos especiales
IF ta_ID_Bloques(lnPrimerID,2) == 'ENDT' AND NOT lcWord == LEFT( 'ENDTEXT', LEN(lcWord) )
LOOP
ENDIF
taBloquesExclusion(tnBloquesExclusion,2) = I
EXIT
ENDIF
@@ -3882,7 +3908,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
IF lnPos2 > 0
*-- Con comentarios
lcPAM_Name = RTRIM( SUBSTR( tcLine, lnPos+1, lnPos2 - lnPos - 1 ), 0, ' ', CHR(9) )
lcPAM_Name = LOWER( RTRIM( SUBSTR( tcLine, lnPos+1, lnPos2 - lnPos - 1 ), 0, ' ', CHR(9) ) )
lcItem = lcPAM_Name + ' ' + SUBSTR( tcLine, lnPos2 + 3 ) + CR_LF
*-- Separo propiedades y m<>todos
@@ -3893,7 +3919,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
ENDIF
ELSE
*-- Sin comentarios
lcPAM_Name = RTRIM( SUBSTR( tcLine, lnPos+1 ), 0, ' ', CHR(9) )
lcPAM_Name = LOWER( RTRIM( SUBSTR( tcLine, lnPos+1 ), 0, ' ', CHR(9) ) )
lcItem = lcPAM_Name + IIF(ISALPHA(lcPAM_Name), '', ' ') + CR_LF
*-- Separo propiedades y m<>todos
@@ -3959,7 +3985,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
ELSE
toClase._Class = ALLTRIM( CHRTRAN( STREXTRACT( tcLine + ' OF ', ' AS ', ' OF ', 1, 1 ), ["'], [] ) )
ENDIF
toClase._ClassLoc = ALLTRIM( CHRTRAN( STREXTRACT( tcLine + ' OLEPUBLIC', ' OF ', ' OLEPUBLIC', 1, 1 ), ["'], [] ) )
toClase._ClassLoc = LOWER( ALLTRIM( CHRTRAN( STREXTRACT( tcLine + ' OLEPUBLIC', ' OF ', ' OLEPUBLIC', 1, 1 ), ["'], [] ) ) )
toClase._OlePublic = ' OLEPUBLIC' $ UPPER(tcLine)
toClase._Comentario = tc_Comentario
toClase._Inicio = I
@@ -4124,7 +4150,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
IF LEFT(tcLine, 7) == 'HIDDEN '
llBloqueEncontrado = .T.
toClase._HiddenProps = ALLTRIM( SUBSTR( tcLine, 8 ) )
toClase._HiddenProps = LOWER( ALLTRIM( SUBSTR( tcLine, 8 ) ) )
ENDIF
RETURN llBloqueEncontrado
@@ -4144,9 +4170,9 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
IF LEFT(tcLine, 9) == '#INCLUDE '
llBloqueEncontrado = .T.
IF THIS.c_Type = 'SCX'
toModulo._includeFile = ALLTRIM( CHRTRAN( SUBSTR( tcLine, 10 ), ["'], [] ) )
toModulo._includeFile = LOWER( ALLTRIM( CHRTRAN( SUBSTR( tcLine, 10 ), ["'], [] ) ) )
ELSE
toClase._includeFile = ALLTRIM( CHRTRAN( SUBSTR( tcLine, 10 ), ["'], [] ) )
toClase._includeFile = LOWER( ALLTRIM( CHRTRAN( SUBSTR( tcLine, 10 ), ["'], [] ) ) )
ENDIF
ENDIF
@@ -4296,7 +4322,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
IF LEFT(tcLine, 10) == 'PROTECTED '
llBloqueEncontrado = .T.
toClase._ProtectedProps = ALLTRIM( SUBSTR( tcLine, 11 ) )
toClase._ProtectedProps = LOWER( ALLTRIM( SUBSTR( tcLine, 11 ) ) )
ENDIF
RETURN llBloqueEncontrado
@@ -7494,8 +7520,8 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
IF tnMethodCount > 0 THEN
FOR I = 1 TO tnMethodCount
lcMethod = CHRTRAN( taMethods(I,1), '^', '' )
lnProtectedItem = ASCAN( taProtected, taMethods(I,1), 1, 0, 0, 0)
lnCommentRow = ASCAN( taPropsAndComments, '*' + lcMethod, 1, 0, 1, 8)
lnProtectedItem = ASCAN( taProtected, taMethods(I,1), 1, 0, 0, 1)
lnCommentRow = ASCAN( taPropsAndComments, '*' + lcMethod, 1, 0, 1, 1+8)
DO CASE
CASE lnProtectedItem = 0
@@ -7581,17 +7607,17 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
LOOP
ENDIF
lnProtectedItem = ASCAN(taProtected, taPropsAndValues(I,1), 1, 0, 0, 0)
lnProtectedItem = ASCAN(taProtected, taPropsAndValues(I,1), 1, 0, 0, 1)
DO CASE
CASE lnProtectedItem = 0
*-- Propiedad com<6F>n
CASE taProtected(lnProtectedItem) == taPropsAndValues(I,1)
CASE LOWER( taProtected(lnProtectedItem) ) == LOWER( taPropsAndValues(I,1) )
*-- Propiedad protegida
lcProtectedProp = lcProtectedProp + ',' + taPropsAndValues(I,1)
CASE taProtected(lnProtectedItem) == taPropsAndValues(I,1) + '^'
CASE LOWER( taProtected(lnProtectedItem) ) == LOWER( taPropsAndValues(I,1) + '^' )
*-- Propiedad oculta
lcHiddenProp = lcHiddenProp + ',' + taPropsAndValues(I,1)
@@ -7610,7 +7636,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
<<>> <<taPropsAndValues(I,1)>> = <<taPropsAndValues(I,2)>>
ENDTEXT
lnComment = ASCAN( taPropsAndComments, taPropsAndValues(I,1), 1, 0, 1, 8)
lnComment = ASCAN( taPropsAndComments, taPropsAndValues(I,1), 1, 0, 1, 1+8)
IF lnComment > 0 AND NOT EMPTY(taPropsAndComments(lnComment,2))
TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2
@@ -7696,7 +7722,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
LOCAL lcOF_Classlib, llOleObject
lcOF_Classlib = ''
llOleObject = ( ASCAN( ta_NombresObjsOle, toRegClass.OBJNAME, 1, 0, 1, 8) > 0 )
llOleObject = ( ASCAN( ta_NombresObjsOle, toRegClass.OBJNAME, 1, 0, 1, 1+8) > 0 )
IF NOT EMPTY(toRegClass.CLASSLOC)
lcOF_Classlib = 'OF "' + ALLTRIM(toRegClass.CLASSLOC) + '" '