anchor.diff:      Result := True;
       Exit;
     end;
  -  if (Length(S) > 0) and (S[1] <> '#') and (Pos('rgb(', S) = 0) then
  +  I := Pos('rgb', S);
  +  if (I = 0) and (S[1] <> '#') then
  +  begin
  +    SortColors;
       if ColorStrings.Find(S, I) then
       begin
         Color := TColor(ColorStrings.Objects[I]);
  
positive.code:  Relative makes a numerical entry relative to Base.
   Default returned if no match.}
  var
    V, PPI: double;
    S1, S2: string;
    I, J: integer;
  begin
    PPI := Screen.PixelsPerInch;
    Val(Str, V, I);
    J := Pos('e', Str); {'e' would be legal for Val but not for us}
    if (J <> 0) and (I > J) then
      I := J;
    if I > 0 then
    begin
      S1 := Copy(Str, 1, I - 1);
      S2 := Trim(Copy(Str, I, Length(Str) - I + 1));
    end
    else
    begin
      S1 := Str;
      S2 := '';
    end;
  {S1 has the number, S2 the units}
    Val(S1, V, I);
    if S2 = 'in' then
      V := PPI * V
    else if S2 = 'cm' then
      V := PPI * V / 2.54
    else if S2 = 'mm' then
      V := PPI * V / 25.4
    else if S2 = 'pt' then
      V := V * PPI / 72.0
    else if S2 = 'px' then
    else if S2 = 'pc' then
      V := V * PPI / 6.0
    else if S2 = 'em' then
      V := V * EmSize
    else if S2 = 'ex' then
      V := V * ExSize
    else if S2 = '%' then
      V := V * Base / 100.0
    else if S2 = '' then
      if Relative then
        V := V * Base {relative}
      else
        V := V {same as pixels, at least for margins}
    else
      V := Default;
    Result := Round(V);
  end;
  
  initialization
  
    SortColors;
  
  finalization
  
    ColorStrings.Free;
  
  end.
  
negative.code:       LastColor := Color;
        Exit;
      end;
    end;
    S1 := S;
    if (I > 0) then
      Result := FindRGBColor(Copy(S, I + 3, 255))
    else
  