~ubuntu-branches/ubuntu/trusty/dozzaqueux/trusty

« back to all changes in this revision

Viewing changes to charencstreams.pas

  • Committer: Package Import Robot
  • Author(s): Georges Khaznadar
  • Date: 2014-01-05 16:33:24 UTC
  • mto: This revision was merged to the branch mainline in revision 9.
  • Revision ID: package-import@ubuntu.com-20140105163324-mx0ysf28smewtoqo
Tags: upstream-3.33
ImportĀ upstreamĀ versionĀ 3.33

Show diffs side-by-side

added added

removed removed

Lines of Context:
36
36
    procedure SetUniStreamType(const AValue: TUniStreamTypes);
37
37
  protected
38
38
    procedure CheckFileType;
39
 
    function GetUTF8Text: UTF8String; virtual;
40
 
    procedure SetUTF8Text(AString: UTF8String); virtual;
 
39
    function GetUTF8Text: AnsiString; virtual;
 
40
    procedure SetUTF8Text(AString: AnsiString); virtual;
41
41
  public
42
42
    constructor Create; virtual;
43
43
    destructor Destroy; override;
44
44
    procedure Reset;
45
45
    property HasBOM: Boolean read fHasBOM write fHasBOM;
46
46
    property UniStreamType: TUniStreamTypes read GetUniStreamType write SetUniStreamType;
47
 
    property UTF8Text: UTF8String read GetUTF8Text write SetUTF8Text;
 
47
    property UTF8Text: AnsiString read GetUTF8Text write SetUTF8Text;
48
48
    property ForceType: Boolean read fForceType write fForceType;
49
49
    property HaveType: Boolean read fHaveType write fHaveType;
50
50
    property Offset: int64 read GetOffset;
59
59
    function GetANSIEnc: string;
60
60
    procedure SetANSIEnc(const AValue: string);
61
61
  protected
62
 
    function GetUTF8Text: UTF8String; override;
63
 
    procedure SetUTF8Text(AString: UTF8String); override;
 
62
    function GetUTF8Text: AnsiString; override;
 
63
    procedure SetUTF8Text(AString: AnsiString); override;
64
64
  public
65
65
    constructor Create; override;
66
66
    destructor Destroy; override;
98
98
  if Result='utf8' then Result:='UTF-8';
99
99
end;
100
100
 
101
 
procedure WideSwapEndian(PWC: PWideChar);
 
101
procedure WideSwapEndian(PWC: PWideChar;size:integer);
102
102
begin
103
 
  while PWC^ <> #0 do
 
103
  while size >= sizeof(widechar) do
104
104
  begin
105
105
    PWC^ := WideChar(SwapEndian(Word(PWC^)));
106
106
    inc(PWC);
 
107
    dec(size,sizeof(widechar));
107
108
  end;
108
109
end;
109
110
 
174
175
  end;
175
176
end;
176
177
 
177
 
function TUniStream.GetUTF8Text: UTF8String;
 
178
function TUniStream.GetUTF8Text: AnsiString;
178
179
var
179
180
  PWC: PWideChar;
180
181
  PC: PChar;
200
201
    ufUtf16be, ufUtf16le:
201
202
      begin
202
203
        PWC := Memory;
203
 
        if fUniStreamType = ufUtf16be then WideSwapEndian(PWC);
 
204
        if fUniStreamType = ufUtf16be then WideSwapEndian(PWC,size);
204
205
        if fHasBom then
205
206
          Result := UTF16ToUTF8(Copy(PWC, 2, (Size - 1) div 2)) else
206
207
          Result := UTF16ToUTF8(Copy(PWC, 1, (Size) div 2))
232
233
  if AValue = ufANSI then fHasBOM := false;
233
234
end;
234
235
 
235
 
procedure TUniStream.SetUTF8Text(AString: UTF8String);
 
236
procedure TUniStream.SetUTF8Text(AString: AnsiString);
236
237
var
237
238
  WS: WideString;
238
239
  UArr: TUArr;
260
261
            Write(PChar(UTF16LEBOM)^, GetOffset);
261
262
        if Size > GetOffset then
262
263
        begin
263
 
          if fUniStreamType = ufUtf16be then WideSwapEndian(@WS[1]);
 
264
          if fUniStreamType = ufUtf16be then WideSwapEndian(@WS[1],size);
264
265
          Write(PWideChar(WS)^, Length(WS) * 2);
265
266
        end;
266
267
      end;
314
315
  fANSIEnc := AValue;
315
316
end;
316
317
 
317
 
function TCharEncStream.GetUTF8Text: UTF8String;
 
318
function TCharEncStream.GetUTF8Text: AnsiString;
318
319
begin
319
320
  Result := inherited GetUTF8Text;
320
321
  if (UniStreamType = ufANSI) or ((UniStreamType = ufUtf8) and (not HasBom)) then
328
329
  end;
329
330
end;
330
331
 
331
 
procedure TCharEncStream.SetUTF8Text(AString: UTF8String);
 
332
procedure TCharEncStream.SetUTF8Text(AString: AnsiString);
332
333
begin
333
334
  if UniStreamType = ufANSI then
334
335
  begin