[html]<!DOCTYPE html>
<html>
<head>
<title>Lite Syntax Highlighting</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<style>
body {
background:#fafafa;
margin:0;
}
.wrapper {
width:960px;
margin:0px auto;
padding:20px;
background:#fefefe;
border:1px solid #f1f1f1;
}
pre {
padding: 5px;
background: #2b211c;
font-family:'Courier New';
font-size: 12px;
position: relative;
max-height: 500px;
overflow: auto;
display: block;
word-wrap: normal;
color: #a9b7c6;
}
pre.slh__c:before {
content: '<C>';
}
pre.php:before, pre.slh__php:before, pre.js:before, pre.slh__js:before, pre.css:before, pre.slh__css:before, pre.html:before, pre.slh__html:before, pre.slh__c:before {
position: absolute;
display: block;
top: 5px;
right: 5px;
font-size: 16px;
color: #05D105;
opacity: 0.5;
}
pre .code-comments {
color:#707070;
font-style:italic
}
pre .code-tags {
color: #e8bf6a;
}
pre .code-attribute {
color: #bababa;
}
pre .code-quotes {
color:#80ff80;
font-style:italic;
}
pre .code-var, pre .code-style {
color: #9876aa;
}
pre .code-operator {
color:#f6f080;
}
pre .code-types {
color:#ffaa00;
}
pre .code-number {
color:#ff3a83;
}
pre .code-class, pre .code-pseudo, pre .code-id {
color: #ffc66d;
}
h1 {margin:0 0 20px 0;}
</style>
</head>
<body>
<div class="wrapper">
<h1>Подсветка синтаксиса языка С/С++</h1>
<h2>С/С++</h2>
<pre class="slh__c">//===========================================================
// Файл: ASTtree.r
// Версия: 1.01
// Дата: 10:44 07.05.2022
// Описание: Тестовый пример для проверки подсветки синтаксиса
// русифицированного и стандартного С/С++
// Автор:
//===========================================================
#вставка "ASTtree.h" //пока не работает
#include "token_names.h" //пока не работает
//==========================================================
// Тестовая функция
//==========================================================
пуст Проверить(беззнак длин цел *дерево)
{
цел а = 25;
двойн температура = 36.6; //пока не работает
double temp = 36.6; //пока не работает
симв строка = "Это строка\n";
char str = "\"Это строка\"";
строка = "Это строка\\";
строка = "Это строка\\\"";
симв16 строка = L"Это тоже строка";
wchar str = L"\"Это строка\"";
}
</pre>
</div>
<script type="text/javascript" >//src="liteHighlighting.js"
function backlightC(txt) {
var comments = [];
txt = txt
.replace(/(^.*[\\]?)(\/\/[^\n\r]*(\n|\r\n))/gm, function (match, p1,str) {
var l = comments.length;
comments.push(str);
return p1+'~~~COMM' + l + '~~~ ';
}).replace(/\/\*[\s\S]*?\*\//g, function (str) {
var l = comments.length;
comments.push(str);
return '~~~COMM' + l + '~~~ ';
})
.replace(/(\(|\s|\!|^)(bool|char|wchar|short|unsigned|signed|void|int|long|float|double)(\)|\s|\!|=|\*|\()/g, '$1<span class="code-types">$2</span>$3')
.replace(/(\(|\s|\!|^)(цел|логич|симв|симв16|корот|знак|беззнак|длин|плав|двойн|пуст)(\)|\s|\!|=|\*|\()/g, '$1<span class="code-types">$2</span>$3')
.replace(/(\(|\s|\!|^|\[)([0-9]*)(\)|;|\]|\s|\!|=|\()/g, '$1<span class="code-number">$2</span>$3')
.replace(/(\(|\s|\!|^)(auto|struct|break|else|switch|case|enum|register|NULL|typedef|extern|return|union|const|continue|for|default|GOTO|sizeof|volatile|do|if|static|while)(\);||\s|\!|=|\()/g, '$1<span class="code-operator">$2</span>$3')
.replace(/(\(|\s|\!|^)(если|иначе|для|пока|цикл|выбор|вариант|прервать|вернуть|прочее|заново)(\);||\s|\!|=|\()/g, '$1<span class="code-operator">$2</span>$3')
//.replace(/(=|\s|\(|\t)((L"|")(?:[^"\\]|\\.)*")/g, '$1<span class="code-quotes">$2</span>')
.replace(/(=|\s|\(|\t)(L"|")([^(code\-)](?:[^"\\]|\\.)*)"/g, '$1<span class="code-quotes">$2$3"</span>')
.replace(/~~~(COMM)([0-9]*?)~~~ /g, function (reg, str, num) {
return '<span class="code-comments">' + comments[num] + '</span>';
})
;
return txt;
}
jQuery(document).ready(function () {
jQuery('pre.slh__c').each(function () {
var safe = {
'<': '<',
'>': '>'
};
var txt = jQuery(this).html();
txt = txt
// .replace(/<!--\?php/g, '<?php')
// .replace(/\?-->/g, '?>')
.replace(/[\<\>]/g, function (m) {
return safe[m];
});
jQuery(this).html(txt);
});
jQuery('pre.slh__c').each(function () {
var txt = jQuery(this).html();
txt = backlightC(txt);
jQuery(this).html(txt);
});
});
</script>
</body>
</html>[/html]
Ух, регулярки это песня!
Нужно найти все строки в двойных кавычках, кроме начинающихся с "code- ... Такая регулярка /(=|\s|\(|\t)(L"|")([^(code\-)?](?:[^"\\]|\\.)*)"/g не справляется