diff --git a/TESTS/DATOS_READONLY/menu2.mn2 b/TESTS/DATOS_READONLY/menu2.mn2 index de4e8a9..83c9f55 100644 --- a/TESTS/DATOS_READONLY/menu2.mn2 +++ b/TESTS/DATOS_READONLY/menu2.mn2 @@ -2,7 +2,7 @@ * (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\menu2.mnx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries) +*< FOXBIN2PRG: Version="1.19" SourceFile="menu2.mnx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries) * *5 *APPEND @@ -14,24 +14,24 @@ * DEFINE MENU _MSYSMENU BAR -DEFINE PAD _3Z80ZOKYJ OF _MSYSMENU PROMPT "Opción A con submenú" COLOR SCHEME 3 ; +DEFINE PAD _40Q0H1MMN OF _MSYSMENU PROMPT "Opción A con submenú" COLOR SCHEME 3 ; NEGOTIATE NONE, LEFT ; KEY DEL, "Pulsar " ; SKIP FOR SKIP_FOR() ; - MESSAGE "Mensaje para Opción A con submenú" && Comentario + MESSAGE "Mensaje para Opción A con submenú" && Comentariomultilínearompetodo -ON PAD _3Z80ZOKYJ OF _MSYSMENU ACTIVATE POPUP OpciónA_CS +ON PAD _40Q0H1MMN OF _MSYSMENU ACTIVATE POPUP OpciónA_CS *---------------------------------- DEFINE POPUP OpciónA_CS MARGIN RELATIVE SHADOW COLOR SCHEME 4 DEFINE BAR 1 OF OpciónA_CS PROMPT "Opción A-1" ; - PICTURE "..\..\foxunit\fxuacknowledgements.bmp" + PICTURE "..\..\foxunit\fxuacknowledgements.bmp" && Comentariomultilínearompetodo ON BAR 1 OF OpciónA_CS ACTIVATE POPUP OpciónA1 *---------------------------------- DEFINE POPUP OpciónA1 MARGIN RELATIVE SHADOW COLOR SCHEME 4 DEFINE BAR Shortcut_Menu_Title OF OpciónA1 PROMPT "OpciónA-1-Sub" ; - PICTURE "..\..\foxunit\fxuacknowledgements.bmp" + PICTURE "..\..\foxunit\fxuacknowledgements.bmp" && Comentariomultilínearompetodo ON SELECTION BAR Shortcut_Menu_Title OF OpciónA1 wait window "Ejecuta Comando o función para Opción A-1" DEFINE BAR 2 OF OpciónA_CS PROMPT "Opción A-2" @@ -65,6 +65,11 @@ ON PAD _3Z80ZOKYJ OF _MSYSMENU ACTIVATE POPUP Opci SKIP FOR NOT glEnabled_Opc_A_2_Sub_3 ; PICTRES _mfi_sysprint ; MESSAGE "Message para Opción A-2-Sub.3 (Tipo Bar#)" && Comentarios para Opción A-2-Sub.3 + + DEFINE BAR 3 OF OpciónA_CS PROMPT "Opción A-3" ; + SKIP FOR valor de skip() ; + MESSAGE "un mensaje de texto" && Y este esel nuevo comandodentro de un PROC! + ON SELECTION BAR 3 OF OpciónA_CS ON ERROR **** ON SELECTION POPUP OpciónA_CS *-- PROCEDURE Le cambié el nombre! DEFINE PAD opc_b OF _MSYSMENU PROMPT "Opción B con comando" COLOR SCHEME 3 ; @@ -73,8 +78,8 @@ DEFINE PAD opc_b OF _MSYSMENU PROMPT "Opci MESSAGE "Mensaje para Opción B con Command" && Comentario de la Opción b ON SELECTION PAD opc_b OF _MSYSMENU WAIT WINDOW "Opción B" -ON SELECTION POPUP ALL *- Menu bar procedure -ON SELECTION MENU _MSYSMENU *-- Menu Procedure +ON SELECTION POPUP ALL DO ALL_FB2P +ON SELECTION MENU _MSYSMENU DO SELECTION_MENU__MSYSMENU_FB2P * @@ -86,6 +91,20 @@ PROCEDURE Menu1_Opci *ENDPROC ENDPROC && Menu1_Opción_A_2_Sub_SNIPPET +PROCEDURE ALL_FB2P + *- Menu bar procedure + multilínea + rompetodo + +ENDPROC && ALL_FB2P + +PROCEDURE SELECTION_MENU__MSYSMENU_FB2P + *-- Menu Procedure + multilínea + rompetodo + +ENDPROC && SELECTION_MENU__MSYSMENU_FB2P + * diff --git a/TESTS/DATOS_READONLY/menu2.mnt b/TESTS/DATOS_READONLY/menu2.mnt index 0381262..7c0ea05 100644 Binary files a/TESTS/DATOS_READONLY/menu2.mnt and b/TESTS/DATOS_READONLY/menu2.mnt differ diff --git a/TESTS/DATOS_READONLY/menu2.mnx b/TESTS/DATOS_READONLY/menu2.mnx index be3596e..2382761 100644 Binary files a/TESTS/DATOS_READONLY/menu2.mnx and b/TESTS/DATOS_READONLY/menu2.mnx differ diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 14d83e2..481193e 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -2074,15 +2074,15 @@ DEFINE CLASS c_conversor_base AS SESSION LPARAMETERS tcLine, tcComment LOCAL ln_AT_Cmt tcComment = '' + ln_AT_Cmt = AT( '&'+'&', tcLine) - IF '&'+'&' $ tcLine - ln_AT_Cmt = AT( '&'+'&', tcLine) + IF ln_AT_Cmt > 0 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 TABS ENDIF - RETURN + RETURN (ln_AT_Cmt > 0) ENDPROC @@ -10305,9 +10305,11 @@ DEFINE CLASS CL_CUS_BASE AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] + l_Debug = .F. @@ -10339,6 +10341,27 @@ DEFINE CLASS CL_CUS_BASE AS CUSTOM ENDPROC + PROCEDURE get_SeparatedLineAndComment + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tcLine (@! IN/OUT) Línea a separar del comentario + * tcComment (@? OUT) Comentario + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcLine, tcComment + LOCAL ln_AT_Cmt + tcComment = '' + ln_AT_Cmt = AT( '&'+'&', tcLine) + + IF ln_AT_Cmt > 0 + 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 TABS + ENDIF + + RETURN (ln_AT_Cmt > 0) + ENDPROC + + ENDDEFINE @@ -10355,6 +10378,7 @@ DEFINE CLASS CL_COL_BASE AS COLLECTION _MEMBERDATA = [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] @@ -10390,6 +10414,27 @@ DEFINE CLASS CL_COL_BASE AS COLLECTION ENDPROC + PROCEDURE get_SeparatedLineAndComment + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tcLine (@! IN/OUT) Línea a separar del comentario + * tcComment (@? OUT) Comentario + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcLine, tcComment + LOCAL ln_AT_Cmt + tcComment = '' + ln_AT_Cmt = AT( '&'+'&', tcLine) + + IF ln_AT_Cmt > 0 + 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 TABS + ENDIF + + RETURN (ln_AT_Cmt > 0) + ENDPROC + + PROCEDURE toText *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) @@ -16672,9 +16717,14 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE lcExpr = loReg.PROCEDURE THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, '', 1, .T. ) - IF EMPTY(lcProcName) + IF EMPTY(lcProcCode) + *-- Comando lcText = lcText + lcTab + 'ON SELECTION POPUP ' + IIF( loReg.OBJCODE = 0, loReg.NAME, 'ALL' ) + ' ' + lcExpr + CR_LF ELSE + *-- Procedure + IF EMPTY(lcProcName) + lcProcName = CHRTRAN( ALLTRIM( IIF( loReg.OBJCODE = 0, loReg.NAME, 'ALL' ) ), ' ', '_' ) + '_FB2P' + ENDIF lcText = lcText + lcTab + 'ON SELECTION POPUP ' + IIF( loReg.OBJCODE = 0, loReg.NAME, 'ALL' ) + ' DO ' + lcProcName + CR_LF tcEndProcedures = tcEndProcedures + STRTRAN( lcProcCode, '<>', lcProcName ) + CR_LF ENDIF @@ -16876,17 +16926,15 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE loReg.PROMPT = CHRTRAN( ALLTRIM( STREXTRACT( tcLine, ' PROMPT ', ' COLOR ' ) ), '"', '' ) *-- ANALISIS DEL "DEFINE PAD" - IF ';' $ tcLine + DO CASE + CASE ';' $ tcLine FOR I = I + 1 TO tnCodeLines .set_Line( @tcLine, @taCodeLines, I ) IF EMPTY(loReg.COMMENT) && No volver a buscar el comentario si ya existe - lnPos = AT( '&'+'&', tcLine ) - IF lnPos > 0 - *-- Busco si tiene comentario - loReg.COMMENT = SUBSTR( tcLine, lnPos + 3 ) - tcLine = LEFT( tcLine, lnPos - 1 ) - lnPos = 0 + *-- Busco si tiene comentario + IF .get_SeparatedLineAndComment( @tcLine, @lcComment ) + loReg.COMMENT = STRTRAN( STRTRAN( lcComment, '', CHR(13) ), '', CHR(10) ) ENDIF ENDIF @@ -16926,7 +16974,12 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE EXIT ENDIF ENDFOR - ENDIF && ';' $ tcLine + + CASE .set_Line( @tcLine, @taCodeLines, I ) AND .get_SeparatedLineAndComment( @tcLine, @lcComment ) + *-- Es un Bar de una sola línea y con comentarios + loReg.COMMENT = STRTRAN( STRTRAN( lcComment, '', CHR(13) ), '', CHR(10) ) + + ENDCASE * Estructuras ejemplo a analizar: @@ -17063,17 +17116,15 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE loReg.PROMPT = CHRTRAN( ALLTRIM( STREXTRACT( tcLine, ' PROMPT ', ';', 1, 2 ) ), '"', '' ) *-- ANALISIS DEL "DEFINE BAR" - IF ';' $ tcLine + DO CASE + CASE ';' $ tcLine FOR I = I + 1 TO tnCodeLines .set_Line( @tcLine, @taCodeLines, I ) IF EMPTY(loReg.COMMENT) && No volver a buscar el comentario si ya existe - lnPos = AT( '&'+'&', tcLine ) - IF lnPos > 0 - *-- Busco si tiene comentario - loReg.COMMENT = SUBSTR( tcLine, lnPos + 3 ) - tcLine = LEFT( tcLine, lnPos - 1 ) - lnPos = 0 + *-- Busco si tiene comentario + IF .get_SeparatedLineAndComment( @tcLine, @lcComment ) + loReg.COMMENT = STRTRAN( STRTRAN( lcComment, '', CHR(13) ), '', CHR(10) ) ENDIF ENDIF @@ -17113,7 +17164,12 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE EXIT ENDIF ENDFOR - ENDIF && ';' $ tcLine + + CASE .set_Line( @tcLine, @taCodeLines, I ) AND .get_SeparatedLineAndComment( @tcLine, @lcComment ) + *-- Es un Bar de una sola línea y con comentarios + loReg.COMMENT = STRTRAN( STRTRAN( lcComment, '', CHR(13) ), '', CHR(10) ) + + ENDCASE IF LEFT(lcBarName,1) == '_' *-- Es un BAR del Sistema, así que no tiene ON BAR ni nada más. @@ -17240,12 +17296,23 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE lcExpr = loReg.PROCEDURE .AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, '', 1, .T. ) - IF EMPTY(lcProcName) - lcProcName = CHRTRAN( ALLTRIM( STREXTRACT( lcText, 'DEFINE ', 'PROMPT ' ) ), ' ', '_' ) + '_FB2P' - ENDIF + IF EMPTY(lcProcCode) + *-- Comando + IF EMPTY(lcExpr) + lcText = STRTRAN( lcText, 'DO <>', '' ) + ELSE + lcText = STRTRAN( lcText, 'DO <>', lcExpr ) + ENDIF + ELSE - lcText = STRTRAN( lcText, '<>', lcProcName ) - tcEndProcedures = tcEndProcedures + STRTRAN( lcProcCode, '<>', lcProcName ) + CR_LF + *-- Procedure + IF EMPTY(lcProcName) + lcProcName = CHRTRAN( ALLTRIM( STREXTRACT( lcText, 'DEFINE ', 'PROMPT ' ) ), ' ', '_' ) + '_FB2P' + ENDIF + lcProcCode = STRTRAN( lcProcCode, '<>', lcProcName ) + lcText = STRTRAN( lcText, '<>', lcProcName ) + tcEndProcedures = tcEndProcedures + lcProcCode + CR_LF + ENDIF ENDIF @@ -17319,7 +17386,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE ENDIF IF NOT EMPTY(toReg.COMMENT) - lcText = lcText + ' &' + '& ' + toReg.COMMENT + lcText = lcText + ' &' + '& ' + STRTRAN( STRTRAN( toReg.COMMENT, CHR(13), '' ), CHR(10), '' ) ENDIF *-- ON BAR @@ -17412,7 +17479,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE ENDIF IF NOT EMPTY(toReg.COMMENT) - lcText = lcText + ' &' + '& ' + toReg.COMMENT + lcText = lcText + ' &' + '& ' + STRTRAN( STRTRAN( toReg.COMMENT, CHR(13), '' ), CHR(10), '' ) ENDIF lcText = lcText + CR_LF diff --git a/foxbin2prg_en.h b/foxbin2prg_en.h index 2eff952..41b68ee 100644 --- a/foxbin2prg_en.h +++ b/foxbin2prg_en.h @@ -2,38 +2,38 @@ *-- ENGLISH TRANSLATION => RENAME OR COPY TO [foxbin2prg.h] TO USE, AND RECOMPILE FOXBIN2PRG.PRG - Feel free to change or adapt the strings. *-- NOTE: MUST USE DOUBLE QUOTES, OR SYNTAX ERRORS HAPPEN WHEN COMPILING. STRANGE :( *------------------------------------------------------------------------------------------------------------------------------------------- -#DEFINE C_ASTERISK_EXT_NOT_ALLOWED_LOC "* and ? extensions are not allowed because is dangerous (binaries can be overwriten with xx2 empty files)" +#DEFINE C_ASTERISK_EXT_NOT_ALLOWED_LOC "* and ? extensions are not allowed because it's dangerous (binaries can be overwritten with xx2 empty files)" #DEFINE C_BACKLINK_CANT_UPDATE_BL_LOC "Could not update backlink" #DEFINE C_BACKLINK_OF_TABLE_LOC "of table" #DEFINE C_BACKUP_OF_LOC "Doing Backup of: " -#DEFINE C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC "Can not generate file [<>] because it is ReadOnly" +#DEFINE C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC "Cannot generate file [<>] because it is ReadOnly" #DEFINE C_CONFIGFILE_LOC "Using configuration file:" #DEFINE C_CONVERTER_UNLOAD_LOC "Converter unload" #DEFINE C_CONVERTING_FILE_LOC "Converting file" -#DEFINE C_DATA_ERROR_CANT_PARSE_UNPAIRING_DOUBLE_QUOTES_LOC "Data Error: Cant't parse because unpairing double-quotes on line <>" +#DEFINE C_DATA_ERROR_CANT_PARSE_UNPAIRING_DOUBLE_QUOTES_LOC "Data Error: Can't parse because of unpaired double-quotes on line <>" #DEFINE C_DUPLICATED_FILE_LOC "Duplicated file" -#DEFINE C_ENDDEFINE_MARKER_NOT_FOUND_LOC "No se ha encontrado el marcador de fin [ENDDEFINE] de la línea <> para el identificador [<>]" -#DEFINE C_END_MARKER_NOT_FOUND_LOC "Can not found end marker [<>] that closes start marker [<>] on line <>" -#DEFINE C_FIELD_NOT_FOUND_ON_FILE_STRUCTURE_LOC "Field [<>] not found on structure of file <>" +#DEFINE C_ENDDEFINE_MARKER_NOT_FOUND_LOC "Cannot find end marker [ENDDEFINE] of line <> for ID [<>]" +#DEFINE C_END_MARKER_NOT_FOUND_LOC "Cannot find end marker [<>] that closes start marker [<>] on line <>" +#DEFINE C_FIELD_NOT_FOUND_ON_FILE_STRUCTURE_LOC "Field [<>] not found in structure of file <>" #DEFINE C_FILE_DOESNT_EXIST_LOC 'File does not exist:' #DEFINE C_FILE_NAME_IS_NOT_SUPPORTED_LOC "File [<<.c_InputFile>>] is not supported" #DEFINE C_FILE_NOT_FOUND_LOC "File not found" #DEFINE C_EXTENSION_RECONFIGURATION_LOC "Extension Reconfiguration:" #DEFINE C_FOXBIN2PRG_ERROR_CAPTION_LOC "FOXBIN2PRG: ERROR!!" #DEFINE C_FOXBIN2PRG_INFO_SINTAX_LOC "FOXBIN2PRG: SYNTAX INFO" -#DEFINE C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC "FOXBIN2PRG [,cType ,cTextName ,cGenText ,cNoMostrarErrores ,cDebug, cDontShowProgress, cOriginalFileName, cRecompile, cNoTimestamps]" + CR_LF + CR_LF ; - + "Example to generate TXT of all VCX of 'c:\desa\clases', without showing error window and generating LOG file: " + CR_LF ; - + " FOXBIN2PRG 'c:\desa\clases\*.vcx' '0' '0' '0' '1' '1'" + CR_LF + CR_LF ; - + "Example to generate TXT of all VCX of 'c:\desa\clases', without showing error window and without LOG file: " + CR_LF ; - + " FOXBIN2PRG 'c:\desa\clases\*.vc2' '0' '0' '0' '1' '0'" +#DEFINE C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC "FOXBIN2PRG [,cType ,cTextName ,cGenText ,cDontShowErrors ,cDebug, cDontShowProgress, cOriginalFileName, cRecompile, cNoTimestamps]" + CR_LF + CR_LF ; + + "Example of generating TXT from all VCX in 'c:\development\classes', without showing error window and generating LOG file: " + CR_LF ; + + " FOXBIN2PRG 'c:\development\classes\*.vcx' '0' '0' '0' '1' '1'" + CR_LF + CR_LF ; + + "Example of generating TXT from all VCX is 'c:\development\classes', without showing error window and without LOG file: " + CR_LF ; + + " FOXBIN2PRG 'c:\development\classes\*.vc2' '0' '0' '0' '1' '0'" #DEFINE C_FOXBIN2PRG_JUST_VFP_9_LOC "FOXBIN2PRG is only for Visual FoxPro 9.0!" #DEFINE C_FOXBIN2PRG_WARN_CAPTION_LOC "FOXBIN2PRG: WARNING!" -#DEFINE C_MENU_NOT_IN_VFP9_FORMAT_LOC "Menu [<>] is NOT VFP 9 Format! - Please convert to VFP 9 with MODIFY MENU <>" +#DEFINE C_MENU_NOT_IN_VFP9_FORMAT_LOC "Menu [<>] is NOT in VFP 9 Format! - Please convert to VFP 9 with MODIFY MENU <>" #DEFINE C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC "Object [<>] does not contain oReg object (level <>)" #DEFINE C_NAMES_CAPITALIZATION_PROGRAM_FOUND_LOC "* Names capitalization program [<>] found" #DEFINE C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC "* Names capitalization program [<>] not found" #DEFINE C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC "Operation not recognized. Only SETNAME and GETNAME allowed." -#DEFINE C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC "Optimization: Output file [<>] is not overwriten because it is the same as the genereted." +#DEFINE C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC "Optimization: Output file [<>] was not overwritten because it is the same as was generated." #DEFINE C_PROCEDURE_NOT_CLOSED_ON_LINE_LOC "Procedure not closed. Last line of code must be ENDPROC. [<>]" #DEFINE C_PROCESSING_LOC "Processing file" #DEFINE C_PROCESS_PROGRESS_LOC "Process Progress:"