簡體   English   中英

Python markdown邊緣情況:/ * * /

[英]Python markdown edge case: /* */

有沒有辦法讓Python解釋Markdown的方式與在stackoverflow上解釋的方式相同:

這是C注釋:/ * * / tada!

和在github上? https://gist.github.com/jason-s/fc81280dc6108f9ec3a8

Python的markdown模塊將* *解釋為斜體:

>>> import markdown
>>> markdown.markdown('This is a C comment: /* */ tada!')
u'<p>This is a C comment: /<em> </em>/ tada!</p>'

Babelmark 2顯示了其中的一些差異。看起來markdown語法的解釋不同。)

/* */語法不是標准的Markdown。 實際上, 語法規則中根本沒有提到它。 因此,在不同的Markdown實現中不太可能一致地處理它。

如果它是C注釋,則它是“代碼”,應該這樣標記。 在代碼塊中或使用內嵌代碼反引號( `/* */` )。 如對OP的評論中所述,如果您確實不希望將其標記為代碼,也可以使用反斜杠將其轉義。 就個人而言,我會指示作者修復他們的文檔(無論解析器行為如何)。

實際上,確實忽略它的Markdown解析器是無意中這樣做的。 為了避免匹配一些不應該被解釋為重點的邊緣情況,它們需要在開號星號之前(但不在其后)加上單詞邊界,而在閉號星號之后(但不在其之前)需要考慮單詞邊界。作為重點。 因為C注釋在開始的星號前有一個斜杠(及其后有一個空格),而在結束的星號后有一個斜杠(及其前有一個空格),因此某些解析器不會將其視為重點。 我懷疑您會發現那些相同的解析器無法識別一些邊緣情況作為應有的重點。 由於語法規則在這些極端情況下保持沉默,因此每種實現都會使它們略有不同。 我什至可以說,沒有將重點視為重點的實現在這里可能是錯誤的。 但這不是辯論的地方。

也就是說,您使用的是Python-Markdown,它具有完善的Extension API 如果現有的第三方擴展名尚不存在(請參閱下文),則可以創建自己的 擴展名 您可以添加自己的模式以專門匹配C注釋,並根據需要進行處理。 或者,您可以覆蓋解析器對強調的默認處理,並使它與您想要的行為的某些其他實現匹配。

實際上, BetterEm擴展程序(出於某種原因不在第三方擴展程序列表中)可能會在以后執行,並為您提供所需的行為。 不幸的是,它不是單獨提供的,而是作為包含多個擴展名的較大軟件包的一部分提供的。 當然,您只需要使用一個。 要使其正常工作,您需要安裝它。 不幸的是,它似乎沒有托管在PyPI上,因此您必須直接從GitHub下載它。 以下命令應一次性下載並安裝:

pip install https://github.com/facelessuser/pymdown-extensions/archive/master.zip

成功安裝后,只需在Python中執行以下操作:

>>> import markdown
>>> html = markdown.markdown(yourtext, extensions=['pymdownx.betterem'])

或從命令行:

python -m markdown -x 'pymdownx.betterem' yourinputfile.md > output.html

注意:我尚未測試BetterEm擴展。 它可能會或可能不會給您想要的行為。 根據文檔,“行為在感覺上將與GFM的粗體和斜體非常相似(但不一定精確)。”

好吧,這很丑陋,但是這個Markdown后處理補丁似乎可以滿足我的要求。

>>> import markdown
>>> mdtext = 'This is a C comment: /* */ tada!'
>>> mdhtml = markdown.markdown(mdtext)
>>> mdhtml
u'<p>This is a C comment: /<em> </em>/ tada!</p>'
>>> import re
>>> mdccommentre = re.compile('/<em>( | .* )</em>/')
>>> mdccommentre.sub('/*\\1*/',mdhtml)
u'<p>This is a C comment: /* */ tada!</p>'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM