RosettaCodeData/Task/Abbreviations-automatic/TSE-SAL/abbreviations-automatic.tse
2023-07-01 13:44:08 -04:00

96 lines
2.3 KiB
Text

STRING PROC FNStringGetExpressionRegularCharacterMetaEscapeS( STRING inS )
STRING s[255] = inS
s = StrReplace( "\", s, "\\", "gn" )
s = StrReplace( "{", s, "\{", "gn" )
s = StrReplace( "[", s, "\[", "gn" )
s = StrReplace( "}", s, "\}", "gn" )
s = StrReplace( "]", s, "\]", "gn" )
s = StrReplace( "*", s, "\*", "gn" )
s = StrReplace( "+", s, "\+", "gn" )
s = StrReplace( "@", s, "\@", "gn" )
s = StrReplace( ".", s, "\.", "gn" )
s = StrReplace( "^", s, "\^", "gn" )
s = StrReplace( "$", s, "\$", "gn" )
s = StrReplace( "|", s, "\|", "gn" )
s = StrReplace( "?", s, "\?", "gn" )
s = StrReplace( "#", s, "\#", "gn" )
RETURN( s )
END
//
INTEGER PROC FNBlockGetAbbreviationLengthMinimumToBufferB( INTEGER buffer1I )
INTEGER B = FALSE
INTEGER downB = TRUE
STRING s[255] = ""
INTEGER foundB = FALSE
INTEGER minI = 1
INTEGER I = 0
INTEGER buffer2I = 0
STRING s1[255] = ""
INTEGER lineColumnStartI = 4 // change this
Set( BREAK, ON )
PushPosition()
PushBlock()
GotoBlockBegin()
WHILE ( ( IsCursorInBlock() ) AND ( downB ) )
IF NOT LFind( "^$", "cgx" )
I = minI - 1
REPEAT
I = I + 1
PushPosition()
buffer2I = CreateTempBuffer()
PopPosition()
BegLine()
REPEAT
IF ( LFind( "{.*}{{[ ]#}|$}\c", "cx" ) )
s = GetFoundText( 1 )
s = Trim( s )
s1 = LeftStr( s, I )
PushPosition()
PushBlock()
GotoBufferId( buffer2I )
foundB = LFind( Format( "^", FNStringGetExpressionRegularCharacterMetaEscapeS( s1 ), "$" ), "gx" )
IF NOT foundB
EndFile()
AddLine( s1 )
ENDIF
PopBlock()
PopPosition()
ENDIF
UNTIL ( ( ( CurrChar() == _AT_EOL_ ) OR ( CurrChar() == _BEYOND_EOL_ ) ) OR ( foundB ) )
AbandonFile( buffer2I )
UNTIL ( NOT ( foundB ) )
ENDIF
IF NOT foundB
PushPosition()
PushBlock()
BegLine()
UnMarkBlock()
MarkStream()
EndLine()
Left()
MarkStream()
Copy()
GotoBufferId( buffer1I )
EndFile()
AddLine( Str( I ) )
GotoColumn( lineColumnStartI )
Paste()
PopBlock()
PopPosition()
ENDIF
downB = Down()
ENDWHILE
B = TRUE
PopPosition()
PopBlock()
RETURN( B )
END
//
PROC Main()
INTEGER bufferI = 0
PushPosition()
bufferI = CreateTempBuffer()
PopPosition()
Message( FNBlockGetAbbreviationLengthMinimumToBufferB( bufferI ) )
GotoBufferId( bufferI )
END