shLegacy.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  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. result = null,
  38. defaults = SyntaxHighlighter.defaults
  39. ;
  40. for (var i in parts)
  41. options[parts[i]] = 'true';
  42. showGutter = asString(defaultValue(showGutter, defaults.gutter));
  43. showControls = asString(defaultValue(showControls, defaults.toolbar));
  44. collapseAll = asString(defaultValue(collapseAll, defaults.collapse));
  45. showColumns = asString(defaultValue(showColumns, defaults.ruler));
  46. firstLine = asString(defaultValue(firstLine, defaults['first-line']));
  47. return {
  48. brush : brushName,
  49. gutter : defaultValue(reverse[options.nogutter], showGutter),
  50. toolbar : defaultValue(reverse[options.nocontrols], showControls),
  51. collapse : defaultValue(straight[options.collapse], collapseAll),
  52. // ruler : defaultValue(straight[options.showcolumns], showColumns),
  53. 'first-line' : defaultValue(getValue(parts, 'firstline'), firstLine)
  54. };
  55. },
  56. HighlightAll: function(
  57. name,
  58. showGutter /* optional */,
  59. showControls /* optional */,
  60. collapseAll /* optional */,
  61. firstLine /* optional */,
  62. showColumns /* optional */
  63. )
  64. {
  65. function findValue()
  66. {
  67. var a = arguments;
  68. for (var i = 0; i < a.length; i++)
  69. {
  70. if (a[i] === null)
  71. continue;
  72. if (typeof(a[i]) == 'string' && a[i] != '')
  73. return a[i] + '';
  74. if (typeof(a[i]) == 'object' && a[i].value != '')
  75. return a[i].value + '';
  76. }
  77. return null;
  78. };
  79. function findTagsByName(list, name, tagName)
  80. {
  81. var tags = document.getElementsByTagName(tagName);
  82. for (var i = 0; i < tags.length; i++)
  83. if (tags[i].getAttribute('name') == name)
  84. list.push(tags[i]);
  85. }
  86. var elements = [],
  87. highlighter = null,
  88. registered = {},
  89. propertyName = 'innerHTML'
  90. ;
  91. // for some reason IE doesn't find <pre/> by name, however it does see them just fine by tag name...
  92. findTagsByName(elements, name, 'pre');
  93. findTagsByName(elements, name, 'textarea');
  94. if (elements.length === 0)
  95. return;
  96. for (var i = 0; i < elements.length; i++)
  97. {
  98. var element = elements[i],
  99. params = findValue(
  100. element.attributes['class'], element.className,
  101. element.attributes['language'], element.language
  102. ),
  103. language = ''
  104. ;
  105. if (params === null)
  106. continue;
  107. params = dp.SyntaxHighlighter.parseParams(
  108. params,
  109. showGutter,
  110. showControls,
  111. collapseAll,
  112. firstLine,
  113. showColumns
  114. );
  115. SyntaxHighlighter.highlight(params, element);
  116. }
  117. }
  118. };