Remark: `wrapLines`λŠ” 일뢀 μ½”λ“œ κ°•μ‘° ν‘œμ‹œλ₯Ό μ€‘λ‹¨ν•©λ‹ˆλ‹€. μˆ˜μ • 포함

에 λ§Œλ“  2017λ…„ 09μ›” 07일  Β·  4μ½”λ©˜νŠΈ  Β·  좜처: gnab/remark

μ—¬κΈ°μ„œ wrapLines λŠ” \n 의 μ½”λ“œ λ‚΄μš©μ„ λΆ„ν• ν•˜κ³  ν˜•κ΄‘νŽœμ΄ ν•œ μ€„μ—μ„œ <span> λ₯Ό μ—΄κ³  닫을 λ•ŒκΉŒμ§€ 닫지 μ•ŠλŠ” 경우 <div> 둜 λž˜ν•‘ν•©λ‹ˆλ‹€. λ‹€μŒ μ€„μ—μ„œ λΈŒλΌμš°μ €λŠ” 첫 번째 div의 λ²”μœ„λ₯Ό μžλ™μœΌλ‘œ λ‹«κ³  두 번째 쀄은 μŠ€νƒ€μΌμ„ μƒμ†ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이둜 인해 μ½”λ“œ ν˜•μ‹μ΄ 깨진 κ²ƒμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€. Highlight.js의 문제라고 μƒκ°ν•˜μ—¬ #444μ—μ„œ λ³Ό 수 μžˆλŠ” κ²ƒμ²˜λŸΌ ν”„λ¦¬μ¦˜μœΌλ‘œ μ „ν™˜ν–ˆμ§€λ§Œ μ§€μ†λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

https://github.com/gnab/remark/blob/868781c84457bd1f0e0c1ee657423136fdbe3c75/src/remark/views/slideView.js#L281 -L292

highlightBlock μž¬μ •μ˜μ—μ„œ 이것을 μ„ μ ν•˜κ³  쀄 λμ—μ„œ λ‹«κ³  λ‹€μŒ 쀄 μ‹œμž‘ λΆ€λΆ„μ—μ„œ λ‹€μ‹œ μ—΄μ–΄ 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό λ‹¬μ„±ν•˜κΈ° μœ„ν•œ ES6 μ½”λ“œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

function parseLanguage(lang) {
  return {
    js: 'jsx',
  }[lang] || lang;
}
remark.highlighter.engine.highlightBlock = block => {
  const language = parseLanguage(block.className.split(" ")[0]);
  const prismLang = Prism.languages[language];
  if (prismLang) {
    block.parentNode.className = `${block.parentNode.className} language-${language}`;
    const html = Prism.highlight(block.textContent, prismLang);



    const lines = html.split(`\n`);
    let currentSpan = null;
    for (var i = 0; i < lines.length; i++) {
      let line = lines[i];
      if (currentSpan) {
        line = currentSpan + line;
        currentSpan = null;
      }
      const openTags = [];
      const re = /(<span[^>]*>|<\/span>)/gi;
      let matches;
      while ((matches = re.exec(line)) != null) {
        const tag = matches[1];
        if (tag[1] === '/') {
          openTags.pop();
        } else {
          openTags.push(tag);
        }
      }
      currentSpan = openTags.join('');
      line = line + ('</' + 'span>').repeat(openTags.length);
      lines[i] = line;
    }
    block.innerHTML = lines.join('\n');



  } else {
    console.warn(`Language '${language}' not supported?`)
  }
};

const lines = html.split... μ—μ„œ lines.join('\n') κΉŒμ§€μ˜ 뢀뢄을 wrapLines ν•¨μˆ˜μ— 직접 ν†΅ν•©ν•˜λŠ” 것을 κ³ λ €ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?

feature

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

@benjie 섀정을 κ³΅μœ ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. 말 κ·ΈλŒ€λ‘œ 2λ°° 더 μƒμ‚°μ μž…λ‹ˆλ‹€. @gnab κΈ°λ³Έ 개발 κ²½ν—˜μœΌλ‘œ μ–ΈκΈ‰ν•˜κΈ° μœ„ν•΄ 이것을 μΆ”κ°€ν•˜λŠ” 것에 λŒ€ν•΄ μ–΄λ–»κ²Œ μƒκ°ν•˜μ‹­λ‹ˆκΉŒ? 그것은 μΌμ’…μ˜ λ§ˆλ²•μž…λ‹ˆλ‹€.

λͺ¨λ“  4 λŒ“κΈ€

(그런데 λ‚˜λŠ” 이 ν”„λ ˆμ  ν…Œμ΄μ…˜ ν”„λ ˆμž„μ›Œν¬λ₯Ό μ ˆλŒ€μ μœΌλ‘œ μ‚¬λž‘ν•©λ‹ˆλ‹€. μˆ˜λ…„ λ™μ•ˆ μ‚¬μš©ν•΄ μ™”μœΌλ©° λ‚΄κ°€ ν”„λ ˆμ  ν…Œμ΄μ…˜ν•˜λŠ” λͺ¨λ“  κ³³μ—μ„œ 이 ν”„λ ˆμž„μ›Œν¬μ˜ μž₯점을 μΉ­μ°¬ν•©λ‹ˆλ‹€ ❀️ - λ§ˆν¬λ‹€μš΄ νŒŒμΌμ„ μ €μž₯ν•  λ•Œ λΈŒλΌμš°μ €κ°€ μžλ™μœΌλ‘œ λŒ€μ²΄ν•˜λŠ” Browsersync둜 멋진 섀정을 μ–»μ—ˆμŠ΅λ‹ˆλ‹€. λͺ¨λ“  μŠ¬λΌμ΄λ“œλ₯Ό μ¦‰μ‹œ νŽΈμ§‘ν•˜κ³  첫 번째 νŽΈμ§‘ μŠ¬λΌμ΄λ“œλ‘œ μ΄λ™ν•˜μ—¬ 생산성을 크게 λ†’μ˜€μŠ΅λ‹ˆλ‹€!)

λ‚΄ μ›Œν¬ν”Œλ‘œμ— 관심이 μžˆλŠ” 경우 λ‹€μŒ 슀크립트λ₯Ό ν™•μΈν•˜μ„Έμš”.

https://github.com/GraphQLTraining/lightweight-graphql-react/blob/gh-pages/browsersync

index.html 파일의 ν•΄λ‹Ή main ν•¨μˆ˜λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

https://github.com/GraphQLTraining/lightweight-graphql-react/blob/gh-pages/index.html

@benjie 섀정을 κ³΅μœ ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. 말 κ·ΈλŒ€λ‘œ 2λ°° 더 μƒμ‚°μ μž…λ‹ˆλ‹€. @gnab κΈ°λ³Έ 개발 κ²½ν—˜μœΌλ‘œ μ–ΈκΈ‰ν•˜κΈ° μœ„ν•΄ 이것을 μΆ”κ°€ν•˜λŠ” 것에 λŒ€ν•΄ μ–΄λ–»κ²Œ μƒκ°ν•˜μ‹­λ‹ˆκΉŒ? 그것은 μΌμ’…μ˜ λ§ˆλ²•μž…λ‹ˆλ‹€.

였 λ©‹μ§€λ„€μš” @benjie! 'jsx'λ₯Ό μ œλŒ€λ‘œ κ°•μ‘° ν‘œμ‹œν•˜κΈ° μœ„ν•΄ 주석을 ν•΄ν‚Ήν•˜μ§€ μ•Šμ•„λ„ λ˜μ—ˆμœΌλ©΄ ν•©λ‹ˆλ‹€. "highlight.js"λ₯Ό λΉ„ν™œμ„±ν™”ν•˜λŠ” μ˜΅μ…˜κ³Ό 주석 μ½”λ“œκ°€ λͺ¨λ‘ μ°¨λ‹¨λ˜μ–΄ λ‚΄ <pre> <code> νƒœκ·Έμ— λŒ€ν•΄ μ„ ν˜Έν•˜λŠ” ν˜•κ΄‘νŽœ(prism.js)에 κ°„λ‹¨νžˆ μ—°κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜λŠ” 그런 것.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰