Browse Source

+ ansistring overload of maybequoted

git-svn-id: trunk@5324 -
Jonas Maebe 18 years ago
parent
commit
7135772aa0
1 changed files with 45 additions and 0 deletions
  1. 45 0
      compiler/cutils.pas

+ 45 - 0
compiler/cutils.pas

@@ -87,6 +87,7 @@ interface
     function backspace_quote(const s:string;const qchars:Tcharset):string;
     function octal_quote(const s:string;const qchars:Tcharset):string;
     function maybequoted(const s:string):string;
+    function maybequoted(const s:ansistring):ansistring;
 
     {# If the string is quoted, in accordance with pascal, it is
        dequoted and returned in s, and the function returns true.
@@ -782,6 +783,50 @@ implementation
         end;
     end;
 
+    function maybequoted(const s:ansistring):ansistring;
+      const
+        {$IFDEF MSWINDOWS}
+          FORBIDDEN_CHARS = ['!', '@', '#', '$', '%', '^', '&', '*', '(', ')',
+                             '{', '}', '''', '`', '~'];
+        {$ELSE}
+          FORBIDDEN_CHARS = ['!', '@', '#', '$', '%', '^', '&', '*', '(', ')',
+                             '{', '}', '''', ':', '\', '`', '~'];
+        {$ENDIF}
+      var
+        s1 : ansistring;
+        i  : integer;
+        quoted : boolean;
+      begin
+        quoted:=false;
+        s1:='"';
+        for i:=1 to length(s) do
+         begin
+           case s[i] of
+             '"' :
+               begin
+                 quoted:=true;
+                 s1:=s1+'\"';
+               end;
+             ' ',
+             #128..#255 :
+               begin
+                 quoted:=true;
+                 s1:=s1+s[i];
+               end;
+             else begin
+               if s[i] in FORBIDDEN_CHARS then
+                 quoted:=True;
+               s1:=s1+s[i];
+             end;
+           end;
+         end;
+        if quoted then
+          maybequoted:=s1+'"'
+        else
+          maybequoted:=s;
+      end;
+
+
     function maybequoted(const s:string):string;
       const
         {$IFDEF MSWINDOWS}