From d900dc5b1cc49323003c2bfe4f3cc80365b51ee3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Czerpak?= Date: Mon, 3 Jun 2013 16:45:25 +0200 Subject: [PATCH] 2013-06-03 16:45 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * src/rtl/hbtoken.c + added support for passing token parser parameters as bit field number. The goal is to replace last to parameters with single bit field which allows to set many different parsing aspects instead of adding many new parameters. + added support for reverted apostrophes quoting: `a b c` ; TODO: add constant values to control parser in token functions * utils/hbmk2/hbmk2.prg ! respect reverted apostrophes quoting in options read from .hbp/.hbm files. ! do not ignore tool parameters passed in -*flags= hbmk2 params if they do not start with '-'. It resolves problems with shells which need special quoting to pass parameters, i.e. with both modifications it's possible to use in hbp files dynamic parameters encapsulated in different forms, depending on used platform, shell and parameter type, i.e. parameters are passed as set of separated arguments: -cflag=`config-tool1` or paramters are passed as single argument: -cflag="`config-tool2`" or parameters are passed in file which name shows config-tool3: -cflag="@`config-tool3`" In short words now things like: -cflag=`pkg-config --cflags gtk+-3.0` will work correctly with .hbp files --- ChangeLog.txt | 27 +++++++++++++++++++++++++++ src/rtl/hbtoken.c | 16 +++++++++++----- utils/hbmk2/hbmk2.prg | 25 +++++++++++++------------ 3 files changed, 51 insertions(+), 17 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 49ab6444c8..b0667a719b 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -10,6 +10,33 @@ * Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment */ +2013-06-03 16:45 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) + * src/rtl/hbtoken.c + + added support for passing token parser parameters as bit field number. + The goal is to replace last to parameters with single bit field which + allows to set many different parsing aspects instead of adding many + new parameters. + + added support for reverted apostrophes quoting: `a b c` + ; TODO: add constant values to control parser in token functions + + * utils/hbmk2/hbmk2.prg + ! respect reverted apostrophes quoting in options read from .hbp/.hbm + files. + ! do not ignore tool parameters passed in -*flags= hbmk2 params if + they do not start with '-'. It resolves problems with shells which + need special quoting to pass parameters, i.e. with both modifications + it's possible to use in hbp files dynamic parameters encapsulated in + different forms, depending on used platform, shell and parameter type, + i.e. parameters are passed as set of separated arguments: + -cflag=`config-tool1` + or paramters are passed as single argument: + -cflag="`config-tool2`" + or parameters are passed in file which name shows config-tool3: + -cflag="@`config-tool3`" + In short words now things like: + -cflag=`pkg-config --cflags gtk+-3.0` + will work correctly with .hbp files + 2013-05-29 15:14 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * src/vm/hashes.c ! fixed and optimized reordering when KEEPORDER flag is cleared diff --git a/src/rtl/hbtoken.c b/src/rtl/hbtoken.c index facd9d89de..7c71ebe3c4 100644 --- a/src/rtl/hbtoken.c +++ b/src/rtl/hbtoken.c @@ -52,8 +52,9 @@ #define _HB_TOK_RESPECT_DQUOTE 1 #define _HB_TOK_RESPECT_SQUOTE 2 -#define _HB_TOK_ISDELIM 4 -#define _HB_TOK_STRIP_QUUTE 8 +#define _HB_TOK_RESPECT_BQUOTE 4 +#define _HB_TOK_ISDELIM 8 +#define _HB_TOK_STRIP_QUUTE 16 static HB_SIZE hb_tokenCount( const char * szLine, HB_SIZE nLen, const char * szDelim, HB_SIZE nDelim, @@ -70,7 +71,8 @@ static HB_SIZE hb_tokenCount( const char * szLine, HB_SIZE nLen, cQuote = 0; } else if( ( szLine[ ul ] == '"' && ( iFlags & _HB_TOK_RESPECT_DQUOTE ) ) || - ( szLine[ ul ] == '\'' && ( iFlags & _HB_TOK_RESPECT_SQUOTE ) ) ) + ( szLine[ ul ] == '\'' && ( iFlags & _HB_TOK_RESPECT_SQUOTE ) ) || + ( szLine[ ul ] == '`' && ( iFlags & _HB_TOK_RESPECT_BQUOTE ) ) ) cQuote = szLine[ ul ]; else if( szLine[ ul ] == szDelim[ 0 ] && ( nDelim == 1 || ! memcmp( szLine + ul, szDelim, nDelim ) ) ) @@ -104,7 +106,8 @@ static const char * hb_tokenGet( const char * szLine, HB_SIZE nLen, cQuote = 0; } else if( ( szLine[ ul ] == '"' && ( iFlags & _HB_TOK_RESPECT_DQUOTE ) ) || - ( szLine[ ul ] == '\'' && ( iFlags & _HB_TOK_RESPECT_SQUOTE ) ) ) + ( szLine[ ul ] == '\'' && ( iFlags & _HB_TOK_RESPECT_SQUOTE ) ) || + ( szLine[ ul ] == '`' && ( iFlags & _HB_TOK_RESPECT_BQUOTE ) ) ) cQuote = szLine[ ul ]; else if( szLine[ ul ] == szDelim[ 0 ] && ( nDelim == 1 || ! memcmp( szLine + ul, szDelim, nDelim ) ) ) @@ -152,7 +155,8 @@ static PHB_ITEM hb_tokenArray( const char * szLine, HB_SIZE nLen, cQuote = 0; } else if( ( szLine[ ul ] == '"' && ( iFlags & _HB_TOK_RESPECT_DQUOTE ) ) || - ( szLine[ ul ] == '\'' && ( iFlags & _HB_TOK_RESPECT_SQUOTE ) ) ) + ( szLine[ ul ] == '\'' && ( iFlags & _HB_TOK_RESPECT_SQUOTE ) ) || + ( szLine[ ul ] == '`' && ( iFlags & _HB_TOK_RESPECT_BQUOTE ) ) ) cQuote = szLine[ ul ]; else if( szLine[ ul ] == szDelim[ 0 ] && ( nDelim == 1 || ! memcmp( szLine + ul, szDelim, nDelim ) ) ) @@ -221,6 +225,8 @@ static HB_BOOL hb_tokenParam( int iParam, HB_SIZE nSkip, if( hb_parl( iParam + 2 ) ) iFlags &= ~_HB_TOK_RESPECT_SQUOTE; } + else + iFlags |= hb_parni( iParam + 1 ); } *pnLen = nLen; diff --git a/utils/hbmk2/hbmk2.prg b/utils/hbmk2/hbmk2.prg index 09a3eb37fc..226b0db668 100644 --- a/utils/hbmk2/hbmk2.prg +++ b/utils/hbmk2/hbmk2.prg @@ -3151,14 +3151,14 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit CASE Left( cParamL, Len( "-iflag=" ) ) == "-iflag=" cParam := MacroProc( hbmk, SubStr( cParam, Len( "-iflag=" ) + 1 ), aParam[ _PAR_cFileName ] ) - IF Left( cParam, 1 ) $ cOptPrefix + IF ! Empty( cParam ) AAdd( hbmk[ _HBMK_aOPTI ], hbmk_hb_DirSepToOS( cParam, 2 ) ) ENDIF CASE Left( cParamL, Len( "-signflag=" ) ) == "-signflag=" cParam := MacroProc( hbmk, SubStr( cParam, Len( "-signflag=" ) + 1 ), aParam[ _PAR_cFileName ] ) - IF Left( cParam, 1 ) $ cOptPrefix + IF ! Empty( cParam ) AAdd( hbmk[ _HBMK_aOPTS ], hbmk_hb_DirSepToOS( cParam, 2 ) ) ENDIF @@ -3199,56 +3199,56 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit CASE Left( cParamL, Len( "-cflag=" ) ) == "-cflag=" cParam := MacroProc( hbmk, SubStr( cParam, Len( "-cflag=" ) + 1 ), aParam[ _PAR_cFileName ] ) - IF Left( cParam, 1 ) $ cOptPrefix + IF ! Empty( cParam ) AAdd( hbmk[ _HBMK_aOPTC ], hbmk_hb_DirSepToOS( cParam, 2 ) ) ENDIF CASE Left( cParamL, Len( "-cflag+=" ) ) == "-cflag+=" cParam := MacroProc( hbmk, SubStr( cParam, Len( "-cflag+=" ) + 1 ), aParam[ _PAR_cFileName ] ) - IF Left( cParam, 1 ) $ cOptPrefix + IF ! Empty( cParam ) AAdd( hbmk[ _HBMK_aOPTCUSER ], hbmk_hb_DirSepToOS( cParam, 2 ) ) ENDIF CASE Left( cParamL, Len( "-resflag=" ) ) == "-resflag=" cParam := MacroProc( hbmk, SubStr( cParam, Len( "-resflag=" ) + 1 ), aParam[ _PAR_cFileName ] ) - IF Left( cParam, 1 ) $ cOptPrefix + IF ! Empty( cParam ) AAdd( hbmk[ _HBMK_aOPTRES ], hbmk_hb_DirSepToOS( cParam, 2 ) ) ENDIF CASE Left( cParamL, Len( "-ldflag=" ) ) == "-ldflag=" cParam := MacroProc( hbmk, SubStr( cParam, Len( "-ldflag=" ) + 1 ), aParam[ _PAR_cFileName ] ) - IF Left( cParam, 1 ) $ cOptPrefix + IF ! Empty( cParam ) AAddWithWarning( hbmk, hbmk[ _HBMK_aOPTL ], hbmk_hb_DirSepToOS( cParam, 2 ), aParam, .F. ) ENDIF CASE Left( cParamL, Len( "-ldflag+=" ) ) == "-ldflag+=" cParam := MacroProc( hbmk, SubStr( cParam, Len( "-ldflag+=" ) + 1 ), aParam[ _PAR_cFileName ] ) - IF Left( cParam, 1 ) $ cOptPrefix + IF ! Empty( cParam ) AAddWithWarning( hbmk, hbmk[ _HBMK_aOPTLPOST ], hbmk_hb_DirSepToOS( cParam, 2 ), aParam, .F. ) ENDIF CASE Left( cParamL, Len( "-dflag=" ) ) == "-dflag=" cParam := MacroProc( hbmk, SubStr( cParam, Len( "-dflag=" ) + 1 ), aParam[ _PAR_cFileName ] ) - IF Left( cParam, 1 ) $ cOptPrefix + IF ! Empty( cParam ) AAddWithWarning( hbmk, hbmk[ _HBMK_aOPTD ], hbmk_hb_DirSepToOS( cParam, 2 ), aParam, .F. ) ENDIF CASE Left( cParamL, Len( "-dflag+=" ) ) == "-dflag+=" cParam := MacroProc( hbmk, SubStr( cParam, Len( "-dflag+=" ) + 1 ), aParam[ _PAR_cFileName ] ) - IF Left( cParam, 1 ) $ cOptPrefix + IF ! Empty( cParam ) AAddWithWarning( hbmk, hbmk[ _HBMK_aOPTDPOST ], hbmk_hb_DirSepToOS( cParam, 2 ), aParam, .F. ) ENDIF CASE Left( cParamL, Len( "-aflag=" ) ) == "-aflag=" cParam := MacroProc( hbmk, SubStr( cParam, Len( "-aflag=" ) + 1 ), aParam[ _PAR_cFileName ] ) - IF Left( cParam, 1 ) $ cOptPrefix + IF ! Empty( cParam ) AAdd( hbmk[ _HBMK_aOPTA ], hbmk_hb_DirSepToOS( cParam, 2 ) ) ENDIF @@ -3262,7 +3262,7 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit CASE Left( cParamL, Len( "-pflag=" ) ) == "-pflag=" cParam := MacroProc( hbmk, SubStr( cParam, Len( "-pflag=" ) + 1 ), aParam[ _PAR_cFileName ] ) - IF Left( cParam, 1 ) $ cOptPrefix + IF ! Empty( cParam ) AAdd( hbmk[ _HBMK_aPLUGINPars ], hbmk_hb_DirSepToOS( cParam, 2 ) ) ENDIF @@ -11332,8 +11332,9 @@ STATIC FUNCTION HBM_Load( hbmk, aParams, cFileName, nNestingLevel, lProcHBP, cPa FOR EACH cLine IN hb_ATokens( cFile, _CHR_EOL ) IF !( Left( cLine, 1 ) == "#" ) - FOR EACH cParam IN hb_ATokens( cLine,, .T. ) + FOR EACH cParam IN hb_ATokens( cLine,, 7 ) cParam := StrStripQuote( cParam ) + IF ! Empty( cParam ) DO CASE CASE Lower( cParam ) == "-skip"