⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 highlight.js

📁 展示数据结构的一些实用技巧. 包含: 1.运用kmp算法计算无穷概率 2.矩阵乘法的十种经典运算技巧 3.位运算的实用技巧(1) (2) (3)
💻 JS
字号:
var IDENT_RE = '[a-zA-Z][a-zA-Z0-9_]*';var UNDERSCORE_IDENT_RE = '[a-zA-Z_][a-zA-Z0-9_]*';var NUMBER_RE = '\\b\\d+(\\.\\d+)?';var C_NUMBER_RE = '\\b(0x[A-Za-z0-9]+|\\d+(\\.\\d+)?)';// Common modesvar APOS_STRING_MODE = {  className: 'string',  begin: '\'', end: '(^|[^\\\\])\'',  relevance: 0}var QUOTE_STRING_MODE = {  className: 'string',  begin: '"', end: '(^|[^\\\\])"',  relevance: 0}var C_LINE_COMMENT_MODE = {  className: 'comments',  begin: '//', end: '$',  relevance: 0}var C_BLOCK_COMMENT_MODE = {  className: 'comments',  begin: '/\\*', end: '\\*/'}var HASH_COMMENT_MODE = {  className: 'comments',  begin: '#', end: '$'}var C_NUMBER_MODE = {  className: 'number',  begin: C_NUMBER_RE, end: '^',  relevance: 0}var LANGUAGES = {}var PASCAL_KEYWORDS = {'abs': 1,'addr': 1,'and': 1,'ansichar': 1,'ansistring': 1,'array': 1,'as': 1,'asm': 1,'begin': 1,'boolean': 1,'byte': 1,'cardinal': 1,'case': 1,'char': 1,'class': 1,'comp': 1,'const': 1,'constructor': 1,'currency': 1,'destructor': 1,'div': 1,'do': 1,'double': 1,'downto': 1,'else': 1,'end': 1,'except': 1,'exports': 1,'extended': 1,'false': 1,'file': 1,'finalization': 1,'finally': 1,'for': 1,'function': 1,'goto': 1,'if': 1,'implementation': 1,'in': 1,'inherited': 1,'int64': 1,'initialization': 1,'integer': 1,'interface': 1,'is': 1,'label': 1,'library': 1,'longint': 1,'longword': 1,'mod': 1,'nil': 1,'not': 1,'object': 1,'of': 1,'on': 1,'operator': 1,'or': 1,'packed': 1,'pansichar': 1,'pansistring': 1,'pchar': 1,'pcurrency': 1,'pdatetime': 1,'pextended': 1,'pint64': 1,'pointer': 1,'private': 1,'procedure': 1,'program': 1,'property': 1,'pshortstring': 1,'pstring': 1,'pvariant': 1,'pwidechar': 1,'pwidestring': 1,'protected': 1,'public': 1,'published': 1,'raise': 1,'real': 1,'real48': 1,'record': 1,'repeat': 1,'set': 1,'shl': 1,'shortint': 1,'shortstring': 1,'shr': 1,'single': 1,'smallint': 1,'string': 1,'then': 1,'threadvar': 1,'to': 1,'true': 1,'type': 1,'unit': 1,'until': 1,'uses': 1,'val': 1,'var': 1,'varirnt': 1,'while': 1,'widechar': 1,'widestring': 1,'with': 1,'word': 1,'write': 1,'writeln': 1,'xor': 1,'assign': 1,'reset': 1,'rewrite': 1,'exit': 1,'halt': 1,'break': 1,'read': 1,'readln': 1,'new': 1,'length': 1,'append': 1,'close': 1};LANGUAGES.pascal = {  defaultMode: {    lexems: [IDENT_RE],    illegal: '("|\\$[G-Zg-z]|\\/\\*|</)',    contains: ['comments', 'string', 'number', 'function', 'class'],    keywords: PASCAL_KEYWORDS  },  case_insensitive: true,  modes: [    {      className: 'comments',      begin: '{', end: '}'    },    {      className: 'comments',      begin: '\\(\\*', end: '\\*\\)',      relevance: 10    },    C_LINE_COMMENT_MODE,    {      className: 'number',      begin: NUMBER_RE, end: '^',      relevance: 0    },    {      className: 'string',      begin: '\'', end: '\'',      contains: ['quote'],      relevance: 0    },    {      className: 'quote',      begin: '\'\'', end: '^'    },    {      className: 'function',      begin: 'function', end: '[:;]',      lexems: [IDENT_RE],      keywords: {'function': 1},      contains: ['title', 'params', 'comments'],      relevance: 0    },    {      className: 'function',      begin: '(procedure|constructor|destructor)', end: ';',      lexems: [IDENT_RE],      keywords: {'constructor': 1, 'destructor': 1, 'procedure': 1},      contains: ['title', 'params', 'comments'],      relevance: 10    },    {      className: 'title',      begin: IDENT_RE, end: '^'    },    {      className: 'params',      begin: '\\(', end: '\\)',      lexems: [IDENT_RE],      keywords: PASCAL_KEYWORDS,      contains: ['string']    }  ]};//pascal, written by matrix67.comLANGUAGES.cpp = {  defaultMode: {    lexems: [UNDERSCORE_IDENT_RE],    illegal: '</',    contains: ['comments', 'string', 'number', 'preprocessor'],    keywords: {'false': 1, 'int': 1, 'float': 1, 'while': 1, 'private': 1, 'char': 1, 'catch': 1, 'export': 1, 'virtual': 1, 'operator': 1, 'sizeof': 1, 'dynamic_cast': 1, 'typedef': 1, 'const_cast': 1, 'const': 1, 'struct': 1, 'for': 1, 'static_cast': 1, 'union': 1, 'namespace': 1, 'unsigned': 1, 'long': 1, 'throw': 1, 'volatile': 1, 'static': 1, 'protected': 1, 'bool': 1, 'template': 1, 'mutable': 1, 'if': 1, 'public': 1, 'friend': 1, 'do': 1, 'return': 1, 'goto': 1, 'auto': 1, 'void': 1, 'enum': 1, 'else': 1, 'break': 1, 'new': 1, 'extern': 1, 'using': 1, 'true': 1, 'class': 1, 'asm': 1, 'case': 1, 'typeid': 1, 'short': 1, 'reinterpret_cast': 1, 'default': 1, 'double': 1, 'register': 1, 'explicit': 1, 'signed': 1, 'typename': 1, 'try': 1, 'this': 1, 'switch': 1, 'continue': 1, 'wchar_t': 1, 'inline': 1, 'delete': 1}  },  modes: [    C_LINE_COMMENT_MODE,    C_BLOCK_COMMENT_MODE,    C_NUMBER_MODE,    QUOTE_STRING_MODE,    {      className: 'string',      begin: '\'', end: '[^\\\\]\'',      illegal: '[^\\\\][^\']'    },    {      className: 'preprocessor',      begin: '#', end: '$'    }  ]};//cppLANGUAGES.javascript = {  defaultMode: {    lexems: [UNDERSCORE_IDENT_RE],    contains: ['string', 'comments', 'number', 'regexp', 'function', 'literal'],    keywords: {'in': 1, 'if': 1, 'for': 1, 'while': 1, 'finally': 1, 'var': 1, 'new': 1, 'function': 1, 'do': 1, 'return': 1, 'void': 1, 'else': 1, 'break': 1, 'catch': 1, 'instanceof': 1, 'with': 1, 'throw': 1, 'case': 1, 'default': 1, 'try': 1, 'this': 1, 'switch': 1, 'continue': 1, 'typeof': 1, 'delete': 1}  },  modes: [    C_LINE_COMMENT_MODE,    C_BLOCK_COMMENT_MODE,    C_NUMBER_MODE,    {      className: 'literal',      begin: '\\b(true|false|null)', end: '^'    },    APOS_STRING_MODE,    QUOTE_STRING_MODE,    {      className: 'regexp',      begin: '\\/[^\\/]', end: '(^|[^\\\\])\\/[gim]*'    },    {      className: 'function',      begin: 'function ', end: '{',      lexems: [UNDERSCORE_IDENT_RE],      keywords: {'function': 1},      contains: ['title', 'params']    },    {      className: 'title',      begin: UNDERSCORE_IDENT_RE, end: '^'    },    {      className: 'params',      begin: '\\(', end: '\\)',      contains: ['string', 'comments']    }  ]};//javascriptfunction langRe(language, value, global) {  var mode =  'm' + (language.case_insensitive ? 'i' : '') + (global ? 'g' : '');  return new RegExp(value, mode);}//refor (var i in LANGUAGES) {  var language = LANGUAGES[i];  for (var key in language.modes) {    if (language.modes[key].begin)      language.modes[key].beginRe = langRe(language, '^' + language.modes[key].begin);    if (language.modes[key].end)      language.modes[key].endRe = langRe(language, '^' + language.modes[key].end);    if (language.modes[key].illegal)      language.modes[key].illegalRe = langRe(language, '^(?:' + language.modes[key].illegal + ')');    language.defaultMode.illegalRe = langRe(language, '^(?:' + language.defaultMode.illegal + ')');  }//for}//forvar selected_languages = {};function Highlighter(language_name, value) {  currentMode = function(){    return modes[modes.length - 1];  }//currentMode    function subMode(lexem) {    if (!currentMode().contains)      return null;    for (var key in language.modes)      if (contains(currentMode().contains, language.modes[key].className) && language.modes[key].beginRe.test(lexem))        return language.modes[key];    return null;  }//subMode  function endOfMode(mode_index, lexem) {    if (modes[mode_index].end && modes[mode_index].endRe.test(lexem))      return 1;    if (modes[mode_index].endsWithParent) {      var level = endOfMode(mode_index - 1, lexem);      return level ? level + 1 : 0;    }//if    return 0;  }//endOfMode    function isIllegal(lexem) {    if (!currentMode().illegalRe)      return false;    return currentMode().illegalRe.test(lexem);  }//isIllegal  function eatModeChunk(value, index) {    if (!currentMode().terminators) {      var terminators = [];            if (currentMode().contains)        for (var key in language.modes) {          if (contains(currentMode().contains, language.modes[key].className) &&              !contains(terminators, language.modes[key].begin))            terminators[terminators.length] = language.modes[key].begin;        }//for            var mode_index = modes.length - 1;      do {        if (modes[mode_index].end && !contains(terminators, modes[mode_index].end))          terminators[terminators.length] = modes[mode_index].end;        mode_index--;      } while (modes[mode_index + 1].endsWithParent);            if (currentMode().illegal)        if (!contains(terminators, currentMode().illegal))          terminators[terminators.length] = currentMode().illegal;            var terminator_re = '(' + terminators[0];      for (var i = 0; i < terminators.length; i++)        terminator_re += '|' + terminators[i];      terminator_re += ')';      currentMode().terminators = langRe(language, terminator_re);    }//if    value = value.substr(index);    var match = currentMode().terminators.exec(value);    if (!match)       return [value, '', true];    if (match.index == 0)      return ['', match[0], false];    else      return [value.substr(0, match.index), match[0], false];  }//eatModeChunk    function escape(value) {    return value.replace(/&/gm, '&amp;').replace(/</gm, '&lt;').replace(/>/gm, '&gt;');  }//escape    function processKeywords(buffer) {    var mode = currentMode();    if (!mode.keywords || !mode.lexems)      return escape(buffer);    if (!mode.lexemsRe) {      var lexems = [];      for (var key in mode.lexems)        if (!contains(lexems, mode.lexems[key]))          lexems[lexems.length] = mode.lexems[key];      var lexems_re = '(' + lexems[0];      for (var i = 1; i < lexems.length; i++)        lexems_re += '|' + lexems[i];      lexems_re += ')';      mode.lexemsRe = langRe(language, lexems_re, true);    }//if    var result = '';    var last_index = 0;    mode.lexemsRe.lastIndex = 0;    var match = mode.lexemsRe.exec(buffer);    while (match) {      result += escape(buffer.substr(last_index, match.index - last_index));      if (mode.keywords[language.case_insensitive ? match[0].toLowerCase() : match[0]]) {        keyword_count++;        result += '<span class="keyword">' + escape(match[0]) + '</span>';      } else {        result += escape(match[0]);      }//if      last_index = mode.lexemsRe.lastIndex;      match = mode.lexemsRe.exec(buffer);    }//while    result += escape(buffer.substr(last_index, buffer.length - last_index));    return result;  }//processKeywords    function processModeInfo(buffer, lexem, end) {    if (end) {      result += processKeywords(currentMode().buffer + buffer);      return;    }//if    if (isIllegal(lexem))      throw 'Illegal';    var new_mode = subMode(lexem);    if (new_mode) {      currentMode().buffer += buffer;      result += processKeywords(currentMode().buffer);      if (new_mode.excludeBegin) {        result += lexem + '<span class="' + new_mode.className + '">';        new_mode.buffer = '';      } else {        result += '<span class="' + new_mode.className + '">';        new_mode.buffer = lexem;      }//if      modes[modes.length] = new_mode;      relevance += currentMode().relevance != undefined ? currentMode().relevance : 1;      return;    }//if    var end_level = endOfMode(modes.length - 1, lexem);    if (end_level) {      currentMode().buffer += buffer;      if (currentMode().excludeEnd) {        result += processKeywords(currentMode().buffer) + '</span>' + lexem;      } else {        result += processKeywords(currentMode().buffer + lexem) + '</span>';      }      while (end_level > 1) {        result += '</span>';        end_level--;        modes.length--;      }//while      modes.length--;      currentMode().buffer = '';      return;    }//if  }//processModeInfo  function highlight(value) {    var index = 0;    language.defaultMode.buffer = '';    for (var mode_info = eatModeChunk(value, index); index < value.length; mode_info = eatModeChunk(value, index)) {      processModeInfo(mode_info[0], mode_info[1], mode_info[2]);      index += mode_info[0].length + mode_info[1].length;    }//for    if(modes.length > 1)      throw 'Illegal';  }//highlight    this.language_name = language_name;  var language = LANGUAGES[language_name];  var modes = [language.defaultMode];  var relevance = 0;  var keyword_count = 0;  var result = '';  try {    highlight(value);    this.relevance = relevance;    this.keyword_count = keyword_count;    this.result = result;  } catch (e) {    if (e == 'Illegal') {      this.relevance = 0;      this.keyword_count = 0;      this.result = escape(value);    } else {      throw e;    }//if  }//try}//Highlighterfunction contains(array, item) {  if (!array)    return false;  for (var key in array)    if (array[key] == item)      return true;  return false;}//containsfunction blockText(block) {  var result = '';  for (var i = 0; i < block.childNodes.length; i++)    if (block.childNodes[i].nodeType == 3)      result += block.childNodes[i].nodeValue;    else if (block.childNodes[i].nodeName == 'BR')      result += '\n';    else      throw 'Complex markup';  return result;}//blockTextfunction initHighlight(block) {  if (block.className.search(/\bno\-highlight\b/) != -1)    return;  try {    blockText(block);  } catch (e) {    if (e == 'Complex markup')      return;  }//try  var classes = block.className.split(/\s+/);  for (var i = 0; i < classes.length; i++) {    if (LANGUAGES[classes[i]]) {      highlightLanguage(block, classes[i]);      return;    }//if  }//for}//initHighlightfunction highlightLanguage(block, language) {  var highlight = new Highlighter(language, blockText(block));  // See these 4 lines? This is IE's notion of "block.innerHTML = result". Love this browser :-/  var container = document.createElement('div');  container.innerHTML = '<pre><code class="' + block.className + '">' + highlight.result + '</code></pre>';  var environment = block.parentNode.parentNode;  environment.replaceChild(container.firstChild, block.parentNode);}//highlightLanguagefunction initHighlighting() {  if (initHighlighting.called)    return;  initHighlighting.called = true;  if (arguments.length) {    for (var i = 0; i < arguments.length; i++) {      if (LANGUAGES[arguments[i]]) {        selected_languages[arguments[i]] = LANGUAGES[arguments[i]];      }//if    }//for  } else    selected_languages = LANGUAGES;  var pres = document.getElementsByTagName('pre');  for (var i = 0; i < pres.length; i++) {    if (pres[i].firstChild && pres[i].firstChild.nodeName == 'CODE')      initHighlight(pres[i].firstChild);  }//for}//initHighlightingfunction initHighlightingOnLoad() {  var original_arguments = arguments;  var handler = function(){initHighlighting.apply(null, original_arguments)};  if (window.addEventListener) {    window.addEventListener('DOMContentLoaded', handler, false);    window.addEventListener('load', handler, false);  } else if (window.attachEvent)    window.attachEvent('onload', handler);  else    window.onload = handler;}//initHighlightingOnLoad

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -