djjd47130

String Encoding Standards

Feb 25th, 2013
603
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 1.83 KB | None | 0 0
  1. unit StringEncoding;
  2.  
  3. interface
  4.  
  5. type
  6.   TEncodingRule = record
  7.     Original: String;
  8.     Replace: String;
  9.   end;
  10.  
  11.   TEncodingRules = array of TEncodingRule;
  12.  
  13. function Encode(const S: String): String;
  14. function Decode(const S: String): String;
  15.  
  16. implementation
  17.  
  18. var
  19.   _EncodingRules: TEncodingRules;
  20.  
  21. function Encode(const S: String): String;
  22. var
  23.   X, Y: Integer;
  24.   R: TEncodingRule;
  25.   T: String;
  26. begin
  27.   Result:= S;
  28.   for X := Length(Result) downto 1 do begin
  29.     for Y := 0 to Length(_EncodingRules) - 1 do begin
  30.       R:= _EncodingRules[Y];
  31.       T:= Copy(Result, X, Length(R.Original));
  32.       if T = R.Original then begin
  33.         Delete(Result, X, Length(R.Original));
  34.         Insert(R.Replace, Result, X);
  35.       end;
  36.     end;
  37.   end;
  38. end;
  39.  
  40. function Decode(const S: String): String;
  41. var
  42.   X, Y: Integer;
  43.   R: TEncodingRule;
  44.   T: String;
  45. begin
  46.   Result:= S;
  47.   for X := Length(Result) downto 1 do begin
  48.     for Y := Length(_EncodingRules) - 1 downto 0 do begin
  49.       R:= _EncodingRules[Y];
  50.       T:= Copy(Result, X, Length(R.Replace));
  51.       if T = R.Replace then begin
  52.         Delete(Result, X, Length(R.Replace));
  53.         Insert(R.Original, Result, X);
  54.       end;
  55.     end;
  56.   end;
  57. end;
  58.  
  59. procedure InitEncodingRules;
  60.   procedure A(const Orig, Repl: String);
  61.   begin
  62.     SetLength(_EncodingRules, Length(_EncodingRules) + 1);
  63.     _EncodingRules[Length(_EncodingRules)-1].Original:= Orig;
  64.     _EncodingRules[Length(_EncodingRules)-1].Replace:= Repl;
  65.   end;
  66. begin
  67.   A('_', '_UND_');
  68.   A('%', '_PER_');
  69.   A('&', '_AMP_');
  70.   A(' ', '_SPC_');
  71.   A('=', '_EQU_');
  72.   A('/', '_FSL_');
  73.   A('\', '_BSL_');
  74.   A('(', '_OPR_');
  75.   A(')', '_CPR_');
  76. end;
  77.  
  78. procedure UninitEncodingRules;
  79. begin
  80.   SetLength(_EncodingRules, 0);
  81. end;
  82.  
  83. initialization
  84.   InitEncodingRules;
  85. finalization
  86.   UninitEncodingRules;
  87. end.
Advertisement
Add Comment
Please, Sign In to add comment