转换C++源程序为HTML加亮文件
转载请注明出处:作者:flyskymlf http://hi.baidu.com/flyskymlf/
转载请注明出处以及原著者及修改者声明,---by:
flyskymlf (
http://hi.baidu.com/flyskymlf)于2007-12-3
修改部分内容,原始文件见下面的声明,所有权属于原著者,这里只是对此修改了一部分内容。
本次修改内容如下:
添加了对托管C++关键字的支持;
修改默认显示字体为Fixedsys;
修改默认颜色模板为Virtual Studio2008中的加亮颜色(稍微有点不同)。
这里有个转换后的效果,可以看下
http://hi.baidu.com/flyskymlf/blog/item/6ceefb178b23b20ac93d6dee.html
使用方法:把下面的内容复制保存为.html格式后,在浏览器打开即可,具体怎么操作不多说了,打开之后就知道了,傻子都会^_^
注:注意转换之后,要是想保存在html文件中的,直接复制转换后的那一堆“乱码”(网页源代码)即可,要是想复制到Blog文章里时,注意要先点击“在新窗口查看效果”,然后复制打开的新窗口里面的'所见即所得代码'。
转载请注明出处:作者:flyskymlf http://hi.baidu.com/flyskymlf/
--------------------------我是分割线,不要复制我,从下面开始复制---------------------------
<!--
说明:下面的代码是根据 http://www.bedaux.net/cpp2html/ 上的代码修改而成。
因为原代码功能强大,支持xhtml和old html两种标签,且生成的代码中带有html页面头很多meta信息,
所以,不适合作为生成blog的代码使用。 我对原代码进行了修改,生成的代码极为简练,可以直接粘贴入blog的编辑框中使用(vckbase,csdn,
博客园等均适用)。所以,大家完整的代码请到bedaux.net查找,感谢bedaux.net给我们提供了
这个好东东。
乾坤一笑(smileonce@yeah.net) 于2004-10-25日
~~~~~~~~~~~~~~~~~~~修改by:flyskymlf于2007-12-3~~~~~~~~~~~~
添加了对托管C++关键字的支持,
修改显示字体为Fixedsys,
修改颜色为Virtual Studio2008默认加亮颜色(稍微有点不同)。
---by:flyskymlf(http://hi.baidu.com/flyskymlf)于2007-12-3
~~~~~~~~~~~~~~~~~~修改by:flyskymlf于2007-12-3~~~~~~~~~~~~~
-->
<SCRIPT type=text/javascript>
versionOK = false
</SCRIPT>
<SCRIPT type="text/javascript; version=1.5">
versionOK = true
</SCRIPT>
<SCRIPT type=text/jscript>
if (parseFloat(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion()) >= 5.5) versionOK = true
</SCRIPT>
<SCRIPT type=text/javascript>
if (versionOK) {
// edit lines below to change the output style
comment = {color:"#006600", bold:false, italic:false, name:"comment"} // 注释行和注释块
precompiler = {color:"#0000FF", bold:false, italic:false, name:"pre"} // 编译预处理
operator = {color:"#000000", bold:false, italic:false, name:"operator"} // operator and punctuator symbols
stringLiteral = {color:"#990000", bold:false, italic:false, name:"string"} // 字符串和宽字符串常量
charLiteral = {color:"#990000", bold:false, italic:false, name:"char"} // 字符和宽字符常量
intLiteral = {color:"#800080", bold:false, italic:false, name:"int"} // 整形常量
floatLiteral = {color:"#800080", bold:false, italic:false, name:"float"} // 浮点型常量
boolLiteral = {color:"#0000FF", bold:false, italic:false, name:"bool"} // 布尔型常量
types = {color:"#0000FF", bold:false, italic:false, name:"type"} // built-in type names
flowControl = {color:"#0000FF", bold:false, italic:false, name:"flow"} // program flow control keywords
keyword = {color:"#0000FF", bold:false, italic:false, name:"keyword"} // other keywords
background_color = "#e6e6e6"
}
</SCRIPT>
<SCRIPT type=text/javascript>
if (versionOK) {
keys = new Array() // containing C++ language elements
keys.push({style:comment, start:/\s*\/\*[\s\S]*?\*\//mg})
keys.push({style:comment, start:/\s*\/\//mg, end:/\n/mg, neglect:/\\|\?\?\//mg})
keys.push({style:precompiler, start:/\s*?^\s*(?:#|\?\?=|%:)/mg, end:/\n/m, neglect:/\\[\s\S]|\?\?\/[\s\S]/m})
keys.push({style:stringLiteral, start:/\s*(?:\bL)?"/mg, end:/"/m, neglect:/\\[\s\S]|\?\?\/[\s\S]/m})
keys.push({style:charLiteral, start:/\s*(?:\bL)?'/mg, end:/'/m, neglect:/\\[\s\S]|\?\?\/[\s\S]/m})
keys.push({style:floatLiteral, start:/\s*(?:(?:\b\d+\.\d*|\.\d+)(?:E[\+\-]?\d+)?|\b\d+E[\+\-]?\d+)[FL]?\b|\s*\b\d+\./mgi})
keys.push({style:intLiteral, start:/\s*\b(?:0[0-7]*|[1-9]\d*|0x[\dA-F]+)(?:UL?|LU?)?\b/mgi})
keys.push({style:boolLiteral, start:/\s*\b(?:true|false)\b/mg})
keys.push({style:types, start:/\s*\b(?:bool|char|double|float|int|long|short|signed|unsigned|void|wchar_t|Boolean|SByte|Byte|Char|Double|Single|Int32|UInt32|Int64|UInt64|Int16|UInt16|Void)\b/mg})
keys.push({style:flowControl, start:/\s*\b(?:break|case|catch|continue|default|do|else|for|goto|if|return|switch|throw|try|while)\b/mg})
keys.push({style:keyword, start:/\s*\b(?:asm|auto|class|const_cast|const|delete|dynamic_cast|enum|explicit|export|extern|friend|inline|main|mutable|namespace|new|operator|private|protected|public|register|reinterpret_cast|sizeof|static_cast|static|struct|template|this|typedef|typeid|typename|union|using|virtual|volatile|and_eq|and|bitand|bitor|compl|not_eq|not|or_eq|or|xor_eq|xor|__abstract|__alignof|__asm|__assume|__based|__box|__cdecl|__declspec|__delegat|__event|__except|__fastcall|__finally|__forceinline|__gc|__hook|__identifier|__if_exists|__if_not_exists|__inline|__int8|__int16|__int32|__int64|__interface|__leave|__m64|__m128|__m128d|__m128i|__multiple_inheritance__nogc|__noop|__pin|__property|__raise|ref|__sealed|__single_inheritance|__stdcall|__super|__try|__except|__finally__try_cast|__unaligned|__unhook__uuidof|__value 2|__virtual_inheritance|__w64|__wchar_t)\b/mg})
keys.push({style:operator, start:/\s*[\{\}\[\]\(\)<>%:;\.\?\*\+\-\^&\|~!=,\\]+|\s*\//mg})
function setOptions() {
windowSettings = "menubar,scrollbars,status,resizable";
outputStart = "<font face='Fixedsys'><PRE style='BACKGROUND: " + background_color + ";'>";
outputEnd = "</PRE>";
for (var i = 0; i != keys.length; ++i) { // set xhtml tags
keys[i].before = ""
if (keys[i].style.bold) keys[i].before += "<B>"
if (keys[i].style.italic) keys[i].before += "<I>"
keys[i].before += "<FONT COLOR=\"" + keys[i].style.color + "\">"
keys[i].after = "</FONT>"
if (keys[i].style.italic) keys[i].after += "</I>"
if (keys[i].style.bold) keys[i].after += "</B>"
}
}
}
function toHTML(s) { // convert special chars
s = s.split("&").join("&");
s = s.split("<").join("<");
return s.split(">").join(">");
}
function colorCode(f) {
if (versionOK) {
setOptions()
var s = f.t.value // get code
s = s.replace(/\r\n?/gm, "\n") // convert DOS and/or MAC to UNIX
var keyString = ""
var match = 0
var strResult = "";
strResult = outputStart;
var previousMatch = -1
for (var i = 0; i != keys.length; ++i) keys[i].startPos = -1
for (var position = 0; position != s.length; position = keys[match].endPos) {
for (var i = 0; i != keys.length; ++i) {
if (keys[i].startPos < position) { // update needed
keys[i].start.lastIndex = position
var result = keys[i].start.exec(s)
if (result != null) {
keys[i].startPos = result.index
keys[i].endPos = keys[i].start.lastIndex
}
else keys[i].startPos = keys[i].endPos = s.length
}
}
match = 0
for (var i = 1; i < keys.length; ++i) // find first matching key
if (keys[i].startPos < keys[match].startPos) match = i
if (keys[match].end != undefined) { // end must be found
var end = new RegExp(keys[match].end.source + "|" + keys[match].neglect.source, "mg")
end.lastIndex = keys[match].endPos
while (keys[match].endPos != s.length) {
result = end.exec(s)
if (result != null) {
if (result[0].search(keys[match].end) == 0) {
keys[match].endPos = end.lastIndex
break
}
}
else keys[match].endPos = s.length
}
}
var before = s.substring(position, keys[match].startPos)
keyString = s.substring(keys[match].startPos, keys[match].endPos)
var output = ""
if ((before == "") && (match == previousMatch))
output += toHTML(keyString)
else {
if (previousMatch != -1) output += keys[previousMatch].after
output += toHTML(before)
if (keyString != "") output += keys[match].before + toHTML(keyString)
}
previousMatch = match
strResult += output;
}
if (keyString != "") strResult += keys[match].after;
strResult += outputEnd;
document.all.g.value = strResult;
document.all.resultText.style.display="";
}
else alert("Sorry, your browser is too old. Minimum required: Microsoft Internet " +
"Explorer 5.5, Mozilla 1.0, Netscape 6 or other Mozilla-based browser.\n")
}
</SCRIPT>
<SCRIPT type=text/javascript>
function disable() {
if (!versionOK) {
document.cpp2htm.xhtml2.disabled = true
document.cpp2htm.convert.disabled = true
}
}
</SCRIPT>
<DIV class=content><SMALL>将C++源代码copy到下面的方框里:</SMALL>
<FORM action="" id="cpp2htm">
<P>
<textarea style="wrap: none;" name=t rows=10 cols=80></textarea>
<BR><INPUT id=convert onclick=colorCode(this.form) type=button value=转换>
<SMALL>(大段代码可能需要等待一段时间)</SMALL></font>
</P>
</FORM>
</DIV>
<form>
<DIV id=resultText>
<textarea style="wrap: none;" id=g rows=10 cols=80></textarea><BR>
<input type=button value="在新窗口查看效果" onClick='runCode(document.all.g)' >
<input type=button value="复制代码到剪贴板" onClick='copyCode(document.all.g)'>
<input type=button value="把代码保存到文件" onClick='saveCode(document.all.g)'>
</DIV>
<script language="javascript">
document.all.resultText.style.display = "none";
</script>
<SCRIPT language=JavaScript>
function copyCode(obj) {
var rng = document.body.createTextRange();
rng.moveToElementText(obj);
rng.scrollIntoView();
rng.select();
rng.execCommand("Copy");
rng.collapse(false);
}
function runCode(obj) {
var winname = window.open('', "_blank", '');
winname.document.open('text/html', 'replace');
var str = "<html><title>C/C++代码带颜色语法加亮效果</title>";
str += "<body >";
str += obj.value;
str += "</body></html>"
winname.document.writeln( str );
winname.document.close();
}
function saveCode(obj) {
var winname = window.open('', '_blank', 'top=10000');
winname.document.open('text/html', 'replace');
winname.document.writeln(obj.value);
winname.document.execCommand('saveas','','code.htm');
winname.close();
}
</SCRIPT>
--------------------------我是分割线,不要复制我,复制结束---------------------------
转载请注明出处:作者:flyskymlf http://hi.baidu.com/flyskymlf/blog/item/79dfe2a2a4e0e7aecbefd0e5.html