mwpassyn.pas
来自「本人买的<<VC++项目开发实例>>源代码配套光盘.」· PAS 代码 · 共 1,686 行 · 第 1/4 页
PAS
1,686 行
Case fLine[Run] of
#33..#255: Break;
end;
end;
if Run = 0 then fRange := rsUnKnown;
Run := Temp;
end;
end else Result := tkIdentifier;
end;
function TmwPasSyn.Func117: TtkTokenKind;
begin
if KeyComp('Exports') then Result := tkKey else Result := tkIdentifier;
end;
function TmwPasSyn.Func126: TtkTokenKind;
begin
if D4syntax and KeyComp('Implements') then
begin
if fRange = rsProperty then Result := tkKey else Result := tkIdentifier;
end else Result := tkIdentifier;
end;
function TmwPasSyn.Func129: TtkTokenKind;
begin
if KeyComp('Dispinterface') then Result := tkKey else Result := tkIdentifier;
end;
function TmwPasSyn.Func132: TtkTokenKind;
begin
if D4syntax and KeyComp('Reintroduce') then Result := tkKey else Result := tkIdentifier;
end;
function TmwPasSyn.Func133: TtkTokenKind;
begin
if KeyComp('Property') then
begin
Result := tkKey;
fRange := rsProperty;
end else Result := tkIdentifier;
end;
function TmwPasSyn.Func136: TtkTokenKind;
begin
if KeyComp('Finalization') then Result := tkKey else Result := tkIdentifier;
end;
function TmwPasSyn.Func141: TtkTokenKind;
begin
if KeyComp('Writeonly') then
begin
if fRange = rsProperty then Result := tkKey else Result := tkIdentifier;
end else Result := tkIdentifier;
end;
function TmwPasSyn.Func143: TtkTokenKind;
begin
if KeyComp('Destructor') then Result := tkKey else Result := tkIdentifier;
end;
function TmwPasSyn.Func166: TtkTokenKind;
begin
if KeyComp('Constructor') then Result := tkKey else
if KeyComp('Implementation') then Result := tkKey else Result := tkIdentifier;
end;
function TmwPasSyn.Func168: TtkTokenKind;
begin
if KeyComp('Initialization') then Result := tkKey else Result := tkIdentifier;
end;
function TmwPasSyn.Func191: TtkTokenKind;
begin
if KeyComp('Resourcestring') then Result := tkKey else
if KeyComp('Stringresource') then Result := tkKey else Result := tkIdentifier;
end;
function TmwPasSyn.AltFunc: TtkTokenKind;
begin
Result := tkIdentifier
end;
function TmwPasSyn.IdentKind(MayBe: PChar): TtkTokenKind;
var
HashKey: Integer;
begin
fToIdent := MayBe;
HashKey := KeyHash(MayBe);
if HashKey < 192 then Result := fIdentFuncTable[HashKey] else Result := tkIdentifier;
end;
procedure TmwPasSyn.MakeMethodTables;
var
I: Char;
begin
for I := #0 to #255 do
case I of
#0: fProcTable[I] := NullProc;
#10: fProcTable[I] := LFProc;
#13: fProcTable[I] := CRProc;
#1..#9, #11, #12, #14..#32:
fProcTable[I] := SpaceProc;
'#': fProcTable[I] := AsciiCharProc;
'$': fProcTable[I] := IntegerProc;
#39: fProcTable[I] := StringProc;
'0'..'9': fProcTable[I] := NumberProc;
'A'..'Z', 'a'..'z', '_':
fProcTable[I] := IdentProc;
'{': fProcTable[I] := BraceOpenProc;
'}': fProcTable[I] := BraceCloseProc;
'!', '"', '%', '&', '('..'/', ':'..'@', '['..'^', '`', '~':
begin
case I of
'(': fProcTable[I] := RoundOpenProc;
')': fProcTable[I] := RoundCloseProc;
'*': fProcTable[I] := StarProc;
'+': fProcTable[I] := PlusProc;
',': fProcTable[I] := CommaProc;
'-': fProcTable[I] := MinusProc;
'.': fProcTable[I] := PointProc;
'/': fProcTable[I] := SlashProc;
':': fProcTable[I] := ColonProc;
';': fProcTable[I] := SemiColonProc;
'<': fProcTable[I] := LowerProc;
'=': fProcTable[I] := EqualProc;
'>': fProcTable[I] := GreaterProc;
'@': fProcTable[I] := AddressOpProc;
'[': fProcTable[I] := SquareOpenProc;
']': fProcTable[I] := SquareCloseProc;
'^': fProcTable[I] := PointerSymbolProc;
else fProcTable[I] := SymbolProc;
end;
end;
else fProcTable[I] := UnknownProc;
end;
end;
constructor TmwPasSyn.Create(AOwner: TComponent);
begin
fD4syntax := true;
fAsmAttri := TmwHighLightAttributes.Create(MWS_AttrAssembler);
fCommentAttri := TmwHighLightAttributes.Create(MWS_AttrComment);
fCommentAttri.Style:= [fsItalic];
fIdentifierAttri := TmwHighLightAttributes.Create(MWS_AttrIdentifier);
fKeyAttri := TmwHighLightAttributes.Create(MWS_AttrReservedWord);
fKeyAttri.Style:= [fsBold];
fNumberAttri := TmwHighLightAttributes.Create(MWS_AttrNumber);
fSpaceAttri := TmwHighLightAttributes.Create(MWS_AttrSpace);
fStringAttri := TmwHighLightAttributes.Create(MWS_AttrString);
fSymbolAttri := TmwHighLightAttributes.Create(MWS_AttrSymbol);
inherited Create(AOwner);
AddAttribute(fAsmAttri);
AddAttribute(fCommentAttri);
AddAttribute(fIdentifierAttri);
AddAttribute(fKeyAttri);
AddAttribute(fNumberAttri);
AddAttribute(fSpaceAttri);
AddAttribute(fStringAttri);
AddAttribute(fSymbolAttri);
SetAttributesOnChange(DefHighlightChange);
InitIdent;
MakeMethodTables;
fRange := rsUnknown;
fAsmStart := False;
fDefaultFilter := MWS_FilterPascal;
end; { Create }
procedure TmwPasSyn.SetLine(NewValue: String; LineNumber:Integer);
begin
fLine := PChar(NewValue);
Run := 0;
fLineNumber := LineNumber;
Next;
end; { SetLine }
procedure TmwPasSyn.AddressOpProc;
begin
Case FLine[Run + 1] of
'@':
begin
fTokenID := tkSymbol;
inc(Run, 2);
end;
else
begin
fTokenID := tkSymbol;
inc(Run);
end;
end;
end;
procedure TmwPasSyn.AsciiCharProc;
begin
fTokenID := tkString;
inc(Run);
while FLine[Run] in ['0'..'9'] do inc(Run);
end;
procedure TmwPasSyn.BraceCloseProc;
begin
inc(Run);
fTokenId := tkSymbol;
end;
procedure TmwPasSyn.BorProc;
begin
fTokenID := tkComment;
case FLine[Run] of
#0:
begin
NullProc;
exit;
end;
#10:
begin
LFProc;
exit;
end;
#13:
begin
CRProc;
exit;
end;
end;
while FLine[Run] <> #0 do
case FLine[Run] of
'}':
begin
if fRange = rsBorAsm then fRange := rsAsm else fRange := rsUnKnown;
inc(Run);
break;
end;
#10: break;
#13: break;
else inc(Run);
end;
end;
procedure TmwPasSyn.BraceOpenProc;
begin
fTokenID := tkComment;
if fRange = rsAsm then fRange := rsBorAsm else fRange := rsBor;
inc(Run);
while FLine[Run] <> #0 do
case FLine[Run] of
'}':
begin
if fRange = rsBorAsm then fRange := rsAsm else fRange := rsUnKnown;
inc(Run);
break;
end;
#10: break;
#13: break;
else inc(Run);
end;
end;
procedure TmwPasSyn.ColonProc;
begin
Case FLine[Run + 1] of
'=':
begin
inc(Run, 2);
fTokenID := tkSymbol;
end;
else
begin
inc(Run);
fTokenID := tkSymbol;
end;
end;
end;
procedure TmwPasSyn.CommaProc;
begin
inc(Run);
fTokenID := tkSymbol;
end;
procedure TmwPasSyn.CRProc;
begin
fTokenID := tkSpace;
Case FLine[Run + 1] of
#10: inc(Run, 2);
else inc(Run);
end;
end;
procedure TmwPasSyn.EqualProc;
begin
inc(Run);
fTokenID := tkSymbol;
end;
procedure TmwPasSyn.GreaterProc;
begin
Case FLine[Run + 1] of
'=':
begin
inc(Run, 2);
fTokenID := tkSymbol;
end;
else
begin
inc(Run);
fTokenID := tkSymbol;
end;
end;
end;
procedure TmwPasSyn.IdentProc;
begin
fTokenID := IdentKind((fLine + Run));
inc(Run, fStringLen);
while Identifiers[fLine[Run]] do inc(Run);
end;
procedure TmwPasSyn.IntegerProc;
begin
inc(Run);
fTokenID := tkNumber;
while FLine[Run] in ['0'..'9', 'A'..'F', 'a'..'f'] do inc(Run);
end;
procedure TmwPasSyn.LFProc;
begin
fTokenID := tkSpace;
inc(Run);
end;
procedure TmwPasSyn.LowerProc;
begin
case FLine[Run + 1] of
'=':
begin
inc(Run, 2);
fTokenID := tkSymbol;
end;
'>':
begin
inc(Run, 2);
fTokenID := tkSymbol;
end
else
begin
inc(Run);
fTokenID := tkSymbol;
end;
end;
end;
procedure TmwPasSyn.MinusProc;
begin
inc(Run);
fTokenID := tkSymbol;
end;
procedure TmwPasSyn.NullProc;
begin
fTokenID := tkNull;
end;
procedure TmwPasSyn.NumberProc;
begin
inc(Run);
fTokenID := tkNumber;
while FLine[Run] in ['0'..'9', '.', 'e', 'E'] do
begin
case FLine[Run] of
'.':
if FLine[Run + 1] = '.' then break;
end;
inc(Run);
end;
end;
procedure TmwPasSyn.PlusProc;
begin
inc(Run);
fTokenID := tkSymbol;
end;
procedure TmwPasSyn.PointerSymbolProc;
begin
inc(Run);
fTokenID := tkSymbol;
end;
procedure TmwPasSyn.PointProc;
begin
case FLine[Run + 1] of
'.':
begin
inc(Run, 2);
fTokenID := tkSymbol;
end;
')':
begin
inc(Run, 2);
fTokenID := tkSymbol;
dec(FSquareCount);
end;
else
begin
inc(Run);
fTokenID := tkSymbol;
end;
end;
end;
procedure TmwPasSyn.RoundCloseProc;
begin
inc(Run);
fTokenID := tkSymbol;
dec(FRoundCount);
end;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?