ZuriHac: ืชืจื’ื•ืœ ืชื›ื ื•ืช ืคื•ื ืงืฆื™ื•ื ืœื™

ื‘ื™ื•ื ื™ ื”ืฉื ื”, ื‘ืขื™ื™ืจื” ื”ืฉื•ื•ื™ืฆืจื™ืช ื”ืงื˜ื ื” Rapperswil, ื ืงืจื ืื™ืจื•ืข ZuriHac. ื”ืคืขื ื”ื•ื ืจื™ื›ื– ื™ื•ืชืจ ืžื—ืžืฉ ืžืื•ืช ืื•ื”ื‘ื™ ื”ืืกืงืœ, ืžืžืชื—ื™ืœื™ื ื•ืขื“ ื”ืื‘ื•ืช ื”ืžื™ื™ืกื“ื™ื ืฉืœ ื”ืฉืคื”. ืœืžืจื•ืช ืฉื”ืžืืจื’ื ื™ื ืงื•ืจืื™ื ืœืื™ืจื•ืข ื”ื–ื” ื”ืืงืชื•ืŸ, ื–ื” ืœื ื›ื ืก ืื• ื”ืืงืชื•ืŸ ื‘ืžื•ื‘ืŸ ื”ืงืœืืกื™. ื”ืคื•ืจืžื˜ ืฉืœื• ืฉื•ื ื” ืžืžืชื›ื ืชื™ื ืžืกื•ืจืชื™ื™ื. ืœืžื“ื ื• ืขืœ ZuriHac ื‘ืžื–ืœ, ื”ืฉืชืชืคื ื• ื‘ื•, ื•ื›ืขืช ืื ื• ืจื•ืื™ื ื‘ื—ื•ื‘ืชื ื• ืœืกืคืจ ืขืœ ื”ืžืžืฆื ื”ื—ืจื™ื’!

ZuriHac: ืชืจื’ื•ืœ ืชื›ื ื•ืช ืคื•ื ืงืฆื™ื•ื ืœื™

ืื•ื“ื•ืช

ืžืืžืจ ื–ื” ื”ื•ื›ืŸ ืขืœ ื™ื“ื™ ืฉื ื™ ืกื˜ื•ื“ื ื˜ื™ื ืฉื ื” ื’' ื‘ืชื›ื ื™ืช "ืžืชืžื˜ื™ืงื” ืฉื™ืžื•ืฉื™ืช ื•ืื™ื ืคื•ืจืžื˜ื™ืงื”" ื‘ื‘ื™ืช ื”ืกืคืจ ื”ื’ื‘ื•ื” ืœื›ืœื›ืœื” ืฉืœ ืื•ื ื™ื‘ืจืกื™ื˜ืช ื”ืžื—ืงืจ ื”ืœืื•ืžื™ืช - ืกื ื˜ ืคื˜ืจืกื‘ื•ืจื’: ื•ืกื™ืœื™ ืืœืคืจื•ื‘ ื•ืืœื™ื–ืื‘ื˜ื” ื•ืกื™ืœื ืงื•. ื”ืชืฉื•ืงื” ืœืชื›ื ื•ืช ืคื•ื ืงืฆื™ื•ื ืœื™ ืขื‘ื•ืจ ืฉื ื™ื ื• ื”ื—ืœื” ื‘ืกื“ืจืช ื”ืจืฆืื•ืช ืฉืœ D.N. Moskvin ื‘ืฉื ื” ื”ืฉื ื™ื™ื” ืœืื•ื ื™ื‘ืจืกื™ื˜ื”. ื•ืกื™ืœื™ ืžืฉืชืชืฃ ื›ืขืช ื‘ืชื•ื›ื ื™ืช Google Summer of Code, ื‘ืžืกื’ืจืชื” ื”ื•ื ืžื™ื™ืฉื ื’ืจืคื™ื ืืœื’ื‘ืจื™ื™ื ื‘ื”ืกืงืœ ื‘ื”ื ื—ื™ื™ืช ืฆื•ื•ืช ื”ืคืจื•ื™ืงื˜ ืืฆื”. Elizaveta ื™ื™ืฉืžื” ืืช ืžื™ื•ืžื ื•ื™ื•ืช ื”ืชื›ื ื•ืช ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉื ืจื›ืฉื• ื‘ืขื‘ื•ื“ื” ื‘ืงื•ืจืก ืฉื”ื•ืงื“ืฉื” ืœื™ื™ืฉื•ื ื”ืืœื’ื•ืจื™ืชื ื ื’ื“ ื”ืื™ื—ื•ื“ ืขื ื™ื™ืฉื•ื ืœืื—ืจ ืžื›ืŸ ื‘ืชื•ืจืช ื”ื˜ื™ืคื•ืกื™ื.

ืคื•ืจืžื˜ ื”ืื™ืจื•ืข

ืงื”ืœ ื”ื™ืขื“ ื”ื•ื ื‘ืขืœื™ื ืฉืœ ืคืจื•ื™ืงื˜ื™ื ื‘ืงื•ื“ ืคืชื•ื—, ืžืชื›ื ืชื™ื ืฉืจื•ืฆื™ื ืœื”ืฉืชืชืฃ ื‘ืคื™ืชื•ื— ืฉืœื”ื, ื—ื•ืงืจื™ ืชื›ื ื•ืช ืคื•ื ืงืฆื™ื•ื ืœื™ ื•ืื ืฉื™ื ืคืฉื•ื˜ ื ืœื”ื‘ื™ื ืžื”ืืกืงืœ. ื”ืฉื ื”, ืžืคืชื—ื™ื ืžื™ื•ืชืจ ืžื—ืžื™ืฉื™ื ืคืจื•ื™ืงื˜ื™ื ืฉืœ Haskell ื‘ืงื•ื“ ืคืชื•ื— ืžื›ืœ ืจื—ื‘ื™ ื”ืขื•ืœื ื”ืชืืกืคื• ื‘ืžืงื•ื - HSR Hochschule fรผr Technik Rapperswil - ื›ื“ื™ ืœื“ื‘ืจ ืขืœ ื”ืžื•ืฆืจื™ื ืฉืœื”ื ื•ืœืขื•ืจืจ ืื ืฉื™ื ื˜ืจื™ื™ื ืœื”ืชืขื ื™ื™ืŸ ื‘ืคื™ืชื•ื— ืฉืœื”ื.

ZuriHac: ืชืจื’ื•ืœ ืชื›ื ื•ืช ืคื•ื ืงืฆื™ื•ื ืœื™

ืชืžื•ื ื” ืžื˜ื•ื•ื™ื˜ืจ ZuriHac

ื”ืชื›ื ื™ืช ืคืฉื•ื˜ื” ืžืื•ื“: ืขืœื™ื›ื ืœื›ืชื•ื‘ ื›ืžื” ื”ืฆืขื•ืช ืขืœ ื”ืคืจื•ื™ืงื˜ ืฉืœื›ื ืžืจืืฉ ื•ืœืฉืœื•ื— ืื•ืชืŸ ืœืžืืจื’ื ื™ื, ืฉื™ืคืจืกืžื• ืžื™ื“ืข ืขืœ ื”ืคืจื•ื™ืงื˜ ืฉืœื›ื ื‘ืขืžื•ื“ ื”ืื™ืจื•ืข. ื‘ื ื•ืกืฃ, ื‘ื™ื•ื ื”ืจืืฉื•ืŸ ื™ืฉ ืœื›ื•ืชื‘ื™ ื”ืคืจื•ื™ืงื˜ื™ื ืฉืœื•ืฉื™ื ืฉื ื™ื•ืช ืœืกืคืจ ื‘ืงืฆืจื” ืžืื•ื“ ืžื”ื‘ืžื” ืžื” ื”ื ืขื•ืฉื™ื ื•ืžื” ืฆืจื™ืš ืœืขืฉื•ืช. ืœืื—ืจ ืžื›ืŸ ืžืชืขื ื™ื™ื ื™ื ืžื—ืคืฉื™ื ืืช ื”ืžื—ื‘ืจื™ื ื•ืฉื•ืืœื™ื ื‘ืคื™ืจื•ื˜ ืขืœ ื”ืžืฉื™ืžื•ืช.

ืขื“ื™ื™ืŸ ืื™ืŸ ืœื ื• ืคืจื•ื™ืงื˜ื™ื ืคืชื•ื—ื™ื ืžืฉืœื ื•, ืื‘ืœ ืื ื—ื ื• ืžืื•ื“ ืจื•ืฆื™ื ืœืชืจื•ื ืœืคืจื•ื™ืงื˜ื™ื ื”ืงื™ื™ืžื™ื, ืื– ื ืจืฉืžื ื• ื›ืžืฉืชืชืคื™ื ืงื‘ื•ืขื™ื. ื‘ืžื”ืœืš ืฉืœื•ืฉื” ื™ืžื™ื ืขื‘ื“ื ื• ืขื ืฉืชื™ ืงื‘ื•ืฆื•ืช ืฉืœ ืžืคืชื—ื™ื. ืžืกืชื‘ืจ ืฉืœื™ืžื•ื“ ืžืฉื•ืชืฃ ืฉืœ ืงื•ื“ ื•ืชืงืฉื•ืจืช ื—ื™ื” ื”ื•ืคืš ืืช ื”ืื™ื ื˜ืจืืงืฆื™ื” ื‘ื™ืŸ ืžื—ื‘ืจื™ ื”ืคืจื•ื™ืงื˜ ืœืชื•ืจืžื™ื ืœืคืจื•ื“ื•ืงื˜ื™ื‘ื™ ืžืื•ื“ - ื‘-ZuriHac ื”ืฆืœื—ื ื• ืœื”ื‘ื™ืŸ ืชื—ื•ืžื™ื ืฉื”ื™ื• ื—ื“ืฉื™ื ืœื ื• ื•ื”ืฆืœื—ื ื• ืœืขื–ื•ืจ ืœืฉื ื™ ืฆื•ื•ืชื™ื ืฉื•ื ื™ื ืœื—ืœื•ื˜ื™ืŸ, ืชื•ืš ื”ืฉืœืžืช ืžืฉื™ืžื” ืื—ืช ื‘ื›ืœ ืื—ื“ ืžื”ื. ืฉืœ ื”ืคืจื•ื™ืงื˜ื™ื.

ื‘ื ื•ืกืฃ ืœืชืจื’ื•ืœ ืจื‘ ืขืจืš, ื ื™ืชื ื• ื‘ZuriHac ื’ื ืžืกืคืจ ื”ืจืฆืื•ืช ื•ื›ื™ืชื•ืช ืืžืŸ. ืื ื• ื–ื•ื›ืจื™ื ื‘ืžื™ื•ื—ื“ ืฉืชื™ ื”ืจืฆืื•ืช. ื‘ืจืืฉื•ืŸ ืฉื‘ื”ื, ืื ื“ืจื™ื™ ืžื•ืงื”ื•ื‘ ืžืื•ื ื™ื‘ืจืกื™ื˜ืช ื ื™ื•ืงืืกืœ ื“ื™ื‘ืจ ืขืœ ืคื•ื ืงืฆื™ื•ืช ืืคืœื™ืงื˜ื™ื‘ื™ื•ืช ืกืœืงื˜ื™ื‘ื™ื•ืช - ืžื—ืœืงื” ืฉืœ ื˜ื™ืคื•ืกื™ื ืฉืืžื•ืจื™ื ืœื”ืคื•ืš ืœื‘ื™ื ื™ื™ื ื‘ื™ืŸ ืคื•ื ืงืฆื™ื•ืช ืืคืœื™ืงื˜ื™ื‘ื™ื•ืช ื•ืžื•ื ืื“ื•ืช. ื‘ื”ืจืฆืื” ืื—ืจืช, ืื—ื“ ืžืžื™ื™ืกื“ื™ Haskell, ืกื™ื™ืžื•ืŸ ืคื™ื™ื˜ื•ืŸ ื’'ื•ื ืก, ื“ื™ื‘ืจ ืขืœ ื”ืื•ืคืŸ ืฉื‘ื• ืžืกืงื ื•ืช ืกื•ื’ ืขื•ื‘ื“ ื‘ืžื”ื“ืจ GHC.

ZuriHac: ืชืจื’ื•ืœ ืชื›ื ื•ืช ืคื•ื ืงืฆื™ื•ื ืœื™

ื”ืจืฆืื” ืžืืช ืกื™ื™ืžื•ืŸ ืคื™ื™ื˜ื•ืŸ ื’'ื•ื ืก. ืชืžื•ื ื” ืžื˜ื•ื•ื™ื˜ืจ ZuriHac

ื›ื™ืชื•ืช ื”ืืžืŸ ืฉื”ืชืงื™ื™ืžื• ื‘ืžื”ืœืš ื”ื”ืืงืชื•ืŸ ื—ื•ืœืงื• ืœืฉืœื•ืฉ ืงื˜ื’ื•ืจื™ื•ืช ื‘ื”ืชืื ืœืจืžืช ื”ืื™ืžื•ืŸ ืฉืœ ื”ืžืฉืชืชืคื™ื. ื’ื ื”ืžืฉื™ืžื•ืช ืฉื”ื•ืฆืขื• ืœืžืฉืชืชืคื™ื ืฉื”ืฆื˜ืจืคื• ืœืคื™ืชื•ื— ืคืจื•ื™ืงื˜ื™ื ืกื•ืžื ื• ื‘ืจืžืช ืงื•ืฉื™. ื”ืงื”ื™ืœื” ื”ืงื˜ื ื” ืืš ื”ื™ื“ื™ื“ื•ืชื™ืช ืฉืœ ืžืชื›ื ืชื™ื ืคื•ื ืงืฆื™ื•ื ืœื™ื™ื ืžื‘ืจื›ืช ื‘ืฉืžื—ื” ืžืฆื˜ืจืคื™ื ื—ื“ืฉื™ื ืœืฉื•ืจื•ืชื™ื”. ืื•ืœื ื›ื“ื™ ืœื”ื‘ื™ืŸ ืืช ื”ื”ืจืฆืื•ืช ืฉืœ ืื ื“ืจื™ื™ ืžื•ื›ื•ื‘ ื•ืกื™ื™ืžื•ืŸ ืคื™ื™ื˜ื•ืŸ ื’'ื•ื ืก, ืงื•ืจืก ื”ืชื›ื ื•ืช ื”ืคื•ื ืงืฆื™ื•ื ืœื™ ืฉืœืžื“ื ื• ื‘ืื•ื ื™ื‘ืจืกื™ื˜ื” ื”ื™ื” ืžืื•ื“ ืฉื™ืžื•ืฉื™.

ื”ื”ืจืฉืžื” ืœืื™ืจื•ืข ื”ื™ื ื‘ื—ื™ื ื ื”ืŸ ืœืžืฉืชืชืคื™ื ืงื‘ื•ืขื™ื ื•ื”ืŸ ืœื›ื•ืชื‘ื™ ื”ืคืจื•ื™ืงื˜. ื”ื’ืฉื ื• ื‘ืงืฉื•ืช ืœื”ืฉืชืชืคื•ืช ื‘ืชื—ื™ืœืช ื™ื•ื ื™, ื•ืœืื—ืจ ืžื›ืŸ ื”ื•ืขื‘ืจื ื• ื‘ืžื”ื™ืจื•ืช ืžืจืฉื™ืžืช ื”ื”ืžืชื ื” ืœืจืฉื™ืžืช ื”ืžืฉืชืชืคื™ื ื”ืžืื•ืฉืจื™ื.

ื•ืขื›ืฉื™ื• ื ื“ื‘ืจ ืขืœ ื”ืคืจื•ื™ืงื˜ื™ื ื‘ืคื™ืชื•ื— ื‘ื”ื ืœืงื—ื ื• ื—ืœืง.

ืคื ื“ื•ืง

ืคื ื“ื•ืง ื”ื•ื ืžืžื™ืจ ืื•ื ื™ื‘ืจืกืœื™ ืฉืœ ืžืกืžื›ื™ ื˜ืงืกื˜, ืœืžืขืฉื”, ืžื›ืœ ืคื•ืจืžื˜ ืœื›ืœ ืคื•ืจืžื˜. ืœื“ื•ื’ืžื”, ืž-docx ืœ-pdf, ืื• ืž-Markdown ืœ-MediaWiki. ืžื—ื‘ืจื•, ื’'ื•ืŸ ืžืงืคืจืœืŸ, ื”ื•ื ืคืจื•ืคืกื•ืจ ืœืคื™ืœื•ืกื•ืคื™ื” ื‘ืื•ื ื™ื‘ืจืกื™ื˜ืช ืงืœื™ืคื•ืจื ื™ื”, ื‘ืจืงืœื™. ื‘ืื•ืคืŸ ื›ืœืœื™, ืคื ื“ื•ืง ื“ื™ ืžืคื•ืจืกื, ื•ื›ืžื” ืžื—ื‘ืจื™ื ื• ื”ื•ืคืชืขื• ื›ืฉื ื•ื“ืข ืœื”ื ืฉืคื ื“ื•ืง ื ื›ืชื‘ ื‘ื”ืืกืงืœ.

ZuriHac: ืชืจื’ื•ืœ ืชื›ื ื•ืช ืคื•ื ืงืฆื™ื•ื ืœื™

ืจืฉื™ืžืช ืคื•ืจืžื˜ื™ื ืฉืœ ืžืกืžื›ื™ื ื”ื ืชืžื›ื™ื ืขืœ ื™ื“ื™ Pandoc. ื‘ืืชืจ ื™ืฉ ื’ื ื’ืจืฃ ืฉืœื, ืื‘ืœ ื”ืชืžื•ื ื” ื”ื–ื• ืœื ืžืชืื™ืžื” ืœื›ืชื‘ื”.

ื›ืžื•ื‘ืŸ, Pandoc ืœื ืžืกืคืงืช ื”ืžืจื” ื™ืฉื™ืจื” ืœื›ืœ ื–ื•ื’ ืคื•ืจืžื˜ื™ื. ื›ื“ื™ ืœืชืžื•ืš ื‘ืžื’ื•ื•ืŸ ื›ื” ืจื—ื‘ ืฉืœ ื˜ืจื ืกืคื•ืจืžืฆื™ื•ืช, ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ืคืชืจื•ืŸ ืืจื›ื™ื˜ืงื˜ื•ื ื™ ืกื˜ื ื“ืจื˜ื™: ืจืืฉื™ืช, ื”ืžืกืžืš ื›ื•ืœื• ืžืชื•ืจื’ื ืœื™ื™ืฆื•ื’ ื‘ื™ื ื™ื™ื ืคื ื™ืžื™ ืžื™ื•ื—ื“, ื•ืœืื—ืจ ืžื›ืŸ ื ื•ืฆืจ ืžืกืžืš ื‘ืคื•ืจืžื˜ ืฉื•ื ื” ืžื”ื™ื™ืฆื•ื’ ื”ืคื ื™ืžื™ ื”ื–ื”. ื”ืžืคืชื—ื™ื ืžื›ื ื™ื ืืช ื”ื™ื™ืฆื•ื’ ื”ืคื ื™ืžื™ "AST", ืืฉืจ ืจืืฉื™ ืชื™ื‘ื•ืช ืฉืœ Abstract Syntax Tree, ืื• ืขืฅ ืชื—ื‘ื™ืจ ืžื•ืคืฉื˜. ืืชื” ื™ื›ื•ืœ ืœื”ืกืชื›ืœ ืขืœ ื™ื™ืฆื•ื’ ื”ื‘ื™ื ื™ื™ื ื‘ืคืฉื˜ื•ืช ืจื‘ื”: ื›ืœ ืžื” ืฉืืชื” ืฆืจื™ืš ืœืขืฉื•ืช ื”ื•ื ืœื”ื’ื“ื™ืจ ืืช ืคื•ืจืžื˜ ื”ืคืœื˜ ืœ"ืžืงื•ืจื™"

$ cat example.html
<h1>Hello, World!</h1>

$ pandoc -f html -t native example.html
[Header 1 ("hello-world",[],[]) [Str "Hello,",Space,Str "World!"]]

ืงื•ืจืื™ื ืฉืขื‘ื“ื• ืขื Haskell ืœืคื—ื•ืช ืงืฆืช ื™ื›ื•ืœื™ื ื›ื‘ืจ ืœื”ื ื™ื— ืžื”ื“ื•ื’ืžื” ื”ืงื˜ื ื” ื”ื–ื• ืฉืคื ื“ื•ืง ื›ืชื•ื‘ ื‘ื”ืืกืงืœ: ื”ืคืœื˜ ืฉืœ ืคืงื•ื“ื” ื–ื• ื”ื•ื ื™ื™ืฆื•ื’ ืžื—ืจื•ื–ืช ืฉืœ ื”ืžื‘ื ื™ื ื”ืคื ื™ืžื™ื™ื ืฉืœ Pandoc, ืฉื ื•ืฆืจื• ื‘ื“ื•ืžื” ืœืื•ืคืŸ ืฉื‘ื• ื–ื” ื ืขืฉื” ื‘ื“ืจืš ื›ืœืœ. ื‘- Haskell, ืœืžืฉืœ, ื‘ืกืคืจื™ื™ื” ื”ืกื˜ื ื“ืจื˜ื™ืช.

ืื–, ื›ืืŸ ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ืฉื”ื™ื™ืฆื•ื’ ื”ืคื ื™ืžื™ ื”ื•ื ืžื‘ื ื” ืจืงื•ืจืกื™ื‘ื™, ืฉื‘ื›ืœ ืฆื•ืžืช ืคื ื™ืžื™ ื™ืฉ ืจืฉื™ืžื” ืฉืœื•. ืœื“ื•ื’ืžื”, ื‘ืจืžื” ื”ืขืœื™ื•ื ื” ื™ืฉ ืจืฉื™ืžื” ืฉืœ ืืœืžื ื˜ ืื—ื“ - ื›ื•ืชืจืช ื”ืจืžื” ื”ืจืืฉื•ื ื” ืขื ื”ืชื›ื•ื ื•ืช "hello-world",[],[]. ื‘ืชื•ืš ื›ื•ืชืจืช ื–ื• ืžื•ืกืชืจืช ืจืฉื™ืžื” ืฉืœ ื”ืžื—ืจื•ื–ืช "Hello", ื•ืื—ืจื™ื” ืจื•ื•ื— ื•ื”ืžื—ืจื•ื–ืช "World!"

ื›ืคื™ ืฉืืชื” ื™ื›ื•ืœ ืœืจืื•ืช, ื”ื™ื™ืฆื•ื’ ื”ืคื ื™ืžื™ ืื™ื ื• ืฉื•ื ื” ื‘ื”ืจื‘ื” ืž-HTML. ื–ื”ื• ืขืฅ ืฉื‘ื• ื›ืœ ืฆื•ืžืช ืคื ื™ืžื™ ืžืกืคืง ืžื™ื“ืข ืขืœ ื”ืขื™ืฆื•ื‘ ืฉืœ ืฆืืฆืื™ื•, ื•ื”ืขืœื™ื ืžื›ื™ืœื™ื ืืช ื”ืชื•ื›ืŸ ื”ืืžื™ืชื™ ืฉืœ ื”ืžืกืžืš.

ืื ื ืจื“ ืœืจืžืช ื”ื™ื™ืฉื•ื, ืกื•ื’ ื”ื ืชื•ื ื™ื ืฉืœ ื”ืžืกืžืš ื›ื•ืœื• ืžื•ื’ื“ืจ ื›ืš:

data Pandoc = Pandoc Meta [Block]

ื›ืืŸ ื‘ืœื•ืง ื”ื•ื ื‘ื“ื™ื•ืง ื”ืงื•ื“ืงื•ื“ื™ื ื”ืคื ื™ืžื™ื™ื ืฉื”ื•ื–ื›ืจื• ืœืขื™ืœ, ื•ืžื˜ื” ื”ื™ื ืžื˜ื-ืื™ื ืคื•ืจืžืฆื™ื” ืขืœ ื”ืžืกืžืš, ื›ื’ื•ืŸ ื›ื•ืชืจืช, ืชืืจื™ืš ื™ืฆื™ืจื”, ืžื—ื‘ืจื™ื - ื–ื” ืฉื•ื ื” ืขื‘ื•ืจ ืคื•ืจืžื˜ื™ื ืฉื•ื ื™ื, ื•ืคื ื“ื•ืง ืžื ืกื”, ืื ืืคืฉืจ, ืœืฉืžืจ ืžื™ื“ืข ื›ื–ื” ื‘ืขืช ืชืจื’ื•ื ืžืคื•ืจืžื˜ ืœ ืคื•ึผืจืžึธื˜.

ื›ืžืขื˜ ื›ืœ ื”ื‘ื ืื™ื ืžืกื•ื’ Block - ืœืžืฉืœ Header ืื• Para (ืคื™ืกืงื”) - ืœื•ืงื—ื™ื ืชื›ื•ื ื•ืช ื•ืจืฉื™ืžืช ืงื•ื“ืงื•ื“ื™ื ื‘ืจืžื” ื ืžื•ื›ื” ื™ื•ืชืจ ื›ืืจื’ื•ืžื ื˜ื™ื - Inline, ื›ื›ืœืœ. ืœื“ื•ื’ืžื”, Space ืื• Str ื”ื ื‘ื ืื™ื ืžืกื•ื’ Inline, ื•ื’ื ืชื’ ื”-HTML ื”ื•ืคืš ืœ-Inline ื”ืžื™ื•ื—ื“ ืฉืœื•. ืื™ื ื ื• ืจื•ืื™ื ื˜ืขื ืœืกืคืง ื”ื’ื“ืจื” ืžืœืื” ืฉืœ ื”ืกื•ื’ื™ื ื”ืœืœื•, ืืš ืฉื™ืžื• ืœื‘ ืฉื ื™ืชืŸ ืœืžืฆื•ื ืื•ืชื” ื›ืืŸ ื›ืืŸ.

ืžืขื ื™ื™ืŸ, ื”ืกื•ื’ Pandoc ื”ื•ื ืžื•ื ื•ืื™ื“. ื–ื” ืื•ืžืจ ืฉื™ืฉ ืกื•ื’ ืฉืœ ืžืกืžืš ืจื™ืง, ื•ืฉืืคืฉืจ ืœืขืจื•ื ืžืกืžื›ื™ื ื™ื—ื“. ื–ื” ื ื•ื— ืœืฉื™ืžื•ืฉ ื‘ืขืช ื›ืชื™ื‘ืช Readers - ื ื™ืชืŸ ืœืคืจืง ืžืกืžืš ืœื—ืœืงื™ื ื‘ืืžืฆืขื•ืช ืœื•ื’ื™ืงื” ืฉืจื™ืจื•ืชื™ืช, ืœื ืชื— ื›ืœ ืื—ื“ ื‘ื ืคืจื“, ื•ืื– ืœื—ื‘ืจ ื”ื›ืœ ืœืžืกืžืš ืื—ื“. ื‘ืžืงืจื” ื–ื”, ืžื˜ื-ืžื™ื“ืข ื™ื™ืืกืฃ ืžื›ืœ ื—ืœืงื™ ื”ืžืกืžืš ื‘ื‘ืช ืื—ืช.

ื‘ืขืช ื”ืžืจื”, ื ื ื™ื—, ืž-LaTeX ืœ-HTML, ืชื—ื™ืœื” ืžื•ื“ื•ืœ ืžื™ื•ื—ื“ ื‘ืฉื LaTeXReader ืžืžื™ืจ ืืช ืžืกืžืš ื”ืงืœื˜ ืœ-AST, ื•ืื– ืžื•ื“ื•ืœ ืื—ืจ ื‘ืฉื HTMLWriter ืžืžื™ืจ ืืช ื”-AST ืœ-HTML. ื”ื•ื“ื•ืช ืœืืจื›ื™ื˜ืงื˜ื•ืจื” ื–ื•, ืื™ืŸ ืฆื•ืจืš ืœื›ืชื•ื‘ ืžืกืคืจ ืจื™ื‘ื•ืขื™ ืฉืœ ื”ืžืจื•ืช - ืžืกืคื™ืง ืœื›ืชื•ื‘ Reader ื•-Writer ืขื‘ื•ืจ ื›ืœ ืคื•ืจืžื˜ ื—ื“ืฉ, ื•ื›ืœ ื–ื•ื’ื•ืช ื”ื”ืžืจื•ืช ื”ืืคืฉืจื™ื™ื ื™ืชืžื›ื• ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™.

ื‘ืจื•ืจ ืฉื’ื ืœืืจื›ื™ื˜ืงื˜ื•ืจื” ื›ื–ื• ื™ืฉ ืืช ื”ื—ืกืจื•ื ื•ืช ืฉืœื”, ืฉื—ื–ื• ื–ื” ืžื›ื‘ืจ ืขืœ ื™ื“ื™ ืžื•ืžื—ื™ื ื‘ืชื—ื•ื ืืจื›ื™ื˜ืงื˜ื•ืจืช ื”ืชื•ื›ื ื”. ื”ืžืฉืžืขื•ืชื™ืช ื‘ื™ื•ืชืจ ื”ื™ื ืขืœื•ืช ื‘ื™ืฆื•ืข ืฉื™ื ื•ื™ื™ื ื‘ืขืฅ ื”ืชื—ื‘ื™ืจ. ืื ื”ืฉื™ื ื•ื™ ืจืฆื™ื ื™ ืžืกืคื™ืง, ืชืฆื˜ืจืš ืœืฉื ื•ืช ืืช ื”ืงื•ื“ ื‘ื›ืœ ื”ืงื•ืจืื™ื ื•ื”ื›ื•ืชื‘ื™ื. ืœื“ื•ื’ืžื”, ืื—ื“ ื”ืืชื’ืจื™ื ื”ืขื•ืžื“ื™ื ื‘ืคื ื™ ืžืคืชื—ื™ Pandoc ื”ื•ื ืชืžื™ื›ื” ื‘ืคื•ืจืžื˜ื™ื ืžื•ืจื›ื‘ื™ื ืฉืœ ื˜ื‘ืœืื•ืช. ื›ืขืช Pandoc ื™ื›ื•ืœื” ืœื™ืฆื•ืจ ืจืง ื˜ื‘ืœืื•ืช ืคืฉื•ื˜ื•ืช ืžืื•ื“, ืขื ื›ื•ืชืจืช, ืขืžื•ื“ื•ืช ื•ืขืจืš ื‘ื›ืœ ืชื. ืœื“ื•ื’ืžื”, ืคืฉื•ื˜ ืชืชืขืœื ืžืชื›ื•ื ืช colspan ื‘-HTML. ืื—ืช ื”ืกื™ื‘ื•ืช ืœื”ืชื ื”ื’ื•ืช ื–ื• ื”ื™ื ื”ื™ืขื“ืจ ืกื›ืžื” ืžืื•ื—ื“ืช ืœื™ื™ืฆื•ื’ ื˜ื‘ืœืื•ืช ื‘ื›ืœ ื”ืคื•ืจืžื˜ื™ื ืื• ืœืคื—ื•ืช ืจื‘ื™ื - ื‘ื”ืชืื, ืœื ื‘ืจื•ืจ ื‘ืื™ื–ื• ืฆื•ืจื” ื™ืฉ ืœืื—ืกืŸ ืืช ื”ื˜ื‘ืœืื•ืช ื‘ื™ื™ืฆื•ื’ ื”ืคื ื™ืžื™. ืื‘ืœ ื’ื ืœืื—ืจ ื‘ื—ื™ืจืช ืชืฆื•ื’ื” ืกืคืฆื™ืคื™ืช, ืชืฆื˜ืจืš ืœืฉื ื•ืช ืœื—ืœื•ื˜ื™ืŸ ืืช ื›ืœ ื”ืงื•ืจืื™ื ื•ื”ื›ื•ืชื‘ื™ื ื”ืชื•ืžื›ื™ื ื‘ืขื‘ื•ื“ื” ืขื ื˜ื‘ืœืื•ืช.

ืฉืคืช Haskell ื ื‘ื—ืจื” ืœื ืจืง ื‘ื’ืœืœ ื”ืื”ื‘ื” ื”ื’ื“ื•ืœื” ืฉืœ ื”ืžื—ื‘ืจื™ื ืœืชื›ื ื•ืช ืคื•ื ืงืฆื™ื•ื ืœื™. Haskell ื™ื“ื•ืขื” ื‘ื™ื›ื•ืœื•ืช ืขื™ื‘ื•ื“ ื”ื˜ืงืกื˜ ื”ื ืจื—ื‘ื•ืช ืฉืœื”. ื“ื•ื’ืžื” ืื—ืช ื”ื™ื ื”ืกืคืจื™ื™ื” ืคืจืกืง ื”ื™ื ืกืคืจื™ื™ื” ื”ืžืฉืชืžืฉืช ื‘ืื•ืคืŸ ืคืขื™ืœ ื‘ืžื•ืฉื’ื™ื ืฉืœ ืชื›ื ื•ืช ืคื•ื ืงืฆื™ื•ื ืœื™ - ืžื•ื ื•ืื™ื“ื™ื, ืžื•ื ืื“ื•ืช, ืคื•ื ืงืฆื™ื•ืช ืืคืœื™ืงื˜ื™ื‘ื™ื•ืช ื•ืืœื˜ืจื ื˜ื™ื‘ื™ื•ืช - ื›ื“ื™ ืœื›ืชื•ื‘ ืžื ืชื—ื™ื ืฉืจื™ืจื•ืชื™ื™ื. ื ื™ืชืŸ ืœืจืื•ืช ืืช ืžืœื•ื ื”ืขื•ืฆืžื” ืฉืœ Parsec ื‘ ื“ื•ื’ืžื ืž- HaskellWiki, ืฉื ืžื ืชื— ืฉืœื ืฉืœ ืฉืคืช ืชื›ื ื•ืช ืฆื™ื•ื•ื™ืช ืคืฉื•ื˜ื” ืžื ื•ืชื—. ื›ืžื•ื‘ืŸ, Parsec ื ืžืฆื ื‘ืฉื™ืžื•ืฉ ืคืขื™ืœ ื’ื ื‘- Pandoc.

ืžืชื•ืืจ ื‘ืงืฆืจื”, ืžื•ื ืื“ื•ืช ืžืฉืžืฉื•ืช ืœื ื™ืชื•ื— ืจืฆื™ืฃ, ื›ืืฉืจ ื“ื‘ืจ ืื—ื“ ื‘ื ืงื•ื“ื, ื•ืื—ืจ ื›ืš ืื—ืจ. ืœื“ื•ื’ืžื”, ื‘ื“ื•ื’ืžื” ื–ื•:

whileParser :: Parser Stmt
whileParser = whiteSpace >> statement

ืงื•ื“ื ืฆืจื™ืš ืœืกืคื•ืจ ืืช ื”ืจื•ื•ื—, ื•ืื—ืจ ื›ืš ืืช ื”ื”ืฆื”ืจื” - ืฉื’ื ืœื” ื™ืฉ ืืช ืกื•ื’ Parser Stmt.

ืžืฉืชืžืฉื™ื ื‘ืคื•ื ืงื˜ื•ืจื™ื ื—ืœื•ืคื™ื™ื ืœื—ื–ืจื” ืœืื—ื•ืจ ืื ื”ื ื™ืชื•ื— ื ื›ืฉืœ. ืœื“ื•ื’ืžื”,

statement :: Parser Stmt
statement = parens statement <|> sequenceOfStmt

ื–ื” ืื•ืžืจ ืฉืืชื” ืฆืจื™ืš ืœื ืกื•ืช ืœืงืจื•ื ืืช ื”ื”ืฆื”ืจื” ื‘ืกื•ื’ืจื™ื™ื, ืื• ืœื ืกื•ืช ืœืงืจื•ื ื›ืžื” ืžืฉืคื˜ื™ื ื‘ืจืฆืฃ.

ืคื•ื ืงืฆื™ื•ืช ืืคืœื™ืงื˜ื™ื‘ื™ื•ืช ืžืฉืžืฉื•ืช ื‘ืขื™ืงืจ ื›ืงื™ืฆื•ืจื™ ื“ืจืš ืขื‘ื•ืจ ืžื•ื ืื•ืช. ืœื“ื•ื’ืžื”, ืชืŸ ืœืคื•ื ืงืฆื™ื” tok ืœืงืจื•ื ืืกื™ืžื•ืŸ ื›ืœืฉื”ื• (ื–ื•ื”ื™ ืคื•ื ืงืฆื™ื” ืืžื™ืชื™ืช ืž-LaTeXReader). ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื”ืฉื™ืœื•ื‘ ื”ื–ื”

const <$> tok <*> tok

ื–ื” ื™ืงืจื ืฉื ื™ ืืกื™ืžื•ื ื™ื ื‘ืจืฆืฃ ื•ื™ื—ื–ื™ืจ ืืช ื”ืจืืฉื•ืŸ.

ืœื›ืœ ื”ืฉื™ืขื•ืจื™ื ื”ืœืœื•, ืœ-Haskell ื™ืฉ ืื•ืคืจื˜ื•ืจื™ื ืกืžืœื™ื™ื ื™ืคื™ื, ืžื” ืฉื’ื•ืจื ืœืชื›ื ื•ืช Reader ืœื”ื™ืจืื•ืช ื›ืžื• ืืžื ื•ืช ASCII. ืคืฉื•ื˜ ืชืชืคืขืœ ืžื”ืงื•ื“ ื”ื ืคืœื ื”ื–ื”.

ื”ืžืฉื™ืžื•ืช ืฉืœื ื• ื”ื™ื• ืงืฉื•ืจื•ืช ืœ-LaTeXReader. ื”ืžืฉื™ืžื” ืฉืœ Vasily ื”ื™ื™ืชื” ืœืชืžื•ืš ื‘ืคืงื•ื“ื•ืช mbox ื•-hbox, ืฉื™ืžื•ืฉื™ื•ืช ืœื›ืชื™ื‘ืช ื—ื‘ื™ืœื•ืช ื‘-LaTeX. ืืœื™ื–ื‘ืช ื”ื™ื™ืชื” ืื—ืจืื™ืช ืœืชืžื™ื›ื” ื‘ืคืงื•ื“ืช ื”ืืคื™ื’ืจืฃ, ื”ืžืืคืฉืจืช ืœื™ืฆื•ืจ ืืคื™ื’ืจืฃ ื‘ืžืกืžื›ื™ LaTeX.

Hatrace

ืžืขืจื›ื•ืช ื”ืคืขืœื” ื“ืžื•ื™ื•ืช UNIX ืžื™ื™ืฉืžื•ืช ืœืจื•ื‘ ืืช ืงืจื™ืืช ืžืขืจื›ืช ptrace. ื–ื” ืฉื™ืžื•ืฉื™ ื‘ืื™ืชื•ืจ ื‘ืื’ื™ื ื•ื‘ืกื™ืžื•ืœืฆื™ื” ืฉืœ ืกื‘ื™ื‘ื•ืช ืชื•ื›ื ื™ื•ืช, ื•ืžืืคืฉืจ ืœืš ืœื”ืชื—ืงื•ืช ืื—ืจ ืงืจื™ืื•ืช ื”ืžืขืจื›ืช ืฉื”ืชื•ื›ื ื™ืช ืžื‘ืฆืขืช. ืœื“ื•ื’ืžื”, ื›ืœื™ ื”ืฉื™ืจื•ืช ื”-strace ื”ืฉื™ืžื•ืฉื™ ืžืื•ื“ ืžืฉืชืžืฉ ื‘-ptrace ื‘ืื•ืคืŸ ืคื ื™ืžื™.

Hatrace ื”ื™ื ืกืคืจื™ื™ื” ื”ืžืกืคืงืช ืžืžืฉืง ืœ-ptrace ื‘- Haskell. ื”ืขื•ื‘ื“ื” ื”ื™ื ืฉ-ptrace ืขืฆืžื• ื”ื•ื ืžืื•ื“ ืžืชื•ื—ื›ื ื•ื“ื™ ืงืฉื” ืœื”ืฉืชืžืฉ ื‘ื• ื™ืฉื™ืจื•ืช, ื‘ืžื™ื•ื—ื“ ืžืฉืคื•ืช ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช.

Hatrace ืžืชื ื”ืœืช ื›ืžื• ืกื˜ืจืืก ื‘ื”ืคืขืœื” ื•ืžืงื‘ืœืช ื˜ื™ืขื•ื ื™ื ื“ื•ืžื™ื. ื”ื™ื ืฉื•ื ื” ืž-strace ื‘ื›ืš ืฉื”ื™ื ื’ื ืกืคืจื™ื™ื” ื”ืžืกืคืงืช ืžืžืฉืง ืคืฉื•ื˜ ื™ื•ืชืจ ืžืืฉืจ ืจืง ptrace.

ื‘ืขื–ืจืช hatrace, ื›ื‘ืจ ืชืคืกื ื• ื‘ืื’ ืื—ื“ ืœื ื ืขื™ื ื‘ืžื”ื“ืจ GHC Haskell - ื ื”ืจื’ ื‘ืจื’ืข ื”ืœื ื ื›ื•ืŸ, ื”ื•ื ื™ื•ืฆืจ ืงื‘ืฆื™ ืื•ื‘ื™ื™ืงื˜ื™ื ืฉื’ื•ื™ื™ื ื•ืื™ื ื• ืžืจื›ื™ื‘ ืื•ืชื ืžื—ื“ืฉ ื‘ืขืช ื”ืคืขืœื” ืžื—ื“ืฉ. ืกืงืจื™ืคื˜ื™ื ืขืœ ื™ื“ื™ ืงืจื™ืื•ืช ืžืขืจื›ืช ืืคืฉืจื• ืœืฉื—ื–ืจ ื‘ืฆื•ืจื” ืžื”ื™ืžื ื” ืืช ื”ืฉื’ื™ืื” ื‘ืจื™ืฆื” ืื—ืช, ื‘ืขื•ื“ ืฉื”ืจื’ ืืงืจืื™ ืฉื™ื—ื–ืจ ืืช ื”ืฉื’ื™ืื” ืชื•ืš ื›ืฉืขืชื™ื™ื.

ื”ื•ืกืคื ื• ืžืžืฉืงื™ ืฉื™ื—ื•ืช ืžืขืจื›ืช ืœืกืคืจื™ื™ื” - Elizaveta ื”ื•ืกื™ืคื” brk, ื•ืืกื™ืœื™ ื”ื•ืกื™ืคื” mmap. ื‘ื”ืชื‘ืกืก ืขืœ ืชื•ืฆืื•ืช ื”ืขื‘ื•ื“ื” ืฉืœื ื•, ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืฆื•ืจื” ืคืฉื•ื˜ื” ื•ืžื“ื•ื™ืงืช ื™ื•ืชืจ ื‘ื˜ื™ืขื•ื ื™ื ืฉืœ ืงืจื™ืื•ืช ืžืขืจื›ืช ืืœื• ื‘ืขืช ื”ืฉื™ืžื•ืฉ ื‘ืกืคืจื™ื™ื”.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”