diff --git a/index.html b/index.html index 47358fffc..abe6b9b0d 100644 --- a/index.html +++ b/index.html @@ -177,7 +177,7 @@ summary of the supported input and output formats (the nodes in ellipses).
-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 is to write an EBNF grammar in a file foo.ebnf and type
diff --git a/src/tools/GFDoc.hs b/src/tools/GFDoc.hs
index d84594c10..bc5bc999c 100644
--- a/src/tools/GFDoc.hs
+++ b/src/tools/GFDoc.hs
@@ -26,8 +26,10 @@ main = do
xx <- getArgs
let
(typ,format,names) = case xx of
- "-latex" : xs -> (0,doc2latex,xs)
- "-htmls" : xs -> (2,doc2html,xs)
+ "-latex" : xs -> (0,doc2latex,xs)
+ "-htmls" : xs -> (2,doc2html,xs)
+ "-txt" : xs -> (3,doc2txt,xs)
+ "-txthtml": xs -> (4,doc2txt,xs)
xs -> (1,doc2html,xs)
if null xx
then do
@@ -37,11 +39,14 @@ main = do
ss <- readFile name
let outfile = fileFormat typ name
writeFile outfile $ format $ pDoc $ ss)
- if typ == 2
- then do
- mapM (\name -> system $ "htmls " ++ (fileFormat typ name)) names
- return ()
- else return ()
+ case typ of
+ 2 ->
+ mapM_ (\name -> system $ "htmls " ++ (fileFormat typ name)) names
+ 4 ->
+ mapM_ (\name ->
+ system $ "txt2tags -thtml --toc " ++ (fileFormat typ name)) names
+ _ -> return ()
+ return ()
welcome = unlines [
"",
@@ -51,10 +56,11 @@ welcome = unlines [
help = unlines $ [
"",
- "Usage: gfdoc (-latex|-htmls) +",
+ "Usage: gfdoc (-latex|-htmls|-txt|-txthtml) +",
"",
"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",
"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",
@@ -78,11 +84,17 @@ help = unlines $ [
"",
" *[Text]* emphasized (boldface)",
" \"[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
+ suff = case typ of
+ 0 -> "tex"
+ _ | typ < 3 -> "html"
+ _ -> "txt"
-- the document datatype
@@ -262,6 +274,45 @@ preludeLatex = unlines $ [
"\\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
empty = ""