forked from GitHub/gf-core
gfdoc for tags
This commit is contained in:
@@ -177,7 +177,7 @@ summary of the supported input and output formats (the nodes in ellipses).
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
|
|
||||||
For instance, if you want to write a finite-state automaton
|
For instance, if you want to create a finite-state automaton
|
||||||
in the HTK SLF format (to use for speech recognition), all you have to do
|
in the HTK SLF format (to use for speech recognition), all you have to do
|
||||||
is to write an EBNF grammar in a file <tt>foo.ebnf</tt> and type
|
is to write an EBNF grammar in a file <tt>foo.ebnf</tt> and type
|
||||||
<pre>
|
<pre>
|
||||||
|
|||||||
@@ -26,8 +26,10 @@ main = do
|
|||||||
xx <- getArgs
|
xx <- getArgs
|
||||||
let
|
let
|
||||||
(typ,format,names) = case xx of
|
(typ,format,names) = case xx of
|
||||||
"-latex" : xs -> (0,doc2latex,xs)
|
"-latex" : xs -> (0,doc2latex,xs)
|
||||||
"-htmls" : xs -> (2,doc2html,xs)
|
"-htmls" : xs -> (2,doc2html,xs)
|
||||||
|
"-txt" : xs -> (3,doc2txt,xs)
|
||||||
|
"-txthtml": xs -> (4,doc2txt,xs)
|
||||||
xs -> (1,doc2html,xs)
|
xs -> (1,doc2html,xs)
|
||||||
if null xx
|
if null xx
|
||||||
then do
|
then do
|
||||||
@@ -37,11 +39,14 @@ main = do
|
|||||||
ss <- readFile name
|
ss <- readFile name
|
||||||
let outfile = fileFormat typ name
|
let outfile = fileFormat typ name
|
||||||
writeFile outfile $ format $ pDoc $ ss)
|
writeFile outfile $ format $ pDoc $ ss)
|
||||||
if typ == 2
|
case typ of
|
||||||
then do
|
2 ->
|
||||||
mapM (\name -> system $ "htmls " ++ (fileFormat typ name)) names
|
mapM_ (\name -> system $ "htmls " ++ (fileFormat typ name)) names
|
||||||
return ()
|
4 ->
|
||||||
else return ()
|
mapM_ (\name ->
|
||||||
|
system $ "txt2tags -thtml --toc " ++ (fileFormat typ name)) names
|
||||||
|
_ -> return ()
|
||||||
|
return ()
|
||||||
|
|
||||||
welcome = unlines [
|
welcome = unlines [
|
||||||
"",
|
"",
|
||||||
@@ -51,10 +56,11 @@ welcome = unlines [
|
|||||||
|
|
||||||
help = unlines $ [
|
help = unlines $ [
|
||||||
"",
|
"",
|
||||||
"Usage: gfdoc (-latex|-htmls) <file>+",
|
"Usage: gfdoc (-latex|-htmls|-txt|-txthtml) <file>+",
|
||||||
"",
|
"",
|
||||||
"The program operates with lines in GF code, treating them into LaTeX",
|
"The program operates with lines in GF code, treating them into LaTeX",
|
||||||
"(flag -latex), to a set of HTML documents (flag -htmls), or to one",
|
"(flag -latex), to a set of HTML documents (flag -htmls), to a txt2tags file",
|
||||||
|
"(flag -txt), to HTML via txt (flag -txthtml), or to one",
|
||||||
"HTML file (by default). The output is written in a file",
|
"HTML file (by default). The output is written in a file",
|
||||||
"whose name is formed from the input file name by replacing its suffix",
|
"whose name is formed from the input file name by replacing its suffix",
|
||||||
"with html or tex; in case of set of HTML files, the names are prefixed",
|
"with html or tex; in case of set of HTML files, the names are prefixed",
|
||||||
@@ -78,11 +84,17 @@ help = unlines $ [
|
|||||||
"",
|
"",
|
||||||
" *[Text]* emphasized (boldface)",
|
" *[Text]* emphasized (boldface)",
|
||||||
" \"[Text]\" example string (italics)",
|
" \"[Text]\" example string (italics)",
|
||||||
" $[Text]$ example code (courier)"
|
" $[Text]$ example code (courier)",
|
||||||
|
"",
|
||||||
|
"For other formatting and links, we recommend the txt2tags format."
|
||||||
]
|
]
|
||||||
|
|
||||||
fileFormat typ x = body ++ if (typ==0) then "tex" else "html" where
|
fileFormat typ x = body ++ suff where
|
||||||
body = reverse $ dropWhile (/='.') $ reverse x
|
body = reverse $ dropWhile (/='.') $ reverse x
|
||||||
|
suff = case typ of
|
||||||
|
0 -> "tex"
|
||||||
|
_ | typ < 3 -> "html"
|
||||||
|
_ -> "txt"
|
||||||
|
|
||||||
-- the document datatype
|
-- the document datatype
|
||||||
|
|
||||||
@@ -262,6 +274,45 @@ preludeLatex = unlines $ [
|
|||||||
"\\setlength{\\parindent}{0mm}"
|
"\\setlength{\\parindent}{0mm}"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
-- render in txt2tags
|
||||||
|
|
||||||
|
doc2txt :: Doc -> String
|
||||||
|
doc2txt (Doc title paras) = unlines $
|
||||||
|
let tit = concat (map item2txt title) in
|
||||||
|
tit:
|
||||||
|
"Author: ":
|
||||||
|
"Last update: %%date(%c)":
|
||||||
|
"% NOTE: this is a txt2tags file.":
|
||||||
|
"% Create an html file from this file using:":
|
||||||
|
("% txt2tags " ++ tit):
|
||||||
|
"\n":
|
||||||
|
concat (["Produced by " ++ welcome]) :
|
||||||
|
"\n" :
|
||||||
|
concat (tagTxt "=" [tit]) :
|
||||||
|
empty :
|
||||||
|
map para2txt paras
|
||||||
|
|
||||||
|
para2txt :: Paragraph -> String
|
||||||
|
para2txt p = case p of
|
||||||
|
Text its -> concat (map item2txt its)
|
||||||
|
Item its -> "- " ++ concat (map item2txt its)
|
||||||
|
Code s -> unlines $ tagTxt "```" $ map (indent 2) $
|
||||||
|
remEmptyLines $ lines s
|
||||||
|
New -> "\n"
|
||||||
|
NewPage -> "\n" ++ "!-- NEW --"
|
||||||
|
Heading i its -> concat $ tagTxt (replicate i '=') [concat (map item2txt its)]
|
||||||
|
|
||||||
|
item2txt :: TextItem -> String
|
||||||
|
item2txt i = case i of
|
||||||
|
Str s -> s
|
||||||
|
Emp s -> concat $ tagTxt "**" [spec s]
|
||||||
|
Lit s -> concat $ tagTxt "//" [spec s]
|
||||||
|
Inl s -> concat $ tagTxt "``" [spec s]
|
||||||
|
|
||||||
|
tagTxt t ss = t : ss ++ [t]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- auxiliaries
|
-- auxiliaries
|
||||||
|
|
||||||
empty = ""
|
empty = ""
|
||||||
|
|||||||
Reference in New Issue
Block a user