mirror of
https://github.com/renbaoshuo/S2OJ.git
synced 2024-11-25 15:38:40 +00:00
96d4a3ecf7
Due to historical reasons, the code is in subfolder "1". With SVN removal, we place the code back and remove the annoying "1" folder.
142 lines
3.2 KiB
JavaScript
142 lines
3.2 KiB
JavaScript
var dp = {
|
|
SyntaxHighlighter : {}
|
|
};
|
|
|
|
dp.SyntaxHighlighter = {
|
|
parseParams: function(
|
|
input,
|
|
showGutter,
|
|
showControls,
|
|
collapseAll,
|
|
firstLine,
|
|
showColumns
|
|
)
|
|
{
|
|
function getValue(list, name)
|
|
{
|
|
var regex = new XRegExp('^' + name + '\\[(?<value>\\w+)\\]$', 'gi'),
|
|
match = null
|
|
;
|
|
|
|
for (var i = 0; i < list.length; i++)
|
|
if ((match = regex.exec(list[i])) != null)
|
|
return match.value;
|
|
|
|
return null;
|
|
};
|
|
|
|
function defaultValue(value, def)
|
|
{
|
|
return value != null ? value : def;
|
|
};
|
|
|
|
function asString(value)
|
|
{
|
|
return value != null ? value.toString() : null;
|
|
};
|
|
|
|
var parts = input.split(':'),
|
|
brushName = parts[0],
|
|
options = {},
|
|
straight = { 'true' : true }
|
|
reverse = { 'true' : false },
|
|
result = null,
|
|
defaults = SyntaxHighlighter.defaults
|
|
;
|
|
|
|
for (var i in parts)
|
|
options[parts[i]] = 'true';
|
|
|
|
showGutter = asString(defaultValue(showGutter, defaults.gutter));
|
|
showControls = asString(defaultValue(showControls, defaults.toolbar));
|
|
collapseAll = asString(defaultValue(collapseAll, defaults.collapse));
|
|
showColumns = asString(defaultValue(showColumns, defaults.ruler));
|
|
firstLine = asString(defaultValue(firstLine, defaults['first-line']));
|
|
|
|
return {
|
|
brush : brushName,
|
|
gutter : defaultValue(reverse[options.nogutter], showGutter),
|
|
toolbar : defaultValue(reverse[options.nocontrols], showControls),
|
|
collapse : defaultValue(straight[options.collapse], collapseAll),
|
|
// ruler : defaultValue(straight[options.showcolumns], showColumns),
|
|
'first-line' : defaultValue(getValue(parts, 'firstline'), firstLine)
|
|
};
|
|
},
|
|
|
|
HighlightAll: function(
|
|
name,
|
|
showGutter /* optional */,
|
|
showControls /* optional */,
|
|
collapseAll /* optional */,
|
|
firstLine /* optional */,
|
|
showColumns /* optional */
|
|
)
|
|
{
|
|
function findValue()
|
|
{
|
|
var a = arguments;
|
|
|
|
for (var i = 0; i < a.length; i++)
|
|
{
|
|
if (a[i] === null)
|
|
continue;
|
|
|
|
if (typeof(a[i]) == 'string' && a[i] != '')
|
|
return a[i] + '';
|
|
|
|
if (typeof(a[i]) == 'object' && a[i].value != '')
|
|
return a[i].value + '';
|
|
}
|
|
|
|
return null;
|
|
};
|
|
|
|
function findTagsByName(list, name, tagName)
|
|
{
|
|
var tags = document.getElementsByTagName(tagName);
|
|
|
|
for (var i = 0; i < tags.length; i++)
|
|
if (tags[i].getAttribute('name') == name)
|
|
list.push(tags[i]);
|
|
}
|
|
|
|
var elements = [],
|
|
highlighter = null,
|
|
registered = {},
|
|
propertyName = 'innerHTML'
|
|
;
|
|
|
|
// for some reason IE doesn't find <pre/> by name, however it does see them just fine by tag name...
|
|
findTagsByName(elements, name, 'pre');
|
|
findTagsByName(elements, name, 'textarea');
|
|
|
|
if (elements.length === 0)
|
|
return;
|
|
|
|
for (var i = 0; i < elements.length; i++)
|
|
{
|
|
var element = elements[i],
|
|
params = findValue(
|
|
element.attributes['class'], element.className,
|
|
element.attributes['language'], element.language
|
|
),
|
|
language = ''
|
|
;
|
|
|
|
if (params === null)
|
|
continue;
|
|
|
|
params = dp.SyntaxHighlighter.parseParams(
|
|
params,
|
|
showGutter,
|
|
showControls,
|
|
collapseAll,
|
|
firstLine,
|
|
showColumns
|
|
);
|
|
|
|
SyntaxHighlighter.highlight(params, element);
|
|
}
|
|
}
|
|
};
|