亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? sample3.pas

?? 通用數(shù)據(jù)庫(kù)管理的VC程序
?? PAS
字號(hào):
unit Sample3;

{$I mwEdit.inc}

interface

uses
  SysUtils, Windows, Messages, Classes, Controls, Graphics, Registry, 
  mwHighlighter, mwExport, mwLocalStr;

Type
  TtkTokenKind = (
    tkComment,
    tkIdentifier,
    tkKey,
    tkNull,
    tkSpace,
    tkString,
    tkUnknown);

  TRangeState = (rsUnknown, rsComment); // TRangeState = (rsUnKnown);           // manual change

  TProcTableProc = procedure of Object;

  PIdentFuncTableFunc = ^TIdentFuncTableFunc;
  TIdentFuncTableFunc = function: TtkTokenKind of Object;

type
  TmwSampleSyn = class(TmwCustomHighLighter)
  private
    fRange: TRangeState;
    fLine: PChar;
    fLineNumber: Integer;
    fExporter: TmwCustomExport;
    fProcTable: array[#0..#255] of TProcTableProc;
    Run: LongInt;
    fStringLen: Integer;
    fToIdent: PChar;
    fTokenPos: Integer;
    FTokenID: TtkTokenKind;
    fIdentFuncTable: array[0..79] of TIdentFuncTableFunc;
    fCommentAttri: TmwHighLightAttributes;
    fIdentifierAttri: TmwHighLightAttributes;
    fKeyAttri: TmwHighLightAttributes;
    fSpaceAttri: TmwHighLightAttributes;
    fStringAttri: TmwHighLightAttributes;
    function KeyHash(ToHash: PChar): Integer;
    function KeyComp(const aKey: String): Boolean;
    function Func76: TtkTokenKind;
    function Func79: TtkTokenKind;
    procedure CommentProc;                                                      // manual change
    procedure IdentProc;
    procedure NullProc;
    procedure SlashProc;
    procedure SpaceProc;
    procedure StringProc;
    procedure UnknownProc;
    function AltFunc: TtkTokenKind;
    procedure InitIdent;
    function IdentKind(MayBe: PChar): TtkTokenKind;
    procedure MakeMethodTables;
  protected
    function GetIdentChars: TIdentChars; override;
    function GetLanguageName: string; override;
    function GetCapability: THighlighterCapability; override;
  public
    constructor Create(AOwner: TComponent); override;
    function GetEOL: Boolean; override;
    function GetRange: Pointer; override;
    function GetTokenID: TtkTokenKind;
    procedure SetLine(NewValue: String; LineNumber: Integer); override;
    procedure ExportNext; override;
    procedure SetLineForExport(NewValue: String); override;
    function GetToken: String; override;
    function GetTokenAttribute: TmwHighLightAttributes; override;
    function GetTokenKind: integer; override;
    function GetTokenPos: Integer; override;
    procedure Next; override;
    procedure SetRange(Value: Pointer); override;
    procedure ReSetRange; override;
    property IdentChars;
  published
    property CommentAttri: TmwHighLightAttributes read fCommentAttri write fCommentAttri;
    property IdentifierAttri: TmwHighLightAttributes read fIdentifierAttri write fIdentifierAttri;
    property KeyAttri: TmwHighLightAttributes read fKeyAttri write fKeyAttri;
    property SpaceAttri: TmwHighLightAttributes read fSpaceAttri write fSpaceAttri;
    property StringAttri: TmwHighLightAttributes read fStringAttri write fStringAttri;
    property Exporter:TmwCustomExport read FExporter write FExporter;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents(MWS_HighlightersPage, [TmwSampleSyn]);
end;

var
  Identifiers: array[#0..#255] of ByteBool;
  mHashTable: array[#0..#255] of Integer;

procedure MakeIdentTable;
var
  I: Char;
begin
  for I := #0 to #255 do
  begin
    Case I of
      '_', '0'..'9', 'a'..'z', 'A'..'Z': Identifiers[I] := True;
      else Identifiers[I] := False;
    end;
    Case I in ['_', 'A'..'Z', 'a'..'z'] of
      True:
        begin
          if (I > #64) and (I < #91) then mHashTable[I] := Ord(I) - 64 else
            if (I > #96) then mHashTable[I] := Ord(I) - 95;
        end;
      else mHashTable[I] := 0;
    end;
  end;
end;

procedure TmwSampleSyn.InitIdent;
var
  I: Integer;
  pF: PIdentFuncTableFunc;
begin
  pF := PIdentFuncTableFunc(@fIdentFuncTable);
  for I := Low(fIdentFuncTable) to High(fIdentFuncTable) do begin
    pF^ := AltFunc;
    Inc(pF);
  end;
  fIdentFuncTable[76] := Func76;
  fIdentFuncTable[79] := Func79;
end;

function TmwSampleSyn.KeyHash(ToHash: PChar): Integer;
begin
  Result := 0;
  while ToHash^ in ['_', '0'..'9', 'a'..'z', 'A'..'Z'] do
  begin
    inc(Result, mHashTable[ToHash^]);
    inc(ToHash);
  end;
  fStringLen := ToHash - fToIdent;
end;

function TmwSampleSyn.KeyComp(const aKey: String): Boolean;
var
  I: Integer;
  Temp: PChar;
begin
  Temp := fToIdent;
  if Length(aKey) = fStringLen then
  begin
    Result := True;
    for i := 1 to fStringLen do
    begin
      if Temp^ <> aKey[i] then
      begin
        Result := False;
        break;
      end;
      inc(Temp);
    end;
  end else Result := False;
end;

function TmwSampleSyn.Func76: TtkTokenKind;
begin
  if KeyComp('mwEDIT') then Result := tkKey else Result := tkIdentifier;
end;

function TmwSampleSyn.Func79: TtkTokenKind;
begin
  if KeyComp('mwEdit') then Result := tkKey else Result := tkIdentifier;
end;

function TmwSampleSyn.AltFunc: TtkTokenKind;
begin
  Result := tkIdentifier;
end;

function TmwSampleSyn.IdentKind(MayBe: PChar): TtkTokenKind;
var
  HashKey: Integer;
begin
  fToIdent := MayBe;
  HashKey := KeyHash(MayBe);
  if HashKey < 80 then Result := fIdentFuncTable[HashKey] else Result := tkIdentifier;
end;

procedure TmwSampleSyn.MakeMethodTables;
var
  I: Char;
begin
  for I := #0 to #255 do
    case I of
      'A'..'Z', 'a'..'z', '_': fProcTable[I] := IdentProc;
      #0: fProcTable[I] := NullProc;
      '/': fProcTable[I] := SlashProc;
      #1..#32: fProcTable[I] := SpaceProc;
      '"': fProcTable[I] := StringProc;
      else fProcTable[I] := UnknownProc;
    end;
end;

constructor TmwSampleSyn.Create(AOwner: TComponent);
begin
  fCommentAttri := TmwHighLightAttributes.Create(MWS_AttrComment);
  fCommentAttri.Foreground := clGrayText;                                       // manual change
  fCommentAttri.Style := [fsItalic];                                            // manual change
  fIdentifierAttri := TmwHighLightAttributes.Create(MWS_AttrIdentifier);
  fIdentifierAttri.Foreground := clBlue;                                        // manual change
  fKeyAttri := TmwHighLightAttributes.Create(MWS_AttrReservedWord);
  fKeyAttri.Style := [fsBold];                                                  // manual change
  fSpaceAttri := TmwHighLightAttributes.Create(MWS_AttrSpace);
  fStringAttri := TmwHighLightAttributes.Create(MWS_AttrString);
  fStringAttri.Foreground := clGreen;                                           // manual change
  inherited Create(AOwner);
  AddAttribute(fCommentAttri);
  AddAttribute(fIdentifierAttri);
  AddAttribute(fKeyAttri);
  AddAttribute(fSpaceAttri);
  AddAttribute(fStringAttri);
  SetAttributesOnChange(DefHighlightChange);
  InitIdent;
  MakeMethodTables;
  fDefaultFilter := 'All files (*.*)|*.*';
  fRange := rsUnknown;
end;

procedure TmwSampleSyn.SetLine(NewValue: String; LineNumber: Integer);
begin
  fLine := PChar(NewValue);
  Run := 0;
  fLineNumber := LineNumber;
  Next;
end;

procedure TmwSampleSyn.CommentProc;                                             // manual change
begin
  fTokenID := tkComment;
  while fLine[Run] <> #0 do begin
    if (fLine[Run] = '*') and (fLine[Run + 1] = '/') then
    begin
      Inc(Run, 2);
      fRange := rsUnknown;
      break;
    end;
    Inc(Run);
  end;
end;                                                                            // end manual change

procedure TmwSampleSyn.IdentProc;
begin
  fTokenID := IdentKind((fLine + Run));
  inc(Run, fStringLen);
  while Identifiers[fLine[Run]] do inc(Run);
end;

procedure TmwSampleSyn.NullProc;
begin
  fTokenID := tkNull;
end;

procedure TmwSampleSyn.SlashProc;
begin
  Inc(Run);
  case fLine[Run] of
    '/':
      begin
        fTokenID := tkComment;
        repeat
          Inc(Run);
        until fLine[Run] = #0;
      end;
    '*':
      begin
        Inc(Run);
        fRange := rsComment;
        CommentProc;
      end;
    else fTokenID := tkUnknown;
  end;
end;

procedure TmwSampleSyn.SpaceProc;
begin
  fTokenID := tkSpace;
  repeat
    inc(Run);
  until not (fLine[Run] in [#1..#32]);
end;

procedure TmwSampleSyn.StringProc;
begin
  fTokenID := tkString;
  Inc(Run);
  repeat
    if fLine[Run] = '"' then
    begin
      Inc(Run);
      if fLine[Run] <> '"' then break;
    end;
    Inc(Run);
  until fLine[Run] in [#0, #10, #13];
end;

procedure TmwSampleSyn.UnknownProc;
begin
  inc(Run);
  fTokenID := tkUnknown;
end;

procedure TmwSampleSyn.Next;
begin
  fTokenPos := Run;
  // fProcTable[fLine[Run]];                                                    // manual change
  if fRange = rsComment then
    if fLine[Run] = #0 then
      NullProc
    else
      CommentProc
  else
    fProcTable[fLine[Run]];                                                     // end manual change
end;

function TmwSampleSyn.GetEOL: Boolean;
begin
  Result := fTokenID = tkNull;
end;

function TmwSampleSyn.GetRange: Pointer;
begin
  Result := Pointer(fRange);
end;

function TmwSampleSyn.GetToken: String;
var
  Len: LongInt;
begin
  Len := Run - fTokenPos;
  SetString(Result, (FLine + fTokenPos), Len);
end;

function TmwSampleSyn.GetTokenID: TtkTokenKind;
begin
  Result := fTokenId;
end;

function TmwSampleSyn.GetTokenAttribute: TmwHighLightAttributes;
begin
  case GetTokenID of
    tkComment: Result := fCommentAttri;
    tkIdentifier: Result := fIdentifierAttri;
    tkKey: Result := fKeyAttri;
    tkSpace: Result := fSpaceAttri;
    tkString: Result := fStringAttri;
    tkUnknown: Result := fIdentifierAttri;
    else Result := nil;
  end;
end;

function TmwSampleSyn.GetTokenKind: integer;
begin
  Result := Ord(fTokenId);
end;

function TmwSampleSyn.GetTokenPos: Integer;
begin
  Result := fTokenPos;
end;

procedure TmwSampleSyn.ReSetRange;
begin
  fRange := rsUnknown;
end;

procedure TmwSampleSyn.SetRange(Value: Pointer);
begin
  fRange := TRangeState(Value);
end;

function TmwSampleSyn.GetIdentChars: TIdentChars;
begin
  Result := ['_', '0'..'9', 'a'..'z', 'A'..'Z'];
end;

function TmwSampleSyn.GetLanguageName: string;
begin
  Result := 'Sample';
end;

function TmwSampleSyn.GetCapability: THighlighterCapability;
begin
  Result := inherited GetCapability + [hcUserSettings, hcExportable];
end;

procedure TmwSampleSyn.SetLineForExport(NewValue: String);
begin
  fLine := PChar(NewValue);
  Run := 0;
  ExportNext;
end;

procedure TmwSampleSyn.ExportNext;
begin
  fTokenPos := Run;
  fProcTable[fLine[Run]];
  if Assigned(Exporter) then
    Case GetTokenID of
      tkComment: TmwCustomExport(Exporter).FormatToken(GetToken, fCommentAttri, True, False);
      tkIdentifier: TmwCustomExport(Exporter).FormatToken(GetToken, fIdentifierAttri, False, False);
      tkKey: TmwCustomExport(Exporter).FormatToken(GetToken, fKeyAttri, False, False);
      tkSpace: TmwCustomExport(Exporter).FormatToken(GetToken, fSpaceAttri, False, True);
      tkString: TmwCustomExport(Exporter).FormatToken(GetToken, fStringAttri, True, False);
    end;
end;

Initialization
  MakeIdentTable;
end.

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区在线看| 日韩美女视频19| 国产精品色一区二区三区| 亚洲麻豆国产自偷在线| 日韩精品成人一区二区三区| 精品亚洲免费视频| 91在线精品秘密一区二区| 777a∨成人精品桃花网| 国产视频一区二区在线| 亚洲国产精品一区二区久久恐怖片| 免费在线观看视频一区| 成人动漫精品一区二区| 欧美日韩夫妻久久| 国产精品欧美综合在线| 性做久久久久久久久| 国产乱淫av一区二区三区| 日本韩国欧美一区二区三区| 日韩一区二区精品在线观看| 中文字幕一区二区三区不卡| 日韩av中文字幕一区二区| 北岛玲一区二区三区四区| 91精品免费观看| 亚洲欧洲日韩在线| 久久99精品久久久| 在线观看国产一区二区| 国产亚洲va综合人人澡精品| 图片区日韩欧美亚洲| 99久久精品国产麻豆演员表| 日韩午夜激情电影| 亚洲狠狠爱一区二区三区| 国产黄色成人av| 日韩一区二区三区高清免费看看| 亚洲青青青在线视频| 国产福利不卡视频| 日韩精品一区二区在线| 亚洲午夜久久久久久久久久久| 粉嫩av一区二区三区粉嫩| 一区二区三区中文字幕| 国产乱色国产精品免费视频| 欧美丰满少妇xxxxx高潮对白| 国产精品久久久久久亚洲毛片 | 亚洲韩国一区二区三区| 国内外成人在线| 欧美午夜宅男影院| 日韩一区欧美小说| 国产aⅴ综合色| 精品国产三级电影在线观看| 视频一区二区国产| 91国偷自产一区二区三区成为亚洲经典| 国产女同性恋一区二区| 久88久久88久久久| 日韩一区二区在线看| 亚洲成av人片在线观看无码| 色婷婷精品久久二区二区蜜臂av| 国产精品传媒视频| 9色porny自拍视频一区二区| 久久久久久久久97黄色工厂| 国产做a爰片久久毛片| 日韩片之四级片| 日韩国产精品久久久| 欧美日韩综合一区| 亚洲国产欧美日韩另类综合| 欧美性猛交xxxx乱大交退制版 | 精品视频免费看| 亚洲黄色性网站| 成人免费av资源| 粉嫩在线一区二区三区视频| 精品久久久久99| 毛片av中文字幕一区二区| 337p亚洲精品色噜噜噜| 亚洲图片欧美色图| 欧美调教femdomvk| 亚洲图片欧美视频| 欧美性生活久久| 午夜精品福利久久久| 7777女厕盗摄久久久| 美女视频黄久久| 26uuu亚洲综合色| 国产精品1区2区3区在线观看| 国产日产欧美一区二区视频| 成人午夜在线免费| 中文字幕一区二区三区不卡 | 国产精品一卡二卡| 久久欧美中文字幕| 国产一区二区三区免费看| 久久久精品一品道一区| 不卡的电影网站| 亚洲精品国产a久久久久久| 欧美主播一区二区三区| 日本一不卡视频| 26uuu亚洲| av亚洲精华国产精华精| 亚洲综合在线第一页| 制服丝袜在线91| 国产一区欧美二区| 欧美一区二区精品| 老汉av免费一区二区三区| wwww国产精品欧美| 成人国产精品视频| 亚洲图片自拍偷拍| 精品少妇一区二区三区在线视频 | 国产精品国产自产拍在线| 色哟哟一区二区| 日本一区中文字幕| 国产精品伦理在线| 欧美三级视频在线观看 | 国产精品嫩草影院com| 欧美性猛片aaaaaaa做受| 青娱乐精品在线视频| 国产精品区一区二区三区| 欧美性大战久久久久久久| 九九久久精品视频| 亚洲精品午夜久久久| 日韩久久久精品| 91玉足脚交白嫩脚丫在线播放| 午夜成人免费视频| 国产欧美日韩在线观看| 欧美日韩美女一区二区| 久草中文综合在线| 一区二区三区中文字幕精品精品 | 成人视屏免费看| 欧美色偷偷大香| 精彩视频一区二区三区| 国内成人免费视频| 亚洲日本成人在线观看| 欧美刺激午夜性久久久久久久| 成人黄色av网站在线| 日本欧美韩国一区三区| 中文字幕一区二区三| 日韩欧美电影一区| 欧洲在线/亚洲| 成人在线视频一区二区| 日本三级韩国三级欧美三级| 日韩美女视频一区| 久久久99精品久久| 91精品国产综合久久国产大片 | 亚洲人成网站精品片在线观看| 日韩精品一区二区三区三区免费 | 日韩国产欧美在线播放| 亚洲色图丝袜美腿| 久久久久88色偷偷免费| 69堂成人精品免费视频| 色综合久久中文综合久久牛| 国产精品中文字幕日韩精品 | 精品国产百合女同互慰| 欧美视频一区二区在线观看| 9l国产精品久久久久麻豆| 国产一区视频网站| 青青草伊人久久| voyeur盗摄精品| 韩国v欧美v亚洲v日本v| 日韩av电影一区| 亚洲永久精品国产| 成人欧美一区二区三区白人| 久久久亚洲综合| 日韩三级精品电影久久久 | 亚洲国产中文字幕| 中文字幕亚洲不卡| 久久精品一区二区三区不卡牛牛 | 国产一区二区伦理片| 视频一区视频二区中文字幕| 亚洲综合激情小说| 亚洲视频小说图片| 国产精品日韩成人| 欧美国产综合一区二区| 久久精品欧美一区二区三区不卡 | 国产suv一区二区三区88区| 久久99国产精品免费网站| 日韩av电影免费观看高清完整版在线观看 | 99国产精品久久久| 岛国精品在线观看| 豆国产96在线|亚洲| 国产精品456| 国产精品亚洲一区二区三区在线 | 日本一区二区三区dvd视频在线| 久久伊人中文字幕| 欧美精品一区二区久久婷婷| 日韩精品一区二区三区视频播放| 欧美一级免费观看| 日韩视频在线永久播放| 日韩欧美在线影院| 精品人在线二区三区| 26uuu国产一区二区三区| 久久综合久久综合九色| 国产拍揄自揄精品视频麻豆| 国产日韩欧美a| 国产精品久久久99| 亚洲欧美电影院| 亚洲综合免费观看高清在线观看 | 日韩欧美激情在线| 精品理论电影在线| 久久亚洲免费视频| 中文字幕第一区综合| 成人欧美一区二区三区小说| 亚洲美女在线一区| 天堂久久久久va久久久久| 蜜桃精品视频在线| 国产成人综合在线观看| 99视频精品全部免费在线| 欧美亚洲综合在线|