anchor.diff:  Begin
       Result := False;
   
  -	if (FCursor - FBkLimit) < s_size Then Exit;
  -
  -	For I := 1 To s_size Do
  -	    If FCurrent[FCursor - s_size + I] <> s[i] Then Exit;
  -
  -	FCursor := FCursor - s_size;
  +    if (FCursor - FBkLimit) < s_size Then Exit;
  +
  +    For I := 1 To s_size Do
  +        If FCurrent[FCursor - s_size + I] <> s[i] Then Exit;
  +
  +    FCursor := FCursor - s_size;
   
       Result := True;
   End;
  
positive.code: Procedure TSnowballProgram.SetCurrent(Current: AnsiString);
  Begin
      FCurrent := Current;
  	FCursor  := 0;
  	FLimit   := Length(Current);
  	FBkLimit := 0;
  	FBra     := FCursor;
  	FKet     := FLimit;
  End;
  
  Function TSnowballProgram.InGrouping(s : array of char; min, max : Integer) : Boolean;
  Var ch : Integer;
  Begin
      Result := False;
  	If (FCursor >= FLimit) Then Exit;
  
      ch := Ord(FCurrent[FCursor + 1]);
  	If (ch > max) Or (ch < min) Then Exit;
  
  	ch := ch - min;
  	If (Ord(s[ch Shr 3]) And Ord(1 Shl (ch And $7))) = 0 Then Exit;
  
  	Inc(FCursor);
  	Result := True;
  End;
  
  Function TSnowballProgram.InGroupingBk(s : array of char; min, max : Integer) : Boolean;
  Var ch : Integer;
  Begin
      Result := False;
  	If (FCursor <= FBkLimit) Then Exit;
  
      ch := Ord(FCurrent[FCursor]);
  	If (ch > max) Or (ch < min) Then Exit;
  
  	ch := ch - min;
  	If (Ord(s[ch Shr 3]) And Ord(1 Shl (ch And $7))) = 0 Then Exit;
  
  	Dec(FCursor);
  	Result := True;
  End;
  
  Function TSnowballProgram.OutGrouping(s : array of char; min, max : Integer) : Boolean;
  Var ch : Integer;
  Begin
      Result := False;
  	If (FCursor >= FLimit) Then Exit;
  
  	ch := Ord(FCurrent[FCursor + 1]);
  
  	If (ch > max) Or (ch < min) Then
      Begin
  	    Inc(FCursor);
  	    Result := True;
          Exit;
  	End;
  
  	ch := ch - min;
      If (Ord(s[ch Shr 3]) And Ord(1 Shl (ch And $7))) = 0 Then
      Begin
  	    Inc(FCursor);
  	    Result := True;
  	End;
  End;
  
  Function TSnowballProgram.OutGroupingBk(s : array of char; min, max : Integer) : Boolean;
  
negative.code: Begin
      Result := False;
  
      If (FCursor <= FBkLimit) Then Exit;
  
      ch := Ord(FCurrent[FCursor]);
      If (ch > max) Or (ch < min) Then
      Begin
          Dec(FCursor);
          Result := True;
          Exit;
      End;
  
      ch := ch - min;
      If (Ord(s[ch Shr 3]) And Ord(1 Shl (ch And $7))) = 0 Then
      Begin
          Dec(FCursor);
          Result := True;
      End;
  End;
  
  Function TSnowballProgram.EqS(s_size : Integer; s : AnsiString) : Boolean;
  