anchor.diff:    for i := Length(fConsts)-2 downto aIndex do
       fConsts[i+1] := fConsts[i];
   
  -  SetLength(fTexts, Length(fTexts) + 1);
  -  SetLength(fTexts[High(fTexts)], fLocalesCount);
  -  for I := 0 to fLocalesCount - 1 do
  -    fTexts[aIndex,I] := '';
  -
  -  fConsts[aIndex].TextID := High(fTexts);
  -  fConsts[aIndex].ConstName := 'TX_NEW'+IntToStr(High(fTexts));
  +  //Append new strings, they will be empty
  +  SetLength(fTexts, fTextsCount + 1, fLocalesCount);
  +  Inc(fTextsCount);
  +
  +  fConsts[aIndex].TextID := fTextsCount - 1;
  +  fConsts[aIndex].ConstName := 'TX_NEW' + IntToStr(fTextsCount - 1);
   end;
   
   
  
positive.code: end;
  
  
  procedure TTextManager.LoadTextLibraryConsts(aConstPath: string);
  const Size_Inc = 100;
  var
    SL: TStringList;
    Line: string;
    i, CenterPos: Integer;
  begin
    SL := TStringList.Create;
    SL.LoadFromFile(aConstPath);
  
negative.code: end;
  
  
  procedure TTextManager.LoadText(aTextPath: string; TranslationID: Integer);
  var
    SL: TStringList;
    B: Boolean;
    I, ID, firstDelimiter, T: Integer;
    Line: string;
  begin
    SL := TStringList.Create;
    SL.LoadFromFile(aTextPath);
  
    B := False;
    for I := 0 to SL.Count - 1 do
    begin
      Line := Trim(SL[I]);
      if Pos('MaxID:', Line) = 1 then
      begin
        B := TryStrToInt(TrimLeft(Copy(Line, 7, Length(Line))), T);
        Break;
      end;
    end;
  
    //Make sure we've got valid TextCount
    if B then
    begin
      if (fTextsCount <> 0) and (fTextsCount <> T) then
      begin
        ShowMessage(aTextPath + ' MaxID is inconsistent with other files');
        B := False;
      end
      else
        fTextsCount := T;
    end
    else
    begin
      ShowMessage(aTextPath + ' has no MaxID entry');
      B := False;
    end;
  
    if B then
    begin
      SetLength(fTexts, fTextsCount);
      for I := 0 to fTextsCount - 1 do
        SetLength(fTexts[I], fLocalesCount);
  
      for I := 0 to SL.Count - 1 do
      begin
        Line := Trim(SL[I]);
  
        firstDelimiter := Pos(':', Line);
        if firstDelimiter = 0 then continue;
        if not TryStrToInt(TrimLeft(LeftStr(Line, firstDelimiter-1)), ID) then continue;
  
        Line := RightStr(Line, Length(Line) - firstDelimiter);
        //Required characters that can't be stored in plain text
        Line := StringReplace(Line, '\n', eol, [rfReplaceAll, rfIgnoreCase]); //EOL
        Line := StringReplace(Line, '\\', '\', [rfReplaceAll, rfIgnoreCase]); //Slash
  
        fTexts[ID, TranslationID] := Line;
      end;
    end;
  
    SL.Free;
  