Synedit is a syntax highlight display component on the top level of SourceForge.net.
The source code of Open Source, Delphi. Quality and effect have not been said. Many commercial and non-commercial software packs are available.
With it you can easily implement your own code editor. Supports numerous grammar, support RTF and HTML output. Very convenient.
http://community.9cbs.net/expert/topicview.asp?id=3068979
9CBS's Freicin Caucel recently released a small software, it is estimated to be based on synedit. (Pure guess!)
It is not a variety of Chinese trends in the beauty. But all things have such problems, I have to do it yourself!
After short tracking, debugging. I quickly found the key to the problem!
Source / syneditexport.pas's 450 row, the implementation of this function is a bit problem.
Function TsyncustomExporter.ReplacereServedchars (atoken: string)
VAR ISSPACE: BOOLEAN): String;
VAR
I, ISRC, IDest, Srclen, Destlen: Integer;
Replace: String;
C: char; // MH 2000-10-10
Begin
Isspace: = true;
IF atoken <> '' Then Begin
Srclen: = Length (atokeen);
ISRC: = 1;
Destlen: = Srclen;
Idest: = 1;
SETLENGTH (RESULT, DESTLEN);
While ISRC <= srclen Do Begin
C: = atoken [ISRC];
Isspace: = ISSPACE AND (C = '');
// Chinese charactor patch by cker begin. 2004-06-17
{$ IFDEF SYN_MBCSSUPPORT}
IF (bytetype (atoken, isrc) = mbleadbyte) and (isrc <= srclen) and (bytetype (atoken, ISRC 1) = MBTRAILBYTE) THEN BEGIN
Replace: = replacembcs (atoken [ISRC], ATOKEN [ISRC 1]);
INC (ISRC, 2);
END ELSE
{$ ENDIF}
// Chinese charactor patch by cker end. 2004-06-17
IF FreplaceRereved [C] <> nil dam
Replace: = StrPas (FREPLACERVED [C]);
Inc (ISRC);
{$ IFDEF SYN_MBCSSUPPORT}
// end else if bytetype (atoken, ISRC) <> mbsinglebyte the begin
ELSE 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);
{$ ENDIF}
ELSE BEGIN
IF IDEST> Destlen Then Begininc (Destlen, 32);
SETLENGTH (RESULT, DESTLEN);
END;
Result [IDEST]: = C;
Inc (ISRC);
INC; IDEST;
CONTINUE;
END;
IF IDest Length (Replace) - 1> Destlen Then Begin
INC (Destlen, Max (32, Idest Length);
SETLENGTH (RESULT, DESTLEN);
END;
For i: = 1 to Length (Replace) Do Begin
Result [IDEST]: = Replace [i];
INC; IDEST;
END;
END;
SETLENGTH (Result, Idest - 1);
END ELSE
Result: = '';
END;
In fact, the original author has realized the processing of multi-byte text, but may not be a CJK language, there is not much interest in this, so it still needs to do it. Anyway, our Sylessit is working, and HTML is not garbled when it is output in Chinese!
If this is ended, there is a small problem, that is, the default codePage is not Chinese but is ISO8859-1, so that you need to manually choose to display Chinese.
Modification is also very simple.
Syneditexporthtml.Pas 330 row:
It is very convenient to modify here, just don't say it.
Function Tsynexporterhtml.getHeader: String;
Const
Descriptionsize = 105;
HEADERSIZE = 47;
FOOTERSIZE1 = 58;
FOOTERSIZE2 = 24;
NativeHeader = 'Version: 0.9' # 13 # 10
'StartHtml:%. 10d' # 13 # 10
'Endhtml:%. 10d' # 13 # 10
'Startfragment:%. 10d' # 13 # 10
'Endfragment:%. 10d' # 13 # 10;
HTMLASTEXTHEADER = ' XML Version = "1.0" encoding = "ISO-8859-1"?>' # 13 # 10
''#13#10
' # 13 # 10
'
# 13 # 10'
'' # 13 # 10
'' # 13 # 10 '