Entry
TSE: Text: Noun: Article: Indefinite: Macro: How to check use of 'a' or 'an' as indefinite article?
Nov 22nd, 2003 07:22
Knud van Eeden,
----------------------------------------------------------------------
--- Knud van Eeden --- 11 November 2003 - 07:42 pm -------------------
TSE: Text: Noun: Article: Indefinite: Macro: How to check use of 'a'
or 'an' as indefinite article?
---
Steps: Overview:
1. -Compile this macro
2. -Highlight the text you want to check
3. -Put the cursor at the position where you want to start
checking
4. -Press <F12> to find the next occurrence of 'a' or 'an'
in the highlighted text
5. -In case it might be wrong edit the text
6. -Goto step 4.
--- cut here ---------------------------------------------------------
FORWARD INTEGER PROC FNBlockCheckCurrentIsMarkedB()
FORWARD INTEGER PROC FNBlockCheckCursorInBlockB()
FORWARD INTEGER PROC FNBlockCheckIsMarkedNotCurrentDefaultMessageB()
FORWARD INTEGER PROC FNBlockCheckIsMarkedNotCurrentMessageB( STRING
s1 )
FORWARD INTEGER PROC FNBlockGetCurrentMarkedTypeI()
FORWARD INTEGER PROC FNInitializeNewBooleanFalseB()
FORWARD INTEGER PROC FNInitializeNewIntegerI()
FORWARD INTEGER PROC FNIntegerZeroI()
FORWARD INTEGER PROC FNLineGetColumnPositionCurrentI()
FORWARD INTEGER PROC FNMathCheckLogicAndB( INTEGER i1, INTEGER i2 )
FORWARD INTEGER PROC FNMathCheckLogicNotB( INTEGER i1 )
FORWARD INTEGER PROC FNMathCheckLogicOr3B( INTEGER i1, INTEGER i2,
INTEGER i3 )
FORWARD INTEGER PROC FNMathCheckLogicOrB( INTEGER i1, INTEGER i2 )
FORWARD INTEGER PROC FNMathCheckNumberEqualB( INTEGER i1, INTEGER i2 )
FORWARD INTEGER PROC FNMathCheckNumberEqualZeroB( INTEGER i1 )
FORWARD INTEGER PROC FNMathCheckNumberGreaterOrEqualB( INTEGER i1,
INTEGER i2 )
FORWARD INTEGER PROC FNMathCheckNumberIntegerGreaterOrEqualB( INTEGER
i1, INTEGER i2 )
FORWARD INTEGER PROC FNMathGetLogicFalseB()
FORWARD INTEGER PROC FNStringCheckCaseVariableUpperDigitB( STRING s1 )
FORWARD INTEGER PROC FNStringCheckCharacterCaseDigitB( STRING s1 )
FORWARD INTEGER PROC FNStringCheckCharacterCaseLowerB( STRING s1 )
FORWARD INTEGER PROC FNStringCheckCharacterCaseUpperB( STRING s1 )
FORWARD INTEGER PROC FNStringCheckCharacterCaseUpperDigitB( STRING s1 )
FORWARD INTEGER PROC FNStringCheckCharacterCaseUpperLowerDigitB(
STRING s1 )
FORWARD INTEGER PROC FNStringCheckEmptyB( STRING s1 )
FORWARD INTEGER PROC FNStringCheckEqualB( STRING s1, STRING s2 )
FORWARD INTEGER PROC FNStringCheckEqualNotB( STRING s1, STRING s2 )
FORWARD INTEGER PROC FNStringGetLengthI( STRING s1 )
FORWARD INTEGER PROC FNTextCheckCharacterIsAlphaDigitB()
FORWARD INTEGER PROC FNTextCheckCharacterIs_AlphaDigitNotB()
FORWARD INTEGER PROC FNTextCheckGotoWordRightB()
FORWARD INTEGER PROC FNTextCheckGotoWordRightNotB()
FORWARD INTEGER PROC FNTextCheckSearchExpressionB( STRING s1, STRING
s2 )
FORWARD INTEGER PROC FNTokenCheckLineEndAtOrBeyondB()
FORWARD PROC Main()
FORWARD PROC PROCBlockSearchWord( STRING s1, STRING s2 )
FORWARD PROC PROCBlockSearchWordSub( STRING s1, STRING s2 )
FORWARD PROC PROCTextGotoWordRight()
FORWARD PROC PROCTextGotoWordRightAlphaDigitLineBeyond()
FORWARD PROC PROCTextGotoWordRightLineBeyond()
FORWARD PROC PROCWarn( STRING s1 )
FORWARD PROC PROCWarnCons5( STRING s1, STRING s2, STRING s3, STRING
s4, STRING s5 )
FORWARD STRING PROC FNInitializeNewStringS()
FORWARD STRING PROC FNStringGetArticleIndefiniteNounEnglishS( STRING
s1 )
FORWARD STRING PROC FNStringGetAsciiToCharacterS( INTEGER i1 )
FORWARD STRING PROC FNStringGetCharacterS( STRING s1, INTEGER i1 )
FORWARD STRING PROC FNStringGetCharacterSymbolCentralS( INTEGER i1 )
FORWARD STRING PROC FNStringGetCharacterSymbolSpaceS()
FORWARD STRING PROC FNStringGetConcatSeparatorS( STRING s1, STRING s2,
STRING s3 )
FORWARD STRING PROC FNStringGetCons3S( STRING s1, STRING s2, STRING
s3 )
FORWARD STRING PROC FNStringGetCons4S( STRING s1, STRING s2, STRING
s3, STRING s4 )
FORWARD STRING PROC FNStringGetCons5S( STRING s1, STRING s2, STRING
s3, STRING s4, STRING s5 )
FORWARD STRING PROC FNStringGetConsS( STRING s1, STRING s2 )
FORWARD STRING PROC FNStringGetEmptyS()
FORWARD STRING PROC FNStringGetMidStringS( STRING s1, INTEGER i1,
INTEGER i2 )
FORWARD STRING PROC FNTextGetCharacterCurrentS()
FORWARD STRING PROC FNTextGetS( INTEGER i1, INTEGER i2 )
// --- MAIN --- //
PROC Main()
PROCBlockSearchWord( "{an}|{a}", "ixw" )
END
<F12> Main()
// --- LIBRARY --- //
// library: block: search: word (filenamemacro=searblsw.s) [kn, ni,
fr, 21-11-2003 23:53:59]
PROC PROCBlockSearchWord( STRING searchS, STRING searchoptioninitS )
// e.g. PROC Main()
// e.g. PROCBlockSearchWord( "{an}|{a}", "ixw" )
// e.g. END
// e.g.
// e.g. <F12> Main()
//
// This is an example of a text.
STRING searchoptionS[255] = searchoptioninitS + "l"
IF FNBlockCheckIsMarkedNotCurrentDefaultMessageB() RETURN() ENDIF //
return from the current procedure if no block is marked
// PROCTextSavePositionStackPush()
// GotoBlockBegin()
WHILE FNTextCheckSearchExpressionB( searchS, searchoptionS ) AND
FNBlockCheckCursorInBlockB()
PROCBlockSearchWordSub( searchS, searchoptionS )
ENDWHILE
// PROCTextRemovePositionStackPop()
END
// library: block: mark: if NO block in CURRENT file marked, give a
default message (filenamemacro=checbldm.s) [kn, ri, zo, 17-10-1999
08:21:38]
INTEGER PROC FNBlockCheckIsMarkedNotCurrentDefaultMessageB()
// e.g. PROC Main()
// e.g. Message( FNBlockCheckIsMarkedNotCurrentDefaultMessageB
() ) // gives e.g. TRUE
// e.g. END
// e.g.
// e.g. <F12> Main()
RETURN( FNBlockCheckIsMarkedNotCurrentMessageB( "No block is marked
in current file. First mark a block" ) )
END
// library: text: search: return true if found
(filenamemacro=searteex.s) [kn, ni, vr, 07-08-1998 19:36:39]
INTEGER PROC FNTextCheckSearchExpressionB( STRING searchS, STRING
searchoptionS )
// e.g. PROC Main()
// e.g. STRING s[255] = FNInitializeNewStringS()
// e.g. STRING searchoptionS[255] = FNInitializeNewStringS()
// e.g. s = FNStringGetInputS( "text: search: string = ", "test" )
// e.g. IF FNEscapeB( s ) RETURN() ENDIF
// e.g. searchoptionS = FNStringGetInputS( "text: search: string
= ", "test" )
// e.g. IF FNEscapeB( searchoptionS ) RETURN() ENDIF
// e.g. Message( FNTextCheckSearchExpressionB( s,
searchoptionS ) ) // gives e.g. TRUE when the string is found in the
text
// e.g. END
// e.g.
// e.g. <F12> Main()
RETURN( LFind( searchS, searchoptionS ) )
END
// library: block: check: cursor: is cursor in block? (Determines
Whether Cursor is Inside a Marked Block) N *
(filenamemacro=checblic.s) [kn, ri, ma, 29-03-1999 20:24:05]i
INTEGER PROC FNBlockCheckCursorInBlockB()
// e.g. PROC Main()
// e.g. Message( FNBlockCheckCursorInBlockB() ) // gives TRUE or
FALSE depending on if the cursor is in the highlighted blcok, or not
// e.g. END
// e.g.
// e.g. <F12> Main()
RETURN( IsCursorInBlock() )
END
// library: block: search: pattern [kn, ni, fr, 21-11-2003 23:55:03]
PROC PROCBlockSearchWordSub( STRING searchS, STRING searchoptionS )
STRING s[255] = Lower( GetWord() )
STRING nextS[255] = ""
// PROCTextGotoWordRightAlphaLineBeyond()
PROCTextGotoWordRightAlphaDigitLineBeyond()
nextS = GetWord()
// Warn( nextS )
IF FNStringCheckEqualNotB( s, FNStringGetArticleIndefiniteNounEnglishS
( nextS ) )
PROCWarnCons5( "indefinite article", s, "possibly not
correct", "for", nextS )
// KillPosition()
Halt
ENDIF
END
// library: block: mark: if NO block in CURRENT file marked, give a
message (filenamemacro=checblcn.s) [kn, ri, zo, 17-10-1999 08:21:38]
INTEGER PROC FNBlockCheckIsMarkedNotCurrentMessageB( STRING s )
// e.g. PROC Main()
// e.g. IF FNBlockCheckIsMarkedNotCurrentMessageB( "No block is
marked in current file" ) RETURN() ENDIF // return from the current
procedure if no block is marked
// e.g. END
// e.g.
// e.g. <F12> Main()
INTEGER blockcurrentismarkedB = FNBlockCheckCurrentIsMarkedB()
IF FNMathCheckLogicNotB( blockcurrentismarkedb ) // block is not
marked
PROCWarn( s )
ENDIF
RETURN( FNMathCheckLogicNotB( blockcurrentismarkedB ) )
END
// library: text: goto: word: right: alpha: digit: line: beyond
(filenamemacro=gototelj.s) [kn, ni, sa, 22-11-2003 2:48:23]
PROC PROCTextGotoWordRightAlphaDigitLineBeyond()
// e.g. PROC Main()
// e.g. PROCTextGotoWordRightAlphaDigitLineBeyond()
// e.g. END
// e.g.
// e.g. <F12> Main()
PROCTextGotoWordRightLineBeyond()
WHILE FNTextCheckCharacterIs_AlphaDigitNotB()
PROCTextGotoWordRight()
ENDWHILE
END
// library: string: equal: are two given strings not equal?
(filenamemacro=checsten.s) [kn, ri, tu, 10-07-2001 12:48:46]
INTEGER PROC FNStringCheckEqualNotB( STRING s1, STRING s2 )
// e.g. PROC Main()
// e.g. STRING s1[255] = FNInitializeNewStringS()
// e.g. STRING s2[255] = FNInitializeNewStringS()
// e.g. s1 = FNStringGetInputS( "string: check: equal: not: first
string = ", "a" )
// e.g. IF FNEscapeB( s1 ) RETURN() ENDIF
// e.g. s2 = FNStringGetInputS( "string: check: equal: not: second
string = ", "b" )
// e.g. IF FNEscapeB( s2 ) RETURN() ENDIF
// e.g. Message( FNStringCheckEqualNotB( s1, s2 ) ) // gives e.g.
TRUE when string1 is not equal to string2
// e.g. END
// e.g.
// e.g. <F12> Main()
//
// variation: RETURN( s1 != s2 )
RETURN( FNMathCheckLogicNotB( FNStringCheckEqualB( s1, s2 ) ) )
END
// library: string: get: article: indefinite: noun: english
(filenamemacro=getstnen.s) [kn, ni, tu, 11-11-2003 19:23:17]
STRING PROC FNStringGetArticleIndefiniteNounEnglishS( STRING wordS )
// e.g. PROC Main()
// e.g. Warn( FNStringGetArticleIndefiniteNounEnglishS
( "uniform" ) ) // gives e.g. "a"
// e.g. Warn( FNStringGetArticleIndefiniteNounEnglishS( "SUV" ) ) //
gives e.g. "an"
// e.g. Warn( FNStringGetArticleIndefiniteNounEnglishS
( "elephant" ) ) // gives e.g. "an"
// e.g. Warn( FNStringGetArticleIndefiniteNounEnglishS( "RGB" ) ) //
gives e.g. "an"
// e.g. Warn( FNStringGetArticleIndefiniteNounEnglishS( "dog" ) ) //
gives e.g. "a"
// e.g. Warn( FNStringGetArticleIndefiniteNounEnglishS( "one" ) ) //
gives e.g. decision to user (can be 'a' or 'an')
// e.g. END
// e.g.
// e.g. <F12> Main()
STRING firstS[255] = FNInitializeNewStringS()
STRING s[255] = FNInitializeNewStringS()
INTEGER nounlengthI = FNInitializeNewIntegerI()
// IF FNStringCheckCaseUpperB( wordS ) // if an acronym, thus all
characters in uppercase, then take off only first character
IF FNStringCheckCaseVariableUpperDigitB( wordS ) // if an acronym or
all uppercase with digits, thus all characters in uppercase, then take
off only first character
firstS = wordS[1]
ELSE // else take off the first part of the word separated by spaces
firstS = GetToken( wordS, " ", 1 )
ENDIF
nounlengthI = Length( firstS )
s = firstS[1] // take off the first character of this first word or
character
s = Lower( s ) // make it lower case to simplify the comparison to
all lower cases
IF s == "" RETURN( "?: do not enter empty string" ) ENDIF
// Warn( wordS ) // for debugging purposes only. Remove later
// Warn( s ) // for debugging purposes only. Remove later
IF s == "a" RETURN( "an" ) ENDIF
IF s == "b" RETURN( "a" ) ENDIF
IF s == "c" RETURN( "a" ) ENDIF
IF s == "d" RETURN( "a" ) ENDIF
IF s == "e" RETURN( "an" ) ENDIF
IF Lower( wordS ) == "ftp" RETURN( "an" ) ENDIF
IF ( s == "f" ) AND ( nounlengthI == 1 ) RETURN( "an" ) ENDIF
IF ( s == "f" ) AND ( nounlengthI > 1 ) RETURN( "a" ) ENDIF
IF s == "g" RETURN( "a" ) ENDIF
IF Lower( wordS ) == "hour" RETURN( "an" ) ENDIF
IF Lower( wordS ) == "http" RETURN( "an" ) ENDIF
IF ( s == "h" ) AND ( nounlengthI == 1 ) RETURN( "an" ) ENDIF
IF ( s == "h" ) AND ( nounlengthI > 1 ) RETURN( "can be 'a' or 'an'.
Please decide further yourself" ) ENDIF
IF s == "i" RETURN( "an" ) ENDIF
IF s == "j" RETURN( "a" ) ENDIF
IF s == "k" RETURN( "a" ) ENDIF
IF ( s == "l" ) AND ( nounlengthI == 1 ) RETURN( "an" ) ENDIF
IF ( s == "l" ) AND ( nounlengthI > 1 ) RETURN( "a" ) ENDIF
IF ( s == "m" ) AND ( nounlengthI == 1 ) RETURN( "an" ) ENDIF
IF ( s == "m" ) AND ( nounlengthI > 1 ) RETURN( "a" ) ENDIF
IF ( s == "n" ) AND ( nounlengthI == 1 ) RETURN( "an" ) ENDIF
IF ( s == "n" ) AND ( nounlengthI > 1 ) RETURN( "a" ) ENDIF
IF ( s == "o" ) AND ( nounlengthI == 1 ) RETURN( "an" ) ENDIF
IF Lower( wordS ) == "one" RETURN( "a" ) ENDIF
IF ( s == "o" ) AND ( nounlengthI > 1 ) RETURN( "an" ) ENDIF
IF s == "p" RETURN( "a" ) ENDIF
IF s == "q" RETURN( "a" ) ENDIF
IF ( s == "r" ) AND ( nounlengthI == 1 ) RETURN( "an" ) ENDIF
IF ( s == "r" ) AND ( nounlengthI > 1 ) RETURN( "a" ) ENDIF
IF ( s == "s" ) AND ( nounlengthI == 1 ) RETURN( "an" ) ENDIF
IF ( s == "s" ) AND ( nounlengthI > 1 ) RETURN( "a" ) ENDIF
IF ( s == "t" ) RETURN( "a" ) ENDIF
IF Lower( wordS ) == "uniform" RETURN( "a" ) ENDIF
IF Lower( wordS ) == "update" RETURN( "an" ) ENDIF
IF ( s == "u" ) AND ( nounlengthI == 1 ) RETURN( "a" ) ENDIF
// IF ( s == "u" ) AND ( nounlengthI > 1 ) RETURN( "can be 'a'
or 'an'. Please decide further yourself" ) ENDIF
IF ( s == "u" ) AND ( nounlengthI > 1 ) RETURN( "an" ) ENDIF //
almost always 'an'
IF ( s == "v" ) RETURN( "a" ) ENDIF
IF ( s == "w" ) RETURN( "a" ) ENDIF
IF ( s == "x" ) AND ( nounlengthI == 1 ) RETURN( "an" ) ENDIF
IF ( s == "x" ) AND ( nounlengthI > 1 ) RETURN( "a" ) ENDIF
IF ( s == "y" ) RETURN( "a" ) ENDIF
IF ( s == "z" ) RETURN( "a" ) ENDIF
//
IF ( s == "1" ) RETURN( "a" ) ENDIF
IF ( s == "2" ) RETURN( "a" ) ENDIF
IF ( s == "3" ) RETURN( "a" ) ENDIF
IF ( s == "4" ) RETURN( "a" ) ENDIF
IF ( s == "5" ) RETURN( "a" ) ENDIF
IF ( s == "6" ) RETURN( "a" ) ENDIF
IF ( s == "7" ) RETURN( "a" ) ENDIF
IF ( s == "8" ) RETURN( "an" ) ENDIF
IF ( s == "9" ) RETURN( "a" ) ENDIF
IF ( s == "0" ) RETURN( "a" ) ENDIF
RETURN( "character currently not known, please adapt this table" )
END
// library: error: warning: give a warning message via 5 strings [kn,
ri, su, 29-07-2001 18:57:23]
PROC PROCWarnCons5( STRING s1, STRING s2, STRING s3, STRING s4, STRING
s5 )
PROCWarn( FNStringGetCons5S( s1, s2, s3, s4, s5 ) )
END
// library: block: mark: is a block marked in CURRENT file?
(filenamemacro=checblim.s) [kn, zoe, do, 20-05-1999 12:41:49]
INTEGER PROC FNBlockCheckCurrentIsMarkedB()
// e.g. PROC Main()
// e.g. Message( FNBlockCheckCurrentIsMarkedB() ) // gives TRUE if a
block is marked in the current file
// e.g. END
// e.g.
// e.g. <F12> Main()
RETURN( FNMathCheckLogicNotB( FNMathCheckNumberEqualZeroB(
FNBlockGetCurrentMarkedTypeI() ) ) )
END
// library: math: check: logic: not (filenamemacro=checmaln.s) [kn,
ri, tu, 15-05-2001 16:54:21]
INTEGER PROC FNMathCheckLogicNotB( INTEGER B )
// e.g. PROC Main()
// e.g. STRING s[255] = FNInitializeNewStringS()
// e.g. s = FNStringGetInputS( "math: check: logic: not: number
= ", "1" )
// e.g. IF FNEscapeB( s ) RETURN() ENDIF
// e.g. Message( FNMathCheckLogicNotB( FNStringGetToIntegerI( s ) ) )
// e.g. END
// e.g.
// e.g. <F12> Main()
RETURN( NOT B )
END
// library: error: warning: give a warning message [kn, zoe, wo, 09-06-
1999 22:11:07]
PROC PROCWarn( STRING s )
// e.g. <F12> PROCWarn( "you have forgotten to input a value" )
Warn( s )
END
// library: text: goto: word: right: line: beyond
(filenamemacro=gototeli.s) [kn, ni, sa, 22-11-2003 1:09:19]
PROC PROCTextGotoWordRightLineBeyond()
// e.g. PROC Main()
// e.g. PROCTextGotoWordRightLineBeyond()
// e.g. END
// e.g.
// e.g. <F12> Main()
PROCTextGotoWordRight()
IF FNTokenCheckLineEndAtOrBeyondB()
REPEAT
Down()
BegLine()
UNTIL PosFirstNonWhite() <> 0
GotoPos( PosFirstNonWhite() )
ENDIF
END
// library: text: check: character: is: alpha: digit: not
(filenamemacro=chectedn.s) [kn, ni, sa, 22-11-2003 2:44:05]
INTEGER PROC FNTextCheckCharacterIs_AlphaDigitNotB()
// e.g. PROC Main()
// e.g. Message( FNTextCheckCharacterIs_AlphaDigitNotB() ) // gives
e.g. TRUE if current character is not an alphanumeric character or a
digit
// e.g. END
// e.g.
// e.g. <F12> Main()
RETURN( FNMathCheckLogicNotB( FNTextCheckCharacterIsAlphaDigitB() ) )
END
// library: movement: word: move to the beginning of the next word (if
necessary on the next line) (filenamemacro=gotowong.s) [kn, zoe, ma,
14-06-1999 21:51:17]
PROC PROCTextGotoWordRight()
// e.g. PROC Main()
// e.g. PROCTextGotoWordRight()
// e.g. END
// e.g.
// e.g. <F12> Main()
IF FNTextCheckGotoWordRightNotB()
// PROCWarn( "text: goto: word: going to the next word was not
successful" )
ENDIF
END
// library: string: equal: are two given strings equal? (stored
in 'checstcf.s') [kn, zoe, wo, 04-10-2000 18:23:27]
INTEGER PROC FNStringCheckEqualB( STRING s1, STRING s2 )
// e.g. PROC Main()
// e.g. STRING s1[255] = FNInitializeNewStringS()
// e.g. STRING s2[255] = FNInitializeNewStringS()
// e.g. s1 = FNStringGetInputS( "string: check: equal: first string
= ", "a" )
// e.g. IF FNEscapeB( s1 ) RETURN() ENDIF
// e.g. s2 = FNStringGetInputS( "string: check: equal: second string
= ", "a" )
// e.g. IF FNEscapeB( s2 ) RETURN() ENDIF
// e.g. Message( FNStringCheckEqualB( s1, s2 ) ) // gives e.g. TRUE
when string1 is equal to string2
// e.g. END
// e.g.
// e.g. <F12> Main()
//
// // <F12> PROCMessage( FNStringCheckEqualB( "knud", "knud" ) ) //
gives TRUE
// // <F12> PROCMessage( FNStringCheckEqualB( "knud", "van" ) ) //
gives FALSE
RETURN( s1 == s2 )
END
// library: string: initialize [kn, ri, mo, 09-07-2001 12:00:07]
STRING PROC FNInitializeNewStringS()
RETURN( FNStringGetEmptyS() )
END
// library: math: number: integer: initialize [kn, noot, mo, 09-07-
2001 11:59:54]
INTEGER PROC FNInitializeNewIntegerI()
RETURN( FNIntegerZeroI() )
END
// library: string: check: case: upper: digit
(filenamemacro=checstud.s) [kn, ni, sa, 22-11-2003 2:53:04]
INTEGER PROC FNStringCheckCaseVariableUpperDigitB( STRING s )
// e.g. PROC Main()
// e.g. STRING s[255] = FNInitializeNewStringS()
// e.g. s = FNStringGetInputS( "string: character: case: upper:
string = ", "THISISANUPPERDIGITCASESTRING12342" )
// e.g. IF FNEscapeB( s ) RETURN() ENDIF
// e.g. Message( FNStringCheckCaseVariableUpperDigitB( s ) ) //
gives e.g. TRUE when all characters of the given string are upper case
// e.g. END
// e.g.
// e.g. <F12> Main()
INTEGER T = FNInitializeNewIntegerI()
INTEGER lastB = FNInitializeNewBooleanFalseB()
INTEGER upperdigitB = FNInitializeNewBooleanFalseB()
INTEGER lengthT = FNStringGetLengthI( s )
upperdigitB = FNStringCheckCharacterCaseUpperB( FNStringGetCharacterS
( s, 1 ) )
IF FNMathCheckLogicNotB( upperdigitB ) RETURN( FNMathGetLogicFalseB
() ) ENDIF
T = 2 - 1
REPEAT
T = T + 1
upperdigitB = FNStringCheckCharacterCaseUpperDigitB(
FNStringGetCharacterS( s, T ) )
lastB = FNMathCheckNumberIntegerGreaterOrEqualB( T, lengthT )
UNTIL FNMathCheckLogicOrB( FNMathCheckLogicNotB( upperdigitB ),
lastB )
RETURN( FNMathCheckLogicAndB( lastB, upperdigitB ) ) // as you tested
all characters, then if last character reached and this is still upper
case, then all the characters must be upper
END
// library: string: concatenation: 5 strings [kn, zoe, fr, 17-11-2000
13:55:03]
STRING PROC FNStringGetCons5S( STRING s1, STRING s2, STRING s3, STRING
s4, STRING s5 )
RETURN( FNStringGetConsS( FNStringGetCons4S( s1, s2, s3, s4 ), s5 ) )
END
// library: math: number equal to ZERO? [kn, ri, th, 03-05-2001
14:19:57]
INTEGER PROC FNMathCheckNumberEqualZeroB( INTEGER x )
RETURN( FNMathCheckNumberEqualB( x, 0 ) )
END
// library: block: mark: type: return the type of the block marked in
the current file (Determines Whether a Block is Marked in Current
File, 0 if no block, else _INCLUSIVE_, _NON_INCLUSIVE_, _LINE_,
_COLUMN_) N (filenamemacro=getblmty.s) [kn, ri, zo, 17-10-1999
07:17:38]
INTEGER PROC FNBlockGetCurrentMarkedTypeI()
// e.g. PROC Main()
// e.g. Message( FNBlockGetCurrentMarkedTypeI() ) // gives e.g. 1
// e.g. END
// e.g.
// e.g. <F12> Main()
RETURN( IsBlockInCurrFile() )
END
// library: token: check: line: end: at: or: beyond
(filenamemacro=chectoob.s) [kn, ni, su, 25-05-2003 02:33:26]
INTEGER PROC FNTokenCheckLineEndAtOrBeyondB()
// e.g. PROC Main()
// e.g. Message( FNTokenCheckLineEndAtOrBeyondB() ) // gives
e.g. ...""
// e.g. END
// e.g.
// e.g. <F12> Main()
INTEGER I = CurrChar()
RETURN( ( I == _AT_EOL_ ) OR ( I == _BEYOND_EOL_ ) )
END
// library: text: check: character: is: alpha: digit
(filenamemacro=chectead.s) [kn, ni, sa, 22-11-2003 2:44:08]
INTEGER PROC FNTextCheckCharacterIsAlphaDigitB()
// e.g. PROC Main()
// e.g. Message( FNTextCheckCharacterIsAlphaDigitB() ) // gives e.g.
TRUE if current character is an alphanumeric character or a digit
// e.g. END
// e.g.
// e.g. <F12> Main()
RETURN( FNStringCheckCharacterCaseUpperLowerDigitB(
FNTextGetCharacterCurrentS() ) )
END
// library: text: check: goto: word: next: line: beyond: not
(filenamemacro=chectebn.s) [kn, ni, fr, 02-05-2003 19:02:19]
INTEGER PROC FNTextCheckGotoWordRightNotB()
// e.g. PROC Main()
// e.g. Message( FNTextCheckGotoWordRightNotB() ) // gives e.g. TRUE
when cursor can not move to the begin of the word right of it
// e.g. END
// e.g.
// e.g. <F12> Main()
RETURN( FNMathCheckLogicNotB( FNTextCheckGotoWordRightB() ) )
END
// library: string: empty: return an empty string [kn, ri, za, 20-05-
2000 20:11:03]
STRING PROC FNStringGetEmptyS()
RETURN( "" )
END
// library: integer: zero [kn, ri, we, 06-02-2002 21:12:47]
INTEGER PROC FNIntegerZeroI()
RETURN( 0 )
END
// library: math: logic: false: initialize [kn, ri, su, 22-07-2001
15:58:06]
INTEGER PROC FNInitializeNewBooleanFalseB()
RETURN( FNMathGetLogicFalseB() )
END
// library: string: line: length: what is the length
(filenamemacro=getstgle.s) [kn, ri, wo, 25-11-1998 20:20:58]
INTEGER PROC FNStringGetLengthI( STRING s )
// e.g. PROC Main()
// e.g. STRING s1[255] = FNInitializeNewStringS()
// e.g. s1 = FNStringGetInputS( "string: line: length: string
= ", "this is a test" )
// e.g. IF FNEscapeB( s1 ) RETURN() ENDIF
// e.g. Message( FNStringGetLengthI( s1 ) ) // gives e.g. 14
// e.g. END
// e.g.
// e.g. <F12> Main()
//
// e.g. // <F12> Message( FNStringGetLengthI( "knud" ) ) // gives 4
// e.g. // <F12> Message( FNStringGetLengthI( "the" ) ) // gives 3
RETURN( Length( s ) )
END
// library: string: character: case: upper: is current character upper
case? (filenamemacro=checstcu.s) [kn, zoe, wo, 30-06-1999 00:46:18]
INTEGER PROC FNStringCheckCharacterCaseUpperB( STRING kS )
// e.g. PROC Main()
// e.g. STRING s[255] = FNInitializeNewStringS()
// e.g. s = FNStringGetInputS( "string: check: case: character:
case: upper: character = ", "A" )
// e.g. IF FNEscapeB( s ) RETURN() ENDIF
// e.g. Message( FNStringCheckCharacterCaseUpperB( s ) ) // gives
e.g. TRUE when given character is upper case
// e.g. END
// e.g.
// e.g. <F12> Main()
// e.g.
// e.g. // <F12> PROCMessage( FNStringCheckCharacterCaseUpperB
( "A" ) ) // gives TRUE
// e.g. // <F12> PROCMessage( FNStringCheckCharacterCaseUpperB
( "a" ) ) // gives FALSE
RETURN( kS IN 'A'..'Z' )
END
// library: string: get: character: token: return the character in the
given string on the given position [kn, ri, vr, 25-12-1998 23:35:43]
STRING PROC FNStringGetCharacterS( STRING s, INTEGER positionT )
// e.g. FNStringGetCharacterS( "knud", 3 ) gives "u"
// variation: RETURN( s[ positionT ] ) // TSE only
RETURN( FNStringGetMidStringS( s, positionT, 1 ) )
END
// library: math: logic: false: wrapper [kn, ri, su, 22-07-2001
15:43:08]
INTEGER PROC FNMathGetLogicFalseB()
RETURN( FALSE )
END
// library: string: check: character: case: upper: digit
(filenamemacro=checstue.s) [kn, ni, sa, 22-11-2003 2:56:05]
INTEGER PROC FNStringCheckCharacterCaseUpperDigitB( STRING s )
// e.g. PROC Main()
// e.g. STRING s[255] = FNInitializeNewStringS()
// e.g. s = FNStringGetInputS( "string: check: character: case: is
this not a character in A-Z0-9: character = ", "A" )
// e.g. IF FNEscapeB( s ) RETURN() ENDIF
// e.g. Message( FNStringCheckCharacterCaseUpperDigitB( s ) ) //
gives e.g. FALSE when the character is a lowercase character
// e.g. END
// e.g.
// e.g. <F12> Main()
RETURN( FNMathCheckLogicOrB( FNStringCheckCharacterCaseUpperB( s ),
FNStringCheckCharacterCaseDigitB( s ) ) )
END
// library: math: number: compare: are two given numbers greater or
equal? (filenamemacro=checmaoe.s) [kn, ri, fr, 28-09-2001 13:46:35]
INTEGER PROC FNMathCheckNumberIntegerGreaterOrEqualB( INTEGER x1,
INTEGER x2 )
// e.g. PROC Main()
// e.g. Message( FNMathCheckNumberIntegerGreaterOrEqualB( 2,
1 ) ) // gives e.g. TRUE
// e.g. END
// e.g.
// e.g. <F12> Main()
RETURN( FNMathCheckNumberGreaterOrEqualB( x1, x2 ) )
END
// library: math: check: logic: or: 2 arguments
(filenamemacro=checmalo.s) [kn, ri, tu, 15-05-2001 16:54:17]
INTEGER PROC FNMathCheckLogicOrB( INTEGER B1, INTEGER B2 )
// e.g. PROC Main()
// e.g. STRING s1[255] = FNInitializeNewStringS()
// e.g. STRING s2[255] = FNInitializeNewStringS()
// e.g. s1 = FNStringGetInputS( "math: check: logic: or: number1
= ", "1" )
// e.g. IF FNEscapeB( s1 ) RETURN() ENDIF
// e.g. s2 = FNStringGetInputS( "math: check: logic: or: number2
= ", "1" )
// e.g. IF FNEscapeB( s2 ) RETURN() ENDIF
// e.g. Message( FNMathCheckLogicOrB( FNStringGetToIntegerI( s1 ),
FNStringGetToIntegerI( s2 ) ) ) // gives e.g. ...""
// e.g. END
// e.g.
// e.g. <F12> Main()
RETURN( B1 OR B2 )
END
// library: math: check: logic: and (filenamemacro=checmala.s) [kn,
ri, tu, 15-05-2001 16:54:21]
INTEGER PROC FNMathCheckLogicAndB( INTEGER B1, INTEGER B2 )
// e.g. PROC Main()
// e.g. STRING s1[255] = FNInitializeNewStringS()
// e.g. STRING s2[255] = FNInitializeNewStringS()
// e.g. s1 = FNStringGetInputS( "math: check: logic: and: number1
= ", "1" )
// e.g. IF FNEscapeB( s1 ) RETURN() ENDIF
// e.g. s2 = FNStringGetInputS( "math: check: logic: and: number2
= ", "1" )
// e.g. IF FNEscapeB( s2 ) RETURN() ENDIF
// e.g. Message( FNMathCheckLogicAndB( FNStringGetToIntegerI( s1 ),
FNStringGetToIntegerI( s2 ) ) ) // gives e.g. ...""
// e.g. END
// e.g.
// e.g. <F12> Main()
RETURN( B1 AND B2 )
END
// library: string: concatenation: concatenation 2 words to 1 word
(separated by a space) [kn, ri, wo, 25-11-1998 20:15:03]
STRING PROC FNStringGetConsS( STRING s1, STRING s2 ) // version with
test if string empty
// e.g. <F12> PROCMessage( FNStringGetConsS( "knud", "van" ) )
RETURN( FNStringGetConcatSeparatorS( s1, s2,
FNStringGetCharacterSymbolSpaceS() ) )
END
// library: string: concatenation: 4 strings [kn, zoe, fr, 17-11-2000
13:54:56]
STRING PROC FNStringGetCons4S( STRING s1, STRING s2, STRING s3, STRING
s4 )
RETURN( FNStringGetConsS( FNStringGetCons3S( s1, s2, s3 ), s4 ) )
END
// library: math: number: compare: equal: number1 EQUAL TO number2?
[kn, ri, th, 03-05-2001 12:51:27]
INTEGER PROC FNMathCheckNumberEqualB( INTEGER x1, INTEGER x2 )
RETURN( x1 == x2 )
END
// library: string: check: character: case: is this a character in A-
Za-z0-9? (filenamemacro=checstld.s) [kn, ri, sa, 04-05-2002 23:05:45]
INTEGER PROC FNStringCheckCharacterCaseUpperLowerDigitB( STRING s )
// e.g. PROC Main()
// e.g. STRING s[255] = FNInitializeNewStringS()
// e.g. s = FNStringGetInputS( "string: check: character: case: is
this a character in A-Za-z0-9: character = ", "A" )
// e.g. IF FNEscapeB( s ) RETURN() ENDIF
// e.g. Message( FNStringCheckCharacterCaseUpperLowerDigitB(
s ) ) // gives e.g. TRUE when the character is a digit, an uppercase
or a lowercase character
// e.g. END
// e.g.
// e.g. <F12> Main()
RETURN( FNMathCheckLogicOr3B( FNStringCheckCharacterCaseUpperB( s ),
FNStringCheckCharacterCaseLowerB( s ), FNStringCheckCharacterCaseDigitB
( s ) ) )
END
// library: string: character: token: get: current: string: return the
current character as a string (filenamemacro=getteccv.s) [kn, ri, zo,
16-05-1999 19:18:17]
STRING PROC FNTextGetCharacterCurrentS()
// e.g. PROC Main()
// e.g. Message( FNTextGetCharacterCurrentS() ) // gives e.g. "A" if
ASCII value current character is 65
// e.g. END
// e.g.
// e.g. <F12> Main()
RETURN( FNTextGetS( FNLineGetColumnPositionCurrentI(), 1 ) )
// RETURN( FNTextGetCharacterCentralS( FNTextGetCharacterCurrentI
() ) ) // do not use
END
// library: movement: word: goto the beginning of the next word
(filenamemacro=gototele.s) [kn, zoe, ma, 14-06-1999 21:51:17]
INTEGER PROC FNTextCheckGotoWordRightB()
// e.g. PROC Main()
// e.g. Message( FNTextCheckGotoWordRightB() ) // gives e.g. ...""
// e.g. END
// e.g.
// e.g. <F12> Main()
RETURN( WordRight() )
END
// library: string: get: word: token: middle: return a given integer
amount of characters from the a given startposition (=MID$ in BASIC)
(filenamemacro=getstmid.s) [kn, ri, di, 13-10-1998 20:29:00]
STRING PROC FNStringGetMidStringS( STRING s, INTEGER beginT, INTEGER
totalT )
// e.g. PROC Main()
// e.g. STRING s[255] = FNInitializeNewStringS()
// e.g. STRING positionbeginS[255] = FNInitializeNewStringS()
// e.g. STRING charactertotalS[255] = FNInitializeNewStringS()
// e.g. s = FNStringGetInputS( "string: get: MIDSTRING: string
= ", "testing" )
// e.g. IF FNEscapeB( s ) RETURN() ENDIF
// e.g. positionbeginS = FNStringGetInputS( "string: get: MIDSTRING:
beginposition = ", "2" )
// e.g. IF FNEscapeB( positionbeginS ) RETURN() ENDIF
// e.g. charactertotalS = FNStringGetInputS( "string: get:
MIDSTRING: character total = ", "3" )
// e.g. IF FNEscapeB( charactertotalS ) RETURN() ENDIF
// e.g. Message( FNStringGetMidStringS( s, FNStringGetToIntegerI(
positionbeginS ), FNStringGetToIntegerI( charactertotalS ) ) )
// e.g. END
// e.g.
// e.g. <F12> Main()
//
//
// Message( FNStringGetMidStringS( "knud", 2, 3 ) ) // gives "nud"
// Message( FNStringGetMidStringS( "knud", 3, 2 ) ) // gives "ud"
RETURN( SubStr( s, beginT, totalT ) )
END
// library: string: check: character: case: digit: is this a single
digit 0-9? (filenamemacro=checstcd.s) [kn, zoe, di, 14-12-1999
19:31:13]
INTEGER PROC FNStringCheckCharacterCaseDigitB( STRING s )
// e.g. PROC Main()
// e.g. STRING s[255] = FNInitializeNewStringS()
// e.g. s = FNStringGetInputS( "string: check: character: case:
digit: is this a single digit 0-9: character = ", "9" )
// e.g. IF FNEscapeB( s ) RETURN() ENDIF
// e.g. Message( FNStringCheckCharacterCaseDigitB( s ) ) // gives
e.g. TRUE when given character is a digit 0,1,2,3,4,5,6,7,8,9
// e.g. END
// e.g.
// e.g. <F12> Main()
// e.g.
// e.g. // <F12> PROCMessage( FNStringCheckCharacterCaseDigitB
( "3" ) ) // gives TRUE
// e.g. // <F12> PROCMessage( FNStringCheckCharacterCaseDigitB
( "k" ) ) // gives FALSE
RETURN( s IN '0'..'9' )
END
// library: math: number: compare: number1 GREATER THAN or EQUAL TO
number2? [kn, ri, th, 03-05-2001 12:55:02]
INTEGER PROC FNMathCheckNumberGreaterOrEqualB( INTEGER x1, INTEGER x2 )
RETURN( x1 >= x2 )
END
// library: string: concatenation: concatenate 2 words to 1 word,
separated by separator S [kn, zoe, do, 01-07-1999 01:33:18]
STRING PROC FNStringGetConcatSeparatorS( STRING s1, STRING s2, STRING
separatorS )
IF FNStringCheckEmptyB( s1 ) RETURN( s2 ) ENDIF
IF FNStringCheckEmptyB( s2 ) RETURN( s1 ) ENDIF
RETURN( s1 + separatorS + s2 ) // leave this like this. Do not call a
function, as this is a primitive function, you will get into a
recursive loop, and get stack overflow
END
// library: string: get: character: symbol: " "
(filenamemacro=getstssp.s) [kn, zoe, we, 25-10-2000 01:33:39]
STRING PROC FNStringGetCharacterSymbolSpaceS()
// e.g. PROC Main()
// e.g. Message( FNStringGetCharacterSymbolSpaceS() ) // gives
e.g. ...""
// e.g. END
// e.g.
// e.g. <F12> Main()
RETURN( FNStringGetCharacterSymbolCentralS( 32 ) )
END
// library: string: concatenation: 3 strings [kn, zoe, fr, 17-11-2000
13:52:07]
STRING PROC FNStringGetCons3S( STRING s1, STRING s2, STRING s3 )
RETURN( FNStringGetConsS( FNStringGetConsS( s1, s2 ), s3 ) )
END
// library: math: check: logic: or: 3 arguments [kn, ri, th, 25-10-
2001 04:29:17]
INTEGER PROC FNMathCheckLogicOr3B( INTEGER B1, INTEGER B2, INTEGER B3 )
// RETURN( FNMathCheckLogicOrB( FNMathCheckLogicOrB( B1, B2 ),
B3 ) ) // possibly not always equivalent. Do not use
RETURN( B1 OR B2 OR B3 )
END
// library: string: check: case: character: case: lower: is current
character lower case? (filenamemacro=checstcl.s) [kn, zoe, wo, 30-06-
1999 00:46:18]
INTEGER PROC FNStringCheckCharacterCaseLowerB( STRING kS )
// e.g. PROC Main()
// e.g. STRING s[255] = FNInitializeNewStringS()
// e.g. s = FNStringGetInputS( "string: check: case: character:
case: lower: character = ", "a" )
// e.g. IF FNEscapeB( s ) RETURN() ENDIF
// e.g. Message( FNStringCheckCharacterCaseLowerB( s ) ) // gives
e.g. TRUE when given character is lower case
// e.g. END
// e.g.
// e.g. <F12> Main()
// e.g.
// e.g. // <F12> PROCMessage( FNStringCheckCharacterCaseLowerB
( "a" ) ) // gives TRUE
// e.g. // <F12> PROCMessage( FNStringCheckCharacterCaseLowerB
( "A" ) ) // gives FALSE
RETURN( kS IN 'a'..'z' )
END
// library: text: get: retrieves text from current line of current
file) r gettext(integer pos, integer len)* [kn, zoe, wo, 16-06-1999
01:06:55]
STRING PROC FNTextGetS( INTEGER positionstartI, INTEGER
charactertotalI )
RETURN( GetText( positionstartI, charactertotalI ) )
END
// library: line: position: character position: return the current
character position (=column number) (get the current position on the
current line) (filenamemacro=getlipcu.s) [kn, ni, ma, 03-08-1998
13:35:20]
INTEGER PROC FNLineGetColumnPositionCurrentI()
// e.g. PROC Main()
// e.g. Message( FNLineGetColumnPositionCurrentI() ) // gives e.g.
15 when the current column position of the cursor is on the 15th
character
// e.g. END
// e.g.
// e.g. <F12> Main()
RETURN( CurrPos() )
END
// library: string: empty: is given string empty? [kn, ri, za, 20-05-
2000 20:11:08]
INTEGER PROC FNStringCheckEmptyB( STRING s )
RETURN( FNStringCheckEqualB( s, FNStringGetEmptyS() ) )
END
// library: string: get: character: symbol: central [kn, ri, sa, 07-07-
2001 22:35:39]
STRING PROC FNStringGetCharacterSymbolCentralS( INTEGER I )
RETURN( FNStringGetAsciiToCharacterS( I ) )
END
// library: string: get: character: convert: ASCII: given the ASCII
value, what is the corresponding character? (Get Single Character
Equivalent of an Integer). Syntax: Chr(INTEGER i)* [kn, zoe, wo, 16-06-
1999 01:06:51]
STRING PROC FNStringGetAsciiToCharacterS( INTEGER asciiI )
// e.g. <F12> PROCMessage( FNStringGetAsciiToCharacterS( 65 ) ) //
gives "A"
// e.g. // <F12> PROCMessage( FNStringGetAsciiToCharacterS( 66 ) ) //
gives "B"
// e.g. // <F12> PROCMessage( FNStringGetAsciiToCharacterS(
100 ) ) // gives "d"
RETURN( Chr( asciiI ) )
END
--- cut here ---------------------------------------------------------
---
---
Internet: see also:
---
TSE: Text: Noun: Article: Algorithm: Which algorithm to use 'a'
or 'an' as indefinite article?
http://www.faqts.com/knowledge_base/view.phtml/aid/26356/fid/865
----------------------------------------------------------------------