μ½κΈ° λͺ¨λμμ λ§ν¬λ€μ΄ λ¬Έμκ° λ λλ§λλ λ°©μμ λ³κ²½νλ €λ©΄ μμ λ§μ _λ§ν¬λ€μ΄ νμ²λ¦¬κΈ°(Markdown post processor)_λ₯Ό μΆκ°ν μ μμ΅λλ€. μ΄λ¦μμ μ μ μλ―μ΄, νμ²λ¦¬κΈ°λ λ§ν¬λ€μ΄μ΄ HTMLλ‘ μ²λ¦¬λ νμ μ€νλ©λλ€. μ΄λ₯Ό ν΅ν΄ λ λλ§λ λ¬Έμμ HTML μμλ₯Ό μΆκ°, μ κ±° λλ κ΅μ²΄ν μ μμ΅λλ€.
λ€μ μμ λ λ κ°μ μ½λ‘ :
μ¬μ΄μ ν
μ€νΈκ° μλ μ½λ λΈλ‘μ μ°Ύμ μ μ ν μ΄λͺ¨μ§λ‘ κ΅μ²΄ν©λλ€:
import { Plugin } from 'obsidian';
const ALL_EMOJIS: Record<string, string> = {
':+1:': 'π',
':sunglasses:': 'π',
':smile:': 'π',
};
export default class ExamplePlugin extends Plugin {
async onload() {
this.registerMarkdownPostProcessor((element, context) => {
const codeblocks = element.findAll('code');
for (let codeblock of codeblocks) {
const text = codeblock.innerText.trim();
if (text[0] === ':' && text[text.length - 1] === ':') {
const emojiEl = codeblock.createSpan({
text: ALL_EMOJIS[text] ?? text,
});
codeblock.replaceWith(emojiEl);
}
}
});
}
}
λ§ν¬λ€μ΄ μ½λ λΈλ‘ νμ²λ¦¬
Mermaid λ€μ΄μ΄κ·Έλ¨μ λ€μκ³Ό κ°μ ν
μ€νΈ μ μκ° μλ mermaid
μ½λ λΈλ‘μΌλ‘ μμ±ν μ μλ€λ κ²μ μκ³ κ³μ
¨λμ?:
```mermaid
flowchart LR
Start --> Stop
```
미리보기 λͺ¨λλ‘ μ ννλ©΄ μ½λ λΈλ‘μ ν μ€νΈκ° λ€μκ³Ό κ°μ λ€μ΄μ΄κ·Έλ¨μΌλ‘ λ³νλ©λλ€:
flowchart LR Start --> Stop
Mermaidμ κ°μ μ¬μ©μ μ μ μ½λ λΈλ‘μ μΆκ°νλ €λ©΄ registerMarkdownCodeBlockProcessor()λ₯Ό μ¬μ©ν μ μμ΅λλ€. λ€μ μμ λ CSV λ°μ΄ν°κ° ν¬ν¨λ μ½λ λΈλ‘μ ν μ΄λΈλ‘ λ λλ§ν©λλ€:
import { Plugin } from 'obsidian';
export default class ExamplePlugin extends Plugin {
async onload() {
this.registerMarkdownCodeBlockProcessor('csv', (source, el, ctx) => {
const rows = source.split('\n').filter((row) => row.length > 0);
const table = el.createEl('table');
const body = table.createEl('tbody');
for (let i = 0; i < rows.length; i++) {
const cols = rows[i].split(',');
const row = body.createEl('tr');
for (let j = 0; j < cols.length; j++) {
row.createEl('td', { text: cols[j] });
}
}
});
}
}