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

📄 zconvert.pas

📁 一款由Zlib来的数学公式解析器
💻 PAS
字号:
{******************************************************************
*  (c)copyrights Capella Development Group, Donetsk 1999 - 2000
*  Project: Zeos Library
*  Module: Functions for convert text between different rus encodings
*  Author: Sergey Seroukhov   E-Mail: voland@kita.dgtu.donetsk.ua
*  Date: 24/04/99
*
*  List of changes:
*    13/03/00 - Fixed style (Thanks Robert Marquardt)
******************************************************************}

unit ZConvert;

interface

uses Windows;

type
  TEncodingType = (etNone, et866, etKoi8r, etCp1251, etIso88592);

{ Convert following encodings }
function Convert(const Value: string; SrcEnc, DestEnc: TEncodingType): string;

implementation

uses SysUtils;

type
  TTransTable = array[0..127] of Char;

const
  Table_Koi8r_866: TTransTable =
    ( #225, #226, #247, #231, #228, #229, #246, #250, #233, #234, #235, #236,
      #237, #238, #239, #240, #242, #243, #244, #245, #230, #232, #227, #254,
      #251{}, #253, #255, #249, #248, #252, #224, #241, #193, #194, #215, #199,
      #196, #197, #214, #218, #201, #202, #203, #204, #205, #206, #207, #208,
      #144, #145, #146, #129, #135, #178, #180, #167, #166, #181, #161, #168,
      #174, #173, #172, #131, #132, #137, #136, #134, #128, #138, #175, #176,
      #171, #165, #187, #184, #177, #160, #190, #185, #186, #182, #183, #170,
      #169, #162, #163, #189, #188, #133, #130, #141, #140, #142, #143, #139,
      #210, #211, #212, #213, #198, #200, #195, #222, #219, #221, #223, #217,
      #216, #220, #192, #209, #179, #163, #153, #152, #147, #155, #159, #151,
      #156, #149, #158, #150, #191, #157, #148, #154);

  Table_866_Koi8r: TTransTable =
    ( #196, #179, #218, #191, #192, #217, #195, #180, #194, #193, #197, #223,
      #220, #219, #221, #222, #176, #177, #178, #244, #254, #249, #251, #247,
      #243, #242, #255, #245, #248, #253, #250, #246, #205, #186, #213, #241,
      #164, #201, #184, #183, #187, #212, #211, #200, #190, #189, #188, #198,
      #199, #204, #181, #240, #182, #185, #209, #210, #203, #207, #208, #202,
      #216, #215, #206, #252, #238, #160, #161, #230, #164, #165, #228, #163,
      #229, #168, #169, #170, #171, #172, #173, #174, #175, #239, #224, #225,
      #226, #227, #166, #162, #236, #235, #167, #232, #237, #233, #231, #234,
      #158, #128, #129, #150, #132, #133, #148, #131, #149, #136, #137, #138,
      #139, #140, #141, #142, #143, #159, #144, #145, #146, #147, #134, #130,
      #156, #155, #135, #152{251}, #157, #153, #151, #154);

  Table_866_Cp1251: TTransTable =
    ( #192, #193, #194, #195, #196, #197, #198, #199, #200, #201, #202, #203,
      #204, #205, #206, #207, #208, #209, #210, #211, #212, #213, #214, #215,
      #216, #217, #218, #219, #220, #221, #222, #223, #224, #225, #226, #227,
      #228, #229, #230, #231, #232, #233, #234, #235, #236, #237, #238, #239,
      #45, #45, #45, #166, #43, #166, #166, #172, #172, #166, #166, #172,
      #45, #45, #45, #172, #76, #43, #84, #43, #45, #43, #166, #166,
      #76, #227, #166, #84, #166, #61, #43, #166, #166, #84, #84, #76,
      #76, #45, #227, #43, #43, #45, #45, #45, #45, #166, #166, #45,
      #240, #241, #242, #243, #244, #245, #246, #247, #248, #249, #250, #251,
      #252, #253, #254, #255, #168, #184, #170, #186, #175, #191, #161, #162,
      #156, #155, #135, #152, #157, #153, #151, #154);

  Table_Cp1251_866: TTransTable =
    ( #63, #63, #39, #63, #34, #58, #197, #216, #63, #37, #63, #60,
      #63, #63, #63, #63, #63, #39, #39, #34, #34, #7, #45, #45,
      #63, #84, #63, #62, #63, #63, #63, #63, #255, #246, #247, #63,
      #253, #63, #179, #21, #240, #99, #242, #60, #191, #45, #82, #244,
      #248, #43, #73, #105, #63, #231, #20, #250, #241, #252, #243, #62,
      #63, #63, #63, #245, #128, #129, #130, #131, #132, #133, #134, #135,
      #136, #137, #138, #139, #140, #141, #142, #143, #144, #145, #146, #147,
      #148, #149, #150, #151, #152, #153, #154, #155, #156, #157, #158, #159,
      #160, #161, #162, #163, #164, #165, #166, #167, #168, #169, #170, #171,
      #172, #173, #174, #175, #224, #225, #226, #227, #228, #229, #230, #231,
      #232, #233, #234, #235, #236, #237, #238, #239 );

  Table_Cp1251_Koi8r: TTransTable =
    ( #63, #63, #39, #63, #34, #58, #138, #188, #63, #37, #63, #60,
      #63, #63, #63, #63, #63, #39, #39, #34, #34, #7, #45, #45,
      #63, #84, #63, #62, #63, #63, #63, #63, #154, #159, #151, #63,
      #157, #63, #129, #21, #179, #99, #153, #60, #131, #45, #82, #147,
      #156, #43, #73, #105, #63, #222, #20, #158, #163, #191, #152, #62,
      #63, #63, #63, #155, #225, #226, #247, #231, #228, #229, #246, #250,
      #233, #234, #235, #236, #237, #238, #239, #240, #242, #243, #244, #245,
      #230, #232, #227, #254, #251, #253, #255, #249, #248, #252, #224, #241,
      #193, #194, #215, #199, #196, #197, #214, #218, #201, #202, #203, #204,
      #205, #206, #207, #208, #210, #211, #212, #213, #198, #200, #195, #222,
      #219, #221, #223, #217, #216, #220, #192, #209 );

  Table_Koi8r_Cp1251: TTransTable =
    ( #45, #166, #45, #172, #76, #45, #43, #43, #84, #43, #43, #45,
      #45, #45, #166, #166, #45, #45, #45, #175, #151, #155, #152, #162,
      #186, #170, #154, #191, #156, #153, #135, #161, #61, #166, #45, #184,
      #228, #227, #172, #172, #172, #76, #76, #76, #45, #45, #45, #166,
      #166, #166, #166, #168, #166, #166, #84, #84, #84, #166, #166, #166,
      #43, #43, #43, #157, #254, #224, #225, #246, #228, #229, #244, #227,
      #245, #232, #233, #234, #235, #236, #237, #238, #239, #255, #240, #241,
      #242, #243, #230, #226, #252, #251, #231, #248, #253, #249, #247, #250,
      #222, #192, #193, #214, #196, #197, #212, #195, #213, #200, #201, #202,
      #203, #204, #205, #206, #207, #223, #208, #209, #210, #211, #198, #194,
      #220, #219, #199, #216, #221, #217, #215, #218 );

  Table_Iso88592_Cp1250: TTransTable =
    ( #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
      #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
      #0, #0, #0, #0, #0, #0, #0, #0, #0, #165, #0, #0,
      #0, #0, #140, #0, #0, #0, #0, #0, #143, #0, #0, #0,
      #0, #185, #0, #0, #0, #0, #156, #0, #0, #0, #0, #0,
      #159, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
      #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
      #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
      #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
      #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
      #0, #0, #0, #0, #0, #0, #0, #0 );

  Table_Cp1250_Iso88592: TTransTable =
    ( #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
      #166, #0, #0, #172, #0, #0, #0, #0, #0, #0, #0, #0,
      #0, #0, #0, #0, #182, #0, #0, #188, #0, #0, #0, #0,
      #0, #161, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
      #0, #0, #0, #0, #0, #0, #0, #0, #0, #177, #0, #0,
      #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
      #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
      #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
      #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
      #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
      #0, #0, #0, #0, #0, #0, #0, #0 );

{ Local convertion }
procedure XConvert(Value: PChar; Table: PChar); assembler;
asm
  PUSH ESI
  PUSHA
  MOV EBX, Value
  MOV ESI, Table
  XOR EAX, EAX
@Cycle:
  MOV AL, [EBX]
  CMP AL, 0
  JZ  @Exit
  CMP AL, 128
  JB @Skip
  SUB AL, 128
  MOV AL, [ESI+EAX]
  CMP AL, 0
  JZ  @Skip
  MOV [EBX], AL
@Skip:
  INC EBX
  JMP @Cycle
@Exit:
  POPA
  POP ESI
end;

{ Convert following encodings }
function Convert(const Value: string; SrcEnc, DestEnc: TEncodingType): string;
var
  Table: PChar;
begin
  Result := Value + '';
  if Result = '' then Exit;
  if SrcEnc = etCp1251  then SrcEnc := etNone;
  if DestEnc = etCp1251 then DestEnc := etNone;
  if SrcEnc = DestEnc then Exit;
  case SrcEnc of
    et866:
      case DestEnc of
        etKoi8r: Table := Table_866_Koi8r;
        etNone:  Table := Table_866_Cp1251;
        else     Exit;
      end;
    etKoi8r:
      case DestEnc of
        et866:  Table := Table_Koi8r_866;
        etNone: Table := Table_Koi8r_Cp1251;
        else    Exit;
      end;
    etIso88592:
      case DestEnc of
        etNone:  Table := Table_Iso88592_Cp1250;
        else     Exit;
      end;
    etNone:
      case DestEnc of
        et866:      Table := Table_Cp1251_866;
        etKoi8r:    Table := Table_Cp1251_Koi8r;
        etIso88592: Table := Table_Cp1250_Iso88592;
        else        Exit;
      end;
    else
      Exit;
  end;
  XConvert(PChar(Result), Table);
end;

end.

⌨️ 快捷键说明

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