%%
%% This is file `markdown.tex',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% markdown.dtx  (with options: `tex')
%% 
%% Copyright (C) 2016 Vít Novotný
%% 
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%% 
%%    http://www.latex-project.org/lppl.txt
%% 
%% and version 1.3 or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
%% 
%% This work has the LPPL maintenance status `maintained'.
%% The Current Maintainer of this work is Vít Novotný.
%% 
%% Send bug reports, requests for additions and questions
%% either to the GitHub issue tracker at
%% 
%%   https://github.com/Witiko/markdown/issues
%% 
%% or to the e-mail address <witiko@mail.muni.cz>.
%% 
%% MODIFICATION ADVICE:
%% 
%% If you want to customize this file, it is best to make a copy of
%% the source file(s) from which it was produced.  Use a different
%% name for your copy(ies) and modify the copy(ies); this will ensure
%% that your modifications do not get overwritten when you install a
%% new release of the standard system.  You should also ensure that
%% your modified source file does not generate any modified file with
%% the same name as a standard file.
%% 
%% You will also need to produce your own, suitably named, .ins file to
%% control the generation of files from your source file; this file
%% should contain your own preambles for the files it generates, not
%% those in the standard .ins files.
%% 
%% The names of the source files used are shown above.
%% 
\def\markdownVersion{2016/06/03}%
\let\markdownBegin\relax
\let\markdownEnd\relax
\let\markdownInput\relax
\def\markdownOptionHelperScriptFileName{\jobname.markdown.lua}%
\def\markdownOptionInputTempFileName{\jobname.markdown.in}%
\def\markdownOptionOutputTempFileName{\jobname.markdown.out}%
\def\markdownOptionCacheDir{_markdown-\jobname}%
\let\markdownOptionBlankBeforeBlockquote\undefined
\let\markdownOptionBlankBeforeHeading\undefined
\let\markdownOptionDefinitionLists\undefined
\let\markdownOptionHashEnumerator\undefined
\let\markdownOptionHybrid\undefined
\let\markdownOptionFootnotes\undefined
\let\markdownOptionPreserveTabs\undefined
\let\markdownOptionSmartEllipses\undefined
\let\markdownOptionStartNumber\undefined
\let\markdownOptionTightLists\undefined
\def\markdownRendererLineBreak{%
  \markdownRendererLineBreakPrototype}%
\def\markdownRendererEllipsis{%
  \markdownRendererEllipsisPrototype}%
\def\markdownRendererCodeSpan{%
  \markdownRendererCodeSpanPrototype}%
\def\markdownRendererLink{%
  \markdownRendererLinkPrototype}%
\def\markdownRendererImage{%
  \markdownRendererImagePrototype}%
\def\markdownRendererUlBegin{%
  \markdownRendererUlBeginPrototype}%
\def\markdownRendererUlBeginTight{%
  \markdownRendererUlBeginTightPrototype}%
\def\markdownRendererUlItem{%
  \markdownRendererUlItemPrototype}%
\def\markdownRendererUlEnd{%
  \markdownRendererUlEndPrototype}%
\def\markdownRendererUlEndTight{%
  \markdownRendererUlEndTightPrototype}%
\def\markdownRendererOlBegin{%
  \markdownRendererOlBeginPrototype}%
\def\markdownRendererOlBeginTight{%
  \markdownRendererOlBeginTightPrototype}%
\def\markdownRendererOlItem{%
  \markdownRendererOlItemPrototype}%
\def\markdownRendererOlItemWithNumber{%
  \markdownRendererOlItemWithNumberPrototype}%
\def\markdownRendererOlEnd{%
  \markdownRendererOlEndPrototype}%
\def\markdownRendererOlEndTight{%
  \markdownRendererOlEndTightPrototype}%
\def\markdownRendererDlBegin{%
  \markdownRendererDlBeginPrototype}%
\def\markdownRendererDlBeginTight{%
  \markdownRendererDlBeginTightPrototype}%
\def\markdownRendererDlItem{%
  \markdownRendererDlItemPrototype}%
\def\markdownRendererDlEnd{%
  \markdownRendererDlEndPrototype}%
\def\markdownRendererDlEndTight{%
  \markdownRendererDlEndTightPrototype}%
\def\markdownRendererEmphasis{%
  \markdownRendererEmphasisPrototype}%
\def\markdownRendererStrongEmphasis{%
  \markdownRendererStrongEmphasisPrototype}%
\def\markdownRendererBlockQuoteBegin{%
  \markdownRendererBlockQuoteBeginPrototype}%
\def\markdownRendererBlockQuoteEnd{%
  \markdownRendererBlockQuoteEndPrototype}%
\def\markdownRendererInputVerbatim{%
  \markdownRendererInputVerbatimPrototype}%
\def\markdownRendererHeadingOne{%
  \markdownRendererHeadingOnePrototype}%
\def\markdownRendererHeadingTwo{%
  \markdownRendererHeadingTwoPrototype}%
\def\markdownRendererHeadingThree{%
  \markdownRendererHeadingThreePrototype}%
\def\markdownRendererHeadingFour{%
  \markdownRendererHeadingFourPrototype}%
\def\markdownRendererHeadingFive{%
  \markdownRendererHeadingFivePrototype}%
\def\markdownRendererHeadingSix{%
  \markdownRendererHeadingSixPrototype}%
\def\markdownRendererHorizontalRule{%
  \markdownRendererHorizontalRulePrototype}%
\def\markdownRendererFootnote{%
  \markdownRendererFootnotePrototype}%
\def\markdownRendererLineBreakPrototype{}%
\def\markdownRendererEllipsisPrototype{}%
\long\def\markdownRendererCodeSpanPrototype#1{}%
\long\def\markdownRendererLinkPrototype#1#2#3{}%
\long\def\markdownRendererImagePrototype#1#2#3{}%
\def\markdownRendererUlBeginPrototype{}%
\def\markdownRendererUlBeginTightPrototype{}%
\def\markdownRendererUlItemPrototype{}%
\def\markdownRendererUlEndPrototype{}%
\def\markdownRendererUlEndTightPrototype{}%
\def\markdownRendererOlBeginPrototype{}%
\def\markdownRendererOlBeginTightPrototype{}%
\def\markdownRendererOlItemPrototype{}%
\long\def\markdownRendererOlItemWithNumberPrototype#1{}%
\def\markdownRendererOlEndPrototype{}%
\def\markdownRendererOlEndTightPrototype{}%
\def\markdownRendererDlBeginPrototype{}%
\def\markdownRendererDlBeginTightPrototype{}%
\long\def\markdownRendererDlItemPrototype#1{}%
\def\markdownRendererDlEndPrototype{}%
\def\markdownRendererDlEndTightPrototype{}%
\long\def\markdownRendererEmphasisPrototype#1{}%
\long\def\markdownRendererStrongEmphasisPrototype#1{}%
\def\markdownRendererBlockQuoteBeginPrototype{}%
\def\markdownRendererBlockQuoteEndPrototype{}%
\long\def\markdownRendererInputVerbatimPrototype#1{}%
\long\def\markdownRendererHeadingOnePrototype#1{}%
\long\def\markdownRendererHeadingTwoPrototype#1{}%
\long\def\markdownRendererHeadingThreePrototype#1{}%
\long\def\markdownRendererHeadingFourPrototype#1{}%
\long\def\markdownRendererHeadingFivePrototype#1{}%
\long\def\markdownRendererHeadingSixPrototype#1{}%
\def\markdownRendererHorizontalRulePrototype{}%
\long\def\markdownRendererFootnotePrototype#1{}%
\def\markdownInfo#1{}%
\def\markdownWarning#1{}%
\def\markdownError#1{}%
\def\markdownLuaRegisterIBCallback#1{%
  local old_callback = callback.find("process_input_buffer")
  callback.register("process_input_buffer", #1)}%
\def\markdownLuaUnregisterIBCallback{%
  callback.register("process_input_buffer", old_callback)}%
\let\markdownMakeOther\relax
\let\markdownReadAndConvert\relax
\begingroup
  \catcode`\|=0\catcode`\\=12%
  |gdef|markdownBegin{%
    |markdownReadAndConvert{\markdownEnd}%
                           {|markdownEnd}}%
|endgroup
\def\markdownInfo#1{%
  \message{(l.\the\inputlineno) markdown.tex info: #1.}}%
\def\markdownWarning#1{%
  \message{(l.\the\inputlineno) markdown.tex warning: #1}}%
\def\markdownError#1#2{%
  \errhelp{#2.}%
  \errmessage{(l.\the\inputlineno) markdown.tex error: #1}}%
\def\markdownRendererLineBreakPrototype{\hfil\break}%
\let\markdownRendererEllipsisPrototype\dots
\long\def\markdownRendererCodeSpanPrototype#1{{\tt#1}}%
\long\def\markdownRendererLinkPrototype#1#2#3{#1}%
\long\def\markdownRendererImagePrototype#1#2#3{#1}%
\def\markdownRendererUlBeginPrototype{}%
\def\markdownRendererUlBeginTightPrototype{}%
\def\markdownRendererUlItemPrototype{}%
\def\markdownRendererUlEndPrototype{}%
\def\markdownRendererUlEndTightPrototype{}%
\def\markdownRendererOlBeginPrototype{}%
\def\markdownRendererOlBeginTightPrototype{}%
\def\markdownRendererOlItemPrototype{}%
\long\def\markdownRendererOlItemWithNumberPrototype#1{}%
\def\markdownRendererOlEndPrototype{}%
\def\markdownRendererOlEndTightPrototype{}%
\def\markdownRendererDlBeginPrototype{}%
\def\markdownRendererDlBeginTightPrototype{}%
\long\def\markdownRendererDlItemPrototype#1{#1}%
\def\markdownRendererDlEndPrototype{}%
\def\markdownRendererDlEndTightPrototype{}%
\long\def\markdownRendererEmphasisPrototype#1{{\it#1}}%
\long\def\markdownRendererStrongEmphasisPrototype#1{{\it#1}}%
\def\markdownRendererBlockQuoteBeginPrototype{\par\begingroup\it}%
\def\markdownRendererBlockQuoteEndPrototype{\endgroup\par}%
\long\def\markdownRendererInputVerbatimPrototype#1{%
  \par{\tt\input"#1"\relax}\par}%
\long\def\markdownRendererHeadingOnePrototype#1{#1}%
\long\def\markdownRendererHeadingTwoPrototype#1{#1}%
\long\def\markdownRendererHeadingThreePrototype#1{#1}%
\long\def\markdownRendererHeadingFourPrototype#1{#1}%
\long\def\markdownRendererHeadingFivePrototype#1{#1}%
\long\def\markdownRendererHeadingSixPrototype#1{#1}%
\def\markdownRendererHorizontalRulePrototype{}%
\long\def\markdownRendererFootnotePrototype#1{#1}%
\def\markdownLuaOptions{{%
  \ifx\markdownOptionBlankBeforeBlockquote\undefined\else
    blankBeforeBlockquote = \markdownOptionBlankBeforeBlockquote,
  \fi
  \ifx\markdownOptionBlankBeforeHeading\undefined\else
    blankBeforeHeading = \markdownOptionBlankBeforeHeading,
  \fi
  \ifx\markdownOptionCacheDir\undefined\else
    cacheDir = "\markdownOptionCacheDir",
  \fi
  \ifx\markdownOptionDefinitionLists\undefined\else
    definitionLists = \markdownOptionDefinitionLists,
  \fi
  \ifx\markdownOptionHashEnumerators\undefined\else
    hashEnumerators = \markdownOptionHashEnumerators,
  \fi
  \ifx\markdownOptionHybrid\undefined\else
    hybrid = \markdownOptionHybrid,
  \fi
  \ifx\markdownOptionFootnotes\undefined\else
    footnotes = \markdownOptionFootnotes,
  \fi
  \ifx\markdownOptionPreserveTabs\undefined\else
    preserveTabs = \markdownOptionPreserveTabs,
  \fi
  \ifx\markdownOptionSmartEllipses\undefined\else
    smartEllipses = \markdownOptionSmartEllipses,
  \fi
  \ifx\markdownOptionStartNumber\undefined\else
    startNumber = \markdownOptionStartNumber,
  \fi
  \ifx\markdownOptionTightLists\undefined\else
    tightLists = \markdownOptionTightLists,
  \fi}
}%
\def\markdownPrepare{%
  local lfs = require("lfs")
  local cacheDir = "\markdownOptionCacheDir"
  if lfs.isdir(cacheDir) == true then else
    assert(lfs.mkdir(cacheDir))
  end
  local md = require("markdown")
  local convert = md.new(\markdownLuaOptions)
}%
\ifx\directlua\undefined
  \csname newwrite\endcsname\markdownLuaExecuteFileStream
  \csname newcount\endcsname\markdownLuaExecuteShellEscape
  \ifx\pdfshellescape\undefined
    \ifx\shellescape\undefined
      \markdownLuaExecuteShellEscape=1%
    \else
      \markdownLuaExecuteShellEscape=\shellescape
    \fi
  \else
    \markdownLuaExecuteShellEscape=\pdfshellescape
  \fi
  \def\markdownLuaExecute#1{%
    \ifnum\markdownLuaExecuteShellEscape=1%
      \immediate\openout\markdownLuaExecuteFileStream=%
        \markdownOptionHelperScriptFileName
      \markdownInfo{Writing a helper Lua script to the file
        "\markdownOptionHelperScriptFileName"}%
      \immediate\write\markdownLuaExecuteFileStream{%
        local kpse = require('kpse')
        kpse.set_program_name('luatex') #1}%
      \immediate\closeout\markdownLuaExecuteFileStream
      \markdownInfo{Executing a helper Lua script from the file
        "\markdownOptionHelperScriptFileName" and storing the result in the
        file "\markdownOptionOutputTempFileName"}%
      \immediate\write18{texlua "\markdownOptionHelperScriptFileName" >
        "\markdownOptionOutputTempFileName"}%
      \input\markdownOptionOutputTempFileName\relax
    \else
      \markdownError{I can not access the shell}{Either run the TeX
        compiler with the --shell-escape or the --enable-write18 flag,
        or set shell_escape=t in the texmf.cnf file}%
    \fi}%
  \begingroup
    \catcode`\^^I=12%
    \gdef\markdownReadAndConvertTab{^^I}%
  \endgroup
  \begingroup
    \catcode`\^^M=13%
    \catcode`\^^I=13%
    \catcode`|=0%
    \catcode`\\=12%
    |gdef|markdownReadAndConvert#1#2{%
      |begingroup%
      |immediate|openout|markdownLuaExecuteFileStream%
        |markdownOptionInputTempFileName%
      |markdownInfo{Buffering markdown input into the temporary %
        input file "|markdownOptionInputTempFileName" and scanning %
        for the closing token sequence "#1"}%
      |def|do##1{|catcode`##1=12}|dospecials%
      |catcode`| =12%
      |markdownMakeOther%
      |def|markdownReadAndConvertProcessLine##1#1##2#1##3|relax{%
        |ifx|relax##3|relax%
          |immediate|write|markdownLuaExecuteFileStream{##1}%
        |else%
          |def^^M{%
            |markdownInfo{The ending token sequence was found}%
            |immediate|write|markdownLuaExecuteFileStream{}%
            |immediate|closeout|markdownLuaExecuteFileStream%
            |endgroup%
            |markdownInput|markdownOptionInputTempFileName%
            #2}%
        |fi%
        ^^M}%
      |catcode`|^^I=13%
      |def^^I{|markdownReadAndConvertTab}%
      |catcode`|^^M=13%
      |def^^M##1^^M{%
        |def^^M####1^^M{%
          |markdownReadAndConvertProcessLine####1#1#1|relax}%
        ^^M}%
      ^^M}%
  |endgroup
\else
  \def\markdownLuaExecute#1{\directlua{local print = tex.print #1}}%
  \begingroup
    \catcode`\_=12%
    \catcode`\$=12%
    \catcode`\^=12%
    \catcode`\/=6%
    \catcode`\#=12%
    \catcode`\@=14%
    \catcode`\%=12%
    \catcode`|=0@
    \catcode`\\=12@
    |gdef|markdownReadAndConvert/1/2{@
      |def|markdownReadAndConvertAfter{/2}@
      |markdownInfo{Buffering markdown input and scanning for the
        closing token sequence "/1"}@
      |directlua{@
        |markdownPrepare
        local buffer = {}
        local ending_sequence = "^.-" .. ([[/1]]):gsub(
          "([%(%)%.%%%+%-%*%?%[%]%^%$])", "%%%1")
        |markdownLuaRegisterIBCallback{function(line)
          if line:match(ending_sequence) then
            |markdownLuaUnregisterIBCallback
            local input = table.concat(buffer, "\n") .. "\n\n"
            local output = convert(input)
            return [[\markdownInfo{The ending token sequence was found}]] ..
              output .. [[\markdownReadAndConvertAfter]]
          else
            buffer[#buffer+1] = line
            return [[\]] .. (#buffer == 1 and "fi" or "relax")
          end
        end}}@
      |iffalse}@
  |endgroup
\fi
\begingroup
  \catcode`|=0%
  \catcode`\\=12%
  |gdef|markdownInput#1{%
    |markdownInfo{Including markdown document "#1"}%
    |markdownLuaExecute{%
      |markdownPrepare
      local input = assert(io.open("#1","r")):read("*a") .. "\n\n"
      print(convert(input:gsub("\r\n?", "\n")))}}%
|endgroup
\endinput
%%
%% End of file `markdown.tex'.
