μ¬κΈ°μ wrapLines
λ \n
μ μ½λ λ΄μ©μ λΆν νκ³ νκ΄νμ΄ ν μ€μμ <span>
λ₯Ό μ΄κ³ λ«μ λκΉμ§ λ«μ§ μλ κ²½μ° <div>
λ‘ λνν©λλ€. λ€μ μ€μμ λΈλΌμ°μ λ 첫 λ²μ§Έ divμ λ²μλ₯Ό μλμΌλ‘ λ«κ³ λ λ²μ§Έ μ€μ μ€νμΌμ μμνμ§ μμ΅λλ€. μ΄λ‘ μΈν΄ μ½λ νμμ΄ κΉ¨μ§ κ²μ²λΌ 보μ
λλ€. Highlight.jsμ λ¬Έμ λΌκ³ μκ°νμ¬ #444μμ λ³Ό μ μλ κ²μ²λΌ ν리μ¦μΌλ‘ μ ννμ§λ§ μ§μλμμ΅λλ€.
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
ν¨μμ μ§μ ν΅ν©νλ κ²μ κ³ λ €νμκ² μ΅λκΉ?
(κ·Έλ°λ° λλ μ΄ νλ μ ν μ΄μ νλ μμν¬λ₯Ό μ λμ μΌλ‘ μ¬λν©λλ€. μλ λμ μ¬μ©ν΄ μμΌλ©° λ΄κ° νλ μ ν μ΄μ νλ λͺ¨λ κ³³μμ μ΄ νλ μμν¬μ μ₯μ μ μΉμ°¬ν©λλ€ β€οΈ - λ§ν¬λ€μ΄ νμΌμ μ μ₯ν λ λΈλΌμ°μ κ° μλμΌλ‘ λ체νλ 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)μ κ°λ¨ν μ°κ²°ν μ μμ΅λλ€. λλ κ·Έλ° κ².
κ°μ₯ μ μ©ν λκΈ
@benjie μ€μ μ 곡μ ν΄ μ£Όμ μ κ°μ¬ν©λλ€. λ§ κ·Έλλ‘ 2λ°° λ μμ°μ μ λλ€. @gnab κΈ°λ³Έ κ°λ° κ²½νμΌλ‘ μΈκΈνκΈ° μν΄ μ΄κ²μ μΆκ°νλ κ²μ λν΄ μ΄λ»κ² μκ°νμλκΉ? κ·Έκ²μ μΌμ’ μ λ§λ²μ λλ€.