吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3510|回复: 9
收起左侧

[其他转载] 关于吾爱论坛新增IL语言支持的原理和测试与使用

[复制链接]
lizhirui 发表于 2018-10-27 12:52
本帖最后由 lizhirui 于 2018-10-27 18:32 编辑

恭喜吾爱论坛支持新的语言——IL语言(我干的),即.net中间语言的语法着色。
望大家看完觉得本帖好的话不要忘记评个热心值。
使用方法如下:
添加代码演示.gif
如果使用过程中出现如下提示:
错误.png
其原因是浏览器缓存未刷新,请清空浏览器缓存后再次尝试,或者打开https://avatar.52pojie.cn/mw_syn ... ushIL.js?ver=3.0.83这个链接,查看“Brush.aliases        = ['il'];”行中的il是否为小写,此处原因是因为刷子文件缓存的原因,导致新版本js文件未加载。

以下是测试代码,希望大家可以对着色效果提出一些意见或者建议:
[IL] 纯文本查看 复制代码
.method public hidebysig instance bool
        VerifyRegisterCode(string productid,
                           string key,
                           [out] valuetype [mscorlib]System.DateTime& 'date',
                           [out] string& msg,
                           [out] int32& interval) cil managed
{
  // Code size       240 (0xf0)
  .maxstack  3
       
  .locals init (class [mscorlib]System.Security.Cryptography.RSACryptoServiceProvider V_0,
           uint8[] V_1,
           uint8[] V_2,
           string V_3,
           bool V_4,
           valuetype [mscorlib]System.DateTime V_5)
  IL_0000:  call       class [mscorlib]System.Text.Encoding [mscorlib]System.Text.Encoding::get_UTF8()
  IL_0005:  ldarg.1
  IL_0006:  callvirt   instance uint8[] [mscorlib]System.Text.Encoding::GetBytes(string)
  IL_000b:  pop
  IL_000c:  newobj     instance void [mscorlib]System.Security.Cryptography.RSACryptoServiceProvider::.ctor()
  IL_0011:  stloc.0
  IL_0012:  ldloc.0
  IL_0013:  ldsfld     string Wuyou.Exam.Activations.Activation::PublicKey
  IL_0018:  callvirt   instance void [mscorlib]System.Security.Cryptography.AsymmetricAlgorithm::FromXmlString(string)
  IL_001d:  ldarg.3
  IL_001e:  initobj    [mscorlib]System.DateTime
  .try
  {
    IL_0024:  ldarg.2
    IL_0025:  call       uint8[] [mscorlib]System.Convert::FromBase64String(string)
    IL_002a:  stloc.1
    IL_002b:  ldloc.0
    IL_002c:  ldloc.1
    IL_002d:  call       uint8[] [Inm.Security]Inm.Security.Cryptography.RSAPrivateEncryption::PublicDecryption(class [mscorlib]System.Security.Cryptography.RSACryptoServiceProvider,
                                                                                                                uint8[])
    IL_0032:  stloc.2
    IL_0033:  call       class [mscorlib]System.Text.Encoding [mscorlib]System.Text.Encoding::get_UTF8()
    IL_0038:  ldloc.2
    IL_0039:  callvirt   instance string [mscorlib]System.Text.Encoding::GetString(uint8[])
    IL_003e:  stloc.3
    IL_003f:  ldloc.3
    IL_0040:  callvirt   instance int32 [mscorlib]System.String::get_Length()
    IL_0045:  ldc.i4.s   15
    IL_0047:  bge.s      IL_005d
 
    IL_0049:  ldarg.s    msg
    IL_004b:  ldstr      bytearray (E0 65 48 65 84 76 C0 6F 3B 6D 01 78 )             // .eHe.v.o;m.x
    IL_0050:  stind.ref
    IL_0051:  ldarg.s    interval
    IL_0053:  ldc.i4.0
    IL_0054:  stind.i4
    IL_0055:  ldc.i4.0
    IL_0056:  stloc.s    V_4
    IL_0058:  leave      IL_00ed
 
    IL_005d:  ldloc.3
    IL_005e:  ldc.i4.0
    IL_005f:  ldc.i4.s   10
    IL_0061:  callvirt   instance string [mscorlib]System.String::Substring(int32,
                                                                            int32)
    IL_0066:  ldarg.3
    IL_0067:  call       bool [mscorlib]System.DateTime::TryParse(string,
                                                                  valuetype [mscorlib]System.DateTime&)
    IL_006c:  brfalse.s  IL_007e
 
    IL_006e:  ldloc.3
    IL_006f:  ldc.i4.s   15
    IL_0071:  callvirt   instance string [mscorlib]System.String::Substring(int32)
    IL_0076:  ldarg.1
    IL_0077:  call       bool [mscorlib]System.String::op_Equality(string,
                                                                   string)
    IL_007c:  br.s       IL_007f
 
    IL_007e:  ldc.i4.0
    IL_007f:  brfalse.s  IL_00ca
 
    IL_0081:  ldloc.3
    IL_0082:  ldc.i4.s   11
    IL_0084:  ldc.i4.3
    IL_0085:  callvirt   instance string [mscorlib]System.String::Substring(int32,
                                                                            int32)
    IL_008a:  ldarg.s    interval
    IL_008c:  call       bool [mscorlib]System.Int32::TryParse(string,
                                                               int32&)
    IL_0091:  brfalse.s  IL_00bd
 
    IL_0093:  ldarg.3
    IL_0094:  ldarg.3
    IL_0095:  ldarg.s    interval
    IL_0097:  ldind.i4
    IL_0098:  conv.r8
    IL_0099:  call       instance valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::AddDays(float64)
    IL_009e:  dup
    IL_009f:  stloc.s    V_5
    IL_00a1:  stobj      [mscorlib]System.DateTime
    IL_00a6:  ldloc.s    V_5
    IL_00a8:  call       valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now()
    IL_00ad:  stloc.s    V_5
    IL_00af:  ldloca.s   V_5
    IL_00b1:  call       instance valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Date()
    IL_00b6:  call       bool [mscorlib]System.DateTime::op_GreaterThanOrEqual(valuetype [mscorlib]System.DateTime,
                                                                               valuetype [mscorlib]System.DateTime)
    IL_00bb:  br.s       IL_00be
 
    IL_00bd:  ldc.i4.0
    IL_00be:  ldarg.s    msg
    IL_00c0:  ldstr      bytearray (C0 6F 3B 6D 01 78 F2 5D C7 8F 1F 67 )             // .o;m.x.]...g
    IL_00c5:  stind.ref
    IL_00c6:  stloc.s    V_4
    IL_00c8:  leave.s    IL_00ed
 
    IL_00ca:  ldarg.s    msg
    IL_00cc:  ldstr      bytearray (E0 65 48 65 84 76 C0 6F 3B 6D 01 78 )             // .eHe.v.o;m.x
    IL_00d1:  stind.ref
    IL_00d2:  ldarg.s    interval
    IL_00d4:  ldc.i4.0
    IL_00d5:  stind.i4
    IL_00d6:  ldc.i4.0
    IL_00d7:  stloc.s    V_4
    IL_00d9:  leave.s    IL_00ed
 
  }  // end .try
  catch [mscorlib]System.Object 
  {
    IL_00db:  pop
    IL_00dc:  ldarg.s    msg
    IL_00de:  ldstr      bytearray (A8 60 93 8F 65 51 84 76 C0 6F 3B 6D 01 78 0D 4E   // .`..eQ.v.o;m.x.N
                                    63 6B 6E 78 0C FF F7 8B CD 91 B0 65 93 8F 65 51   // cknx.......e..eQ
                                    02 30 )                                           // .0
    IL_00e3:  stind.ref
    IL_00e4:  ldarg.s    interval
    IL_00e6:  ldc.i4.0
    IL_00e7:  stind.i4
    IL_00e8:  ldc.i4.0
    IL_00e9:  stloc.s    V_4
    IL_00eb:  leave.s    IL_00ed
 
  }  // end handler
  IL_00ed:  ldloc.s    V_4
  IL_00ef:  ret
} // end of method Activation::VerifyRegisterCode

原理如下:
论坛使用的是mw_syntaxhighlighter插件,
我们打开源码目录(默认位于discuz论坛下的source/plugin/mw_syntaxhighlighter目录下)看到如下文件:
QQ截图20181027122259.png
我们打开discuz_plugin_mw_syntaxhighlighter_SC_UTF8.xml文件,看到如下内容:
[XML] 纯文本查看 复制代码
<?xml version="1.0" encoding="ISO-8859-1"?>
<root>
        <item id="Title"><![CDATA[Discuz! Plugin]]></item>
        <item id="Version"><![CDATA[X2,X2.5,X3,X3.1,X3.2,X3.3]]></item>
        <item id="Time"><![CDATA[2012-04-19 12:07]]></item>
        <item id="From"><![CDATA[Discuz! Board ([url=http://testdzx.discuz.com/]http://testdzx.discuz.com/[/url])]]></item>
        <item id="Data">
                <item id="plugin">
                        <item id="available"><![CDATA[1]]></item>
                        <item id="adminid"><![CDATA[1]]></item>
                        <item id="name"><![CDATA[代码语法高亮]]></item>
                        <item id="identifier"><![CDATA[mw_syntaxhighlighter]]></item>
                        <item id="description"><![CDATA[本插件用于代码语法高亮,可应用于计算机技术类等网站,方便分享程序代码。 基于SyntaxHighlighter ver. 3.0.83 and ver. 2.1.382. 支持语言:Bash, C++, CSS, Delphi, Java, JavaScript, Perl, PHP, Python, Ruby, SQL, VB, XML, XHTML and HTML等]]></item>
                        <item id="datatables"><![CDATA[]]></item>
                        <item id="directory"><![CDATA[mw_syntaxhighlighter/]]></item>
                        <item id="copyright"><![CDATA[山狼]]></item>
                        <item id="version"><![CDATA[1.65]]></item>
                        <item id="__modules">
                                <item id="0">
                                        <item id="name"><![CDATA[mw_syntaxhighlighter]]></item>
                                        <item id="menu"><![CDATA[]]></item>
                                        <item id="url"><![CDATA[]]></item>
                                        <item id="type"><![CDATA[11]]></item>
                                        <item id="adminid"><![CDATA[0]]></item>
                                        <item id="displayorder"><![CDATA[0]]></item>
                                        <item id="navtitle"><![CDATA[]]></item>
                                        <item id="navicon"><![CDATA[]]></item>
                                        <item id="navsubname"><![CDATA[]]></item>
                                        <item id="navsuburl"><![CDATA[]]></item>
                                </item>
                        </item>
                </item>
                <item id="version"><![CDATA[X2,X2.5,X3,X3.1,X3.2,X3.3]]></item>
                <item id="var">
                        <item id="0">
                                <item id="displayorder"><![CDATA[0]]></item>
                                <item id="title"><![CDATA[高亮版本(Library version)]]></item>
                                <item id="description"><![CDATA[选择一个高亮版本库。 建议确定之后就不要修改。]]></item>
                                <item id="variable"><![CDATA[libversion]]></item>
                                <item id="type"><![CDATA[select]]></item>
                                <item id="value"><![CDATA[1]]></item>
                                <item id="extra"><![CDATA[1 = 3.0.83
2 = 2.1.382]]></item>
                        </item>
                        <item id="1">
                                <item id="displayorder"><![CDATA[1]]></item>
                                <item id="title"><![CDATA[颜色主题(Theme)]]></item>
                                <item id="description"><![CDATA[]]></item>
                                <item id="variable"><![CDATA[theme]]></item>
                                <item id="type"><![CDATA[select]]></item>
                                <item id="value"><![CDATA[Default]]></item>
                                <item id="extra"><![CDATA[Default = Default
Django = Django
Eclipse = Eclipse
Emacs = Emacs
FadeToGrey = FadeToGrey
MDUltra = MDUltra
Midnight = Midnight
RDark = RDark
None = None
Random = Random]]></item>
                        </item>
                        <item id="2">
                                <item id="displayorder"><![CDATA[2]]></item>
                                <item id="title"><![CDATA[语言(Language)]]></item>
                                <item id="description"><![CDATA[选择支持的语言,按住Ctrl键可多选
注意:AppleScript、Sass、Scss三种语言仅在3.x高亮版本库中支持]]></item>
                                <item id="variable"><![CDATA[language]]></item>
                                <item id="type"><![CDATA[selects]]></item>
                                <item id="extra"><![CDATA[applescript = AppleScript
actionscript3 = Actionscript3
bash = Bash shell
coldfusion = ColdFusion
c = C
cpp = C++
csharp = C#
css = CSS
delphi = Delphi
diff = Diff
erlang = Erlang
groovy = Groovy
html = HTML
java = Java
javafx = JavaFX
javascript = JavaScript
pascal = Pascal
patch = Patch
perl = Perl
php = PHP
text = Plain Text
powershell = PowerShell
python = Python
ruby = Ruby
rails = Ruby on Rails
sass = Sass
scala = Scala
scss = Scss
shell = Shell
sql = SQL
vb = Visual Basic
vbnet = Visual Basic .NET
xhtml = XHTML
xml = XML
xslt = XSLT
objc = Objective-C
asm = Asm
aauto = AAuto
golang = Golang
il = IL
lua = Lua]]></item>
                                <item id="__value">
                                        <item id="0"><![CDATA[applescript]]></item>
                                        <item id="1"><![CDATA[actionscript3]]></item>
                                        <item id="2"><![CDATA[bash]]></item>
                                        <item id="3"><![CDATA[coldfusion]]></item>
                                        <item id="4"><![CDATA[c]]></item>
                                        <item id="5"><![CDATA[cpp]]></item>
                                        <item id="6"><![CDATA[csharp]]></item>
                                        <item id="7"><![CDATA[css]]></item>
                                        <item id="8"><![CDATA[delphi]]></item>
                                        <item id="9"><![CDATA[diff]]></item>
                                        <item id="10"><![CDATA[erlang]]></item>
                                        <item id="11"><![CDATA[groovy]]></item>
                                        <item id="12"><![CDATA[html]]></item>
                                        <item id="13"><![CDATA[java]]></item>
                                        <item id="14"><![CDATA[javafx]]></item>
                                        <item id="15"><![CDATA[javascript]]></item>
                                        <item id="16"><![CDATA[pascal]]></item>
                                        <item id="17"><![CDATA[patch]]></item>
                                        <item id="18"><![CDATA[perl]]></item>
                                        <item id="19"><![CDATA[php]]></item>
                                        <item id="20"><![CDATA[text]]></item>
                                        <item id="21"><![CDATA[powershell]]></item>
                                        <item id="22"><![CDATA[python]]></item>
                                        <item id="23"><![CDATA[ruby]]></item>
                                        <item id="24"><![CDATA[rails]]></item>
                                        <item id="25"><![CDATA[sass]]></item>
                                        <item id="26"><![CDATA[scala]]></item>
                                        <item id="27"><![CDATA[scss]]></item>
                                        <item id="28"><![CDATA[shell]]></item>
                                        <item id="29"><![CDATA[sql]]></item>
                                        <item id="30"><![CDATA[vb]]></item>
                                        <item id="31"><![CDATA[vbnet]]></item>
                                        <item id="32"><![CDATA[xhtml]]></item>
                                        <item id="33"><![CDATA[xml]]></item>
                                        <item id="34"><![CDATA[xslt]]></item>
                                        <item id="35"><![CDATA[objc]]></item>
                                        <item id="36"><![CDATA[asm]]></item>
                                        <item id="37"><![CDATA[aauto]]></item>
                                        <item id="38"><![CDATA[golang]]></item>
                                        <item id="39"><![CDATA[lua]]></item>
                                        <item id="40"><![CDATA[IL]]></item>
                                </item>
                        </item>
                        <item id="3">
                                <item id="displayorder"><![CDATA[3]]></item>
                                <item id="title"><![CDATA[自动链接(Auto links)]]></item>
                                <item id="description"><![CDATA[在高亮代码中,url将自动转化为可以点击]]></item>
                                <item id="variable"><![CDATA[autolinks]]></item>
                                <item id="type"><![CDATA[radio]]></item>
                                <item id="value"><![CDATA[1]]></item>
                                <item id="extra"><![CDATA[]]></item>
                        </item>
                        <item id="4">
                                <item id="displayorder"><![CDATA[4]]></item>
                                <item id="title"><![CDATA[快速复制代码(Quick copy)]]></item>
                                <item id="description"><![CDATA[仅适用于3.x版本,快速复制代码将使得复制代码到剪切板更加方便。
在高亮代码区域任意双击,区域所有代码将可以直接复制。]]></item>
                                <item id="variable"><![CDATA[quickcodecopy]]></item>
                                <item id="type"><![CDATA[radio]]></item>
                                <item id="value"><![CDATA[1]]></item>
                                <item id="extra"><![CDATA[]]></item>
                        </item>
                        <item id="5">
                                <item id="displayorder"><![CDATA[5]]></item>
                                <item id="title"><![CDATA[显示行号(Gutter)]]></item>
                                <item id="description"><![CDATA[默认显示行号]]></item>
                                <item id="variable"><![CDATA[gutter]]></item>
                                <item id="type"><![CDATA[radio]]></item>
                                <item id="value"><![CDATA[1]]></item>
                                <item id="extra"><![CDATA[]]></item>
                        </item>
                        <item id="6">
                                <item id="displayorder"><![CDATA[6]]></item>
                                <item id="title"><![CDATA[开始行号(Startlinenumber)]]></item>
                                <item id="description"><![CDATA[行号的开始值]]></item>
                                <item id="variable"><![CDATA[startlinenumber]]></item>
                                <item id="type"><![CDATA[number]]></item>
                                <item id="value"><![CDATA[1]]></item>
                                <item id="extra"><![CDATA[]]></item>
                        </item>
                        <item id="7">
                                <item id="displayorder"><![CDATA[7]]></item>
                                <item id="title"><![CDATA[Line Number Padding]]></item>
                                <item id="description"><![CDATA[This option will allow you to pad line numbers with leading zeros.]]></item>
                                <item id="variable"><![CDATA[linenumberpadding]]></item>
                                <item id="type"><![CDATA[select]]></item>
                                <item id="value"><![CDATA[1]]></item>
                                <item id="extra"><![CDATA[1 = None
2 = Auto
3 = 1
4 = 2
5 = 3
6 = 4
7 = 5]]></item>
                        </item>
                        <item id="8">
                                <item id="displayorder"><![CDATA[8]]></item>
                                <item id="title"><![CDATA[显示工具条(Toolbar)]]></item>
                                <item id="description"><![CDATA[默认显示工具条]]></item>
                                <item id="variable"><![CDATA[toolbar]]></item>
                                <item id="type"><![CDATA[radio]]></item>
                                <item id="value"><![CDATA[1]]></item>
                                <item id="extra"><![CDATA[]]></item>
                        </item>
                        <item id="9">
                                <item id="displayorder"><![CDATA[9]]></item>
                                <item id="title"><![CDATA[收缩代码框(Collapse)]]></item>
                                <item id="description"><![CDATA[代码框自动收缩。如果要使用此选项,必须开启“显示工具条”。
开启此项,“显示工具条”将自动开启。]]></item>
                                <item id="variable"><![CDATA[collapse]]></item>
                                <item id="type"><![CDATA[radio]]></item>
                                <item id="value"><![CDATA[0]]></item>
                                <item id="extra"><![CDATA[]]></item>
                        </item>
                        <item id="10">
                                <item id="displayorder"><![CDATA[10]]></item>
                                <item id="title"><![CDATA[制表符对齐(Smart tabs)]]></item>
                                <item id="description"><![CDATA[默认优化制表符缩进]]></item>
                                <item id="variable"><![CDATA[smarttabs]]></item>
                                <item id="type"><![CDATA[radio]]></item>
                                <item id="value"><![CDATA[1]]></item>
                                <item id="extra"><![CDATA[]]></item>
                        </item>
                        <item id="11">
                                <item id="displayorder"><![CDATA[11]]></item>
                                <item id="title"><![CDATA[制表符长度(Tab size)]]></item>
                                <item id="description"><![CDATA[制表符长度]]></item>
                                <item id="variable"><![CDATA[tabsize]]></item>
                                <item id="type"><![CDATA[number]]></item>
                                <item id="value"><![CDATA[4]]></item>
                                <item id="extra"><![CDATA[]]></item>
                        </item>
                        <item id="12">
                                <item id="displayorder"><![CDATA[12]]></item>
                                <item id="title"><![CDATA[Wrap lines]]></item>
                                <item id="description"><![CDATA[仅2.x版本支持。过长的代码将自动折行]]></item>
                                <item id="variable"><![CDATA[wraplines]]></item>
                                <item id="type"><![CDATA[radio]]></item>
                                <item id="value"><![CDATA[0]]></item>
                                <item id="extra"><![CDATA[]]></item>
                        </item>
                        <item id="13">
                                <item id="displayorder"><![CDATA[13]]></item>
                                <item id="title"><![CDATA[标题(Title)]]></item>
                                <item id="description"><![CDATA[仅适用于3.x版本。标题将显示在每段代码模块上方。]]></item>
                                <item id="variable"><![CDATA[title]]></item>
                                <item id="type"><![CDATA[text]]></item>
                                <item id="value"><![CDATA[]]></item>
                                <item id="extra"><![CDATA[]]></item>
                        </item>
                        <item id="14">
                                <item id="displayorder"><![CDATA[14]]></item>
                                <item id="title"><![CDATA[最大高度(Max Height)]]></item>
                                <item id="description"><![CDATA[超过最大高度,则滚动条显示。空或者为0则全部显示]]></item>
                                <item id="variable"><![CDATA[maxheight]]></item>
                                <item id="type"><![CDATA[number]]></item>
                                <item id="value"><![CDATA[600]]></item>
                                <item id="extra"><![CDATA[]]></item>
                        </item>
                </item>
                <item id="language">
                        <item id="scriptlang">
                                <item id="syntaxhighlighter_viewsource"><![CDATA[纯文本查看]]></item>
                                <item id="syntaxhighlighter_copycode"><![CDATA[复制代码]]></item>
                        </item>
                        <item id="templatelang">
                                <item id="syntaxhighlighter_select_lang"><![CDATA[请输入要插入的代码<br>选择语言:]]></item>
                                <item id="syntaxhighlighter_show_gutter"><![CDATA[显示行号:]]></item>
                                <item id="syntaxhighlighter_your_code"><![CDATA[你的代码:]]></item>
                                <item id="syntaxhighlighter_close"><![CDATA[关闭]]></item>
                                <item id="syntaxhighlighter_submit"><![CDATA[提交]]></item>
                                <item id="syntaxhighlighter_cancle"><![CDATA[取消]]></item>
                                <item id="syntaxhighlighter_copyed"><![CDATA[代码已复制到剪贴板]]></item>
                        </item>
                </item>
        </item>
</root>

其中的“IL = IL”与“<item id="40"><![CDATA[IL]]></item>”是我增添的项,其他文件也一样修改(后来发现,此处似乎没什么用,只是插件初次安装时的配置,真正的配置在数据库中)
我们打开syntaxhighlighter3目录,看到一个“scripts”目录,打开看到如下画面:
QQ截图20181027122637.png
我们随便打开一个文件(本例为shBrushJScript.js),看到如下内容:
[JavaScript] 纯文本查看 复制代码
/**
 * SyntaxHighlighter
 * [url=http://alexgorbatchev.com/SyntaxHighlighter]http://alexgorbatchev.com/SyntaxHighlighter[/url]
 *
 * SyntaxHighlighter is donationware. If you are using it, please donate.
 * [url=http://alexgorbatchev.com/SyntaxHighlighter/donate.html]http://alexgorbatchev.com/SyntaxHighlighter/donate.html[/url]
 *
 * @version
 * 3.0.83 (July 02 2010)
 * 
 * @copyright
 * Copyright (C) 2004-2010 Alex Gorbatchev.
 *
 * @license
 * Dual licensed under the MIT and GPL licenses.
 */
;(function()
{
        // CommonJS
        typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null;

        function Brush()
        {
                var keywords =        'break case catch continue ' +
                                                'default delete do else false  ' +
                                                'for function if in instanceof ' +
                                                'new null return super switch ' +
                                                'this throw true try typeof var while with'
                                                ;

                var r = SyntaxHighlighter.regexLib;
                
                this.regexList = [
                        { regex: r.multiLineDoubleQuotedString,                                        css: 'string' },                        // double quoted strings
                        { regex: r.multiLineSingleQuotedString,                                        css: 'string' },                        // single quoted strings
                        { regex: r.singleLineCComments,                                                        css: 'comments' },                        // one line comments
                        { regex: r.multiLineCComments,                                                        css: 'comments' },                        // multiline comments
                        { regex: /\s*#.*/gm,                                                                        css: 'preprocessor' },                // preprocessor tags like #region and #endregion
                        { regex: new RegExp(this.getKeywords(keywords), 'gm'),        css: 'keyword' }                        // keywords
                        ];
        
                this.forHtmlScript(r.scriptScriptTags);
        };

        Brush.prototype        = new SyntaxHighlighter.Highlighter();
        Brush.aliases        = ['js', 'jscript', 'javascript'];

        SyntaxHighlighter.brushes.JScript = Brush;

        // CommonJS
        typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();


我们很容易可以看出,此处是根据正则表达式去匹配文本,匹配的文本会应用对应的CSS样式,且越靠前的规则越优先。
我们在论坛HTML源码中很容易就可以看出论坛使用的是RDark主题:
QQ截图20181027123438.png
我仿照shBrushJScript.js编写了shBrushIL.js,内容如下:
[JavaScript] 纯文本查看 复制代码
/**
 * SyntaxHighlighter
 * [url=http://alexgorbatchev.com/SyntaxHighlighter]http://alexgorbatchev.com/SyntaxHighlighter[/url]
 *
 * SyntaxHighlighter is donationware. If you are using it, please donate.
 * [url=http://alexgorbatchev.com/SyntaxHighlighter/donate.html]http://alexgorbatchev.com/SyntaxHighlighter/donate.html[/url]
 *
 * @version
 * 3.0.83 (July 02 2010)
 * 
 * @copyright
 * Copyright (C) 2004-2010 Alex Gorbatchev.
 *
 * @license
 * Dual licensed under the MIT and GPL licenses.
 */
;(function()
{
        // CommonJS
        typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null;

        function Brush()
        {
                //此函数与SyntaxHighlighter3的原生函数getKeywords相比支持了符号开头的关键字
                function getKeywordsIL(str)
                {
                        str = str
                                .replace(/^\s+|\s+$/g, '')
                                .replace(/\s+/g, '|')
                                ;
                        
                        return '(?<=([^A-Za-z0-9_.]|^|$))(?:' + str + ')(?=([^A-Za-z0-9_.]|^|$))';
                }
                
                //这堆关键字,一部分是我从网上的IL语言指令集里抓出来的,另一部分是C#的关键字,不知道还有没有缺的,欢迎大家评论发表意见和建议
                var keywords =        'nop break ldarg.0 ldarg.1 ldarg.2 ldarg.3 ldloc.0 ldloc.1 ldloc.2 ldloc.3 stloc.0 ' + 
                                                'stloc.1 stloc.2 stloc.3 ldarg.s ldarga.s starg.s ldloc.s ldloca.s stloc.s ldnull ldc.i4.m1 ' + 
                                                'ldc.i4.M1 ldc.i4.0 ldc.i4.1 ldc.i4.2 ldc.i4.3 ldc.i4.4 ldc.i4.5 ldc.i4.6 ldc.i4.7 ldc.i4.8 ' + 
                                                'ldc.i4.s ldc.i4 ldc.i8 ldc.r4 ldc.r8 dup pop jmp call calli ret br.s brfalse.s brnull.s brzero.s ' + 
                                                'brinst.s brtrue.s beq.s bge.s bgt.s ble.s blt.s bne.un.s bge.un.s bgt.un.s ble.un.s blt.un.s ' + 
                                                'br brfalse brnull brzero brinst brtrue beq bge bgt ble blt bne.un bge.un bgt.un ble.un blt.un ' + 
                                                'switch ldind.i1 ldind.u1 ldind.i2 ldind.u2 ldind.i4 ldind.u4 ldind.i8 ldind.u8 ldind.i ldind.r4 ' + 
                                                'ldind.r8 ldind.ref stind.ref stind.i1 stind.i2 stind.i4 stind.i8 stind.r4 stind.r8 add sub mul div ' + 
                                                'div.un rem rem.un and or xor shl shr shr.un neg not conv.i1 conv.i2 conv.i4 conv.i8 conv.r4 ' + 
                                                'conv.r8 conv.u4 conv.u8 callvirt cpobj ldobj ldstr newobj castclass isinst conv.r.un unbox ' + 
                                                'throw ldfld ldflda stfld ldsfld ldsflda stsfld stobj conv.ovf.i1.un conv.ovf.i2.un conv.ovf.i4.un ' + 
                                                'conv.ovf.i8.un conv.ovf.u1.un conv.ovf.u2.un conv.ovf.u4.un conv.ovf.u8.un conv.ovf.i.un conv.ovf.u.un ' + 
                                                'box newarr ldlen ldelema ldelem.i1 ldelem.u1 ldelem.i2 ldelem.u2 ldelem.i4 ldelem.u4 ldelem.i8 ldelem.u8 ' + 
                                                'ldelem.i ldelem.r4 ldelem.r8 ldelem.ref stelem.i stelem.i1 stelem.i2 stelem.i4 stelem.i8 stelem.r4 ' + 
                                                'stelem.r8 stelem.ref ldelem stelem unbox.any conv.ovf.i1 conv.ovf.u1 conv.ovf.i2 conv.ovf.u2 conv.ovf.i4 ' + 
                                                'conv.ovf.u4 conv.ovf.i8 conv.ovf.u8 refanyval ckfinite mkrefany ldtoken conv.u2 conv.u1 conv.i conv.ovf.i ' + 
                                                'conv.ovf.u add.ovf add.ovf.un mul.ovf mul.ovf.un sub.ovf sub.ovf.un endfault endfinally leave leave.s ' + 
                                                'stind.i conv.u arglist ceq cgt cgt.un clt clt.un ldftn ldvirtftn ldarg ldarga starg ldloc ldloca stloc ' + 
                                                'localloc endfilter (alignment) volatile tail initobj constrained cpblk initblk rethrow sizeof refanytype ' + 
                                                'readonly .try catch .locals .method public bool instance valuetype string int32 cil managed [out] hidebysig .maxstack ' + 
                                                'class uint8 void private protected internal bytearray privatescope famandassem assembly family famorassem final newslot specialname pinvokeimpl ' + 
                                                'rtspecialname native runtime unmanaged internalcall synchronized noinlining box unbox ' + 
                                                'br.s nearer ' + 
                                                'abstract as base bool break byte case catch char checked class const ' +
                                                'continue decimal default delegate do double else enum event explicit ' +
                                                'extern false finally fixed float for foreach get goto if implicit in int ' +
                                                'interface internal is lock long namespace new null object operator out ' +
                                                'override params private protected public readonly ref return sbyte sealed set ' +
                                                'short sizeof stackalloc static string struct switch this throw true try ' +
                                                'typeof uint ulong unchecked unsafe ushort using virtual void while';

                var r = SyntaxHighlighter.regexLib;
                
                this.regexList = [
                        { regex: r.multiLineDoubleQuotedString,                                        css: 'string' },                        // double quoted strings 双引号字符串
                        { regex: r.multiLineSingleQuotedString,                                        css: 'string' },                        // single quoted strings 单引号字符串
                        { regex: r.singleLineCComments,                                                        css: 'comments' },                        // one line comments 单行注释
                        { regex: r.multiLineCComments,                                                        css: 'comments' },                        // multiline comments 多行注释
                        { regex: new RegExp(getKeywordsIL(keywords), 'gm'),            css: 'keyword' },                        // keywords 关键字
                        { regex: /\[[^\[\]]+\]/gm,                              css: 'color3' },//匹配方括号括起来的库名
                        { regex: /IL_[0-9a-fA-F]+\:/gm,                         css: 'preprocessor'},//IL开头的行号
                        { regex: /IL_[0-9a-fA-F]+/gm,                           css: 'preprocessor'},//IL开头的跳转参数
                        { regex: /\b[0-9A-Fa-f]+\b/gm,                          css: 'value'},//十六进制/十进制数值
                        { regex: /V_[0-9a-fA-F]+/gm,                            css: 'variable'},//变量
                        ];
        
                this.forHtmlScript(r.scriptScriptTags);
        };

        Brush.prototype        = new SyntaxHighlighter.Highlighter();
        Brush.aliases        = ['il'];//刷子名

        SyntaxHighlighter.brushes.il = Brush;

        // CommonJS
        typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();

然后我又修改了插件根目录下的mw_syntaxhighlighter.class.php文件,修改后内容如下:
[PHP] 纯文本查看 复制代码
<?php

if(!defined('IN_DISCUZ')) {
        exit('Access Denied');
}

class plugin_mw_syntaxhighlighter {

        var $libversion = '';//note 使用高亮版本
        var $theme = '';//note 颜色主题
        var $libfolder = '';//note 高亮库所在目录
        var $autolinks = '';
        var $quickcodecopy = '';
        var $gutter = '';
        var $startlinenumber = '';
        var $linenumberpadding = '';
        var $toolbar = '';
        var $collapse = '';
        var $smarttabs = '';
        var $tabsize = '';
        var $wraplines = '';
        var $title = '';
        var $maxheight = '';
        var $legacy_enable = '';
        var $legacy = '';
        var $collapse_lable_text = '';
        var $collapse_lable = '';

        var $pluginurl = '';
        var $brush_files = '';
        var $sh_lang_3 = '';
        var $sh_lang_2 = '';
        var $select_language = '';

        public function __construct() {
                global $_G;

                $this->pluginurl = "https://avatar.52pojie.cn/mw_syntaxhighlighter/";//此处是插件目录,根据需要修改,这个文件中还有一处,我忘了在哪了,用52pojie作为关键字搜索即可

                $this->sh_lang_3 = array(
                        "asm" => array('Asm', 'true'),
                        "applescript" => array('AppleScript', 'true'),
                        "actionscript3" => array('Actionscript3', 'true'),
                        "bash" => array('Bash shell', 'true'),
                        "coldfusion" => array('ColdFusion', 'true'),
                        "c" => array('C', 'true'),
                        "cpp" => array('C++', 'true'),
                        "csharp" => array('C#', 'true'),
                        "css" => array('CSS', 'true'),
                        "delphi" => array('Delphi', 'true'),
                        "diff" => array('Diff', 'true'),
                        "erlang" => array('Erlang', 'true'),
                        "groovy" => array('Groovy', 'true'),
                        "html" => array('HTML', 'true'),
                        "il" => array('IL', 'true'),
                        "java" => array('Java', 'true'),
                        "javafx" => array('JavaFX', 'true'),
                        "javascript" => array('JavaScript', 'true'),
                        "pascal" => array('Pascal', 'true'),
                        "patch" => array('Patch', 'true'),
                        "perl" => array('Perl', 'true'),
                        "php" => array('PHP', 'true'),
                        "text" => array('Plain Text', 'true'),
                        "powershell" => array('PowerShell', 'true'),
                        "python" => array('Python', 'true'),
                        "ruby" => array('Ruby', 'true'),
                        "rails" => array('Ruby on Rails', 'true'),
                        "sass" => array('Sass', 'true'),
                        "scala" => array('Scala', 'true'),
                        "scss" => array('Scss', 'true'),
                        "shell" => array('Shell', 'true'),
                        "sql" => array('SQL', 'true'),
                        "vb" => array('Visual Basic', 'true'),
                        "vbnet" => array('Visual Basic .NET', 'true'),
                        "xhtml" => array('XHTML', 'true'),
                        "xml" => array('XML', 'true'),
                        "xslt" => array('XSLT', 'true'),
                        "objc" => array('Objective-C', 'true'),
                        "asm" => array('Asm', 'true'),
                        "aauto" => array('AAuto', 'true'),
                        "golang" => array('Golang', 'true'),
                        "lua" => array('Lua', 'true'),
                );

                $this->sh_lang_2 = array(
                        "asm" => array('Asm', 'true'),
                        "actionscript3" => array('Actionscript3', 'true'),
                        "bash" => array('Bash shell', 'true'),
                        "coldfusion" => array('ColdFusion', 'true'),
                        "c" => array('C', 'true'),
                        "cpp" => array('C++', 'true'),
                        "csharp" => array('C#', 'true'),
                        "css" => array('CSS', 'true'),
                        "delphi" => array('Delphi', 'true'),
                        "diff" => array('Diff', 'true'),
                        "erlang" => array('Erlang', 'true'),
                        "groovy" => array('Groovy', 'true'),
                        "html" => array('HTML', 'true'),
                        "java" => array('Java', 'true'),
                        "javafx" => array('JavaFX', 'true'),
                        "javascript" => array('JavaScript', 'true'),
                        "pascal" => array('Pascal', 'true'),
                        "patch" => array('Patch', 'true'),
                        "perl" => array('Perl', 'true'),
                        "php" => array('PHP', 'true'),
                        "text" => array('Plain Text', 'true'),
                        "powershell" => array('PowerShell', 'true'),
                        "python" => array('Python', 'true'),
                        "ruby" => array('Ruby', 'true'),
                        "rails" => array('Ruby on Rails', 'true'),
                        "scala" => array('Scala', 'true'),
                        "shell" => array('Shell', 'true'),
                        "sql" => array('SQL', 'true'),
                        "vb" => array('Visual Basic', 'true'),
                        "vbnet" => array('Visual Basic .NET', 'true'),
                        "xhtml" => array('XHTML', 'true'),
                        "xml" => array('XML', 'true'),
                        "xslt" => array('XSLT', 'true'),
                        "objc" => array('Objective-C', 'true'),
                        "asm" => array('Asm', 'true'),
                        "aauto" => array('AAuto', 'true'),
                        "golang" => array('Golang', 'true'),
                        "lua" => array('Lua', 'true'),
                );

                $this->brush_files = array(
                        "Asm" => array('shBrushAsm.js', 'asm', '2.1', 'true'),
                        "AppleScript" => array('shBrushAppleScript.js', 'applescript', '3.0', 'true'),
                        "ActionScript3" => array('shBrushAS3.js', 'as3 actionscript3', '2.1', 'true'),
                        "Bash" => array('shBrushBash.js', 'bash shell', '2.1', 'true'),
                        "ColdFusion" => array('shBrushColdFusion.js', 'cf coldfusion', '2.1', 'true'),
                        "C++" => array('shBrushCpp.js', 'cpp c', '1.5', 'true'),
                        "C#" => array('shBrushCSharp.js', 'c# c-sharp csharp', '1.5', 'true'),
                        "CSS" => array('shBrushCss.js', 'css', '1.5', 'true'),
                        "Delphi" => array('shBrushDelphi.js', 'delphi pas pascal', '1.5', 'true'),
                        "Diff" => array('shBrushDiff.js', 'diff patch', '2.1', 'true'),
                        "Erlang" => array('shBrushErlang.js', 'erl erlang', '2.1', 'true'),
                        "Groovy" => array('shBrushGroovy.js', 'groovy', '2.1', 'true'),
                        "IL" => array('shBrushIL.js', 'il', '3.0', 'true'),
                        "Java" => array('shBrushJava.js', 'java', '1.5', 'true'),
                        "JavaFX" => array('shBrushJavaFX.js', 'jfx javafx', '2.1', 'true'),
                        "JavaScript" => array('shBrushJScript.js', 'js jscript javascript', '1.5', 'true'),
                        "Perl" => array('shBrushPerl.js', 'perl pl', '2.1', 'true'),
                        "PHP" => array('shBrushPhp.js', 'php', '1.5', 'true'),
                        "PlainText" => array('shBrushPlain.js', 'plain text', '2.1', 'true'),
                        "PowerShell" => array('shBrushPowerShell.js', 'ps powershell', '2.1', 'true'),
                        "Python" => array('shBrushPython.js', 'py python', '1.5', 'true'),
                        "Ruby" => array('shBrushRuby.js', 'rails ror ruby rb', '1.5', 'true'),
                        "Sass" => array('shBrushSass.js', 'sass scss', '3.0', 'true'),
                        "Scala" => array('shBrushScala.js', 'scala', '2.1', 'true'),
                        "SQL" => array('shBrushSql.js', 'sql', '1.5', 'true'),
                        "VisualBasic" => array('shBrushVb.js', 'vb vbnet', '1.5', 'true'),
                        "XML" => array('shBrushXml.js', 'xml xhtml xslt html', '1.5', 'true'),
                        "Objective-C" => array('shBrushObjC.js', 'objc', '2.1', 'true'),
                        "Asm" => array('shBrushAsm.js', 'asm', '2.1', 'true'),
                        "AAuto" => array('shBrushAAuto.js', 'aauto', '2.1', 'true'),
                        "Golang" => array('shBrushGo.js', 'go golang', '2.1', 'true'),
                        "Lua" => array('shBrushLua.js', 'lua', '2.1', 'true'),
                );

                if($_G['cache']['plugin']['mw_syntaxhighlighter']['libversion'] == 2) {
                        $this->libversion = '2.1.382';
                        $this->libfolder = 'syntaxhighlighter2';
                } else {
                        $this->libversion = '3.0.83';
                        $this->libfolder = 'syntaxhighlighter3';
                }

                $this->theme = $_G['cache']['plugin']['mw_syntaxhighlighter']['theme'] ? $_G['cache']['plugin']['mw_syntaxhighlighter']['theme'] : 'Random';//note 没有选择则随机显示
                $this->select_language = unserialize($_G['cache']['plugin']['mw_syntaxhighlighter']['language']);
                $this->autolinks = $_G['cache']['plugin']['mw_syntaxhighlighter']['autolinks'];
                $this->quickcodecopy = $_G['cache']['plugin']['mw_syntaxhighlighter']['quickcodecopy'];
                $this->gutter = $_G['cache']['plugin']['mw_syntaxhighlighter']['gutter'];
                $this->startlinenumber = intval($_G['cache']['plugin']['mw_syntaxhighlighter']['startlinenumber']);
                $this->linenumberpadding = $_G['cache']['plugin']['mw_syntaxhighlighter']['linenumberpadding'];
                $this->toolbar = $_G['cache']['plugin']['mw_syntaxhighlighter']['toolbar'];
                $this->collapse = $_G['cache']['plugin']['mw_syntaxhighlighter']['collapse'];
                $this->smarttabs = $_G['cache']['plugin']['mw_syntaxhighlighter']['smarttabs'];
                $this->tabsize = intval($_G['cache']['plugin']['mw_syntaxhighlighter']['tabsize']);
                $this->wraplines = $_G['cache']['plugin']['mw_syntaxhighlighter']['wraplines'];
                $this->title = str_replace('\'', ''', $_G['cache']['plugin']['mw_syntaxhighlighter']['title']);
                $this->maxheight = $_G['cache']['plugin']['mw_syntaxhighlighter']['maxheight'];
                $this->legacy_enable = $_G['cache']['plugin']['mw_syntaxhighlighter']['legacy'];//note 暂时未做表单提交
                if($this->legacy_enable == 1) {
                        $this->legacy = "dp.SyntaxHighlighter.HighlightAll('code')";
                } else {
                        $this->legacy = '';
                }
                $this->collapse_lable_text = str_replace('\'', ''', $_G['cache']['plugin']['mw_syntaxhighlighter']['collapse_lable_text']);//note 暂时未做表单提交
                if($this->libversion == '3.0.83') {
                        if($this->collapse_lable_text != '' && $this->title == '') {
                                $this->collapse_lable = $this->collapse_lable_text;
                        } else {
                                $this->collapse_lable = '+ expand source';
                        }
                } elseif($this->libversion == '2.1.382') {
                        if($this->collapse_lable_text != '') {
                                $this->collapse_lable = $this->collapse_lable_text;
                        } else {
                                $this->collapse_lable = 'show source';
                        }
                }

                foreach($this->brush_files as $lang => $val) {
                        $intersectarray = array_intersect(explode(' ', $val[1]), $this->select_language);
                        if(empty($intersectarray)) {
                                unset($this->brush_files[$lang]);
                        }
                }
        }

        function global_header() {
                global $_G;
                if(CURMODULE == 'viewthread') {
                        if($_G['mw_flag']) {
                                return $this->_syntaxhighlighter_load_header_css();
                        }
                }
        }

        function global_footer() {

                global $_G;
                $codebox = $syntaxhighlighter = $codbox_script = '';
                if(CURMODULE == 'viewthread') {
                        $codebox = $this->_mw_shl_codebox_script('fastpost');
                } elseif(CURMODULE == 'forumdisplay') {
                        $codebox = $this->_mw_shl_codebox_script('fastpost');
                } elseif(CURMODULE == 'post') {
                        $codebox = $this->_mw_shl_codebox_script('newthread');
                }
                if(CURMODULE == 'viewthread' && $_G['mw_flag']) {
                        include_once template('mw_syntaxhighlighter:module');
                        $syntaxhighlighter = $this->_syntaxhighlighter_load_footer_script();
                        $syntaxhighlighter .= mw_code_toolbar_handler($this->libversion);
                }
                if(CURMODULE == 'viewthread' || CURMODULE == 'forumdisplay' || CURMODULE == 'post') {
                        include_once template('mw_syntaxhighlighter:module');
                        if($this->libversion == '3.0.83') {
                                $sh_lang = $this->sh_lang_3;
                        } elseif($this->libversion == '2.1.382') {
                                $sh_lang = $this->sh_lang_2;
                        } else {
                                return;
                        }

                        if($this->select_language) {
                                foreach($sh_lang as $lang => $val) {
                                        if(!in_array($lang, $this->select_language)) {
                                                unset($sh_lang[$lang]);
                                        }
                                }
                        } else {
                                return;
                        }
                        $codbox_script = mw_syntaxhighlighter_shl_codebox($sh_lang, $this->gutter).
                                        '<script type="text/javascript" src="https://avatar.52pojie.cn/mw_syntaxhighlighter/js/mw_syntaxhighlighter.js?'.VERHASH.'"></script>';
                }
                return $codbox_script.$codebox.$syntaxhighlighter;
        }

        function _syntaxhighlighter_load_header_css() {
                global $_G;

                $theme_css_list['Default'] = array('1', 'shCoreDefault.css', 'shThemeDefault.css');
                $theme_css_list['Django'] = array('2', 'shCoreDjango.css', 'shThemeDjango.css');
                $theme_css_list['Eclipse'] = array('3', 'shCoreEclipse.css', 'shThemeEclipse.css');
                $theme_css_list['Emacs'] = array('4', 'shCoreEmacs.css', 'shThemeEmacs.css');
                $theme_css_list['FadeToGrey'] = array('5', 'shCoreFadeToGrey.css', 'shThemeFadeToGrey.css');
                $theme_css_list['MDUltra'] = array('8', 'shCoreMDUltra.css', 'shThemeMDUltra.css');
                $theme_css_list['Midnight'] = array('6', 'shCoreMidnight.css', 'shThemeMidnight.css');
                $theme_css_list['RDark'] = array('7', 'shCoreRDark.css', 'shThemeRDark.css');
                //$csslink = '<link rel="stylesheet" type="text/css" href="'.$this->pluginurl.$this->libfolder.'/styles/shCore.css?ver='.$this->libversion.'&'.VERHASH.'" />';
                $csslink = '<style type="text/css">'."\r\n";
                $csslink .= '[url=home.php?mod=space&uid=476974]@import[/url] url(\''.$this->pluginurl.$this->libfolder.'/styles/shCore.css?ver='.$this->libversion.'\');'."\r\n";
                if($this->theme == 'Random') {
                        if($this->libversion == '3.0.83') {
                                $theme_no = mt_rand(1, 8);
                                foreach($theme_css_list as $themename => $val) {
                                        if($theme_no == $val[0]) {
                                                //$csslink .= '<link rel="stylesheet" type="text/css" href="'.$this->pluginurl.$this->libfolder.'/styles/'.$val[1].'?ver='.$this->libversion.'&'.VERHASH.'" />';
                                                //$csslink .= '<link rel="stylesheet" type="text/css" href="'.$this->pluginurl.$this->libfolder.'/styles/'.$val[2].'?ver='.$this->libversion.'&'.VERHASH.'" />';
                                                $csslink .= '@import url(\''.$this->pluginurl.$this->libfolder.'/styles/'.$val[1].'?ver='.$this->libversion.'\');'."\r\n";
                                                $csslink .= '@import url(\''.$this->pluginurl.$this->libfolder.'/styles/'.$val[2].'?ver='.$this->libversion.'\');'."\r\n";
                                        }
                                }
                        }
                        if($this->libversion == '2.1.382') {
                                $theme_no = mt_rand(1, 7);
                                foreach($theme_css_list as $themename => $val) {
                                        if($theme_no == $val[0]) {
                                                //$csslink .= '<link rel="stylesheet" type="text/css" href="'.$this->pluginurl.$this->libfolder.'/styles/'.$val[2].'?ver='.$this->libversion.'&'.VERHASH.'" />';
                                                $csslink .= '@import url(\''.$this->pluginurl.$this->libfolder.'/styles/'.$val[2].'?ver='.$this->libversion.'\');'."\r\n";
                                        }
                                }
                        }
                } else {
                        if($this->libversion == '2.1.382' && $this->theme == 'MDUltra') {
                                //$csslink .= '<link rel="stylesheet" type="text/css" href="'.$this->pluginurl.$this->libfolder.'/styles/shThemeDefault.css?ver='.$this->libversion.'&'.VERHASH.'" />';
                                $csslink .= '@import url(\''.$this->pluginurl.$this->libfolder.'/styles/shThemeDefault.css?ver='.$this->libversion.'\');'."\r\n";
                        } else {
                                if($this->libversion == '3.0.83') {
                                        //$csslink .= '<link rel="stylesheet" type="text/css" href="'.$this->pluginurl.$this->libfolder.'/styles/'.$theme_css_list[$this->theme][1].'?ver='.$this->libversion.'&'.VERHASH.'" />';
                                        $csslink .= '@import url(\''.$this->pluginurl.$this->libfolder.'/styles/'.$theme_css_list[$this->theme][1].'?ver='.$this->libversion.'\');'."\r\n";
                                }
                                //$csslink .= '<link rel="stylesheet" type="text/css" href="'.$this->pluginurl.$this->libfolder.'/styles/'.$theme_css_list[$this->theme][2].'?ver='.$this->libversion.'&'.VERHASH.'" />';
                                $csslink .= '@import url(\''.$this->pluginurl.$this->libfolder.'/styles/'.$theme_css_list[$this->theme][2].'?ver='.$this->libversion.'\');'."\r\n";
                        }
                }
                //$csslink .= '<meta id="syntaxhighlighteranchor" name="syntaxhighlighter-version" content="3.1.3" />';

                $csslink .= '.syntaxhighlighter,
.syntaxhighlighter a,
.syntaxhighlighter div,
.syntaxhighlighter code,
.syntaxhighlighter table,
.syntaxhighlighter table td,
.syntaxhighlighter table tr,
.syntaxhighlighter table tbody,
.syntaxhighlighter table thead,
.syntaxhighlighter table caption,
.syntaxhighlighter textarea {
font-size: 14px !important; /* Set the font size in pixels */
font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; /* Set the font type */
}
.syntaxhighlighter table caption {
/* For Title(Caption) */
font-size: 14px !important; /* Set the font size in pixels */
font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; /* Set the font type */
}
.syntaxhighlighter.nogutter td.code .line {
/* Set the left padding space when no-gutter in ver. 3.0 */
padding-left: 3px !important;
}

.syntaxhighlighter .lines {
        padding: 5px 0px 5px 0px !important;
}
.syntaxhighlighter .line .number {
        padding: 5px 5px 5px 0 !important;
}
.syntaxhighlighter .line .content {
        padding: 5px 0px 5px 10px !important;
}

/* For gutter */
.syntaxhighlighter table td.code {
width:auto !important;
}
.syntaxhighlighter table td.gutter .line {
padding: 0 0.5em !important;
}
.syntaxhighlighter .gutter {
width: 40px !important;
}

.syntaxhighlighter table td.gutter .line {
        padding: 5px 5px 5px 0 !important;
}
.syntaxhighlighter table td.code .line {
        padding: 5px 0px 5px 10px !important;
}

.syntaxhighlighter {
/* For Chrome/Safari(WebKit) */
/* Hide the superfluous vertical scrollbar in ver. 3.0 */
/*overflow-y: hidden !important;*/
padding: 1px !important;
}

.syntaxhighlighter {
        width: 99.7% !important;
        '.($this->maxheight ? 'max-height: '.$this->maxheight.'px !important;' : '').'
        '.($this->maxheight ? 'height:expression(this.scrollHeight > '.$this->maxheight.' ? "'.$this->maxheight.'px" : "auto");' : '').'
        overflow-y: auto;
}

/* For Title(Caption) */
font-size: 10px !important; /* Set the font size in pixels */
font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; /* Set the font type */
}';
                $csslink .= "\r\n".'</style>'."\r\n";
                return $csslink;
        }

        function _syntaxhighlighter_load_footer_script() {
                global $_G;
                $script = "\n<!-- mw_syntaxhighlighter ver.".$this->libversion." Begin -->\n";
                $script .= "<script type=\"text/javascript\" src=\"".$this->pluginurl.$this->libfolder."/scripts/shCore.js?ver=".$this->libversion."\"></script>\n";
                if($this->legacy_enable == 1) {
                        $script .= "<script type=\"text/javascript\" src=\"".$this->pluginurl.$this->libfolder."/scripts/shLegacy.js?ver=".$this->libversion."\"></script>\n";
                }
                if($this->libversion == '3.0.83' && $this->legacy_enable == 0) {
                        $script .= "<script type=\"text/javascript\" src=\"".$this->pluginurl.$this->libfolder."/scripts/shAutoloader.js?ver=".$this->libversion."\"></script>\n";
                        if($this->brush_files[XML][3] == 'true' || $_G['adminid'] == 1) {
                                $script .= "<script type=\"text/javascript\" src=\"".$this->pluginurl.$this->libfolder."/scripts/shBrushXml.js?ver=".$this->libversion."\"></script>\n";
                        }
                } elseif($this->libversion == '3.0.83' && $this->legacy_enable == 1) {
                        $script .= "<script type=\"text/javascript\" src=\"".$this->pluginurl.$this->libfolder."/scripts/shAutoloader.js?ver=".$this->libversion."\"></script>\n";
                        foreach($this->brush_files as $lang => $val) {
                                $brush_file = $val[0];
                                $brush_ver = $val[2];
                                $brush_enable = $val[3];
                                if(($brush_ver == '3.0' || $brush_ver == '2.1' || $brush_ver == '1.5') && $brush_enable == 'true') {
                                        $script .= "<script type=\"text/javascript\" src=\"".$this->pluginurl.$this->libfolder."/scripts/".$brush_file."?ver=".$this->libversion."\"></script>\n";
                                } elseif (($brush_ver == '3.0' || $brush_ver == 'all') && $brush_enable == 'added') {
                                        $script .= "<script type=\"text/javascript\" src=\"".$brush_file."?ver=".$this->libversion."\"></script>\n";
                                }
                        }
                        if($_G['adminid'] == 1 && $this->brush_files[XML][3] == 'false') {
                                $script .= "<script type=\"text/javascript\" src=\"".$this->pluginurl.$this->libfolder."/scripts/shBrushXml.js?ver=".$this->libversion."\"></script>\n";
                        }
                } elseif($this->libversion == '2.1.382') {
                        foreach($this->brush_files as $lang => $val) {
                                $brush_file = $val[0];
                                $brush_ver = $val[2];
                                $brush_enable = $val[3];
                                if (($brush_ver == '2.1' || $brush_ver == '1.5') && $brush_enable == 'true') {
                                        $script .= "<script type=\"text/javascript\" src=\"".$this->pluginurl.$this->libfolder."/scripts/".$brush_file."?ver=".$this->libversion."\"></script>\n";
                                } elseif (($brush_ver == '2.1' || $brush_ver == 'all') && $brush_enable == 'added') {
                                        $script .= "<script type=\"text/javascript\" src=\"".$brush_file."?ver=".$this->libversion."\"></script>\n";
                                }
                        }
                        if($_G['adminid'] == 1 && $this->brush_files[PHP][3] == 'false') {
                                $script .= "<script type=\"text/javascript\" src=\"".$this->pluginurl.$this->libfolder."/scripts/shBrushPhp.js?ver=".$this->libversion."\"></script>\n";
                        }
                        if($_G['adminid'] == 1 && $this->brush_files[XML][3] == 'false') {
                                $script .= "<script type=\"text/javascript\" src=\"".$this->pluginurl.$this->libfolder."/scripts/shBrushXml.js?ver=".$this->libversion."\"></script>\n";
                        }
                }

                if($this->libversion == '3.0.83') {
                        $script .= "<script type=\"text/javascript\">//<![CDATA[
        SyntaxHighlighter.autoloader(\n";
                        $count = 0;
                        foreach($this->brush_files as $lang => $val) {
                                $brush_file = $val[0];
                                $brush_alias = $val[1];
                                $brush_ver = $val[2];
                                $brush_enable = $val[3];
                                if ($brush_enable == 'true' || ($_G['adminid'] == 1 && $lang == "PHP")) {
                                        $count = $count + 1;
                                        if ($count == 1) {
                                                $script .= "        \"".$brush_alias."        ".$this->pluginurl.$this->libfolder."/scripts/".$brush_file."?ver=".$this->libversion."\"\n";
                                        } else {
                                                $script .= "        ,\"".$brush_alias."        ".$this->pluginurl.$this->libfolder."/scripts/".$brush_file."?ver=".$this->libversion."\"\n";
                                        }
                                } elseif (($brush_ver == '3.0' || $brush_ver == 'all') && $brush_enable == 'added') {
                                        $count = $count + 1;
                                        if ($count == 1) {
                                                $script .= "        \"".$brush_alias."        ".$brush_file."?ver=".$this->libversion."\"\n";
                                        } else {
                                                $script .= "        ,\"".$brush_alias."        ".$brush_file."?ver=".$this->libversion."\"\n";
                                        }
                                }
                        }

                        $script .= "        );
        SyntaxHighlighter.defaults['auto-links'] = ".($this->autolinks ? 'true' : 'false').";
        SyntaxHighlighter.defaults['quick-code'] = ".($this->quickcodecopy ? 'true' : 'false').";
        SyntaxHighlighter.defaults['title'] = '".$this->title."';
        SyntaxHighlighter.defaults['class-name'] = 'notranslate';
        SyntaxHighlighter.defaults['collapse'] = ".($this->collapse ? 'true' : 'false').";
        SyntaxHighlighter.defaults['first-line'] = ".$this->startlinenumber.";
        SyntaxHighlighter.defaults['gutter'] = ".($this->gutter ? 'true' : 'false').";
        SyntaxHighlighter.defaults['pad-line-numbers'] = ".($this->linenumberpadding ? $this->linenumberpadding : 'false').";
        SyntaxHighlighter.defaults['smart-tabs'] = ".($this->smarttabs ? 'true' : 'false').";
        SyntaxHighlighter.defaults['tab-size'] = ".$this->tabsize.";
        SyntaxHighlighter.defaults['toolbar'] = ".($this->toolbar ? 'true' : 'false').";\n";
        //echo $script;
                        if($this->legacy_enable == 1) {
                                $script .= " SyntaxHighlighter.config.stripBrs = true;\n";
                        }
                        $script .= "        SyntaxHighlighter.config.strings.expandSource = '".$this->collapse_lable."';
        SyntaxHighlighter.config.strings.help = '?';
        SyntaxHighlighter.config.strings.alert = 'SyntaxHighlighter';
        SyntaxHighlighter.config.strings.noBrush = \"Can\'t find brush for: \";
        SyntaxHighlighter.config.strings.brushNotHtmlScript = \"Brush wasn\'t configured for html-script option: \";
        SyntaxHighlighter.all();
        ".$this->legacy."
//]]></script>
<!-- mw_syntaxhighlighter ver.".$this->libversion." End -->\n";
                } elseif($this->libversion == '2.1.382') {
                        $script.= "<script type=\"text/javascript\">//<![CDATA[
        SyntaxHighlighter.config.clipboardSwf = '".$this->pluginurl.$this->libfolder."/scripts/clipboard.swf';
        SyntaxHighlighter.defaults['auto-links'] = ".$this->autolinks.";
        SyntaxHighlighter.defaults['class-name'] = '';
        SyntaxHighlighter.defaults['collapse'] = ".$this->collapse.";
        SyntaxHighlighter.defaults['first-line'] = ".$this->startlinenumber.";
        SyntaxHighlighter.defaults['gutter'] = ".$this->gutter.";
        SyntaxHighlighter.defaults['pad-line-numbers'] = ".$this->linenumberpadding.";
        SyntaxHighlighter.defaults['smart-tabs'] = ".$this->smarttabs.";
        SyntaxHighlighter.defaults['tab-size'] = ".$this->tabsize.";
        SyntaxHighlighter.defaults['toolbar'] = ".$this->toolbar.";
        SyntaxHighlighter.defaults['wrap-lines'] = ".$this->wraplines.";\n";
                        if ($this->legacy_enable == 1) {
                                $script .= " SyntaxHighlighter.config.stripBrs = true;\n";
                        }
                        $script .= "        SyntaxHighlighter.config.strings.expandSource = '".$this->collapse_lable."';
        SyntaxHighlighter.config.strings.viewSource = 'view source';
        SyntaxHighlighter.config.strings.copyToClipboard = 'copy to clipboard';
        SyntaxHighlighter.config.strings.copyToClipboardConfirmation = 'The code is in your clipboard now';
        SyntaxHighlighter.config.strings.print = 'print';
        SyntaxHighlighter.config.strings.help = '?';
        SyntaxHighlighter.config.strings.alert = 'SyntaxHighlighter';
        SyntaxHighlighter.config.strings.noBrush = \"Can\'t find brush for: \";
        SyntaxHighlighter.config.strings.brushNotHtmlScript = \"Brush wasn\'t configured for html-script option: \";
        SyntaxHighlighter.all();
        ".$this->legacy."
//]]></script>
<!-- mw_syntaxhighlighter ver.".$this->libversion." End -->\n";
                }
                return $script;
        }

        function _mw_shl_codebox_script($textareaid) {
                return '<script type="text/javascript" reload="1">mw_syntaxhighlighter("'.$textareaid.'");</script>';
        }

        function discuzcode($param) {
                global $_G;
                if(strpos($_G['discuzcodemessage'], 'mw_shl_code') !== false) {
                        $_G['mw_flag'] = true;
                }
                if($param['caller'] == 'discuzcode') {
                        $_G['discuzcodemessage'] = preg_replace_callback('/\[mw_shl_code=(.+?),(.+?)\](.*?)\[\/mw_shl_code\]/is', array($this, '_mw_shl_code_to_pre'), $_G['discuzcodemessage']);
                }
                if($param['caller'] == 'messagecutstr') {
                        $_G['discuzcodemessage'] = preg_replace('/\[mw_shl_code=(.+?)\](.*?)\[\/mw_shl_code\]/is', '', $_G['discuzcodemessage']);
                }
        }

        function _mw_shl_code_to_pre($matches) {
                global $_G, $post;

                $brush = $matches[1];
                $gutter = $matches[2];
                $code = $matches[3];

                if($this->libversion == '3.0.83') {
                        $sh_lang = $this->sh_lang_3;
                } elseif($this->libversion == '2.1.382') {
                        $sh_lang = $this->sh_lang_2;
                } else {
                        return;
                }
                $code = str_replace(array('<br />', '<br>'), '', $code);
                //$code = dhtmlspecialchars(str_replace('\\"', '"', $code));
                $_G['mw_code'][$post['pid']][] = $code;
                $toolbarstr = '<div style="font-size:12px;">['.$sh_lang[$brush][0].'] <em class="viewsource" style="cursor:pointer;font-size:12px;color:#369 !important;">'.lang('plugin/mw_syntaxhighlighter', 'syntaxhighlighter_viewsource').'</em> <em class="copycode" style="cursor:pointer;font-size:12px;color:#369 !important;">'.lang('plugin/mw_syntaxhighlighter', 'syntaxhighlighter_copycode').'</em></div>';
                return '<div style="padding:15px 0;">'.$toolbarstr.'<pre class="brush: '.strtolower($brush).'; gutter: '.$gutter.'">'.$code.'</pre></div>';
        }

}

class plugin_mw_syntaxhighlighter_forum extends plugin_mw_syntaxhighlighter {

        function viewthread_bottom_output() {
                global $postlist;
                foreach($postlist as $pid => $post) {
                        $post['message'] = preg_replace_callback('/<pre[^>](.*?)>(.*?)<\/pre>/is', create_function('$matches', 'return plugin_mw_syntaxhighlighter_forum::_brreplace($matches[1], $matches[2], '.intval($pid).');'), $post['message']);
                        $postlist[$pid] = $post;
                }
                return '';
        }

        function _brreplace($param, $codecontent, $pid) {
                global $_G;
                return '<pre '.stripslashes($param).'>'.str_replace(array('<br>', '<br />'), '', array_shift($_G['mw_code'][$pid])).'</pre>';
        }

        function post_infloat_btn_extra_output() {
                if(CURMODULE == 'post') {
                        return $this->_mw_shl_codebox_script('post');
                } else {
                        return '';
                }
        }
}

?>

我在其中的sh_lang_3和brush_files中新添了IL的项,注意刷子名称要小写,此插件不支持大写刷子名称,原因暂时没有深究。
另外,刚才的那些着色CSS样式来源于主题文件shThemeRDark.css(位于/syntaxhighlighter3/styles下)
内容如下:
[CSS] 纯文本查看 复制代码
/**
 * SyntaxHighlighter
 * [url=http://alexgorbatchev.com/SyntaxHighlighter]http://alexgorbatchev.com/SyntaxHighlighter[/url]
 *
 * SyntaxHighlighter is donationware. If you are using it, please donate.
 * [url=http://alexgorbatchev.com/SyntaxHighlighter/donate.html]http://alexgorbatchev.com/SyntaxHighlighter/donate.html[/url]
 *
 * @version
 * 3.0.83 (July 02 2010)
 * 
 * @copyright
 * Copyright (C) 2004-2010 Alex Gorbatchev.
 *
 * @license
 * Dual licensed under the MIT and GPL licenses.
 */
.syntaxhighlighter {
  background-color: #1b2426 !important;
}
.syntaxhighlighter .line.alt1 {
  background-color: #1b2426 !important;
}
.syntaxhighlighter .line.alt2 {
  background-color: #1b2426 !important;
}
.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
  background-color: #323e41 !important;
}
.syntaxhighlighter .line.highlighted.number {
  color: #b9bdb6 !important;
}
.syntaxhighlighter table caption {
  color: #b9bdb6 !important;
}
.syntaxhighlighter .gutter {
  color: #afafaf !important;
}
.syntaxhighlighter .gutter .line {
  border-right: 3px solid #435a5f !important;
}
.syntaxhighlighter .gutter .line.highlighted {
  background-color: #435a5f !important;
  color: #1b2426 !important;
}
.syntaxhighlighter.printing .line .content {
  border: none !important;
}
.syntaxhighlighter.collapsed {
  overflow: visible !important;
}
.syntaxhighlighter.collapsed .toolbar {
  color: #5ba1cf !important;
  background: black !important;
  border: 1px solid #435a5f !important;
}
.syntaxhighlighter.collapsed .toolbar a {
  color: #5ba1cf !important;
}
.syntaxhighlighter.collapsed .toolbar a:hover {
  color: #5ce638 !important;
}
.syntaxhighlighter .toolbar {
  color: white !important;
  background: #435a5f !important;
  border: none !important;
}
.syntaxhighlighter .toolbar a {
  color: white !important;
}
.syntaxhighlighter .toolbar a:hover {
  color: #e0e8ff !important;
}
.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
  color: #b9bdb6 !important;
}
.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
  color: #878a85 !important;
}
.syntaxhighlighter .string, .syntaxhighlighter .string a {
  color: #5ce638 !important;
}
.syntaxhighlighter .keyword {
  color: #5ba1cf !important;
}
.syntaxhighlighter .preprocessor {
  color: #435a5f !important;
}
.syntaxhighlighter .variable {
  color: #ffaa3e !important;
}
.syntaxhighlighter .value {
  color: #009900 !important;
}
.syntaxhighlighter .functions {
  color: #ffaa3e !important;
}
.syntaxhighlighter .constants {
  color: #e0e8ff !important;
}
.syntaxhighlighter .script {
  font-weight: bold !important;
  color: #5ba1cf !important;
  background-color: none !important;
}
.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
  color: #e0e8ff !important;
}
.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
  color: white !important;
}
.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
  color: #ffaa3e !important;
}

这样修改完后,还需要修改discuz数据库:
我们在discuz数据库中找到表"pre_common_pluginvar"(其中pre_为discuz论坛安装时的表前缀)
会发现这么一项:
QQ截图20181027124838.png
我们修改description字段为:
[Plain Text] 纯文本查看 复制代码
选择支持的语言,按住Ctrl键可多选
注意:AppleScript、Sass、Scss、IL四种语言仅在3.x高亮版本库中支持

修改value字段为:
[Plain Text] 纯文本查看 复制代码
a:41:{i:0;s:11:"applescript";i:1;s:13:"actionscript3";i:2;s:4:"bash";i:3;s:10:"coldfusion";i:4;s:1:"c";i:5;s:3:"cpp";i:6;s:6:"csharp";i:7;s:3:"css";i:8;s:6:"delphi";i:9;s:4:"diff";i:10;s:6:"erlang";i:11;s:6:"groovy";i:12;s:4:"html";i:13;s:4:"java";i:14;s:6:"javafx";i:15;s:10:"javascript";i:16;s:6:"pascal";i:17;s:5:"patch";i:18;s:4:"perl";i:19;s:3:"php";i:20;s:4:"text";i:21;s:10:"powershell";i:22;s:6:"python";i:23;s:4:"ruby";i:24;s:5:"rails";i:25;s:4:"sass";i:26;s:5:"scala";i:27;s:4:"scss";i:28;s:5:"shell";i:29;s:3:"sql";i:30;s:2:"vb";i:31;s:5:"vbnet";i:32;s:5:"xhtml";i:33;s:3:"xml";i:34;s:4:"xslt";i:35;s:4:"objc";i:36;s:3:"asm";i:37;s:5:"aauto";i:38;s:6:"golang";i:39;s:3:"lua";i:40;s:2:"il";}

修改extra字段为:
[Plain Text] 纯文本查看 复制代码
applescript = AppleScript
actionscript3 = Actionscript3
bash = Bash shell
coldfusion = ColdFusion
c = C
cpp = C++
csharp = C#
css = CSS
delphi = Delphi
diff = Diff
erlang = Erlang
groovy = Groovy
html = HTML
java = Java
javafx = JavaFX
javascript = JavaScript
pascal = Pascal
patch = Patch
perl = Perl
php = PHP
text = Plain Text
powershell = PowerShell
python = Python
ruby = Ruby
rails = Ruby on Rails
sass = Sass
scala = Scala
scss = Scss
shell = Shell
sql = SQL
vb = Visual Basic
vbnet = Visual Basic .NET
xhtml = XHTML
xml = XML
xslt = XSLT
objc = Objective-C
asm = Asm
aauto = AAuto
golang = Golang
lua = Lua
il = IL

然后保存即可,我们进入discuz后台,进入插件配置,这么修改:
QQ图片20181027125050.png
然后提交修改后,刷新网站缓存即可。

免费评分

参与人数 8威望 +1 吾爱币 +15 热心值 +7 收起 理由
cunzher + 1 + 1 大佬牛逼
Titanic + 1 + 1 谢谢@Thanks!
CrazyNut + 2 + 1 膜拜大佬
Coxxs + 3 + 1 谢谢@Thanks!
笙若 + 1 + 1 谢谢@Thanks!
liuxing70 + 1 难道就你才知道?难道就你会用?
苏紫方璇 + 1 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Pear + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Coxxs 发表于 2018-10-27 13:37
思路很赞!补充一点数据库其实不用手动修改,把 xml 里的版本号改大,覆盖原插件文件后在dz后台选择“升级”即可。
xiaoda 发表于 2018-10-27 12:56
Pear 发表于 2018-10-27 13:02
dy18 发表于 2018-10-27 13:12
板凳,嘿嘿嘿
空心 发表于 2018-10-27 13:29
还是没也挺看懂。
 楼主| lizhirui 发表于 2018-10-27 13:39
Coxxs 发表于 2018-10-27 13:37
思路很赞!补充一点数据库其实不用手动修改,把 xml 里的版本号改大,覆盖原插件文件后在dz后台选择“升级 ...

感谢!!!!!!
头像被屏蔽
XiaoBai2018 发表于 2018-10-28 23:41
提示: 作者被禁止或删除 内容自动屏蔽
hqk888 发表于 2018-11-14 00:15
大神你好,我好像有一个C++的软件,韩国的加密,不知您能否破解?
Titanic 发表于 2018-11-14 12:24
@lizhirui 请问我上一个帖子被认为广告贴https://www.52pojie.cn/thread-821318-1-1.html
是因为我发帖的内容,还是帖子附件里进游戏的封面带QQ什么的?   能指明一下吗?很多人等着我再发一波呢,我都不敢搞了。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 21:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表