⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gb2big.pas

📁 提供中文简体到繁体的转换
💻 PAS
字号:
unit GB2BIG;

interface

uses
  Windows, Messages, SysUtils, Classes;

const
  GBfirst  = $A1A1; // first code of GB     */
  GBlast   = $FEFE; // last code of GB      */
  GBsize   = $5E5E; // GBlast - GBfirst + 1 */
type
  TGB2BIG = class(TComponent)
  private
    { Private declarations }
    Instance: THandle;
    GBTAB, DupCode, DupData: TResourceStream;
  protected
    { Protected declarations }
  public
    { Public declarations }
    function GBtoBIG5(S: string): string;
    function GetBIGS(S: string): string;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    { Published declarations }
  end;

procedure Register;



implementation
{$R GB2BIG32.res}

procedure Register;
begin
  RegisterComponents('Big5', [TGB2BIG]);
end;
constructor TGB2BIG.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  if Not(csDesigning in ComponentState) then
  begin
  GBTAB := TResourceStream.Create(Instance, 'GB2BIG', RT_RCDATA);
  DupCode := TResourceStream.Create(Instance, 'DUPCODE', RT_RCDATA);
  DupData := TResourceStream.Create(Instance, 'DUPDATA', RT_RCDATA);
  end;
end;

destructor TGB2BIG.Destroy;
begin
  GBTAB.free;
  DupCode.free;
  DupData.free;
  inherited Destroy;
end;

function TGB2BIG.GetBIGS(S: string): string;
var
  C  : array[0..5] of Char;
  W  : PWordArray;
  CA : array[0..2] of Char;
  I  : Integer;            
  bak: string;             
begin
  bak := '';
  if Byte(S[1]) > $A0 then
  begin
    W := @(C[0]);
    C[2] := S[1];
    C[3] := S[2];
    C[5] := S[1];
    C[4] := S[2];
    W[2] := W[2] - GBfirst;
    GBTAB.Position := W[2] * 2;
    GBTAB.read (CA, 2);
    CA[2] := #0;
    bak := bak + StrPas(CA);
    I := 0;
    while I < DupCode.Size do
    begin
      DupCode.Position := I;
      DupCode.read (C, 2);
      if W[0] = W[1] then
      begin
        DupData.Position := I;
        DupData.read (CA, 2);
        CA[2] := #0;
        bak := bak + CA;
      end;
      inc(I, 2);
    end;
  end;
  Result := bak;
end;

function TGB2BIG.GBtoBIG5(S: string): string;
var
  bak: string;             
  C  : array[0..1] of Byte;
  I  : Integer;            
  W  : PWordArray;         
  CA : array[0..2] of Char;
begin
  bak := '';
  W := @(C[0]);
  I := 1;
  while I <= Length(S) do
  begin
    C[1] := Byte(S[I]);
    if C[1] > $A0 then
    begin
      inc(I, 1);
      C[0] := Byte(S[I]);
      inc(I, 1);
      W[0] := W[0] - GBfirst;
      GBTAB.Position := W[0] * 2;
      GBTAB.read (CA, 2);
      CA[2] := #0;
      bak := bak + StrPas(CA);
    end
    else
    begin
      bak := bak + S[I];
      inc(I, 1);
    end;
  end;
  Result := bak;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -