コード例 #1
0
        Object.keys(files).forEach(function (file) {
            debug('checking file: %s', file);
            if (!markdown(file)) { return; }
            var data = files[file],
                str = data.contents.toString(),
                end = /^(\s*)```(.*)/m,
                remainder = str,
                pos = 0,
                endpos = 0,
                replacements = [];

            while (end.test(remainder)) {
                var match = end.exec(remainder),
                    candidate = match[2] && match[2].trim(),
                    lang = (candidate && candidate.length) > 0 ? candidate : null,
                    prev = pos,
                    buff = match[0].length,
                    leadingSpaceLength = match[1] ? match[1].length : 0;

                pos = pos + match.index + buff;
                remainder = str.substring(pos);

                var ends = end.exec(remainder);
                if (ends === null) {
                    break;
                }

                endpos = ends.index;
                replacements.push(str.substring(prev, pos - buff + leadingSpaceLength));

                var fencePrefixLength = (ends[1] ? ends[1].length : 0) + 3;
                var nextPos = pos + endpos + fencePrefixLength;
                remainder = str.substring(nextPos);
                var code = str.substring(pos, pos + endpos);
                code = code.trim('(\r\n|\n)');
                pos = nextPos;
                if (lang === null) {
                    replacements.push('<pre><code class="hljs">' + hljs.highlightAuto(code).value + '</code></pre>');
                } else {
                    try {
                        if (lang === 'no-highlight') {
                            replacements.push('<pre><code class="hljs ' + lang + '">' + entities.encodeHTML(code) + '</code></pre>');
                        } else {
                            replacements.push('<pre><code class="hljs ' + lang + '">' + hljs.highlight(lang, code).value + '</code></pre>');
                        }
                    } catch (err) {
                        replacements.push('<pre><code>' + hljs.highlightAuto(code).value + '</code></pre>');
                    }
                }
            }
            if (pos < (str.length - 1)) {
                replacements.push(str.substring(pos));
            }

            files[file].contents = new Buffer(replacements.join(''));
            debug(files[file].contents.toString());
        });
コード例 #2
0
ファイル: highlight.js プロジェクト: daqing15/hexo
module.exports = function(raw, options){
  var options = _.extend(defaults, options);

  if (options.tab){
    raw = raw.replace(/\n(\t+)/g, function(match, tabs){
      var result = '\n';

      for (var i=0, len=tabs.length; i<len; i++){
        result += options.tab;
      }

      return result;
    });
  }

  if (!options.lang){
    var compiled = hljs.highlightAuto(raw).value;
  } else if (options.lang === 'plain'){
    var compiled = raw;
  } else {
    var lang = options.lang.toLowerCase();

    if (keys.indexOf(lang) !== -1) lang = alias[lang];

    try {
      var compiled = hljs.highlight(lang, raw).value;
    } catch (e){
      var compiled = hljs.highlightAuto(raw).value;
    }
  }

  var lines = compiled.split('\n'),
    numbers = '',
    content = '',
    firstLine = options.first_line;

  lines.forEach(function(item, i){
    numbers += (i + firstLine) + '\n';
    content += item + '\n';
  });

  if (options.gutter){
    var result = '<figure class="highlight' + (options.lang ? ' lang-' + options.lang : '') + '">'+
      (options.caption ? '<figcaption>' + options.caption + '</figcaption>' : '') +
      '<table>'+
      '<tr>'+
      '<td class="gutter"><pre>' + numbers + '</pre></td>'+
      '<td class="code"><pre>' + content + '</pre></td>'+
      '</tr>'+
      '</table>'+
      '</figure>';
  } else {
    var result = content;
  }

  return result;
};
コード例 #3
0
ファイル: markdown.js プロジェクト: Martii/OpenUserJS.org
  highlight: function (aCode, aLang) {
    var obj = null;
    var lang = [ // NOTE: More likely to less likely
      'javascript', 'xpath', 'xml',
        'css', 'less', 'scss',
          'json',
            'diff',
              'shell',
                'bash', 'dos',
                  'vbscript'
    ];

    if (aLang && hljs.getLanguage(aLang)) {
      try {
        return hljs.highlight(aLang, aCode).value;
      } catch (aE) {
        if (isDev) {
          console.error([
            colors.red('Dependency named highlighting failed with:'),
              aE

          ].join('\n'));
        }
      }
    }

    try {
      obj = hljs.highlightAuto(aCode);

      if (lang.indexOf(obj.language) > -1) {
        return obj.value;
      } else {
        if (isDev) {
          console.log([
            colors.yellow('Unusual auto-detected md language code is')
              + '`' + colors.cyan(obj.language) + '`',

          ].join('\n'));
        }
        return hljs.highlightAuto(aCode, lang).value;
      }
    } catch (aE) {
      if (isDev) {
        console.error([
          colors.red('Dependency automatic named highlighting failed with:'),
            aE

        ].join('\n'));
      }
    }

    // If any external package failure don't block return e.g. prevent empty
    return aCode;
  },
コード例 #4
0
ファイル: highlighter.js プロジェクト: Leeds-eBooks/wat
  highlight: function highlight(data, lang) {
    var fallback = !this.mapping[lang] ? 'default' : undefined;
    var hl = this.unescape(data);

    if (lang !== 'markdown') {
      if (!lang) {
        hl = hljs.highlightAuto(hl);
      } else {
        try {
          hl = hljs.highlight(lang, hl);
        } catch (e) {
          hl = hljs.highlightAuto(hl);
        }
      }
      if (hl.language) {
        fallback = hl.language;
      }
      hl = hl.value;
    }

    hl = this.format(hl);

    var mappingLang = fallback || lang;
    mappingLang = !this.mapping[mappingLang] ? 'default' : mappingLang;

    // If a custom language is detected, apply its styles.
    for (var color in this.mapping[mappingLang]) {
      if (this.mapping[mappingLang].hasOwnProperty(color)) {
        var clr = String(color).replace(/[0-9]/g, '');
        hl = String(hl).replace(this.mapping[mappingLang][color], chalk[clr]('$1'));
      }
    }

    // If the "default" styles weren't applied, apply them now.
    if (mappingLang !== 'default') {
      for (var color in this.mapping['default']) {
        if (this.mapping['default'].hasOwnProperty(color)) {
          var clr = String(color).replace(/[0-9]/g, '');
          hl = String(hl).replace(this.mapping['default'][color], chalk[clr]('$1'));
        }
      }
    }

    // Catch any highlighting tags not given in
    // that theme file, and reset any color on them.
    for (var style in this.mapping.fallback) {
      if (this.mapping.fallback.hasOwnProperty(style)) {
        hl = String(hl).replace(this.mapping.fallback[style], chalk.reset('$1'));
      }
    }

    return hl;
  },
コード例 #5
0
ファイル: extra.js プロジェクト: shouzo/hackmd
 .each(function (key, value) {
     var langDiv = $(value);
     if (langDiv.length > 0) {
         var reallang = langDiv[0].className.replace(/hljs|wrap/g, '').trim();
         var codeDiv = langDiv.find('.code');
         var code = "";
         if (codeDiv.length > 0) code = codeDiv.html();
         else code = langDiv.html();
         code = md.utils.unescapeAll(code);
         if (!reallang) {
             var result = {
                 value: md.utils.escapeHtml(code)
             };
         } else if (reallang == "tiddlywiki" || reallang == "mediawiki") {
             var result = {
                 value: Prism.highlight(code, Prism.languages.wiki)
             };
         } else {
             var languages = hljs.listLanguages();
             if (languages.indexOf(reallang) == -1) {
                 var result = hljs.highlightAuto(code);
             } else {
                 var result = hljs.highlight(reallang, code);
             }
         }
         if (codeDiv.length > 0) codeDiv.html(result.value);
         else langDiv.html(result.value);
     }
 });
コード例 #6
0
ファイル: raml2html.js プロジェクト: Philzen/raml2html
function highlightHelper(text) {
    if (text && text.length) {
        return new handlebars.SafeString(hljs.highlightAuto(text).value);
    } else {
        return '';
    }
}
コード例 #7
0
function highlightCodeblocks(parsed) {
  var walker = parsed.walker();
  var event, node;
  while ((event = walker.next())) {
    node = event.node;
    if (node.type === 'CodeBlock') {
      var info = node.info ? node.info.split(/\s+/) : [];
      var lang = info[0];
      var highlighted;
      var classes = ['hljs'];

      if (lang) {
        highlighted = highlightjs.highlight(lang, node.literal).value;
        classes.push('lang-'+lang);
      } else {
        highlighted = highlightjs.highlightAuto(node.literal).value;
      }

      var htmlBlock = new commonmark.Node('HtmlBlock', node.sourcepos);
      htmlBlock.literal = ['<pre>', '<code class="'+classes.join(' ')+'">', highlighted, '</code>', '</pre>'].join('');
      node.insertBefore(htmlBlock);
      node.unlink();
    }
  }
}
コード例 #8
0
ファイル: index.js プロジェクト: marcells/bloggy-marked
        highlight: function (code, lang) {
            if (lang) {
                return highlight.highlight(lang, code).value;
            }

            return highlight.highlightAuto(code).value;
        }
コード例 #9
0
ファイル: posts.js プロジェクト: evanlucas/curapps.com
 highlight: function(code, lang) {
   if (hljs.LANGUAGES[lang]) {
     return hljs.highlight(lang, code).value
   } else {
     return hljs.highlightAuto(code).value
   }
 },
コード例 #10
0
ファイル: markup.js プロジェクト: pecorade/slap
markup.highlight = function (text, language, style) {
  if (language === false) return blessed.escape(text);

  var highlighted;
  if (language) {
    try { highlighted = hljs.highlight(language, text, true); } catch (e) {}
  }
  if (!highlighted) highlighted = hljs.highlightAuto(text);

  var $ = cheerio.load(blessed.escape(highlighted.value)); // Assumes hljs output doesn't use curlies

  do {
    var lastElCount = elCount;
    var elCount = $('*:not(:has(*))').replaceWith(function () {
      var $el = $(this);
      var tags = ($el.attr('class') || '')
        .split(' ')
        .map(function (className) {
          if (!(className in style)) logger.debug(className + ' unstyled');
          return style[className] || '';
        })
        .join('');
      return entities.encodeHTML(textUtil
        .splitLines($el.text())
        .map(function (line) { return markup(line, tags); })
        .join(''));
    }).length;
  } while (lastElCount !== elCount);

  return $.root().text();
};
コード例 #11
0
 .concat(comment.examples.reduce(function(memo, example) {
     language = hljsOptions.highlightAuto ?
                hljs.highlightAuto(example.description).language : "javascript";
     return memo.concat(example.caption ?
         [u("paragraph", [u("emphasis", example.caption)])] :
         []).concat([u("code", {lang: language}, example.description)]);
 }, []));
コード例 #12
0
ファイル: index.js プロジェクト: AlexWyoup/nodediscuss
 options.highlight = function(code, lang) {
   if (lang) {
     return hljs.highlight(lang, code).value;
   } else {
     return hljs.highlightAuto(code).value;
   }
 };
コード例 #13
0
 highlight: function (code, lang) {
   if (typeof lang !== "undefined" && langs.indexOf(lang) > 0) {
     return hljs.highlight(lang, code).value;
   } else {
     return hljs.highlightAuto(code).value;
   }
 }
コード例 #14
0
ファイル: renderer.js プロジェクト: re3-labs/node-pubserver
renderer.code = function(code, language) {
	var code = language ? hljs.highlight(language, code).value : hljs.highlightAuto(code).value;
	return buildTemplate("code", {
		"LANGUAGE": language,
		"CODE": code
	});
}
コード例 #15
0
ファイル: gulpfile.js プロジェクト: gqikai/static-blog
function highlightCode(code, lang) {
    if (lang) {
        return highlight.highlight(lang, code, true).value;
    } else {
        return highlight.highlightAuto(code).value;
    }
}
コード例 #16
0
ファイル: html.js プロジェクト: itayw/ndoc
var marked_highlight = function (code, lang) {
  if (lang && hljs.LANGUAGES[lang]) {
    return hljs.highlight(lang, code).value;
  } else {
    return hljs.highlightAuto(code).value;
  }
};
コード例 #17
0
ファイル: routes.js プロジェクト: gabesoft/ayne
 , highlight   : function (str, lang) {
       if (lang && hljs.getLanguage(lang)) {
           return hljs.highlight(lang, str, true).value;
       } else {
           return hljs.highlightAuto(str).value;
       }
   }
コード例 #18
0
ファイル: parse.js プロジェクト: richardy2012/rmd
renderer.code = function (code, lang, escaped) {

    if (lang === 'mermaid' && mermaid.parse(code)) {
        return '<div class="mermaid">' + code + '</div>';
    }

    var out = highlight.highlightAuto(code).value;
    //var out = code + ' ';
    if (out != null && out !== code) {
        escaped = true;
        code = out;
    }

    if (!lang) {
        return '<pre><code>'
            + (escaped ? code : escape(code, true))
            + '\n</code></pre>';
    }

    return '<pre><code class="'
        + this.options.langPrefix
        + escape(lang, true)
        + '">'
        + (escaped ? code : escape(code, true))
        + '\n</code></pre>\n';
};
コード例 #19
0
ファイル: markdown.js プロジェクト: Zren/OpenUserJS.org
 highlight: function (aCode, aLang) {
   if (aLang && hljs.getLanguage(aLang)) {
     return hljs.highlight(aLang, aCode).value;
   } else {
     return hljs.highlightAuto(aCode).value;
   }
 },
コード例 #20
0
ファイル: index.js プロジェクト: fouber/fis-parser-marked
 highlight : function(code, lang){
     if(lang && hljs.getLanguage(lang)){
         return hljs.highlight(lang, code).value;
     } else {
         return hljs.highlightAuto(code).value;
     }
 }
コード例 #21
0
ファイル: markdown.js プロジェクト: superbull/grunt-markdown
 options.highlight = function(code) {
   var out = hljs.highlightAuto(code).value;
   if(shouldWrap) {
     out = wrapLines(out);
   }
   return out;
 };
コード例 #22
0
ファイル: drakkar.js プロジェクト: rumkin/drakkar
 highlight: function (code, lang) {
     var output = code;
     if (lang) {
         output = highlight.highlightAuto(output).value;
     }
     return '<div class="hljs">' + output + '</div>';
 }
コード例 #23
0
ファイル: Kirja.js プロジェクト: bretcope/kirjato
Kirja.highlight = function (code, lang)
{
	if (lang)
		 return HighlightJs.highlight(lang, code, true).value;
	
	return HighlightJs.highlightAuto(code).value;
};
コード例 #24
0
ファイル: page.js プロジェクト: adicool109/gitbook
 highlight: function (code, lang) {
     try {
         return hljs.highlight(lang, code).value;
     } catch(e) {
         return hljs.highlightAuto(code).value;
     }
 }
コード例 #25
0
ファイル: index.js プロジェクト: 99plus2/gitbook
swig.setFilter('code', function(code, lang) {
    try {
        return hljs.highlight(lang, code).value;
    } catch(e) {
        return hljs.highlightAuto(code).value;
    }
});
コード例 #26
0
ファイル: debug.js プロジェクト: 3GA/jsblocks
          blocks.each(data.examples, function (example) {
            var root = {
              name: '',
              children: []
            };
            var current = root;
            var parents = [];
            var parser = new parse5.SimpleApiParser({
              startTag: function (tagName, attrs) {
                var node = {
                    name: attrs[0].value,
                    children: []
                };
                parents.push(current);
                current.children.push(node);
                current = node;
              },

              endTag: function () {
                current = parents.pop();
              },

              text: function (text) {
                current.children.push(text);
              }
            });
            parser.parse(hljs.highlightAuto(example.code, [example.language]).value);
            example.code = root;
          });
コード例 #27
0
ファイル: markdown_ast.js プロジェクト: monw3c/documentation
 .concat(comment.examples.reduce(function (memo, example) {
   language = hljsOptions.highlightAuto ?
     hljs.highlightAuto(example.description).language : 'javascript';
   return memo.concat(example.caption ?
     [u('paragraph', [u('emphasis', [u('text', example.caption)])])] :
     []).concat([u('code', { lang: language }, example.description)]);
 }, []));
コード例 #28
0
ファイル: marked.js プロジェクト: ant-tool/atool-doc-util
function generateCode(code, lang) {
  
  const result = lang && highlight.getLanguage(lang)
    ? highlight.highlight(lang, code)
    : highlight.highlightAuto(code);

  return `<div class="highlight"><pre><code language=${result.language}>${result.value}</code></pre></div>`;
}
コード例 #29
0
 this.options.highlight = function (code, lang) {
   try {
     code = hljs.highlight(lang, code).value;
   } catch (e) {
     code = hljs.highlightAuto(code).value;
   }
   return code;
 };
コード例 #30
0
 highlight: function (code, lang) {
   if (lang === "nohighlight")
     return code;
   if (lang)
     return hljs.highlight(lang, code, true).value;
   else
     return hljs.highlightAuto(code).value;
 }