yysun:这个问题我在1月份就给SynEdit的管理员提过意见了,你看到已经是
经过修改的,但是它修改得不完善,应该是先判断MBCS,再转意解释才对。
而且改了这里,转意表就不用修改了。
修改如下:
[DELPHI]
{$IFDEF SYN_MBCSSUPPORT}
if (AToken[ISrc] in LeadBytes) and (AToken[ISrc + 1] <> #0) then
//mh 2000-10-10
begin
Replace := ReplaceMBCS(AToken[ISrc], AToken[ISrc + 1]);
Inc(ISrc, 2);
end else
{$ENDIF}
if fReplaceReserved[c] <> nil then
begin
Replace := StrPas(fReplaceReserved[c]);
Inc(ISrc);
end else
begin
if IDest > DestLen then
begin
Inc(DestLen, 32);
SetLength(Result, DestLen);
end;
Result[IDest] := c;
Inc(ISrc);
Inc(IDest);
continue;
end;
[/DELPHI]
另外,如果你用到他的那些Highlighter,需要做一些改动:
就是修改UnknownProc,否则也会有MBCS问题:
以TSynCppSyn为例,修改如下,其他的Highlighter也一样:
[DELPHI]
procedure TSynCppSyn.UnknownProc;
begin
{$IFDEF SYN_MBCSSUPPORT}
if FLine[Run] in LeadBytes then
//if FLine[Run] is the leadbyte of MBCS char,then
jump 2 chars.
Inc(Run,2)
else
{$ENDIF}
Inc(Run);
fTokenID := tkUnknown;
end;
[/DELPHI]