diff --git a/TESTS/DATOS_READONLY/fb2p_test.vc2 b/TESTS/DATOS_READONLY/fb2p_test.vc2
index fe88ee8..13c10dd 100644
--- a/TESTS/DATOS_READONLY/fb2p_test.vc2
+++ b/TESTS/DATOS_READONLY/fb2p_test.vc2
@@ -2,15 +2,17 @@
* (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="C:\DESA\foxbin2prg\TESTS\DATOS_READONLY\fb2p_test.vcx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
+*< FOXBIN2PRG: Version="1.19" SourceFile="fb2p_test.vcx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
*
-*< OLE: Nombre="cl_olecontrol" Parent="" ObjName="cl_olecontrol" OLEObject="C:\Windows\system32\richtx32.ocx" Checksum="3873290752" Value="0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAEAAAAgAAAAEAAAD+////AAAAAAAAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/////v////7////+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////1IAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA//////////8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDfG05c8M4BAwAAAAACAAAAAAAAAwBPAGwAZQBPAGIAagBlAGMAdABEAGEAdABhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAgEDAAAAAgAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAAAAAAAAAADAEEAYwBjAGUAcwBzAE8AYgBqAFMAaQB0AGUARABhAHQAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgACAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABPAAAAAAAAAAMAQwBoAGEAbgBnAGUAZABQAHIAbwBwAHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAIA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAEoAAAAAAAAABAAAAAIAAAD+////BQAAAAYAAAD+////BwAAAP7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9giHw7j9cbELm1BAIcAJQCIUM0EggAAACKDQAA7QYAACFDNBIBAAYAoAAAAAAA//8AAP//AQAAAAAAAAAAAAAATwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABcAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcWhqIFp0dVFoYTtqZGZuW2lhZXRyIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAACADAAAAFJpZ2h0TWFyZ2luABEAAABODQAAAAcAAAAAAAAAAAAAAAUAAABUZXh0ABQAAABIAAAAAAsAAABPAAAAAAUAAIAAAAAAAAABAAAAAQABAAIACAAAAHtccnRmMVxhbnNpXGRlZmYwe1xmb250dGJse1xmMFxmbmlsXGxlY29udHJvbDEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmY2hhcnNldDAgQXJpYWw7fX0NClx2aWV3a2luZDRcdWMxXHBhcmRcbGFuZzMwODJcZnMxOCBPbGVjb250cm9sMQ0KXHBhciB9DQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" />
+
*
DEFINE CLASS cl_commandgroup AS commandgroup && Descripción de cl_CommandGroup
- *< CLASSDATA: Baseclass="commandgroup" Timestamp="2013/12/03 19:51:29" Scale="Pixels" Uniqueid="_3XW0ATDKL" />
+ *< CLASSDATA: Baseclass="commandgroup" Timestamp="" Scale="Pixels" Uniqueid="" />
+
*
*p: una_prop_cmgroup && Con comentario, pero sin valor
*
+
ButtonCount = 2
Height = 66
Name = "cl_commandgroup"
@@ -33,14 +35,39 @@ DEFINE CLASS cl_commandgroup AS commandgroup && Descripci
ENDDEFINE
DEFINE CLASS cl_form AS form OLEPUBLIC && mi OLE server DLL
- *< CLASSDATA: Baseclass="form" Timestamp="2014/01/07 19:58:17" Scale="Pixels" Uniqueid="_3XW0AGC4F" ProjectClassIcon="bmps\container.ico" ClassIcon="bmps\container.ico" />
+ *< CLASSDATA: Baseclass="form" Timestamp="" Scale="Pixels" Uniqueid="" ProjectClassIcon="bmps\container.ico" ClassIcon="bmps\container.ico" />
+
+ *-- OBJECTDATA items order determines ZOrder / El orden de los items OBJECTDATA determina el ZOrder
+ *< OBJECTDATA: ObjPath="Cl_optiongroup1" UniqueID="" Timestamp="" />
+ *< OBJECTDATA: ObjPath="Cl_commandgroup1" UniqueID="" Timestamp="" />
+ *< OBJECTDATA: ObjPath="Cl_imagen1" UniqueID="" Timestamp="" />
+ *< OBJECTDATA: ObjPath="Cl_imagen2" UniqueID="" Timestamp="" />
+
+ *
+ *p: chidden && Prop.Hidden
+ *p: cprotected && Prop.Protegida
+ *a: ^ahidden[1,0] && Array Oculto
+ *a: ^aprotected[1,0] && Array Protegido
+ *p: _memberdata && XML Metadata for customizable properties
+ *
+
+ HIDDEN chidden
+ PROTECTED cprotected
Caption = "Form"
+ chidden = && Prop.Hidden
+ cprotected = && Prop.Protegida
DoCreate = .T.
Height = 345
Left = 0
Name = "cl_form"
Top = 0
Width = 570
+ _memberdata =
+
+
+
+
+ && XML Metadata for customizable properties
ADD OBJECT 'Cl_commandgroup1' AS cl_commandgroup WITH ;
BackColor = 255,128,192, ;
@@ -63,7 +90,7 @@ DEFINE CLASS cl_form AS form OLEPUBLIC && mi OLE server DLL
Command2.Picture = bmps\carpetacerrada.bmp, ;
Command2.Top = 4, ;
Command2.Width = 104
- *< END OBJECT: ClassLib="fb2p_test.vcx" BaseClass="commandgroup" UniqueID="_3XW0AX81B" Timestamp="2013/12/03 19:50:23" ZOrder="1000" />
+ *< END OBJECT: ClassLib="fb2p_test.vcx" BaseClass="commandgroup" />
ADD OBJECT 'Cl_imagen1' AS cl_imagen WITH ;
Height = 34, ;
@@ -73,7 +100,7 @@ DEFINE CLASS cl_form AS form OLEPUBLIC && mi OLE server DLL
Stretch = 1, ;
Top = 276, ;
Width = 38
- *< END OBJECT: ClassLib="fb2p_test.vcx" BaseClass="image" UniqueID="_3XW0AGC4F" Timestamp="2014/01/07 19:58:17" ZOrder="1100" />
+ *< END OBJECT: ClassLib="fb2p_test.vcx" BaseClass="image" />
ADD OBJECT 'Cl_imagen2' AS cl_imagen WITH ;
Height = 34, ;
@@ -83,7 +110,7 @@ DEFINE CLASS cl_form AS form OLEPUBLIC && mi OLE server DLL
Stretch = 1, ;
Top = 276, ;
Width = 38
- *< END OBJECT: ClassLib="fb2p_test.vcx" BaseClass="image" UniqueID="_3XW0BP1GV" Timestamp="2014/01/07 19:58:17" ZOrder="1200" />
+ *< END OBJECT: ClassLib="fb2p_test.vcx" BaseClass="image" />
ADD OBJECT 'Cl_optiongroup1' AS cl_optiongroup WITH ;
BackColor = 0,128,255, ;
@@ -106,7 +133,7 @@ DEFINE CLASS cl_form AS form OLEPUBLIC && mi OLE server DLL
Option2.Style = 1, ;
Option2.Top = 8, ;
Option2.Width = 104
- *< END OBJECT: ClassLib="fb2p_test.vcx" BaseClass="optiongroup" UniqueID="_3XW0AONF4" Timestamp="2013/12/07 02:23:11" ZOrder="900" />
+ *< END OBJECT: ClassLib="fb2p_test.vcx" BaseClass="optiongroup" />
PROCEDURE Cl_optiongroup1.Init
*-- Prueba para comprobar que respeta espacios y TABS del código
@@ -123,10 +150,12 @@ DEFINE CLASS cl_form AS form OLEPUBLIC && mi OLE server DLL
ENDDEFINE
DEFINE CLASS cl_imagen AS image OLEPUBLIC && otro ole
- *< CLASSDATA: Baseclass="image" Timestamp="2014/01/07 20:06:20" Scale="Pixels" Uniqueid="_3XW0BNCFT" />
+ *< CLASSDATA: Baseclass="image" Timestamp="" Scale="Pixels" Uniqueid="" />
+
*
*m: *un_metodo_de_clase && Para testear si el código se va a la clase cl_form
*
+
Height = 16
Name = "cl_imagen"
Picture = bmps\sobrepostal.bmp
@@ -139,7 +168,8 @@ DEFINE CLASS cl_imagen AS image OLEPUBLIC && otro ole
ENDDEFINE
DEFINE CLASS cl_olecontrol AS olecontrol
- *< CLASSDATA: Baseclass="olecontrol" Timestamp="2013/12/03 20:17:14" Scale="Pixels" Uniqueid="_3XW0BVZ14" OLEObject="C:\Windows\system32\richtx32.ocx" CheckSum="3873290752" />
+ *< CLASSDATA: Baseclass="olecontrol" Timestamp="" Scale="Pixels" Uniqueid="" Nombre="cl_olecontrol" Parent="" ObjName="cl_olecontrol" OLEObject="C:\Windows\system32\richtx32.ocx" Value="0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAEAAAAgAAAAEAAAD+////AAAAAAAAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/////v////7////+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////1IAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA//////////8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDfG05c8M4BAwAAAAACAAAAAAAAAwBPAGwAZQBPAGIAagBlAGMAdABEAGEAdABhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAgEDAAAAAgAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAAAAAAAAAADAEEAYwBjAGUAcwBzAE8AYgBqAFMAaQB0AGUARABhAHQAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgACAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABPAAAAAAAAAAMAQwBoAGEAbgBnAGUAZABQAHIAbwBwAHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAIA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAEoAAAAAAAAABAAAAAIAAAD+////BQAAAAYAAAD+////BwAAAP7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9giHw7j9cbELm1BAIcAJQCIUM0EggAAACKDQAA7QYAACFDNBIBAAYAoAAAAAAA//8AAP//AQAAAAAAAAAAAAAATwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABcAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcWhqIFp0dVFoYTtqZGZuW2lhZXRyIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAACADAAAAFJpZ2h0TWFyZ2luABEAAABODQAAAAcAAAAAAAAAAAAAAAUAAABUZXh0ABQAAABIAAAAAAsAAABPAAAAAAUAAIAAAAAAAAABAAAAAQABAAIACAAAAHtccnRmMVxhbnNpXGRlZmYwe1xmb250dGJse1xmMFxmbmlsXGxlY29udHJvbDEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmY2hhcnNldDAgQXJpYWw7fX0NClx2aWV3a2luZDRcdWMxXHBhcmRcbGFuZzMwODJcZnMxOCBPbGVjb250cm9sMQ0KXHBhciB9DQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" />
+
Height = 67
Name = "cl_olecontrol"
Width = 131
@@ -147,13 +177,15 @@ DEFINE CLASS cl_olecontrol AS olecontrol
ENDDEFINE
DEFINE CLASS cl_optiongroup AS optiongroup && descripcion
- *< CLASSDATA: Baseclass="optiongroup" Timestamp="2013/12/03 19:43:10" Scale="Pixels" Uniqueid="_3XW0ALVUS" />
+ *< CLASSDATA: Baseclass="optiongroup" Timestamp="" Scale="Pixels" Uniqueid="" />
+
*
*m: *propiedad_de_clase_con_valor_access
*m: *propiedad_de_clase_con_valor_assign
*p: propiedad_de_clase_con_valor && Tiene un valor por defecto
*p: propiedad_de_clase_sin_valor && Una propiedad sin valor para heredar
*
+
ButtonCount = 2
Height = 46
Name = "cl_optiongroup"
@@ -191,7 +223,8 @@ DEFINE CLASS cl_optiongroup AS optiongroup && descripcion
ENDDEFINE
DEFINE CLASS proj_hook AS projecthook
- *< CLASSDATA: Baseclass="projecthook" Timestamp="2014/01/07 20:48:17" Scale="Pixels" Uniqueid="_3YX18LJ09" />
+ *< CLASSDATA: Baseclass="projecthook" Timestamp="" Scale="Pixels" Uniqueid="" />
+
Height = 22
Name = "proj_hook"
Width = 23
diff --git a/TESTS/DATOS_READONLY/fb2p_test.vct b/TESTS/DATOS_READONLY/fb2p_test.vct
index 3b967f1..8950d4b 100644
Binary files a/TESTS/DATOS_READONLY/fb2p_test.vct and b/TESTS/DATOS_READONLY/fb2p_test.vct differ
diff --git a/TESTS/DATOS_READONLY/fb2p_test.vcx b/TESTS/DATOS_READONLY/fb2p_test.vcx
index e77f542..5197858 100644
Binary files a/TESTS/DATOS_READONLY/fb2p_test.vcx and b/TESTS/DATOS_READONLY/fb2p_test.vcx differ
diff --git a/TESTS/ut__foxbin2prg.prg b/TESTS/ut__foxbin2prg.prg
index 4da2ae9..7b72982 100644
--- a/TESTS/ut__foxbin2prg.prg
+++ b/TESTS/ut__foxbin2prg.prg
@@ -133,9 +133,8 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg
loObj.get_PropsFrom_PROTECTED( toReg_Esperado.PROTECTED, .F., @laProtected_Esperado, @lnProtected_Count_Esperado, '' )
*-- Methods
- loObj.get_ADD_OBJECT_METHODS( toReg, toReg, '', @laMethods, '', @lnMethods_Count )
- loObj.get_ADD_OBJECT_METHODS( toReg_Esperado, toReg_Esperado, '', @laMethods_Esperado, '', @lnMethods_Count_Esperado )
-
+ loObj.get_ADD_OBJECT_METHODS( toReg, toReg, '', @laMethods, '', @lnMethods_Count, '', 0, '', 0 )
+ loObj.get_ADD_OBJECT_METHODS( toReg_Esperado, toReg_Esperado, '', @laMethods_Esperado, '', @lnMethods_Count_Esperado, '', 0, '', 0 )
lcExtraData = tcParent + '.' + tcObjName + ' (' + tcClass + ')'
diff --git a/TESTS/ut__foxbin2prg__c_conversor_prg_a_bin__analizarAsignacion_TAG_Indicado.prg b/TESTS/ut__foxbin2prg__c_conversor_prg_a_bin__analizarAsignacion_TAG_Indicado.prg
index 700f69d..a169f6f 100644
--- a/TESTS/ut__foxbin2prg__c_conversor_prg_a_bin__analizarAsignacion_TAG_Indicado.prg
+++ b/TESTS/ut__foxbin2prg__c_conversor_prg_a_bin__analizarAsignacion_TAG_Indicado.prg
@@ -234,7 +234,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_prg_a_bin__analizarAsignacion_TAG_Indic
FUNCTION Deberia_analizarAsignacion_TAG__memberdata__EnUnaAsignacion_MultiLine
LOCAL lnCodError, lcMenError, lnCodError_Esperado ;
, lcPropName, lcPropValue, laProps(1,2), lnProp_Count, I, lcTag_I, lcTag_F, lnLen_lcTag_I, lnLen_lcTag_F, lcMemo ;
- , lcValue_Esperado ;
+ , lcValue_Esperado, lcMemberdata ;
, loEx AS EXCEPTION
LOCAL loObj AS c_conversor_prg_a_bin OF "FOXBIN2PRG.PRG"
loObj = THIS.icObj
@@ -247,6 +247,12 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_prg_a_bin__analizarAsignacion_TAG_Indic
lnLen_lcTag_I = LEN(lcTag_I)
lnLen_lcTag_F = LEN(lcTag_F)
lnProp_Count = 17
+ lcMemberdata = '' + CR_LF
+ lcMemberdata = lcMemberdata + '' + CR_LF
+ lcMemberdata = lcMemberdata + '' + CR_LF
+ lcMemberdata = lcMemberdata + '' + CR_LF
+ lcMemberdata = lcMemberdata + '' + CR_LF
+ lcMemberdata = lcMemberdata + ''
DIMENSION laProps(lnProp_Count,2)
laProps = ''
laProps( 1,1) = 'Height = 2.73'
@@ -275,7 +281,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_prg_a_bin__analizarAsignacion_TAG_Indic
laProps(12,2) = ''
laProps(13,1) = '_memberdata = '
laProps(13,2) = ''
- laProps(14,1) = ''
+ laProps(14,1) = lcMemberdata
laProps(14,2) = ''
laProps(15,1) = ''
laProps(15,2) = 'XML Metadata for customizable properties'
@@ -284,7 +290,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_prg_a_bin__analizarAsignacion_TAG_Indic
*-- DATOS ESPERADOS
STORE 0 TO lnCodError_Esperado
- lcValue_Esperado = REPLICATE( CHR(1), 517 ) + STR(71,8) + '' + CR_LF + '' + CR_LF + ''
+ lcValue_Esperado = REPLICATE( CHR(1), 517 ) + STR(23 + LEN(lcMemberdata),8) + '' + CR_LF + lcMemberdata + CR_LF + ''
*-- TEST
loObj.analizarAsignacion_TAG_Indicado( @lcPropName, @lcPropValue, @laProps, @lnProp_Count ;
diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2
index 620053e..85878f5 100644
--- a/foxbin2prg.pj2
+++ b/foxbin2prg.pj2
@@ -26,7 +26,7 @@ _LegalTrademark = "Open Source"
_ProductName = " FOXBIN2PRG"
_MajorVer = "1"
_MinorVer = "19"
-_Revision = " 288"
+_Revision = " 299"
_LanguageID = "1034"
_AutoIncrement = "1"
*
@@ -50,8 +50,8 @@ MODIFY PROJECT 'foxbin2prg.pjx' NOWAIT NOSHOW NOPROJECTHOOK
loProject = _VFP.Projects('foxbin2prg.pjx')
WITH loProject.FILES
- .ADD('config\config.fpw') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="1132857145" ID="0" ObjRev="0" />
- .ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="1147452450" ID="0" ObjRev="544" />
+ .ADD('config\config.fpw') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="0" ID="0" ObjRev="0" />
+ .ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" />
*
.ITEM('__newproject.f2b').Remove()
diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt
index 00961ff..b524cca 100644
Binary files a/foxbin2prg.pjt and b/foxbin2prg.pjt differ
diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx
index 5ef572b..8c36577 100644
Binary files a/foxbin2prg.pjx and b/foxbin2prg.pjx differ
diff --git a/foxbin2prg.prg b/foxbin2prg.prg
index c1474f0..9780247 100644
--- a/foxbin2prg.prg
+++ b/foxbin2prg.prg
@@ -76,6 +76,8 @@
* 21/02/2014 FDBOZZO v1.19.12 Centralizar ZOrder controles en metadata de cabecera de clase para minimizar diferencias / También mover UniqueIDs y Timestamps a metadata
* 26/02/2014 FDBOZZO v1.19.13 Arreglo bug TimeStamp en archivo cfg / ExtraBackupLevels se puede desactivar / Optimizaciones / Casos FoxUnit
* 01/03/2014 FDBOZZO v1.19.14 Arreglo bug regresion cuando no se define ExtraBackupLevels no hace backups / Optimización carga cfg en batch
+* 04/03/2014 FDBOZZO v1.19.15 Arreglo bugs: OLE TX2 legacy / NoTimestamp=0 / DBFs backlink
+* 07/03/2014 FDBOZZO v1.19.16 Arreglo bugs: Propiedades y métodos Hidden/Protected que no se generan /// Crash métodos vacíos
*
*
*---------------------------------------------------------------------------------------------------
@@ -93,7 +95,9 @@
* 01/01/2014 Fidel Charny REPORTE BUG mnx v1.16: El menú no siempre respeta la posición original LOCATION y a veces se genera mal el MNX (se arregla en v1.17)
* 05/01/2014 Fidel Charny REPORTE BUG mnx v1.17: Se genera cláusula "DO" o llamada Command cuando no Procedure ni Command que llamar // Diferencia de Case en NAME (se arregla en v1.18)
* 20/02/2014 Ryan Harris PROPUESTA DE MEJORA v1.19.11: Centralizar los ZOrder de los controles en metadata de cabecera de la clase para minimizar diferencias
+* 23/02/2014 Ryan Harris BUG cfg v1.19.12: Si se define NoTimestamp en FoxBin2Prg.cfg, se toma el valor opuesto (solucionado en v1.19.13)
* 27/02/2014 BUG REGRESION v1.19.13: Si no se define ExtraBackupLevels no se generan backups (solucionado en v1.19.14)
+* 06/03/2014 Ryan Harris REPORTE BUG vcx/scx v1.19.15: Algunas propiedades no mantienen su visibilidad Hidden/Protected // Orden de properties defTop,defLeft,etc
*
*
*---------------------------------------------------------------------------------------------------
@@ -125,123 +129,127 @@
LPARAMETERS tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDebug, tcDontShowProgress, tcOriginalFileName, tcRecompile, tcNoTimestamps
*-- NO modificar! / Do NOT change!
-#DEFINE C_CMT_I '*--'
-#DEFINE C_CMT_F '--*'
-#DEFINE C_CLASSDATA_I '*< CLASSDATA:'
-#DEFINE C_CLASSDATA_F '/>'
-#DEFINE C_LEN_CLASSDATA_I LEN(C_CLASSDATA_I)
-#DEFINE C_OBJECTDATA_I '*< OBJECTDATA:'
-#DEFINE C_OBJECTDATA_F '/>'
-#DEFINE C_LEN_OBJECTDATA_I LEN(C_OBJECTDATA_I)
-#DEFINE C_OLE_I '*< OLE:'
-#DEFINE C_OLE_F '/>'
-#DEFINE C_LEN_OLE_I LEN(C_OLE_I)
-#DEFINE C_DEFINED_PAM_I '*'
-#DEFINE C_DEFINED_PAM_F '*'
-#DEFINE C_LEN_DEFINED_PAM_I LEN(C_DEFINED_PAM_I)
-#DEFINE C_LEN_DEFINED_PAM_F LEN(C_DEFINED_PAM_F)
-#DEFINE C_END_OBJECT_I '*< END OBJECT:'
-#DEFINE C_END_OBJECT_F '/>'
-#DEFINE C_LEN_END_OBJECT_I LEN(C_END_OBJECT_I)
-#DEFINE C_FB2PRG_META_I '*< FOXBIN2PRG:'
-#DEFINE C_FB2PRG_META_F '/>'
-#DEFINE C_DEFINE_CLASS 'DEFINE CLASS'
-#DEFINE C_ENDDEFINE 'ENDDEFINE'
-#DEFINE C_TEXT 'TEXT'
-#DEFINE C_ENDTEXT 'ENDTEXT'
-#DEFINE C_PROCEDURE 'PROCEDURE'
-#DEFINE C_ENDPROC 'ENDPROC'
-#DEFINE C_WITH 'WITH'
-#DEFINE C_ENDWITH 'ENDWITH'
-#DEFINE C_SRV_HEAD_I '*'
-#DEFINE C_SRV_HEAD_F '*'
-#DEFINE C_SRV_DATA_I '*'
-#DEFINE C_SRV_DATA_F '*'
-#DEFINE C_DEVINFO_I '*'
-#DEFINE C_DEVINFO_F '*'
-#DEFINE C_BUILDPROJ_I '*'
-#DEFINE C_BUILDPROJ_F '*'
-#DEFINE C_PROJPROPS_I '*'
-#DEFINE C_PROJPROPS_F '*'
-#DEFINE C_FILE_META_I '*< FileMetadata:'
-#DEFINE C_FILE_META_F '/>'
-#DEFINE C_FILE_CMTS_I '*'
-#DEFINE C_FILE_CMTS_F '*'
-#DEFINE C_FILE_EXCL_I '*'
-#DEFINE C_FILE_EXCL_F '*'
-#DEFINE C_FILE_TXT_I '*'
-#DEFINE C_FILE_TXT_F '*'
-#DEFINE C_FB2P_VALUE_I ''
-#DEFINE C_FB2P_VALUE_F ''
-#DEFINE C_LEN_FB2P_VALUE_I LEN(C_FB2P_VALUE_I)
-#DEFINE C_LEN_FB2P_VALUE_F LEN(C_FB2P_VALUE_F)
-#DEFINE C_VFPDATA_I ''
-#DEFINE C_VFPDATA_F ''
-#DEFINE C_MEMBERDATA_I C_VFPDATA_I
-#DEFINE C_MEMBERDATA_F C_VFPDATA_F
-#DEFINE C_LEN_MEMBERDATA_I LEN(C_MEMBERDATA_I)
-#DEFINE C_LEN_MEMBERDATA_F LEN(C_MEMBERDATA_F)
-#DEFINE C_DATA_I ''
-#DEFINE C_TAG_REPORTE 'Reportes'
-#DEFINE C_TAG_REPORTE_I '<' + C_TAG_REPORTE + '>'
-#DEFINE C_TAG_REPORTE_F '' + C_TAG_REPORTE + '>'
-#DEFINE C_DBF_HEAD_I ''
-#DEFINE C_LEN_DBF_HEAD_I LEN(C_DBF_HEAD_I)
-#DEFINE C_LEN_DBF_HEAD_F LEN(C_DBF_HEAD_F)
-#DEFINE C_CDX_I ''
-#DEFINE C_CDX_F ''
-#DEFINE C_LEN_CDX_I LEN(C_CDX_I)
-#DEFINE C_LEN_CDX_F LEN(C_CDX_F)
-#DEFINE C_LEN_INDEX_I LEN(C_INDEX_I)
-#DEFINE C_LEN_INDEX_F LEN(C_INDEX_F)
-#DEFINE C_DATABASE_I ''
-#DEFINE C_DATABASE_F ''
-#DEFINE C_STORED_PROC_I ''
-#DEFINE C_TABLE_I '
'
-#DEFINE C_TABLES_I ''
-#DEFINE C_TABLES_F ''
-#DEFINE C_VIEW_I ''
-#DEFINE C_VIEW_F ''
-#DEFINE C_VIEWS_I ''
-#DEFINE C_VIEWS_F ''
-#DEFINE C_FIELD_I ''
-#DEFINE C_FIELD_F ''
-#DEFINE C_FIELDS_I ''
-#DEFINE C_FIELDS_F ''
-#DEFINE C_CONNECTION_I ''
-#DEFINE C_CONNECTION_F ''
-#DEFINE C_CONNECTIONS_I ''
-#DEFINE C_CONNECTIONS_F ''
-#DEFINE C_RELATION_I ''
-#DEFINE C_RELATION_F ''
-#DEFINE C_RELATIONS_I ''
-#DEFINE C_RELATIONS_F ''
-#DEFINE C_INDEX_I ''
-#DEFINE C_INDEX_F ''
-#DEFINE C_INDEXES_I ''
-#DEFINE C_INDEXES_F ''
-#DEFINE C_PROC_CODE_I '*'
-#DEFINE C_PROC_CODE_F '*'
-#DEFINE C_SETUPCODE_I '*'
-#DEFINE C_SETUPCODE_F '*'
-#DEFINE C_CLEANUPCODE_I '*'
-#DEFINE C_CLEANUPCODE_F '*'
-#DEFINE C_MENUCODE_I '*'
-#DEFINE C_MENUCODE_F '*'
-#DEFINE C_MENUTYPE_I '*'
-#DEFINE C_MENUTYPE_F ''
-#DEFINE C_MENULOCATION_I '*'
-#DEFINE C_MENULOCATION_F ''
+#DEFINE C_CMT_I '*--'
+#DEFINE C_CMT_F '--*'
+#DEFINE C_CLASSCOMMENTS_I '*'
+#DEFINE C_CLASSCOMMENTS_F '*'
+#DEFINE C_LEN_CLASSCOMMENTS_I LEN(C_CLASSCOMMENTS_I)
+#DEFINE C_LEN_CLASSCOMMENTS_F LEN(C_CLASSCOMMENTS_F)
+#DEFINE C_CLASSDATA_I '*< CLASSDATA:'
+#DEFINE C_CLASSDATA_F '/>'
+#DEFINE C_LEN_CLASSDATA_I LEN(C_CLASSDATA_I)
+#DEFINE C_OBJECTDATA_I '*< OBJECTDATA:'
+#DEFINE C_OBJECTDATA_F '/>'
+#DEFINE C_LEN_OBJECTDATA_I LEN(C_OBJECTDATA_I)
+#DEFINE C_OLE_I '*< OLE:'
+#DEFINE C_OLE_F '/>'
+#DEFINE C_LEN_OLE_I LEN(C_OLE_I)
+#DEFINE C_DEFINED_PAM_I '*'
+#DEFINE C_DEFINED_PAM_F '*'
+#DEFINE C_LEN_DEFINED_PAM_I LEN(C_DEFINED_PAM_I)
+#DEFINE C_LEN_DEFINED_PAM_F LEN(C_DEFINED_PAM_F)
+#DEFINE C_END_OBJECT_I '*< END OBJECT:'
+#DEFINE C_END_OBJECT_F '/>'
+#DEFINE C_LEN_END_OBJECT_I LEN(C_END_OBJECT_I)
+#DEFINE C_FB2PRG_META_I '*< FOXBIN2PRG:'
+#DEFINE C_FB2PRG_META_F '/>'
+#DEFINE C_DEFINE_CLASS 'DEFINE CLASS'
+#DEFINE C_ENDDEFINE 'ENDDEFINE'
+#DEFINE C_TEXT 'TEXT'
+#DEFINE C_ENDTEXT 'ENDTEXT'
+#DEFINE C_PROCEDURE 'PROCEDURE'
+#DEFINE C_ENDPROC 'ENDPROC'
+#DEFINE C_WITH 'WITH'
+#DEFINE C_ENDWITH 'ENDWITH'
+#DEFINE C_SRV_HEAD_I '*'
+#DEFINE C_SRV_HEAD_F '*'
+#DEFINE C_SRV_DATA_I '*'
+#DEFINE C_SRV_DATA_F '*'
+#DEFINE C_DEVINFO_I '*'
+#DEFINE C_DEVINFO_F '*'
+#DEFINE C_BUILDPROJ_I '*'
+#DEFINE C_BUILDPROJ_F '*'
+#DEFINE C_PROJPROPS_I '*'
+#DEFINE C_PROJPROPS_F '*'
+#DEFINE C_FILE_META_I '*< FileMetadata:'
+#DEFINE C_FILE_META_F '/>'
+#DEFINE C_FILE_CMTS_I '*'
+#DEFINE C_FILE_CMTS_F '*'
+#DEFINE C_FILE_EXCL_I '*'
+#DEFINE C_FILE_EXCL_F '*'
+#DEFINE C_FILE_TXT_I '*'
+#DEFINE C_FILE_TXT_F '*'
+#DEFINE C_FB2P_VALUE_I ''
+#DEFINE C_FB2P_VALUE_F ''
+#DEFINE C_LEN_FB2P_VALUE_I LEN(C_FB2P_VALUE_I)
+#DEFINE C_LEN_FB2P_VALUE_F LEN(C_FB2P_VALUE_F)
+#DEFINE C_VFPDATA_I ''
+#DEFINE C_VFPDATA_F ''
+#DEFINE C_MEMBERDATA_I C_VFPDATA_I
+#DEFINE C_MEMBERDATA_F C_VFPDATA_F
+#DEFINE C_LEN_MEMBERDATA_I LEN(C_MEMBERDATA_I)
+#DEFINE C_LEN_MEMBERDATA_F LEN(C_MEMBERDATA_F)
+#DEFINE C_DATA_I ''
+#DEFINE C_TAG_REPORTE 'Reportes'
+#DEFINE C_TAG_REPORTE_I '<' + C_TAG_REPORTE + '>'
+#DEFINE C_TAG_REPORTE_F '' + C_TAG_REPORTE + '>'
+#DEFINE C_DBF_HEAD_I ''
+#DEFINE C_LEN_DBF_HEAD_I LEN(C_DBF_HEAD_I)
+#DEFINE C_LEN_DBF_HEAD_F LEN(C_DBF_HEAD_F)
+#DEFINE C_CDX_I ''
+#DEFINE C_CDX_F ''
+#DEFINE C_LEN_CDX_I LEN(C_CDX_I)
+#DEFINE C_LEN_CDX_F LEN(C_CDX_F)
+#DEFINE C_LEN_INDEX_I LEN(C_INDEX_I)
+#DEFINE C_LEN_INDEX_F LEN(C_INDEX_F)
+#DEFINE C_DATABASE_I ''
+#DEFINE C_DATABASE_F ''
+#DEFINE C_STORED_PROC_I ''
+#DEFINE C_TABLE_I ''
+#DEFINE C_TABLES_I ''
+#DEFINE C_TABLES_F ''
+#DEFINE C_VIEW_I ''
+#DEFINE C_VIEW_F ''
+#DEFINE C_VIEWS_I ''
+#DEFINE C_VIEWS_F ''
+#DEFINE C_FIELD_I ''
+#DEFINE C_FIELD_F ''
+#DEFINE C_FIELDS_I ''
+#DEFINE C_FIELDS_F ''
+#DEFINE C_CONNECTION_I ''
+#DEFINE C_CONNECTION_F ''
+#DEFINE C_CONNECTIONS_I ''
+#DEFINE C_CONNECTIONS_F ''
+#DEFINE C_RELATION_I ''
+#DEFINE C_RELATION_F ''
+#DEFINE C_RELATIONS_I ''
+#DEFINE C_RELATIONS_F ''
+#DEFINE C_INDEX_I ''
+#DEFINE C_INDEX_F ''
+#DEFINE C_INDEXES_I ''
+#DEFINE C_INDEXES_F ''
+#DEFINE C_PROC_CODE_I '*'
+#DEFINE C_PROC_CODE_F '*'
+#DEFINE C_SETUPCODE_I '*'
+#DEFINE C_SETUPCODE_F '*'
+#DEFINE C_CLEANUPCODE_I '*'
+#DEFINE C_CLEANUPCODE_F '*'
+#DEFINE C_MENUCODE_I '*'
+#DEFINE C_MENUCODE_F '*'
+#DEFINE C_MENUTYPE_I '*'
+#DEFINE C_MENUTYPE_F ''
+#DEFINE C_MENULOCATION_I '*'
+#DEFINE C_MENULOCATION_F ''
*--
-#DEFINE C_TAB CHR(9)
-#DEFINE C_CR CHR(13)
-#DEFINE C_LF CHR(10)
-#DEFINE CR_LF C_CR + C_LF
-#DEFINE C_MPROPHEADER REPLICATE( CHR(1), 517 )
+#DEFINE C_TAB CHR(9)
+#DEFINE C_CR CHR(13)
+#DEFINE C_LF CHR(10)
+#DEFINE CR_LF C_CR + C_LF
+#DEFINE C_MPROPHEADER REPLICATE( CHR(1), 517 )
*-- Fin / End
*-- From FOXPRO.H
@@ -437,7 +445,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
l_ConfigEvaluated = .F.
l_Debug = .F.
l_Test = .F.
- l_ShowErrors = .F.
+ l_ShowErrors = .T.
l_ShowProgress = .F.
l_Recompile = .F.
l_NoTimestamps = .T.
@@ -740,7 +748,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
.writeLog( JUSTFNAME(lcConfigFile) + ' > tcDontShowProgress: ' + TRANSFORM(tcDontShowProgress) )
CASE LEFT( laConfig(I), 15 ) == LOWER('DontShowErrors:')
- tcDontShowErrors = ALLTRIM( SUBSTR( laConfig(I), 16 ) )
+ *-- Priorizo si tcDontShowErrors NO viene con "0" como parámetro, ya que los scripts vbs
+ *-- los utilizan para sobreescribir la configuración por defecto de foxbin2prg.cfg
+ IF NOT TRANSFORM(tcDontShowErrors) == '0'
+ tcDontShowErrors = ALLTRIM( SUBSTR( laConfig(I), 16 ) )
+ ENDIF
.writeLog( JUSTFNAME(lcConfigFile) + ' > tcDontShowErrors: ' + TRANSFORM(tcDontShowErrors) )
CASE LEFT( laConfig(I), 13 ) == LOWER('NoTimestamps:')
@@ -796,7 +808,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
ENDIF
.l_ShowProgress = NOT (TRANSFORM(tcDontShowProgress)=='1')
- .l_ShowErrors = NOT (TRANSFORM(tcDontShowErrors) == '1')
+ IF NOT EMPTY(tcDontShowErrors)
+ .l_ShowErrors = NOT (TRANSFORM(tcDontShowErrors) == '1')
+ ENDIF
.l_Recompile = (EMPTY(tcRecompile) OR TRANSFORM(tcRecompile) == '1' OR DIRECTORY(tcRecompile))
.l_NoTimestamps = NOT (TRANSFORM(tcNoTimestamps) == '0')
.l_Debug = (TRANSFORM(tcDebug)=='1')
@@ -1074,7 +1088,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
ENDIF
THIS.writeLog( lcErrorInfo )
ENDIF
- IF THIS.l_Debug AND THIS.l_ShowErrors
+ IF THIS.l_ShowErrors
MESSAGEBOX( lcErrorInfo, 0+16+4096, C_FOXBIN2PRG_ERROR_CAPTION_LOC, 60000 )
ENDIF
IF tlRelanzarError
@@ -1082,7 +1096,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
ENDIF
FINALLY
- IF THIS.l_ShowProgress
+ THIS.writeLog_Flush()
+ IF THIS.l_ShowProgress AND VARTYPE(THIS.o_Frm_Avance) = "O"
THIS.o_Frm_Avance.HIDE()
THIS.o_Frm_Avance.RELEASE()
STORE NULL TO THIS.o_Frm_Avance
@@ -1333,7 +1348,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
FINALLY
loFSO = NULL
THIS.o_Conversor = NULL
- THIS.writeLog_Flush()
+ *THIS.writeLog_Flush()
ENDTRY
@@ -1869,7 +1884,7 @@ DEFINE CLASS c_conversor_base AS SESSION
FOR I = 1 TO OCCURS( '/>', tcValue )
TEXT TO lcValue TEXTMERGE ADDITIVE NOSHOW FLAGS 1+2 PRETEXT 1+2
- <', I, 1+4 )>>
+ <', I, 1+4 ), CR_LF, ' ' )>>
ENDTEXT
ENDFOR
@@ -1879,7 +1894,11 @@ DEFINE CLASS c_conversor_base AS SESSION
ENDTEXT
- tcValue = C_MPROPHEADER + STR( LEN(tcValue), 8 ) + tcValue
+ IF LEN(lcValue) > 255
+ tcValue = C_MPROPHEADER + STR( LEN(tcValue), 8 ) + tcValue
+ ELSE
+ tcValue = CHRTRAN( tcValue, CR_LF, '' )
+ ENDIF
CASE LEFT( tcValue, C_LEN_FB2P_VALUE_I ) == C_FB2P_VALUE_I
*-- Valor especial Fox con cabecera CHR(1): Debo agregarla y desnormalizar el valor
@@ -2059,7 +2078,8 @@ DEFINE CLASS c_conversor_base AS SESSION
IF '&'+'&' $ tcLine
ln_AT_Cmt = AT( '&'+'&', tcLine)
tcComment = LTRIM( SUBSTR( tcLine, ln_AT_Cmt + 2 ) )
- tcLine = RTRIM( LEFT( tcLine, ln_AT_Cmt - 1 ), 0, ' ', CHR(9) ) && Quito espacios y TABS
+ *tcLine = RTRIM( LEFT( tcLine, ln_AT_Cmt - 1 ), 0, ' ', CHR(9) ) && Quito espacios y TABS
+ tcLine = RTRIM( LEFT( tcLine, ln_AT_Cmt - 1 ), 0, CHR(9) ) && Quito TABS
ENDIF
RETURN
@@ -2083,9 +2103,9 @@ DEFINE CLASS c_conversor_base AS SESSION
*-- EVALUAR UNA ASIGNACIÓN ESPECÍFICA INLINE
IF '=' $ tcAsignacion
- ln_AT_Cmt = AT( '=', tcAsignacion)
- tcPropName = ALLTRIM( LEFT( tcAsignacion, ln_AT_Cmt - 2 ), 0, ' ', CHR(9) ) && Quito espacios y TABS
- tcValue = ALLTRIM( SUBSTR( tcAsignacion, ln_AT_Cmt + 2 ) )
+ ln_AT_Cmt = AT( '=', tcAsignacion)
+ tcPropName = ALLTRIM( LEFT( tcAsignacion, ln_AT_Cmt - 2 ), 0, ' ', CHR(9) ) && Quito espacios y TABS
+ tcValue = LTRIM( SUBSTR( tcAsignacion, ln_AT_Cmt + 2 ) )
IF PCOUNT() > 3
*-- EVALUAR UNA ASIGNACIÓN QUE PUEDE SER MULTILÍNEA (memberdata, fb2p_value, etc)
@@ -2195,7 +2215,7 @@ DEFINE CLASS c_conversor_base AS SESSION
FOR I = 1 TO OCCURS( '/>', tcValue )
TEXT TO lcValue TEXTMERGE ADDITIVE NOSHOW FLAGS 1+2 PRETEXT 1+2
- <<>> <', I, 1+4 )>>
+ <<>> <', I, 1+4 ), CR_LF, ' ' )>>
ENDTEXT
ENDFOR
@@ -2282,6 +2302,8 @@ DEFINE CLASS c_conversor_base AS SESSION
lcPropName = SUBSTR(tcPropName,5)
CASE NOT tcOperation == 'SETNAME'
ERROR C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC
+ CASE lcPropName == 'FRXDataSession' && En un VCX lo ví primero de todo y también luego de Height ¿?
+ lcPropName = 'A001' + lcPropName
CASE lcPropName == 'ErasePage' && PageFrame: Debe estar antes que PageCount
lcPropName = 'A002' + lcPropName
CASE lcPropName == 'PageCount' && PageFrame: Debe estar antes que ActivePage
@@ -2306,6 +2328,14 @@ DEFINE CLASS c_conversor_base AS SESSION
lcPropName = 'A040' + lcPropName
CASE lcPropName == 'Tag'
lcPropName = 'A045' + lcPropName
+ CASE lcPropName == 'DefTop' && Propiedad con evaluación: Debe estar antes que Top
+ lcPropName = 'A046' + lcPropName
+ CASE lcPropName == 'DefLeft' && Propiedad con evaluación: Debe estar antes que Left
+ lcPropName = 'A047' + lcPropName
+ CASE lcPropName == 'DefHeight' && Propiedad con evaluación: Debe estar antes que Height
+ lcPropName = 'A048' + lcPropName
+ CASE lcPropName == 'DefWidth' && Propiedad con evaluación: Debe estar antes que Width
+ lcPropName = 'A049' + lcPropName
CASE lcPropName == 'Top'
lcPropName = 'A050' + lcPropName
CASE lcPropName == 'Left'
@@ -2693,6 +2723,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
+ [] ;
+ [] ;
+ [] ;
+ + [] ;
+ [] ;
+ [] ;
+ [] ;
@@ -3432,37 +3463,39 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
loProcedure = NULL
loProcedure = toClase._Procedures(I)
- IF '.' $ loProcedure._Nombre
- *-- cboNombre.InteractiveChange ==> No debe acortarse por ser método modificado de combobox heredado de la clase
- *-- cntDatos.txtEdad.Valid ==> Debe acortarse si cntDatos es un objeto existente
- lcNombreObjeto = LEFT( loProcedure._Nombre, AT('.', loProcedure._Nombre) - 1 )
+ IF loProcedure._ProcLine_Count > 0 THEN
+ IF '.' $ loProcedure._Nombre
+ *-- cboNombre.InteractiveChange ==> No debe acortarse por ser método modificado de combobox heredado de la clase
+ *-- cntDatos.txtEdad.Valid ==> Debe acortarse si cntDatos es un objeto existente
+ lcNombreObjeto = LEFT( loProcedure._Nombre, AT('.', loProcedure._Nombre) - 1 )
- IF THIS.buscarObjetoDelMetodoPorNombre( lcNombreObjeto, toClase ) = 0
+ IF THIS.buscarObjetoDelMetodoPorNombre( lcNombreObjeto, toClase ) = 0
+ TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2
+ <> <>
+ ENDTEXT
+ ELSE
+ TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2
+ <> <>
+ ENDTEXT
+ ENDIF
+ ELSE
TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2
<> <>
ENDTEXT
- ELSE
- TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2
- <> <>
- ENDTEXT
ENDIF
- ELSE
- TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2
- <> <>
+
+ *-- Incluir las líneas del método
+ FOR X = 1 TO loProcedure._ProcLine_Count
+ TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+ <>
+ ENDTEXT
+ ENDFOR
+
+ TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+ <>
+ <<>>
ENDTEXT
ENDIF
-
- *-- Incluir las líneas del método
- FOR X = 1 TO loProcedure._ProcLine_Count
- TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
- <>
- ENDTEXT
- ENDFOR
-
- TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
- <>
- <<>>
- ENDTEXT
ENDFOR
loProcedure = NULL
@@ -3971,10 +4004,10 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
ENDIF
IF RIGHT(tcLine, 3) == ', ;' && VALOR INTERMEDIO CON ", ;"
- .get_SeparatedPropAndValue( LEFT(tcLine, LEN(tcLine) - 3), @lcProp, @lcValue )
+ .get_SeparatedPropAndValue( LEFT(tcLine, LEN(tcLine) - 3), @lcProp, @lcValue, toClase, @taCodeLines, @tnCodeLines, @I )
toObjeto.add_Property( @lcProp, @lcValue )
ELSE && VALOR FINAL SIN ", ;" (JUSTO ANTES DEL )
- .get_SeparatedPropAndValue( RTRIM(tcLine), @lcProp, @lcValue )
+ .get_SeparatedPropAndValue( tcLine, @lcProp, @lcValue, toClase, @taCodeLines, @tnCodeLines, @I )
toObjeto.add_Property( @lcProp, @lcValue )
ENDIF
@@ -4058,7 +4091,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
ELSE
*-- Sin comentarios
lcPAM_Name = LOWER( RTRIM( SUBSTR( tcLine, lnPos+1 ), 0, ' ', CHR(9) ) )
- lcItem = lcPAM_Name + IIF(ISALPHA(lcPAM_Name), '', ' ') + CR_LF
+ lcItem = lcPAM_Name + IIF( LEFT(lcPAM_Name,1) $ '^*' , ' ', '') + CR_LF
*-- Separo propiedades y métodos
IF LEFT(lcItem,1) == '*'
@@ -4111,6 +4144,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
LOCAL Z, lcProp, lcValue, loEx AS EXCEPTION ;
, llCLASSMETADATA_Completed, llPROTECTED_Completed, llHIDDEN_Completed, llDEFINED_PAM_Completed ;
, llINCLUDE_Completed, llCLASS_PROPERTY_Completed, llOBJECTMETADATA_Completed ;
+ , llCLASSCOMMENTS_Completed ;
, loObjeto AS CL_OBJETO OF 'FOXBIN2PRG.PRG'
STORE '' TO tcProcedureAbierto
@@ -4137,7 +4171,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
ENDIF
* Búsqueda del ID de fin de bloque (ENDDEFINE)
- WITH THIS
+ WITH THIS AS c_conversor_prg_a_bin OF 'FOXBIN2PRG.PRG'
FOR I = toClase._Ini_Cab TO tnCodeLines
tc_Comentario = ''
.set_Line( @tcLine, @taCodeLines, I )
@@ -4149,13 +4183,14 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
CASE .analizarBloque_PROCEDURE( @toModulo, @toClase, @loObjeto, @tcLine, @taCodeLines, @I, @tnCodeLines ;
, @tcProcedureAbierto, @tc_Comentario, @taBloquesExclusion, @tnBloquesExclusion )
*-- OJO: Esta se analiza primero a propósito, solo porque no puede estar detrás de PROTECTED y HIDDEN
- llCLASS_PROPERTY_Completed = .T.
- llPROTECTED_Completed = .T.
- llHIDDEN_Completed = .T.
- llINCLUDE_Completed = .T.
- llCLASSMETADATA_Completed = .T.
- llOBJECTMETADATA_Completed = .T.
- llDEFINED_PAM_Completed = .T.
+ STORE .T. TO llCLASSCOMMENTS_Completed ;
+ , llCLASS_PROPERTY_Completed ;
+ , llPROTECTED_Completed ;
+ , llHIDDEN_Completed ;
+ , llINCLUDE_Completed ;
+ , llCLASSMETADATA_Completed ;
+ , llOBJECTMETADATA_Completed ;
+ , llDEFINED_PAM_Completed
CASE NOT llPROTECTED_Completed AND .analizarBloque_PROTECTED( @toClase, @tcLine )
@@ -4171,12 +4206,16 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
llINCLUDE_Completed = .T.
+ CASE NOT llCLASSCOMMENTS_Completed AND .analizarBloque_CLASSCOMMENTS( @toClase, @tcLine ,@taCodeLines, tnCodeLines, @I )
+ llCLASSCOMMENTS_Completed = .T.
+
+
CASE NOT llCLASSMETADATA_Completed AND .analizarBloque_CLASSMETADATA( @toClase, @tcLine )
llCLASSMETADATA_Completed = .T.
CASE NOT llOBJECTMETADATA_Completed AND .analizarBloque_OBJECTMETADATA( @toClase, @tcLine )
- *llOBJECTMETADATA_Completed = .T.
+ * No se usa flag porque puede haber múltiples ObjectMetadata.
CASE NOT llDEFINED_PAM_Completed AND .analizarBloque_DEFINED_PAM( @toClase, @tcLine, @taCodeLines, tnCodeLines, @I )
@@ -4184,13 +4223,14 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
CASE .analizarBloque_ADD_OBJECT( @toModulo, @toClase, @tcLine, @I, @taCodeLines, @tnCodeLines )
- llCLASS_PROPERTY_Completed = .T.
- llPROTECTED_Completed = .T.
- llHIDDEN_Completed = .T.
- llINCLUDE_Completed = .T.
- llCLASSMETADATA_Completed = .T.
- llOBJECTMETADATA_Completed = .T.
- llDEFINED_PAM_Completed = .T.
+ STORE .T. TO llCLASSCOMMENTS_Completed ;
+ , llCLASS_PROPERTY_Completed ;
+ , llPROTECTED_Completed ;
+ , llHIDDEN_Completed ;
+ , llINCLUDE_Completed ;
+ , llCLASSMETADATA_Completed ;
+ , llOBJECTMETADATA_Completed ;
+ , llDEFINED_PAM_Completed
CASE .analizarBloque_ENDDEFINE( @toClase, @tcLine, @I, @tcProcedureAbierto )
@@ -4203,7 +4243,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
*-- NOTA: Las propiedades se agregan tal cual, incluso aunque estén separadas en
*-- varias líneas (memberdata y fb2p_value), ya que luego se ensamblan en classProps2Memo().
*
- .get_SeparatedPropAndValue( RTRIM(tcLine), @lcProp, @lcValue, @toClase, @taCodeLines, tnCodeLines, @I )
+ .get_SeparatedPropAndValue( tcLine, @lcProp, @lcValue, @toClase, @taCodeLines, tnCodeLines, @I )
toClase.add_Property( @lcProp, @lcValue, RTRIM(tc_Comentario) )
@@ -4323,7 +4363,57 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
ENDPROC
- *******************************************************************************************************************
+ PROCEDURE analizarBloque_CLASSCOMMENTS
+ LPARAMETERS toClase, tcLine ,taCodeLines, tnCodeLines, I
+
+ EXTERNAL ARRAY taCodeLines
+
+ #IF .F.
+ LOCAL toClase AS CL_CLASE OF 'FOXBIN2PRG.PRG'
+ #ENDIF
+
+ TRY
+ LOCAL llBloqueEncontrado
+
+ IF LEFT( tcLine, C_LEN_CLASSCOMMENTS_I ) == C_CLASSCOMMENTS_I
+ llBloqueEncontrado = .T.
+ toClase._Comentario = ''
+
+ WITH THIS AS c_conversor_prg_a_bin OF 'FOXBIN2PRG.PRG'
+ FOR I = I + 1 TO tnCodeLines
+ .set_Line( @tcLine, @taCodeLines, I )
+
+ DO CASE
+ CASE LEFT( tcLine, C_LEN_CLASSCOMMENTS_F ) == C_CLASSCOMMENTS_F
+ I = I + 1
+ EXIT
+
+ OTHERWISE
+ toClase._Comentario = toClase._Comentario + CR_LF + SUBSTR( tcLine, 2 ) && Le quito el '*' inicial
+ ENDCASE
+ ENDFOR
+ ENDWITH && THIS
+
+ I = I - 1
+
+ IF NOT EMPTY(toClase._Comentario)
+ toClase._Comentario = SUBSTR( toClase._Comentario, 3 ) + CR_LF && Quito el primer CR+LF
+ ENDIF
+ ENDIF
+
+ CATCH TO loEx
+ IF THIS.l_Debug AND _VFP.STARTMODE = 0
+ SET STEP ON
+ ENDIF
+
+ THROW
+
+ ENDTRY
+
+ RETURN llBloqueEncontrado
+ ENDPROC
+
+
PROCEDURE analizarBloque_CLASSMETADATA
LPARAMETERS toClase, tcLine
@@ -7090,36 +7180,46 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
*******************************************************************************************************************
PROCEDURE get_ADD_OBJECT_METHODS
- LPARAMETERS toRegObj, toRegClass, tcMethods, taMethods, taCode, tnMethodCount
+ LPARAMETERS toRegObj, toRegClass, tcMethods, taMethods, taCode, tnMethodCount ;
+ , taPropsAndComments, tnPropsAndComments_Count, taProtected, tnProtected_Count
+
+ EXTERNAL ARRAY taPropsAndComments, taProtected
TRY
+ LOCAL lcMethodName
+
WITH THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG'
- .SortMethod( toRegObj.METHODS, @taMethods, @taCode, '', @tnMethodCount )
+ .SortMethod( toRegObj.METHODS, @taMethods, @taCode, '', @tnMethodCount ;
+ , @taPropsAndComments, tnPropsAndComments_Count, @taProtected, tnProtected_Count )
*-- 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 taMethods(I,2) = 0
+ LOOP
+ ENDIF
+
IF EMPTY(toRegObj.PARENT)
- tcMethodName = toRegObj.OBJNAME + '.' + taMethods(I,1)
+ lcMethodName = toRegObj.OBJNAME + '.' + taMethods(I,1)
ELSE
DO CASE
CASE '.' $ toRegObj.PARENT
- tcMethodName = SUBSTR(toRegObj.PARENT, AT('.', toRegObj.PARENT) + 1) + '.' + toRegObj.OBJNAME + '.' + taMethods(I,1)
+ lcMethodName = SUBSTR(toRegObj.PARENT, AT('.', toRegObj.PARENT) + 1) + '.' + toRegObj.OBJNAME + '.' + taMethods(I,1)
CASE LEFT(toRegObj.PARENT + '.', LEN( toRegClass.OBJNAME + '.' ) ) == toRegClass.OBJNAME + '.'
- tcMethodName = toRegObj.OBJNAME + '.' + taMethods(I,1)
+ lcMethodName = toRegObj.OBJNAME + '.' + taMethods(I,1)
OTHERWISE
- tcMethodName = toRegObj.PARENT + '.' + toRegObj.OBJNAME + '.' + taMethods(I,1)
+ lcMethodName = toRegObj.PARENT + '.' + toRegObj.OBJNAME + '.' + taMethods(I,1)
ENDCASE
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 ' + tcMethodName
+ tcMethods = tcMethods + CR_LF + 'PROCEDURE ' + lcMethodName
tcMethods = tcMethods + CR_LF + .IndentarMemo( taCode(taMethods(I,2)) )
tcMethods = tcMethods + CR_LF + 'ENDPROC'
ENDFOR
@@ -7379,7 +7479,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
X = 0
FOR I = lnFin TO 1 STEP -1
IF NOT EMPTY(laLineas(I)) && Última línea de código
- IF LEFT( laLineas(I), 10 ) <> C_ENDPROC
+ IF llProcedure AND LEFT( laLineas(I), 10 ) <> C_ENDPROC
*ERROR 'Procedimiento sin cerrar. La última línea de código debe ser ENDPROC. [' + laLineas(1) + ']'
ERROR (TEXTMERGE(C_PROCEDURE_NOT_CLOSED_ON_LINE_LOC))
ENDIF
@@ -7482,11 +7582,12 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
*******************************************************************************************************************
PROCEDURE SortMethod
- LPARAMETERS tcMethod, taMethods, taCode, tcSorted, tnMethodCount
+ LPARAMETERS tcMethod, taMethods, taCode, tcSorted, tnMethodCount, taPropsAndComments, tnPropsAndComments_Count ;
+ , taProtected, tnProtected_Count
*-- 29/10/2013 Fernando D. Bozzo
*-- Se tiene en cuenta la posibilidad de que haya un PROC/ENDPROC dentro de un TEXT/ENDTEXT
*-- cuando es usado en un generador de código o similar.
- EXTERNAL ARRAY taMethods, taCode
+ EXTERNAL ARRAY taMethods, taCode, taPropsAndComments, taProtected
*-- ESTRUCTURA DE LOS ARRAYS CREADOS:
*-- taMethods[1,3]
@@ -7496,7 +7597,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
*-- taCode[1]
*-- Bloque de código del método en su posición original
TRY
- LOCAL lnLineCount, laLine(1), I, lnTextNodes, tcSorted
+ LOCAL lnLineCount, laLine(1), I, lnTextNodes, tcSorted, lnProtectedLine, lcMethod
LOCAL loEx AS EXCEPTION
DIMENSION taMethods(1,3)
STORE '' TO taMethods, m.tcSorted, taCode
@@ -7585,13 +7686,44 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
ENDCASE
ENDFOR
+ *-- Agrego los métodos definidos, pero sin código (Protected/Reserved3)
+ FOR I = 1 TO tnPropsAndComments_Count
+ lcMethod = CHRTRAN( taPropsAndComments(I,1), '*', '' )
+ IF LEFT( taPropsAndComments(I,1), 1 ) == '*' AND ASCAN( taMethods, lcMethod, 1, 0, 1, 1+2+4+8 ) = 0
+ tnMethodCount = tnMethodCount + 1
+ DIMENSION taMethods(tnMethodCount, 3) &&, taCode(tnMethodCount)
+ taMethods(tnMethodCount, 1) = lcMethod
+ taMethods(tnMethodCount, 2) = 0
+
+ lnProtectedLine = ASCAN( taProtected, lcMethod, 1, 0, 1, 1+2+4+8 )
+
+ IF lnProtectedLine = 0 THEN
+ IF tnProtected_Count = 0
+ lnProtectedLine = 0
+ ELSE
+ lnProtectedLine = ASCAN( taProtected, lcMethod + '^', 1, 0, 1, 1+2+4+8 )
+ ENDIF
+
+ IF lnProtectedLine = 0 THEN
+ taMethods(tnMethodCount, 3) = ''
+ ELSE
+ taMethods(tnMethodCount, 3) = 'HIDDEN '
+ ENDIF
+ ELSE
+ taMethods(tnMethodCount, 3) = 'PROTECTED '
+ ENDIF
+ ENDIF
+ ENDFOR
+
*-- Alphabetical ordering of methods
IF THIS.l_MethodSort_Enabled
ASORT(taMethods,1,-1,0,1)
ENDIF
FOR I = 1 TO tnMethodCount
- m.tcSorted = m.tcSorted + taCode(taMethods(I,2))
+ IF taMethods(I,2) > 0 THEN
+ m.tcSorted = m.tcSorted + taCode(taMethods(I,2))
+ ENDIF
ENDFOR
ENDIF
@@ -7686,7 +7818,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
*******************************************************************************************************************
PROCEDURE write_ALL_OBJECT_METHODS
- LPARAMETERS tcMethods
+ LPARAMETERS tcMethods, taPropsAndComments, tnPropsAndComments_Count, taProtected, tnProtected_Count
*-- Finalmente, todos los métodos los ordeno y escribo juntos
LOCAL laMethods(1), laCode(1), lnMethodCount, I, lcMethods, lcMethods2
@@ -7696,11 +7828,16 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
DIMENSION laMethods(1,3)
WITH THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG'
- .SortMethod( @tcMethods, @laMethods, @laCode, '', @lnMethodCount )
+ .SortMethod( @tcMethods, @laMethods, @laCode, '', @lnMethodCount ;
+ , @taPropsAndComments, tnPropsAndComments_Count, @taProtected, tnProtected_Count )
FOR I = 1 TO lnMethodCount
*-- 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
+ 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
@@ -7730,23 +7867,24 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
WITH THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG'
FOR I = 1 TO tnMethodCount
lcMethod = CHRTRAN( taMethods(I,1), '^', '' )
- lnProtectedItem = ASCAN( taProtected, taMethods(I,1), 1, 0, 0, 1)
- lnCommentRow = ASCAN( taPropsAndComments, '*' + lcMethod, 1, 0, 1, 1+8)
+ lnProtectedItem = ASCAN( taProtected, taMethods(I,1), 1, 0, 0, 1+2+4)
- DO CASE
- CASE lnProtectedItem = 0
- *-- Método común
- lcProcDef = 'PROCEDURE'
+ IF lnProtectedItem = 0
+ lnProtectedItem = ASCAN( taProtected, taMethods(I,1) + '^', 1, 0, 0, 1+2+4)
- CASE taProtected(lnProtectedItem) == taMethods(I,1)
+ 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
- CASE taProtected(lnProtectedItem) == taMethods(I,1) + '^'
- *-- Método oculto
- lcProcDef = 'HIDDEN PROCEDURE'
-
- ENDCASE
+ lnCommentRow = ASCAN( taPropsAndComments, '*' + lcMethod, 1, 0, 1, 1+2+4+8)
*-- Nombre del método
TEXT TO lcMethods ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
@@ -7762,7 +7900,10 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
*-- Código del método
*-- Sustituyo el TEXT/ENDTEXT aquí porque a veces quita espacios de la derecha, y eso es peligroso
- lcMethods = lcMethods + CR_LF + .IndentarMemo( taCode(taMethods(I,2)), C_TAB + C_TAB )
+ IF taMethods(I,2) > 0 THEN
+ lcMethods = lcMethods + CR_LF + .IndentarMemo( taCode(taMethods(I,2)), C_TAB + C_TAB )
+ ENDIF
+
lcMethods = lcMethods + CR_LF + C_TAB + 'ENDPROC'
lcMethods = lcMethods + CR_LF
ENDFOR
@@ -7786,31 +7927,37 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
*******************************************************************************************************************
PROCEDURE write_CLASS_PROPERTIES
- LPARAMETERS toRegClass, taPropsAndValues, taPropsAndComments, taProtected
+ LPARAMETERS toRegClass, taPropsAndValues, taPropsAndComments, taProtected ;
+ , tnPropsAndValues_Count, tnPropsAndComments_Count, tnProtected_Count
EXTERNAL ARRAY taPropsAndValues, taPropsAndComments
TRY
- LOCAL lnPropsAndValues_Count, lcHiddenProp, lcProtectedProp, lcPropsMethodsDefd, lnPropsAndComments_Count, I ;
+ LOCAL lcHiddenProp, lcProtectedProp, lcPropsMethodsDefd, I ;
, lcPropName, lnProtectedItem, lcComentarios
WITH THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG'
*-- DEFINIR PROPIEDADES ( HIDDEN, PROTECTED, *DEFINED_PAM )
DIMENSION taProtected(1)
STORE '' TO lcHiddenProp, lcProtectedProp, lcPropsMethodsDefd
- .get_PropsAndValuesFrom_PROPERTIES( toRegClass.PROPERTIES, 1, @taPropsAndValues, @lnPropsAndValues_Count, '' )
- .get_PropsAndCommentsFrom_RESERVED3( toRegClass.RESERVED3, .T., @taPropsAndComments, @lnPropsAndComments_Count, '' )
- .get_PropsFrom_PROTECTED( toRegClass.PROTECTED, .T., @taProtected, 0, '' )
+ STORE 0 TO tnPropsAndValues_Count, tnPropsAndComments_Count, tnProtected_Count
+ .get_PropsAndValuesFrom_PROPERTIES( toRegClass.PROPERTIES, 1, @taPropsAndValues, @tnPropsAndValues_Count, '' )
+ .get_PropsAndCommentsFrom_RESERVED3( toRegClass.RESERVED3, .T., @taPropsAndComments, @tnPropsAndComments_Count, '' )
+ .get_PropsFrom_PROTECTED( toRegClass.PROTECTED, .T., @taProtected, @tnProtected_Count, '' )
- IF lnPropsAndValues_Count > 0 THEN
+ IF tnPropsAndValues_Count > 0 THEN
*-- Recorro las propiedades (campo Properties) para ir conformando
*-- las definiciones HIDDEN y PROTECTED
- FOR I = 1 TO lnPropsAndValues_Count
+ FOR I = 1 TO tnPropsAndValues_Count
IF EMPTY(taPropsAndValues(I,1))
LOOP
ENDIF
- lnProtectedItem = ASCAN(taProtected, taPropsAndValues(I,1), 1, 0, 0, 1)
+ IF tnProtected_Count = 0
+ lnProtectedItem = 0
+ ELSE
+ lnProtectedItem = ASCAN(taProtected, taPropsAndValues(I,1), 1, 0, 0, 1)
+ ENDIF
DO CASE
CASE lnProtectedItem = 0
@@ -7827,7 +7974,27 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
ENDCASE
ENDFOR
- .write_DEFINED_PAM( @taPropsAndComments, lnPropsAndComments_Count )
+ *-- Segunda barrida para las propiedades Hidden/Protected que no estén definidas en Properties
+ FOR I = 1 TO tnProtected_Count
+ *-- La propiedad evaluada no debe ser vacía, debe estar en la lista de PROPERTIES y no debe ser un *Método
+ IF EMPTY(taProtected(I,1)) ;
+ OR ASCAN(taPropsAndValues, CHRTRAN( taProtected(I), '^', '' ), 1, 0, 1, 1) > 0 ;
+ OR ASCAN(taPropsAndComments, '*' + CHRTRAN( taProtected(I), '^', '' ), 1, 0, 1, 1) > 0
+ LOOP
+ ENDIF
+
+ IF RIGHT( taProtected(I), 1 ) == '^'
+ *-- Propiedad oculta
+ lcHiddenProp = lcHiddenProp + ',' + CHRTRAN( taProtected(I), '^', '' )
+
+ ELSE
+ *-- Propiedad protegida
+ lcProtectedProp = lcProtectedProp + ',' + taProtected(I)
+
+ ENDIF
+ ENDFOR
+
+ .write_DEFINED_PAM( @taPropsAndComments, tnPropsAndComments_Count )
.write_HIDDEN_Properties( @lcHiddenProp )
@@ -7946,9 +8113,18 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
LPARAMETERS toRegClass
*-- Comentario de la clase
IF NOT EMPTY(toRegClass.RESERVED7) THEN
- TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2
- <<>> <<'&'+'&'>> <>
- ENDTEXT
+ *-- Si es multilínea, debe ir en un tag aparte
+ IF OCCURS( CHR(13), toRegClass.RESERVED7 ) > 0 THEN
+ TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+ <<>> <>
+ <>
+ <<>> <>
+ ENDTEXT
+ ELSE && Comentario in-line
+ TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2
+ <<>> <<'&'+'&'>> <>
+ ENDTEXT
+ ENDIF
ENDIF
ENDPROC
@@ -8571,9 +8747,10 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg
TRY
LOCAL lnCodError, loRegClass, loRegObj, lnMethodCount, laMethods(1), laCode(1), laProtected(1), lnLen, lnObjCount ;
, laPropsAndValues(1), laPropsAndComments(1), lnLastClass, lnRecno, lcMethods, lcObjName, la_NombresObjsOle(1) ;
- , laObjs(1,3), I
- STORE 0 TO lnCodError, lnLastClass, lnObjCount
- STORE '' TO laMethods(1), laCode(1), laProtected(1), laPropsAndComments(1), laObjs(1)
+ , laObjs(1,3), I, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count
+ STORE 0 TO lnCodError, lnLastClass, lnObjCount, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count ;
+ , lnMethodCount
+ STORE '' TO laMethods, laCode, laProtected, laPropsAndComments, laObjs
STORE NULL TO loRegClass, loRegObj
WITH THIS AS c_conversor_vcx_a_prg OF 'FOXBIN2PRG.PRG'
@@ -8663,7 +8840,8 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg
.write_INCLUDE( @loRegClass )
- .write_CLASS_PROPERTIES( @loRegClass, @laPropsAndValues, @laPropsAndComments, @laProtected )
+ .write_CLASS_PROPERTIES( @loRegClass, @laPropsAndValues, @laPropsAndComments, @laProtected ;
+ , @lnPropsAndValues_Count, @lnPropsAndComments_Count, @lnProtected_Count )
ASORT(laObjs, 3, -1, 0, 0) && Orden Alfabético (del SCAN original)
@@ -8674,8 +8852,9 @@ 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)
- lcMethods = ''
- .SortMethod( loRegClass.METHODS, @laMethods, @laCode, '', @lnMethodCount )
+ laMethods = ''
+ .SortMethod( loRegClass.METHODS, @laMethods, @laCode, '', @lnMethodCount ;
+ , @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count )
.write_CLASS_METHODS( @lnMethodCount, @laMethods, @laCode, @laProtected, @laPropsAndComments )
@@ -8701,10 +8880,11 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg
loRegObj.UNIQUEID = ALLTRIM(loRegObj.UNIQUEID)
ENDIF
- .get_ADD_OBJECT_METHODS( @loRegObj, @loRegClass, @lcMethods )
+ .get_ADD_OBJECT_METHODS( @loRegObj, @loRegClass, @lcMethods, @laMethods, @laCode, @lnMethodCount ;
+ , @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count )
ENDSCAN
- .write_ALL_OBJECT_METHODS( @lcMethods )
+ .write_ALL_OBJECT_METHODS( @lcMethods, @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count )
GOTO RECORD (lnRecno)
ENDSCAN
@@ -8772,9 +8952,10 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg
TRY
LOCAL lnCodError, loRegClass, loRegObj, lnMethodCount, laMethods(1), laCode(1), laProtected(1), lnLen, lnObjCount ;
, laPropsAndValues(1), laPropsAndComments(1), lnLastClass, lnRecno, lcMethods, lcObjName, la_NombresObjsOle(1) ;
- , laObjs(1,3), I
- STORE 0 TO lnCodError, lnLastClass, lnObjCount
- STORE '' TO laMethods(1), laCode(1), laProtected(1), laPropsAndComments(1)
+ , laObjs(1,3), I, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count
+ STORE 0 TO lnCodError, lnLastClass, lnObjCount, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count ;
+ , lnMethodCount
+ STORE '' TO laMethods, laCode, laProtected, laPropsAndComments, laObjs
STORE NULL TO loRegClass, loRegObj
WITH THIS AS c_conversor_scx_a_prg OF 'FOXBIN2PRG.PRG'
@@ -8880,7 +9061,8 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg
.write_INCLUDE( @loRegClass )
- .write_CLASS_PROPERTIES( @loRegClass, @laPropsAndValues, @laPropsAndComments, @laProtected )
+ .write_CLASS_PROPERTIES( @loRegClass, @laPropsAndValues, @laPropsAndComments, @laProtected ;
+ , @lnPropsAndValues_Count, @lnPropsAndComments_Count, @lnProtected_Count )
ASORT(laObjs, 3, -1, 0, 0) && Orden Alfabético de objetos (del SCAN original)
@@ -8892,8 +9074,9 @@ 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)
- lcMethods = ''
- .SortMethod( loRegClass.METHODS, @laMethods, @laCode, '', @lnMethodCount )
+ laMethods = ''
+ .SortMethod( loRegClass.METHODS, @laMethods, @laCode, '', @lnMethodCount ;
+ , @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count )
.write_CLASS_METHODS( @lnMethodCount, @laMethods, @laCode, @laProtected, @laPropsAndComments )
@@ -8921,10 +9104,11 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg
loRegObj.UNIQUEID = ALLTRIM(loRegObj.UNIQUEID)
ENDIF
- .get_ADD_OBJECT_METHODS( @loRegObj, @loRegClass, @lcMethods )
+ .get_ADD_OBJECT_METHODS( @loRegObj, @loRegClass, @lcMethods, @laMethods, @laCode, @lnMethodCount ;
+ , @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count )
ENDSCAN
- .write_ALL_OBJECT_METHODS( @lcMethods )
+ .write_ALL_OBJECT_METHODS( @lcMethods, @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count )
GOTO RECORD (lnRecno)
ENDSCAN
diff --git a/ignore.conf b/ignore.conf
index 50a658c..d3633d3 100644
--- a/ignore.conf
+++ b/ignore.conf
@@ -1,7 +1,12 @@
-*.FXP
-*.LNK
-*.SCC
-*.TMP
-*.BAK
-*/FXUResults.*
-*/FXUPersist*.*
\ No newline at end of file
+*.7z
+*.bak
+*.fxp
+*.lnk
+*.log
+*.mpx
+*.scc
+*.spx
+*.tbk
+*.zip
+*/vfp_init.prg
+*/includefilelist.txt