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: Function TSnowballProgram.ReplaceS(bra, ket : Integer; s : AnsiString) : Integer;
  Var adjustment : Integer;
  Begin
  	adjustment := Length(s) - (ket - bra);
  
      Delete(FCurrent, FBra + 1, FKet - FBra);
      System.Insert(s, FCurrent, FBra + 1);
  
  	FLimit := FLimit + adjustment;
  
  	if (FCursor >= ket) Then
          FCursor := FCursor + adjustment
  	Else If (FCursor > bra) Then
          FCursor := bra;
  
  	Result := adjustment;
  End;
  
  Procedure TSnowballProgram.Insert(bra, ket : Integer; s : AnsiString);
  Var adjustment : Integer;
  Begin
      adjustment := ReplaceS(bra, ket, s);
  	If (bra <= FBra) Then FBra := FBra + adjustment;
  	If (bra <= FKet) Then FKet := FKet + adjustment;
  End;
  
  Function TSnowballProgram.SliceTo() : AnsiString;
  
negative.code:     Public
          { Set & Retrieve current string }
          Property Current: AnsiString Read FCurrent Write SetCurrent;
  
          { Method subclasses need to implement }
          Function stem : Boolean; Virtual; Abstract;
      End;
  
  Implementation
  