shLegacy.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. var dp = {
  2. SyntaxHighlighter : {}
  3. };
  4. dp.SyntaxHighlighter = {
  5. parseParams: function(
  6. input,
  7. showGutter,
  8. showControls,
  9. collapseAll,
  10. firstLine,
  11. showColumns
  12. )
  13. {
  14. function getValue(list, name)
  15. {
  16. var regex = new XRegExp('^' + name + '\\[(?<value>\\w+)\\]$', 'gi'),
  17. match = null
  18. ;
  19. for (var i = 0; i < list.length; i++)
  20. if ((match = regex.exec(list[i])) != null)
  21. return match.value;
  22. return null;
  23. }
  24. function defaultValue(value, def)
  25. {
  26. return value != null ? value : def;
  27. }
  28. function asString(value)
  29. {
  30. return value != null ? value.toString() : null;
  31. }
  32. var parts = input.split(':'),
  33. brushName = parts[0],
  34. options = {},
  35. straight = { 'true' : true },
  36. reverse = { 'true' : false },
  37. defaults = SyntaxHighlighter.defaults
  38. ;
  39. for (var i in parts)
  40. options[parts[i]] = 'true';
  41. showGutter = asString(defaultValue(showGutter, defaults.gutter));
  42. showControls = asString(defaultValue(showControls, defaults.toolbar));
  43. collapseAll = asString(defaultValue(collapseAll, defaults.collapse));
  44. showColumns = asString(defaultValue(showColumns, defaults.ruler));
  45. firstLine = asString(defaultValue(firstLine, defaults['first-line']));
  46. return {
  47. brush : brushName,
  48. gutter : defaultValue(reverse[options.nogutter], showGutter),
  49. toolbar : defaultValue(reverse[options.nocontrols], showControls),
  50. collapse : defaultValue(straight[options.collapse], collapseAll),
  51. // ruler : defaultValue(straight[options.showcolumns], showColumns),
  52. 'first-line' : defaultValue(getValue(parts, 'firstline'), firstLine)
  53. };
  54. },
  55. HighlightAll: function(
  56. name,
  57. showGutter /* optional */,
  58. showControls /* optional */,
  59. collapseAll /* optional */,
  60. firstLine /* optional */,
  61. showColumns /* optional */
  62. )
  63. {
  64. function findValue()
  65. {
  66. var a = arguments;
  67. for (var i = 0; i < a.length; i++)
  68. {
  69. if (a[i] === null)
  70. continue;
  71. if (typeof(a[i]) == 'string' && a[i] != '')
  72. return a[i] + '';
  73. if (typeof(a[i]) == 'object' && a[i].value != '')
  74. return a[i].value + '';
  75. }
  76. return null;
  77. }
  78. function findTagsByName(list, name, tagName)
  79. {
  80. var tags = document.getElementsByTagName(tagName);
  81. for (var i = 0; i < tags.length; i++)
  82. if (tags[i].getAttribute('name') == name)
  83. list.push(tags[i]);
  84. }
  85. var elements = [],
  86. highlighter = null,
  87. registered = {},
  88. propertyName = 'innerHTML'
  89. ;
  90. // for some reason IE doesn't find <pre/> by name, however it does see them just fine by tag name...
  91. findTagsByName(elements, name, 'pre');
  92. findTagsByName(elements, name, 'textarea');
  93. if (elements.length === 0)
  94. return;
  95. for (var i = 0; i < elements.length; i++)
  96. {
  97. var element = elements[i],
  98. params = findValue(
  99. element.attributes['class'], element.className,
  100. element.attributes['language'], element.language
  101. ),
  102. language = ''
  103. ;
  104. if (params === null)
  105. continue;
  106. params = dp.SyntaxHighlighter.parseParams(
  107. params,
  108. showGutter,
  109. showControls,
  110. collapseAll,
  111. firstLine,
  112. showColumns
  113. );
  114. SyntaxHighlighter.highlight(params, element);
  115. }
  116. }
  117. };