Newer
Older
pushpullRefactoringExperiments / syntaxhighlighter-3.0.83 / scripts / shLegacy.js
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);
		}
	}
};