2000-10-19 19:40 UTC+0800 Ron Pinkas <ron@profit-master.com>
* contrib/dot/pp.prg
! Added logic to support multi-word stoppers needed by multi-word restricted list, like
[ <lClick: ON CLICK, ON LEFT CLICK> <uLClick> ]
/* Only 1 known error remains in processing of fwh/samples/fwbrow.prg */
* include/hbclass.ch
* Temprarily removed \ preceding < of not existing match markers, in nested # directive in result.
/* Need to be readded once PP is fixed. */
This commit is contained in:
@@ -1,3 +1,13 @@
|
||||
2000-10-19 19:40 UTC+0800 Ron Pinkas <ron@profit-master.com>
|
||||
* contrib/dot/pp.prg
|
||||
! Added logic to support multi-word stoppers needed by multi-word restricted list, like
|
||||
[ <lClick: ON CLICK, ON LEFT CLICK> <uLClick> ]
|
||||
/* Only 1 known error remains in processing of fwh/samples/fwbrow.prg */
|
||||
|
||||
* include/hbclass.ch
|
||||
* Temprarily removed \ preceding < of not existing match markers, in nested # directive in result.
|
||||
/* Need to be readded once PP is fixed. */
|
||||
|
||||
2000-10-19 16:25 UTC-0400 David G. Holm <dholm@jsd-llc.com>
|
||||
* source/rtl/gtwin.gtwin.c
|
||||
! Fixed bug in if test for discarding accent key strokes.
|
||||
|
||||
@@ -465,7 +465,7 @@ FUNCTION ProcessFile( sSource, sSwitch )
|
||||
nNewLine := At( Chr(10), SubStr( sBuffer, nPosition + 1 ) )
|
||||
|
||||
IF nNewLine > 0 .AND. ( nClose > nNewLine )
|
||||
? nNewLine, nClose, SubStr( sBuffer, nPosition + 1, 78 )
|
||||
//? nNewLine, nClose, SubStr( sBuffer, nPosition + 1, 78 )
|
||||
Alert( [ERROR! Unterminated '"'] )
|
||||
sLine += SubStr( sBuffer, nPosition, nNewLine - 1 )
|
||||
nPosition += ( nNewLine - 1 )
|
||||
@@ -499,7 +499,7 @@ FUNCTION ProcessFile( sSource, sSwitch )
|
||||
nNewLine := At( Chr(10), SubStr( sBuffer, nPosition + 1 ) )
|
||||
|
||||
IF nNewLine > 0 .AND. ( nClose > nNewLine )
|
||||
? nNewLine, nClose, SubStr( sBuffer, nPosition + 1, 78 )
|
||||
//? nNewLine, nClose, SubStr( sBuffer, nPosition + 1, 78 )
|
||||
Alert( "ERROR! Unterminated [']" )
|
||||
sLine += SubStr( sBuffer, nPosition, nNewLine - 1 )
|
||||
nPosition += ( nNewLine - 1 )
|
||||
@@ -649,7 +649,7 @@ RETURN .T.
|
||||
FUNCTION ProcessLine( sLine, aDefined, aTranslated, aCommanded, nLine, sSource )
|
||||
|
||||
LOCAL nNext, sDirective, bX, sToken, bNewLine, nRule
|
||||
LOCAL nNewLineAt, aLines, nLines, Counter, nOffset := 0
|
||||
LOCAL nNewLineAt, aLines, nLines, Counter
|
||||
LOCAL sLeft, sPassed := '', asOutLines := {}, sOut := ''
|
||||
LOCAL cChar, sLastToken, sTemp, cFirstChar, cLastChar
|
||||
LOCAL bString, nLen
|
||||
@@ -657,7 +657,7 @@ FUNCTION ProcessLine( sLine, aDefined, aTranslated, aCommanded, nLine, sSource )
|
||||
WHILE .T.
|
||||
|
||||
//? "Raw Processing: '", sLine, "'"
|
||||
//? nPendingLines, nOffset, nIfDef, IIF( nIfDef > 0, abIfDef[nIfDef] , )
|
||||
//? nPendingLines, nIfDef, IIF( nIfDef > 0, abIfDef[nIfDef] , )
|
||||
|
||||
IF ! sPassed == ''
|
||||
aAdd( asOutLines, ( sLeft + DropTrailingWS( sPassed ) ) )
|
||||
@@ -1036,6 +1036,8 @@ FUNCTION MatchRule( sKey, sLine, aRules, aResults, bStatement, bUpper )
|
||||
LOCAL aMP, nOptional := 0, sAnchor, cType, aList, nMarkerId, nKeyLen
|
||||
LOCAL sToken, sWorkLine, sNextExp, sNextAnchor, nMatch, nMatches
|
||||
LOCAL sPad, asRevert := {}, bNext, sPreMatch, sTemp, nLen, nBookMark
|
||||
LOCAL sPrimaryStopper, sPreStoppers, sStopper, sMultiStopper, nStopper, nStoppers
|
||||
LOCAL nSpaceAt, sStopLine, sNextStopper
|
||||
|
||||
nRules := Len( aRules )
|
||||
|
||||
@@ -1171,31 +1173,68 @@ FUNCTION MatchRule( sKey, sLine, aRules, aResults, bStatement, bUpper )
|
||||
IF aMP[2] > 0
|
||||
|
||||
/* Do we have to look for a stopper? */
|
||||
IF sAnchor == NIL .AND. ValType( aList ) == 'A'
|
||||
IF cType != ':' .AND. sAnchor == NIL .AND. ValType( aList ) == 'A'
|
||||
|
||||
nOptional := aMP[2]
|
||||
|
||||
sToken := NextToken( sWorkLine, .F. ) // Not using @ so sWorkLine is intact.
|
||||
IF sToken != NIL .AND. cType != ':'
|
||||
sToken := Upper( DropTrailingWS( sToken ) )
|
||||
sPreStoppers := sWorkLine
|
||||
sPrimaryStoper := NextToken( @sWorkLine, .F. )
|
||||
|
||||
IF sPrimaryStopper == NIL
|
||||
|
||||
//? "No primary", sPrimaryStopper
|
||||
sWorkLine := sPreStoppers
|
||||
|
||||
ELSE
|
||||
sPrimaryStopper := Upper( DropTrailingWS( sPrimaryStopper ) )
|
||||
|
||||
/* Is it a stopper (the anchor of another acceptable match) ? */
|
||||
IF bDbgMatch
|
||||
? "Stopper?: " + sToken
|
||||
? "Stopper?: " + sPrimaryStopper
|
||||
ENDIF
|
||||
|
||||
IF aRules[nRule][3]
|
||||
nLen := 10
|
||||
ELSE
|
||||
nLen := Max( 4, Len( sToken) )
|
||||
nLen := Max( 4, Len( sPrimaryStopper) )
|
||||
ENDIF
|
||||
|
||||
IF aScan( aList, {|sStopper| Left( sStopper, nLen ) == sToken } ) > 0
|
||||
nStoppers := Len( aList )
|
||||
FOR nStopper := 1 TO nStoppers
|
||||
|
||||
sStopLine := sWorkLine
|
||||
sToken := sPrimaryStopper
|
||||
sStopper := aList[ nStopper ]
|
||||
|
||||
sMultiStopper := ''
|
||||
WHILE ( nSpaceAt := At( ' ', sStopper ) ) > 0
|
||||
sNextStopper := Left( sStopper, nSpaceAt - 1 )
|
||||
//? "Next Stopper: " + sNextStopper, sToken
|
||||
IF Left( sNextStopper, nLen ) == sToken
|
||||
sMultiStopper += sNextStopper
|
||||
sStopper := SubStr( sStopper, nSpaceAt )
|
||||
sMultiStopper += ExtractLeadingWS( @sStopper )
|
||||
sToken := NextToken( @sStopLine, .F. )
|
||||
sToken := Upper( DropTrailingWS( sToken ) )
|
||||
ELSE
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDDO
|
||||
|
||||
IF Left( sStopper, nLen ) == sToken
|
||||
sMultiStopper += sStopper
|
||||
EXIT
|
||||
ENDIF
|
||||
NEXT
|
||||
|
||||
IF nStopper <= nStoppers
|
||||
|
||||
IF bDbgMatch
|
||||
? "Found stopper"
|
||||
? "Found stopper: " + sMultiStopper
|
||||
ENDIF
|
||||
|
||||
sWorkLine := sStopLine
|
||||
|
||||
/* Rewind to beging of same level and then search for the stopper match */
|
||||
|
||||
/* Current level */
|
||||
@@ -1221,11 +1260,11 @@ FUNCTION MatchRule( sKey, sLine, aRules, aResults, bStatement, bUpper )
|
||||
aMP := aRules[nRule][2][nMatch]
|
||||
|
||||
IF aMP[3] == NIL .AND. aMP[4] == ':'
|
||||
IF aScan( aMP[5], sToken ) > 0
|
||||
IF aScan( aMP[5], sMultiStopper ) > 0
|
||||
EXIT
|
||||
ENDIF
|
||||
ELSE
|
||||
IF aMP[2] >= 0 .AND. aMP[2] <= nOptional .AND. aMP[3] == sToken
|
||||
IF aMP[2] >= 0 .AND. aMP[2] <= nOptional .AND. aMP[3] == sMultiStopper
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDIF
|
||||
@@ -1236,6 +1275,9 @@ FUNCTION MatchRule( sKey, sLine, aRules, aResults, bStatement, bUpper )
|
||||
|
||||
ELSE
|
||||
|
||||
sWorkLine := sPreStoppers
|
||||
sMultiStopper := NIl
|
||||
|
||||
IF bDbgMatch
|
||||
? sToken, "Not a stopper."
|
||||
ENDIF
|
||||
@@ -1254,9 +1296,9 @@ FUNCTION MatchRule( sKey, sLine, aRules, aResults, bStatement, bUpper )
|
||||
|
||||
IF bDbgMatch
|
||||
IF sAnchor == NIL
|
||||
? nMatch, 'of', nMatches, "NO Anchore!", nMarkerId, nOptional, aMP[2]
|
||||
? nMatch, 'of', nMatches, "NO Anchore!", nMarkerId, nOptional, aMP[2], sMultiStoppers
|
||||
ELSE
|
||||
? nMatch, 'of', nMatches, "Searching for Anchore: '" + sAnchor + "'", nMarkerId, nOptional, aMP[2]
|
||||
? nMatch, 'of', nMatches, "Searching for Anchore: '" + sAnchor + "'", nMarkerId, nOptional, aMP[2], sMultiStoppers
|
||||
ENDIF
|
||||
WAIT
|
||||
ENDIF
|
||||
@@ -1269,9 +1311,21 @@ FUNCTION MatchRule( sKey, sLine, aRules, aResults, bStatement, bUpper )
|
||||
xMarker := NIL
|
||||
sPreMatch := sWorkLine
|
||||
|
||||
IF ( sAnchor == NIL .OR. ;
|
||||
IF ( sAnchor == NIL .OR. sMultiStopper != NIL .OR. ;
|
||||
( ( ( sToken := NextToken( @sWorkLine, .T. ) ) != NIL .AND. ( DropTrailingWS( @sToken, @sPad ), nLen := Max( 4, Len( sToken ) ), Upper( sToken ) == Left( sAnchor, nLen ) ) ) ) ) ;
|
||||
.AND. ( nMarkerId == 0 .OR. ( ( xMarker := NextExp( @sWorkLine, cType, aList, NIL, sNextAnchor ) ) != NIL ) )
|
||||
.AND. ( nMarkerId == 0 .OR. ( sAnchor == NIL .AND. sMultiStopper != NIL ) .OR. ( ( xMarker := NextExp( @sWorkLine, cType, aList, NIL, sNextAnchor ) ) != NIL ) )
|
||||
|
||||
IF sMultiStopper != NIL
|
||||
IF sAnchor == NIL
|
||||
xMarker := sMultiStopper
|
||||
ELSE
|
||||
sToken := sMultiStopper
|
||||
ENDIF
|
||||
IF bDbgMatch
|
||||
? "Using MultiStopper: " + sMultiStopper
|
||||
ENDIF
|
||||
sMultiStopper := NIL
|
||||
ENDIF
|
||||
|
||||
IF bDbgMatch
|
||||
? "sKey =", sKey, "Anchor =", sAnchor, "nMarkerId =", nMarkerId, "sToken =", sToken, "xMarker =", xMarker, "<="
|
||||
@@ -1988,6 +2042,10 @@ FUNCTION NextExp( sLine, cType, aWords, aExp, sNextAnchor )
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
ELSEIF Left( sToken, 1 ) == ')'
|
||||
|
||||
sExp := NIL
|
||||
|
||||
ELSEIF Left( sToken, 1 ) == '('
|
||||
|
||||
sExp := sToken
|
||||
@@ -2009,6 +2067,10 @@ FUNCTION NextExp( sLine, cType, aWords, aExp, sNextAnchor )
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
ELSEIF Left( sToken, 1 ) == '}'
|
||||
|
||||
sExp := NIL
|
||||
|
||||
ELSEIF Left( sToken, 1 ) == '{'
|
||||
|
||||
sExp := sToken
|
||||
@@ -2917,21 +2979,19 @@ FUNCTION CompileRule( sRule, aRules, aResults, bX, bUpper )
|
||||
nOffset := 0
|
||||
IF nNext == 0
|
||||
nOptionalAt := At( '[', sRule )
|
||||
WHILE nOPtionalAt > 1 .AND. SubStr( sRule, nOptionalAt - 1, 1 ) == '\'
|
||||
sRule := Left( sRule, nOptionalAt - 2 ) + SubStr( sRule, nOptionalAt )
|
||||
nOffset += nOptionalAt - 1
|
||||
nOptionalAt := At( '[', SubStr( sRule, nOptionalAt /* + 1 (1 char removed)*/ ) )
|
||||
WHILE nOPtionalAt > 1 .AND. SubStr( sRule, nOffset + nOptionalAt - 1, 1 ) == '\'
|
||||
nOffset += nOptionalAt
|
||||
nOptionalAt := At( '[', SubStr( sRule, nOffset + 1 ) )
|
||||
ENDDO
|
||||
IF nOptionalAt > 0
|
||||
nOptionalAt += nOffset
|
||||
ENDIF
|
||||
ELSE
|
||||
nOptionalAt := At( '[', sRule )
|
||||
WHILE nOPtionalAt > 1 .AND. nOptionalAt <= nNext .AND. SubStr( sRule, nOptionalAt - 1, 1 ) == '\'
|
||||
sRule := Left( sRule, nOptionalAt - 2 ) + SubStr( sRule, nOptionalAt )
|
||||
nOffset += nOptionalAt - 1
|
||||
WHILE nOPtionalAt > 1 .AND. nOptionalAt <= nNext .AND. SubStr( sRule, nOffset + nOptionalAt - 1, 1 ) == '\'
|
||||
nOffset += nOptionalAt
|
||||
nNext--
|
||||
nOptionalAt := At( '[', SubStr( sRule, nOptionalAt /* + 1 (1 char removed)*/ ) )
|
||||
nOptionalAt := At( '[', SubStr( sRule, nOffset + 1 ) )
|
||||
ENDDO
|
||||
IF nOptionalAt > 0
|
||||
nOptionalAt += nOffset
|
||||
@@ -2952,13 +3012,12 @@ FUNCTION CompileRule( sRule, aRules, aResults, bX, bUpper )
|
||||
IF nAt == 0
|
||||
nMarkerAt := At( '<', sRule )
|
||||
WHILE nMarkerAt > 0
|
||||
IF nMarkerAt > 1 .AND. SubStr( sRule, nMarkerAt - 1, 1 ) == '\'
|
||||
sRule := Left( sRule, nMarkerAt - 2 ) + SubStr( sRule, nMarkerAt )
|
||||
nOffset += nMarkerAt - 1
|
||||
nMarkerAt := At( '<', SubStr( sRule, nMarkerAt /* + 1 (1 char removed)*/ ) )
|
||||
ELSEIF nMarkerAt > 0 .AND. SubStr( sRule, nMarkerAt + 1, 1 ) $ ">=" // ignore <= and <>
|
||||
IF nMarkerAt > 1 .AND. SubStr( sRule, nOffset + nMarkerAt - 1, 1 ) == '\'
|
||||
nOffset += nMarkerAt
|
||||
nMarkerAt := At( '<', SubStr( sRule, nOffset + 1 ) )
|
||||
ELSEIF nMarkerAt > 0 .AND. SubStr( sRule, nOffset + nMarkerAt + 1, 1 ) $ ">=" // ignore <= and <>
|
||||
nOffset += nMarkerAt + 1
|
||||
nMarkerAt := At( '<', SubStr( sRule, nMarkerAt + 2 ) )
|
||||
nMarkerAt := At( '<', SubStr( sRule, nOffset + 1 ) )
|
||||
ELSE
|
||||
EXIT
|
||||
ENDIF
|
||||
@@ -2969,13 +3028,12 @@ FUNCTION CompileRule( sRule, aRules, aResults, bX, bUpper )
|
||||
ELSE
|
||||
nMarkerAt := At( '<', sRule )
|
||||
WHILE nMarkerAt > 0
|
||||
IF nMarkerAt > 1 .AND. nMarkerAt < nAt .AND. SubStr( sRule, nMarkerAt - 1, 1 ) == '\'
|
||||
sRule := Left( sRule, nMarkerAt - 2 ) + SubStr( sRule, nMarkerAt )
|
||||
nOffset += nMarkerAt - 1
|
||||
nMarkerAt := At( '<', SubStr( sRule, nMarkerAt /* + 1 (1 char removed)*/ ) )
|
||||
ELSEIF nMarkerAt > 0 .AND. nMarkerAt < nAt .AND. SubStr( sRule, nMarkerAt + 1, 1 ) $ ">=" // ignore <= and <>
|
||||
IF nMarkerAt > 1 .AND. nOffset + nMarkerAt < nAt .AND. SubStr( sRule, nOffset + nMarkerAt - 1, 1 ) == '\'
|
||||
nOffset += nMarkerAt
|
||||
nMarkerAt := At( '<', SubStr( sRule, nOffset + 1 ) )
|
||||
ELSEIF nMarkerAt > 0 .AND. nOffset + nMarkerAt < nAt .AND. SubStr( sRule, nOffset + nMarkerAt + 1, 1 ) $ ">=" // ignore <= and <>
|
||||
nOffset += nMarkerAt + 1
|
||||
nMarkerAt := At( '<', SubStr( sRule, nMarkerAt + 2 ) )
|
||||
nMarkerAt := At( '<', SubStr( sRule, nOffset + 1 ) )
|
||||
ELSE
|
||||
EXIT
|
||||
ENDIF
|
||||
@@ -3000,21 +3058,18 @@ FUNCTION CompileRule( sRule, aRules, aResults, bX, bUpper )
|
||||
nOffset := 0
|
||||
IF nAt == 0
|
||||
nCloseOptionalAt := At( ']', sRule )
|
||||
WHILE nCloseOptionalAt > 1 .AND. SubStr( sRule, nCloseOptionalAt - 1, 1 ) == '\'
|
||||
sRule := Left( sRule, nCloseOptionalAt - 2 ) + SubStr( sRule, nCloseOptionalAt )
|
||||
nOffset += nCloseOptionalAt - 1
|
||||
nCloseOptionalAt := At( ']', SubStr( sRule, nCloseOptionalAt /* + 1 (1 char removed)*/ ) )
|
||||
WHILE nCloseOptionalAt > 1 .AND. SubStr( sRule, nOffset + nCloseOptionalAt - 1, 1 ) == '\'
|
||||
nOffset += nCloseOptionalAt
|
||||
nCloseOptionalAt := At( ']', SubStr( sRule, nOffset + 1 ) )
|
||||
ENDDO
|
||||
IF nCloseOptionalAt > 0
|
||||
nCloseOptionalAt += nOffset
|
||||
ENDIF
|
||||
ELSE
|
||||
nCloseOptionalAt := At( ']', sRule )
|
||||
WHILE nCloseOptionalAt > 1 .AND. nCloseOptionalAt <= nAt .AND. SubStr( sRule, nCloseOptionalAt - 1, 1 ) == '\'
|
||||
sRule := Left( sRule, nCloseOptionalAt - 2 ) + SubStr( sRule, nCloseOptionalAt )
|
||||
nOffset += nCloseOptionalAt - 1
|
||||
nAt--
|
||||
nCloseOptionalAt := At( ']', SubStr( sRule, nCloseOptionalAt /* + 1 (1 char removed)*/ ) )
|
||||
WHILE nCloseOptionalAt > 1 .AND. nOffset + nCloseOptionalAt <= nAt .AND. SubStr( sRule, nOffset + nCloseOptionalAt - 1, 1 ) == '\'
|
||||
nOffset += nCloseOptionalAt
|
||||
nCloseOptionalAt := At( ']', SubStr( sRule, nOffset + 1 ) )
|
||||
ENDDO
|
||||
IF nCloseOptionalAt > 0
|
||||
nCloseOptionalAt += nOffset
|
||||
@@ -3144,6 +3199,7 @@ FUNCTION CompileRule( sRule, aRules, aResults, bX, bUpper )
|
||||
|
||||
/* Optional group start (marker), no anchor, and not a restricted pattern - have to build stop words list! */
|
||||
IF aMatch[1] > 0 .AND. aMatch[2] > 0 .AND. aMatch[3] == NIL .AND. aMatch[4] != ':'
|
||||
|
||||
aWords := {}
|
||||
nOptional := aMatch[2]
|
||||
|
||||
@@ -3196,6 +3252,11 @@ FUNCTION CompileRule( sRule, aRules, aResults, bX, bUpper )
|
||||
IF Len( aWords ) > 0
|
||||
aRule[2][Counter][5] := aWords
|
||||
ENDIF
|
||||
|
||||
ENDIF
|
||||
|
||||
IF aMatch[3] != NIL
|
||||
aMatch[3] := StrTran( aMatch[3], '\', '' )
|
||||
ENDIF
|
||||
|
||||
//? aRule[1], aRule[2][Counter][1], aRule[2][Counter][2], aRule[2][Counter][3], aRule[2][Counter][4], aRule[2][Counter][5]
|
||||
@@ -3232,10 +3293,9 @@ FUNCTION CompileRule( sRule, aRules, aResults, bX, bUpper )
|
||||
DO WHILE ! ( sResult == '' )
|
||||
nOffset := 0
|
||||
nOptionalAt := At( '[', sResult )
|
||||
WHILE nOPtionalAt > 1 .AND. SubStr( sResult, nOptionalAt - 1, 1 ) == '\'
|
||||
sResult := Left( sResult, nOptionalAt - 2 ) + SubStr( sResult, nOptionalAt )
|
||||
nOffset += nOptional - 1
|
||||
nOptionalAt := At( '[', SubStr( sResult, nOptionalAt /* + 1 (1 char removed)*/ ) )
|
||||
WHILE nOPtionalAt > 1 .AND. SubStr( sResult, nOffset + nOptionalAt - 1, 1 ) == '\'
|
||||
nOffset += nOptional
|
||||
nOptionalAt := At( '[', SubStr( sResult, nOffset + 1 ) )
|
||||
ENDDO
|
||||
IF nOptionalAt > 0
|
||||
nOptionalAt += nOffset
|
||||
@@ -3245,13 +3305,12 @@ FUNCTION CompileRule( sRule, aRules, aResults, bX, bUpper )
|
||||
IF nOptionalAt == 0
|
||||
nMarkerAt := At( '<', sResult )
|
||||
WHILE nMarkerAt > 0
|
||||
IF nMarkerAt > 1 .AND. SubStr( sResult, nMarkerAt - 1, 1 ) == '\'
|
||||
sResult := Left( sResult, nMarkerAt - 2 ) + SubStr( sResult, nMarkerAt )
|
||||
nOffset += nMarkerAt - 1
|
||||
nMarkerAt := At( '<', SubStr( sResult, nMarkerAt /* + 1 (1 char removed)*/ ) )
|
||||
ELSEIF nMarkerAt > 0 .AND. SubStr( sResult, nMarkerAt + 1, 1 ) $ ">=" // ignore <= and <>
|
||||
IF nMarkerAt > 1 .AND. SubStr( sResult, nOffset + nMarkerAt - 1, 1 ) == '\'
|
||||
nOffset += nMarkerAt
|
||||
nMarkerAt := At( '<', SubStr( sResult, nOffset + 1 ) )
|
||||
ELSEIF nMarkerAt > 0 .AND. SubStr( sResult, nOffset + nMarkerAt + 1, 1 ) $ ">=" // ignore <= and <>
|
||||
nOffset += nMarkerAt + 1
|
||||
nMarkerAt := At( '<', SubStr( sResult, nMarkerAt + 2 ) )
|
||||
nMarkerAt := At( '<', SubStr( sResult, nOffset + 1 ) )
|
||||
ELSE
|
||||
EXIT
|
||||
ENDIF
|
||||
@@ -3262,13 +3321,12 @@ FUNCTION CompileRule( sRule, aRules, aResults, bX, bUpper )
|
||||
ELSE
|
||||
nMarkerAt := At( '<', sResult )
|
||||
WHILE nMarkerAt > 0
|
||||
IF nMarkerAt > 1 .AND. nMarkerAt < nOptionalAt .AND. SubStr( sResult, nMarkerAt - 1, 1 ) == '\'
|
||||
sResult := Left( sResult, nMarkerAt - 2 ) + SubStr( sResult, nMarkerAt )
|
||||
nOffset += nMarkerAt - 1
|
||||
nMarkerAt := At( '<', SubStr( sResult, nMarkerAt /* + 1 (1 char removed)*/ ) )
|
||||
ELSEIF nMarkerAt > 0 .AND. nMarkerAt < nOptionalAt .AND. SubStr( sResult, nMarkerAt + 1, 1 ) $ ">=" // ignore <= and <>
|
||||
IF nMarkerAt > 1 .AND. nOffset + nMarkerAt < nOptionalAt .AND. SubStr( sResult, nOffset + nMarkerAt - 1, 1 ) == '\'
|
||||
nOffset += nMarkerAt
|
||||
nMarkerAt := At( '<', SubStr( sResult, nOffset + 1 ) )
|
||||
ELSEIF nMarkerAt > 0 .AND. nOffset + nMarkerAt < nOptionalAt .AND. SubStr( sResult, nOffset + nMarkerAt + 1, 1 ) $ ">=" // ignore <= and <>
|
||||
nOffset += nMarkerAt + 1
|
||||
nMarkerAt := At( '<', SubStr( sResult, nMarkerAt + 2 ) )
|
||||
nMarkerAt := At( '<', SubStr( sResult, nOffset + 1 ) )
|
||||
ELSE
|
||||
EXIT
|
||||
ENDIF
|
||||
@@ -3291,21 +3349,18 @@ FUNCTION CompileRule( sRule, aRules, aResults, bX, bUpper )
|
||||
nOffset := 0
|
||||
IF nAt == 0
|
||||
nCloseOptionalAt := At( ']', sResult )
|
||||
WHILE nCloseOptionalAt > 1 .AND. SubStr( sResult, nCloseOptionalAt - 1, 1 ) == '\'
|
||||
sResult := Left( sResult, nCloseOptionalAt - 2 ) + SubStr( sResult, nCloseOptionalAt )
|
||||
nOffset += nCloseOptionalAt - 1
|
||||
nCloseOptionalAt := At( ']', SubStr( sResult, nCloseOptionalAt /* + 1 (1 char removed)*/ ) )
|
||||
WHILE nCloseOptionalAt > 1 .AND. SubStr( sResult, nOffset + nCloseOptionalAt - 1, 1 ) == '\'
|
||||
nOffset += nCloseOptionalAt
|
||||
nCloseOptionalAt := At( ']', SubStr( sResult, nOffset + 1 ) )
|
||||
ENDDO
|
||||
IF nCloseOptionalAt > 0
|
||||
nCloseOptionalAt += nOffset
|
||||
ENDIF
|
||||
ELSE
|
||||
nCloseOptionalAt := At( ']', sResult )
|
||||
WHILE nCloseOptionalAt > 1 .AND. nCloseOptionalAt <= nAt .AND. SubStr( sResult, nCloseOptionalAt - 1, 1 ) == '\'
|
||||
sResult := Left( sResult, nCloseOptionalAt - 2 ) + SubStr( sResult, nCloseOptionalAt )
|
||||
nOffset += nCloseOptionalAt - 1
|
||||
nAt--
|
||||
nCloseOptionalAt := At( ']', SubStr( sResult, nCloseOptionalAt /* + 1 (1 char removed)*/ ) )
|
||||
WHILE nCloseOptionalAt > 1 .AND. nOffset + nCloseOptionalAt <= nAt .AND. SubStr( sResult, nOffset + nCloseOptionalAt - 1, 1 ) == '\'
|
||||
nOffset += nCloseOptionalAt
|
||||
nCloseOptionalAt := At( ']', SubStr( sResult, nOffset + 1 ) )
|
||||
ENDDO
|
||||
IF nCloseOptionalAt > 0
|
||||
nCloseOptionalAt += nOffset
|
||||
|
||||
@@ -136,7 +136,7 @@ DECLARE TClass ;
|
||||
s_oClass := TClass():New( <(ClassName)>, __HB_CLS_PAR ([ <(SuperClass1)> ] [ ,<(SuperClassN)> ] ) ) ;;
|
||||
#undef _CLASS_NAME_ ;;
|
||||
#define _CLASS_NAME_ <ClassName> ;;
|
||||
#translate CLSMETH <ClassName> \<MethodName>() => @<ClassName>_\<MethodName>() ;
|
||||
#translate CLSMETH <ClassName> <MethodName>() => @<ClassName>_<MethodName>() ;
|
||||
[ ; #translate Super( <SuperClassN> ) : => ::<SuperClassN>: ] ;
|
||||
[ ; #translate Super( <SuperClass1> ) : => ::<SuperClass1>: ] ;
|
||||
[ ; #translate Super() : => ::<SuperClass1>: ] ;
|
||||
|
||||
Reference in New Issue
Block a user