Patch Synedit CVS Chinese Issues

zhaozj2021-02-16  49

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 = '' # 13 # 10

''#13#10

' # 13 # 10

' # 13 # 10

'% s </ title> # 13 # 10 </p> <p>'<meta http-equiv = "content-type" content = "text / html; charSet = ISO-8859-1" />' # 13 # 10 </p> <p>'<meta name = "generator" content = "synedit html exporter" />' # 13 # 10 '<style type = "text / css">' # 13 # 10 </p> <p>'<! -' # 13 # 10 </p> <p>'body {color:% s; background-color:% s;}' # 13 # 10 </p> <p>'% s' </p> <p>'->' # 13 # 10 </p> <p>'</ style>' # 13 # 10 </p> <p>'</ hEAD>' # 13 # 10 </p> <p>'<body>' # 13 # 10;</p></div><div class="text-center mt-3 text-grey"> 转载请注明原文地址:https://www.9cbs.com/read-21313.html</div><div class="plugin d-flex justify-content-center mt-3"></div><hr><div class="row"><div class="col-lg-12 text-muted mt-2"><i class="icon-tags mr-2"></i><span class="badge border border-secondary mr-2"><h2 class="h6 mb-0 small"><a class="text-secondary" href="tag-2.html">9cbs</a></h2></span></div></div></div></div><div class="card card-postlist border-white shadow"><div class="card-body"><div class="card-title"><div class="d-flex justify-content-between"><div><b>New Post</b>(<span class="posts">0</span>) </div><div></div></div></div><ul class="postlist list-unstyled"> </ul></div></div><div class="d-none threadlist"><input type="checkbox" name="modtid" value="21313" checked /></div></div></div></div></div><footer class="text-muted small bg-dark py-4 mt-3" id="footer"><div class="container"><div class="row"><div class="col">CopyRight © 2020 All Rights Reserved </div><div class="col text-right">Processed: <b>0.047</b>, SQL: <b>9</b></div></div></div></footer><script src="./lang/en-us/lang.js?2.2.0"></script><script src="view/js/jquery.min.js?2.2.0"></script><script src="view/js/popper.min.js?2.2.0"></script><script src="view/js/bootstrap.min.js?2.2.0"></script><script src="view/js/xiuno.js?2.2.0"></script><script src="view/js/bootstrap-plugin.js?2.2.0"></script><script src="view/js/async.min.js?2.2.0"></script><script src="view/js/form.js?2.2.0"></script><script> var debug = DEBUG = 0; var url_rewrite_on = 1; var url_path = './'; var forumarr = {"1":"Tech"}; var fid = 1; var uid = 0; var gid = 0; xn.options.water_image_url = 'view/img/water-small.png'; </script><script src="view/js/wellcms.js?2.2.0"></script><a class="scroll-to-top rounded" href="javascript:void(0);"><i class="icon-angle-up"></i></a><a class="scroll-to-bottom rounded" href="javascript:void(0);" style="display: inline;"><i class="icon-angle-down"></i></a></body></html><script> var forum_url = 'list-1.html'; var safe_token = 'PSo1D0U3A4rmByVs_2FfWdK_2BCpOVJFZj8L6ShcWnuB11ThW352sqVpJqVZnLqiy5iMUNDVjjvJz_2BIXVamHoo75bA_3D_3D'; var body = $('body'); body.on('submit', '#form', function() { var jthis = $(this); var jsubmit = jthis.find('#submit'); jthis.reset(); jsubmit.button('loading'); var postdata = jthis.serializeObject(); $.xpost(jthis.attr('action'), postdata, function(code, message) { if(code == 0) { location.reload(); } else { $.alert(message); jsubmit.button('reset'); } }); return false; }); function resize_image() { var jmessagelist = $('div.message'); var first_width = jmessagelist.width(); jmessagelist.each(function() { var jdiv = $(this); var maxwidth = jdiv.attr('isfirst') ? first_width : jdiv.width(); var jmessage_width = Math.min(jdiv.width(), maxwidth); jdiv.find('img, embed, iframe, video').each(function() { var jimg = $(this); var img_width = this.org_width; var img_height = this.org_height; if(!img_width) { var img_width = jimg.attr('width'); var img_height = jimg.attr('height'); this.org_width = img_width; this.org_height = img_height; } if(img_width > jmessage_width) { if(this.tagName == 'IMG') { jimg.width(jmessage_width); jimg.css('height', 'auto'); jimg.css('cursor', 'pointer'); jimg.on('click', function() { }); } else { jimg.width(jmessage_width); var height = (img_height / img_width) * jimg.width(); jimg.height(height); } } }); }); } function resize_table() { $('div.message').each(function() { var jdiv = $(this); jdiv.find('table').addClass('table').wrap('<div class="table-responsive"></div>'); }); } $(function() { resize_image(); resize_table(); $(window).on('resize', resize_image); }); var jmessage = $('#message'); jmessage.on('focus', function() {if(jmessage.t) { clearTimeout(jmessage.t); jmessage.t = null; } jmessage.css('height', '6rem'); }); jmessage.on('blur', function() {jmessage.t = setTimeout(function() { jmessage.css('height', '2.5rem');}, 1000); }); $('#nav li[data-active="fid-1"]').addClass('active'); </script>