anchor.diff:  begin
     Result := '';
     tmp := ChangeFileExt(ExtractFileName(aSrc), '');
  -  for i := 1 to Length(tmp) do
  -  begin
  -    if tmp[i] = '<' then
  -      Result := Result + '_'
  -    else if tmp[i] = '>' then
  -      Result := Result + '_'
  -    else if tmp[i] = ':' then
  -      Result := Result + '_'
  -    else if tmp[i] = '"' then
  -      Result := Result + '_'
  -    else if tmp[i] = '/' then
  -      Result := Result + '_'
  -    else if tmp[i] = '\' then
  -      Result := Result + '_'
  -    else if tmp[i] = '|' then
  -      Result := Result + '_'
  -    else if tmp[i] = '?' then
  -      Result := Result + '_'
  -    else if tmp[i] = '*' then
  -      Result := Result + '_'
  -    else if tmp[i] = '.' then
  -      Result := Result + '_'
  -    else if Ord(tmp[i]) <= 31 then
  -      Result := Result + '_'
  -    else
  -      Result := Result + tmp[i];
  -  end;
  +  Result := InternalSanitizeSubstringForFileName(tmp, true);
     tmp := ExtractFileDir(aSrc);
     if tmp <> '' then
       Result := IncludeTrailingPathDelimiter(tmp) + ChangeFileExt(Result, ExtractFileExt(aSrc))
     else
       Result := ChangeFileExt(Result, ExtractFileExt(aSrc));
  +end;
  +
  +function SanitizeSubstringForFileName(const aSubString: String): String;
  +begin
  +  Result := InternalSanitizeSubstringForFileName(aSubString, false);
   end;
   
   procedure AddUTF8BOMToStream(aStream: TStream);
  
positive.code:   end;
  end;
  
  
  (*
      https://docs.microsoft.com/it-it/windows/desktop/FileIO/naming-a-file#basic_naming_conventions
  
negative.code: 
  // https://docs.microsoft.com/it-it/windows/desktop/FileIO/naming-a-file#basic_naming_conventions
  function SanitizeFileName(const aSrc: String) : String;
  function SanitizeSubstringForFileName(const aSubString : String): String;
  
  function GetTimeStampForFileName(const aInstant : TDateTime; const aAddTime : boolean = true): string;
  
  