mediteam.us ๊ฐ๋ฐ์ ํตํด ๋ฐ๊ฒฌ๋ ๋ฌธ์ ์ ๋ค์ ์์ ํ๋ฉด์ ํ์ธ๋ ๋ด์ฉ๋ค์ ๋๋ค.
5๊ฐ์ ์ ์ ํฌ์คํ ํ๋ https://steemit.com/steemdev/@junn/690 Markdown to HTML ์ ๊ด๋ จ๋ ์๋กญ๊ฒ ์ ๋ฐ์ดํธ ๋ ๋ด์ฉ์ ๋ด์ต๋๋ค.
๋น์์ ๊ฐํ๋ฌธ์(\r)๋ฅผ <Br/>๋ก ๊ฐ์ ๋ก ๋ณํํ๋ ๋ฐฉ์์ ์ด์ฉํ์ต๋๋ค๋ง, ์ด๋ฐ ๋ถ๋ถ์ด ๋ค ํ์์์ด ์ต์ ์ผ๋ก ์ ๊ณต๋๊ณ ์์์ต๋๋ค.
Markdown์ HTML๋ก ๋ณ๊ฒฝํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์๋์ ๊ฐ์ต๋๋ค.
https://github.com/showdownjs/showdown
์คํ์ ๋ฐ์์ค๋ ๋ฐฉ์์ ์์ง ๊ทธ๋๋ก์ธ๊ฒ ๊ฐ์ต๋๋ค.
https://steemit.com/steem/@junn/557
์๋ฒ์์๋ nodejs๋ฅผ ์ฐ๊ณ , ํด๋ผ์ด์ธํธ์์๋ javascript์ ๋๋ค๋ง, ์ค๋ช ์ ์๋ฒ์ชฝ์ผ๋ก ์งํํ๊ฒ ์ต๋๋ค.
์๋์ ๊ฐ์ด ์ค์นํ๊ณ ,
$ npm install showdown
JS ํ์ผ์๋ ๋ค์ ์์ค๊ฐ ์ด์ฉ๋ฉ๋๋ค.
var showdown = require('showdown');
var converter = new showdown.Converter({
'tables':true,
'strikethrough':true,
'simpleLineBreaks':true
});
//body๋ ์คํ์์ ๋ฐ์์จ ๋งํฌ๋ค์ด ๋ณธ๋ฌธ์
๋๋ค.
body = converter.makeHtml(body);
์ด์ ๊ณผ ๋ค๋ฅธ ๋ถ๋ถ์ Converter ์์ฑ์์ ๋ค์ด๊ฐ๋ ์ต์ ๋ค์ ๋๋ค.
tables๋ ๋งํฌ๋ค์ด์ ํ ์ด๋ธ,
strikethrough๋ ๋ฌธ์ ๊ฐ์ด๋ฐ ๋ค์ด๊ฐ๋ ์ทจ์์ ,
simpleLineBreaks๋ ๋งํฌ๋ค์ด์์ ์ค๋ฐ๊ฟ์ <br>ํ๊ทธ๋ก ๋ฐ๊พธ๋ ๊ธฐ๋ฅ์ ๋๋ค.
์ด์ธ์๋ http ์ฃผ์๋ง ์ฐ๋ฉด ์์์ ๋งํฌ๋ฅผ ๊ฑธ์ด์ฃผ๋ ์ต์ , ์ด๋ ๊ฒ ๊ฑธ๋ ์์์ target='_blank'(์์ฐฝ๋์ฐ๊ธฐ) ์ต์ ๋ฑ๋ฑ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
YouTube ์ ๋ฒ ๋ฉ๊ณผ ์ด๋ฏธ์ง ํ์ผ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ ์ต์ ์์ ๋ชป์ฐพ์ ๊ฒ ๊ฐ์ ์ ๊ฐ ๋ง๋ ์์ค๋ฅผ ๊ทธ๋ฅ ๊ณ์ ์ฐ๊ณ ์์ต๋๋ค.
function changeYouTubeTag( html ) {
return html.replace(/https:\/\/youtu.be\/([\w]*)/gi, '\<p\>\<iframe wdith="420" height="315" src="https:\/\/www.youtube.com\/embed\/$1"\>\<\/iframe\>\<\/p\>');
}
function imageSetting(html)
{
var html_change = html;
var regex = /(<([^>]+)>)/ig
var result = html_change.replace(regex, "");
regex = /(https?:\/\/.*\.(?:png|jpg|jpeg))/ig;
var arrMatch = result.match(regex);
//console.log(arrMatch);
if(arrMatch != null)
{
for(var i=0;i<arrMatch.length;i++)
{
re = new RegExp(arrMatch[i], "g");
html_change = html_change.replace(re,"<img src='"+arrMatch[i]+"'/>");
if(i!=arrMatch.lenght-1)
{
for(var j=i+1;j<arrMatch.length;j++)
{
if(arrMatch[j]==arrMatch[i])
{
arrMatch.splice(j,1);
}
}
}
}
}
return html_change;
}
์ฆ ์๋์ ๊ฐ์ด ์ด์ฉํฉ๋๋ค.
var converter = new showdown.Converter({
'tables':true,
'strikethrough':true,
'simpleLineBreaks':true
});
body = converter.makeHtml(body);
body = changeYouTubeTag(imageSetting(body)));
์ด๋ ๊ฒ ๋๋ฆฌ๋ ํ ์ด๋ธ๋, ๋ณธ๋ฌธ๋ ์์๊ฒ ์ ์ถ๋ ฅ๋ฉ๋๋ค.
์ค๊ฐ์ ์ฐพ์์ง showdown์ ๋ฌธ์ ๋
HTML์ <hr>ํ๊ทธ ์ญํ ์ ํ๋ --- , ----, ----------- ๋ฑ์ ํ์์ด์๋๋ฐ์,
ํ ์คํธ ์ฝ๋๋ ์๋์ ๊ฐ์ต๋๋ค.
var showdown = require('showdown');
var converter = new showdown.Converter({'tables':true,'strikethrough':true,'simpleLineBreaks':true});
var text = '----\r#### ์ฑ์ฅ๊ณผ ๋ฐ๋ฌ์ ๊ตฌ๋ถ\r๋ง์ ๋ถ๋ค์ด ์ฑ์ฅ๊ณผ ๋ฐ๋ฌ์ด๋ผ๋ ์ฉ์ด๋ฅผ ํผ์ฉํ๊ณ ์์ต๋๋ค. ์ํ์ ์ผ๋ก ์ฑ์ฅ๊ณผ ๋ฐ๋ฌ์ ์๋์ ๊ฐ์ด ๊ตฌ๋ถํ๊ณ ์์ต๋๋ค.\r- ์ฑ์ฅ: ์์ ์ผ๋ก ์ฆ๊ฐํ๋ ๊ณผ์ ์ ๋ปํฉ๋๋ค. ํค, ์ฒด์ค์ด ์ฑ์ฅ์ ๋ํ๋ด๋ ์งํ์
๋๋ค.\r- ๋ฐ๋ฌ: ๊ธฐ๋ฅ์ ์ธ ๋ฐ์ ๊ณผ ๊ณผ์ ์ ๋ปํฉ๋๋ค. ์ธ์ด, ์ด๋, ์ ์์ ์ํ๋ ๋ฐ๋ฌํ๋ ๊ฒ์
๋๋ค.\r----';
html = converter.makeHtml(text);
/*
'
\n์ฑ์ฅ๊ณผ ๋ฐ๋ฌ์ ๊ตฌ๋ถ
\n๋ง์ ๋ถ๋ค์ด ์ฑ์ฅ๊ณผ ๋ฐ๋ฌ์ด๋ผ๋ ์ฉ์ด๋ฅผ ํผ์ฉํ๊ณ ์์ต๋๋ค. ์ํ์ ์ผ๋ก ์ฑ์ฅ๊ณผ ๋ฐ๋ฌ์ ์๋์ ๊ฐ์ด ๊ตฌ๋ถํ๊ณ ์์ต๋๋ค.
\n์ฑ์ฅ: ์์ ์ผ๋ก ์ฆ๊ฐํ๋ ๊ณผ์ ์ ๋ปํฉ๋๋ค. ํค, ์ฒด์ค์ด ์ฑ์ฅ์ ๋ํ๋ด๋ ์งํ์
๋๋ค.
\n๋ฐ๋ฌ: ๊ธฐ๋ฅ์ ์ธ ๋ฐ์ ๊ณผ ๊ณผ์ ์ ๋ปํฉ๋๋ค. ์ธ์ด, ์ด๋, ์ ์์ ์ํ๋ ๋ฐ๋ฌํ๋ ๊ฒ์
๋๋ค.
'
*/
var showdown = require('showdown'),
converter = new showdown.Converter({'tables':true,'strikethrough':true,'simpleLineBreaks':true}),
text = '***\r#### ์ฑ์ฅ๊ณผ ๋ฐ๋ฌ์ ๊ตฌ๋ถ\r๋ง์ ๋ถ๋ค์ด ์ฑ์ฅ๊ณผ ๋ฐ๋ฌ์ด๋ผ๋ ์ฉ์ด๋ฅผ ํผ์ฉํ๊ณ ์์ต๋๋ค. ์ํ์ ์ผ๋ก ์ฑ์ฅ๊ณผ ๋ฐ๋ฌ์ ์๋์ ๊ฐ์ด ๊ตฌ๋ถํ๊ณ ์์ต๋๋ค.\r์ฑ์ฅ: ์์ ์ผ๋ก ์ฆ๊ฐํ๋ ๊ณผ์ ์ ๋ปํฉ๋๋ค. ํค, ์ฒด์ค์ด ์ฑ์ฅ์ ๋ํ๋ด๋ ์งํ์
๋๋ค.\r๋ฐ๋ฌ: ๊ธฐ๋ฅ์ ์ธ ๋ฐ์ ๊ณผ ๊ณผ์ ์ ๋ปํฉ๋๋ค. ์ธ์ด, ์ด๋, ์ ์์ ์ํ๋ ๋ฐ๋ฌํ๋ ๊ฒ์
๋๋ค.\r***\r',
html = converter.makeHtml(text);
/*
'
\n์ฑ์ฅ๊ณผ ๋ฐ๋ฌ์ ๊ตฌ๋ถ
\n๋ง์ ๋ถ๋ค์ด ์ฑ์ฅ๊ณผ ๋ฐ๋ฌ์ด๋ผ๋ ์ฉ์ด๋ฅผ ํผ์ฉํ๊ณ ์์ต๋๋ค. ์ํ์ ์ผ๋ก ์ฑ์ฅ๊ณผ ๋ฐ๋ฌ์ ์๋์ ๊ฐ์ด ๊ตฌ๋ถํ๊ณ ์์ต๋๋ค.
\n์ฑ์ฅ: ์์ ์ผ๋ก ์ฆ๊ฐํ๋ ๊ณผ์ ์ ๋ปํฉ๋๋ค. ํค, ์ฒด์ค์ด ์ฑ์ฅ์ ๋ํ๋ด๋ ์งํ์
๋๋ค.
\n๋ฐ๋ฌ: ๊ธฐ๋ฅ์ ์ธ ๋ฐ์ ๊ณผ ๊ณผ์ ์ ๋ปํฉ๋๋ค. ์ธ์ด, ์ด๋, ์ ์์ ์ํ๋ ๋ฐ๋ฌํ๋ ๊ฒ์
๋๋ค.
\n
'
*/
(์ฃ์กํฉ๋๋ค. ์บก์ถฐ๋ฅผ ๋ชปํด์...)
์ ์์ ์ด๋ผ๋ฉด ์๋์๊ฐ์ด, ์์๋์ ๊ฐ๋ก์ค๊ณผ ๋ณธ๋ฌธ์ด ์ถ๋ ฅ๋์ผํฉ๋๋ค๋ง,
ย
์ด๋ ๊ฒ ๋ณด์ฌ์ผ ํ๋ ๊ฒ์ด ์๋ ์ค์ด ์ถ๋ ฅ์ด ์๋๋ฉด์ ์ ๋ฌธ์ฅ์ ์คํ์ผ์ด ๋ง๊ฐ์ง๋๋ค.
์ด๋ ๊ฒ ๋ณด์ด๊ฒ ๋๋ ํ์์ ๋ฐ๊ฒฌํ์ต๋๋ค.
--- ์์ ๋น์ค์ด ์์ผ๋ฉด ๋ฐ๋ก ์ ๋ฌธ์ฅ์ <h2>ํ๊ทธ๊ฐ ์กํ๋ฒ๋ฆฝ๋๋ค. ๊ทธ๋์ --- ๋์ *** ๋ฅผ ์ฐ๊ฑฐ๋, --- ์์ ๋ฐ๋์ ๋น ์ค์ ํ๋ ๋ง๋ค์ผ์ ์ผ ํฉ๋๋ค.