나만의 Markdown 변환기 만들기(새로운 기능 포함) - 1부

안녕하세요 D
이것은 how to make your own Markdown parser에 대한 간단한 게시물입니다. 2부에서는 멋진 마크다운 파서/기능을 만들 것입니다.

Markdown 변환기 작동 방식




우리는 게시물의이 부분에서 간단한 것을 잘 알고 있습니다 (기본 사항, 두 번째 부분 준비)



1- 제목
2- 이미지 포함
3- 링크


제목 #



큰 글꼴로 제목을 # 씩 추가할 수 있습니다.


  • HTML로 변환

  • 첫째: 줄의 첫 번째 단어( # )를 가져오고 by space을 세고 # 태그에 #의 수를 추가합니다. 예를 들어<h> ### Hello으로 변환됩니다.


  • 코드

  • 
    data = '### Hello'
    
    def geth(txt):
        c = txt.split(' ')[0].count('#')
        if c == 0 or c > 6:
            return txt
        else:
            v = f'<h{c}>{"".join(txt.split(" ")[1:])}</h{c}>'
            return v
    
    
    results = geth(data)
    print(results)
    


    이미지/링크 포함


    <h3>Hello</h3>까지 이미지를 추가할 수 있습니다.
  • HTML로 변환![ALT TEXT](IMAGE LINK)의 콘텐츠를 가져오고 [] 태그의 alt 변수에 추가합니다. <img>과 동일하지만 () 변수에 추가합니다. 링크가 있는 것과 동일하지만 src 전에 !을 제거해야 합니다
  • []
    슬프게도 이것을 파싱하려면 Regex가 필요합니다 :)



    Regex는 배우기에 너무 게을러서(또는 코드에 갇혀 있을 때 배우기 때문에) 많은 프로그래머(나 같은)에게 무서운 것입니다.




    여기서 우리가 사용할 정규식은 <a href=LINK>NAME</a>입니다.


  • 코드

  • import re
    def getlnk(txt):
        sub = ''
        r = re.search(r'\[[^\]]*\](.*?)\s*("(?:.*[^"])")?\s*\)',txt)
        if r:
            c = r.group()
            # get the content of []
            name = re.findall(r'!\[(.*?)\](|. .)[(].*[)]',c)
            # get the content of ()
            link = re.findall(r'[(].*[)]',c)[0]
            link = link.replace(link[0],'').replace(link[-1],'')
            # add the link and name
            sub += f'<a href="{link}">{name}</a>'
        return sub
    
    # like getlnk function but with ! and <img> Tag
    def getimg(txt):
        sub = ''
        r = re.search(r'!\[[^\]]*\](.*?)\s*("(?:.*[^"])")?\s*\)',txt)
        if r:
            c = r.group()
            alt = re.findall(r'!\[(.*?)\](|. .)[(].*[)]',c)
            link = re.findall(r'[(].*[)]',c)[0]
            link = link.replace(link[0],'').replace(link[-1],'')
            sub += f"<img src='{link}' alt='{alt[0][0]}' />"
        return sub
    
    
    
    print(getlnk('[Google](http://google.com)'))
    print(getimg('![Google Logo](https://upload.wikimedia.org/wikipedia/commons/thumb/2/2f/Google_2015_logo.svg/1280px-Google_2015_logo.svg.png)'))
    
    
    # Results
    # <a href="http://google.com">Google</a>
    # <img src="https%3A//upload.wikimedia.org/wikipedia/commons/thumb/2/2f/Google_2015_logo.svg/1280px-Google_2015_logo.svg.png" alt="Google Logo" />
    



    2부에서 만나요



    안녕 :D

    좋은 웹페이지 즐겨찾기