]> sipb.mit.edu Git - ikiwiki.git/blob - doc/plugins/contrib/texinfo.mdwn
8c55962d1ecb8c982ed03771ca8d4d415bea1de2
[ikiwiki.git] / doc / plugins / contrib / texinfo.mdwn
1 [[!template id=plugin name=texinfo author="[[tschwinge]]"]]
2
3 [[I|tschwinge]] started writing a plugin to render
4 [GNU Texinfo](http://www.gnu.org/software/texinfo/)
5 inside the ikiwiki environment.
6
7 This plugin is not neccessarily meant to enable people to write arbitrary
8 wiki pages in the Texinfo format (even though that is possible, of course),
9 but rather to ease collaboration on existing Texinfo documents.
10
11 The plugin is available at
12 <http://git.savannah.gnu.org/cgit/hurd/web.git/plain/.library/IkiWiki/Plugin/texinfo.pm>.
13
14 It's very basic at the moment, but will be improved over time.
15
16 It also has not really been audited for any security issues.
17
18
19 # Issues
20
21 ## N-to-M Mapping of Input and Output Files
22
23 Conventional ikiwiki [[*htmlize*ing|plugins/write#index6h3]] plugins
24 have a one-to-one mapping of input file and output file:
25 `some/where/page.mdwn` is rendered to `some/where/page.html`.
26 This can also be achieved for Texinfo files, but is somewhat
27 unusual there, when rendering them to HTML.  In general, there
28 is a N-to-M mapping:
29
30 * N Texinfo input files (a main `.texi` file,
31   several helper files (`fdl.texi`, `version.texi`, ...), and
32   additional text files which are included from the main `.texi`
33   file, e.g. `history.texi`, `libfoo.texi`, `libbar.texi`.  --[[tschwinge]]
34
35 > As far as multiple input files, you'd need to use add_depends()
36 > to let ikiwiki know that a change to any of those files should cause a
37 > rebuild of the "main" file. --[[Joey]]
38
39 >> (?) I'll see about a frob to get `makeinfo` provide me with a list of additional files
40 >> it used for rendering a given `.texi` file. --[[tschwinge]]
41
42 > I guess you'd also have to somehow deal with
43 > it wanting to render pages for each of the helper files. Not quite sure
44 > what the best way would be to avoid that. --[[Joey]]
45
46 >> Might it be an option to simply not render the pages that are already
47 >> being used as an `include` file for another `.texi` file?
48 >> But how to assemble that list before actually having rendered all `.texi` files?
49 >> One possibility might be to already render them at ikiwiki's *scanning* stage and
50 >> store the rendered HTML files into temporary directories, and then at ikiwiki's
51 >> *rendering* stage simply install the desired ones into the main tree and discard
52 >> the others.  --[[tschwinge]]
53
54 * M Texinfo output files: the main `.texi` file (which `include`s
55   the other input files) is usually rendered into a (flat) hierarchy
56   of HTML files, one file per node, see the table on
57   <http://www.gnu.org/software/texinfo/manual/texinfo/html_node/#Top>
58   for an example.  --[[tschwinge]]
59
60 > Ikiwiki is perfectly happy with a page creating other files (see eg, the
61 > img and teximg plugins, as well as the inline plugin's rss generation).
62 > The will_render() function supports that.
63
64 > What hasn't been done though is a page creating more than one other _page_.
65 > Perhaps you could call IkiWiki::genpage by hand for each additional page.
66 > You might also want to manipulate each data structure that tracks info about
67 > pages, adding the additional pages to them, so that they're first class
68 > pages that work as pages everywhere in ikiwiki (ie, can be inlined,
69 > appear in a site map, be linked to, etc). Not sure how to do that,
70 > and perhaps you could get away without doing it actually. --[[Joey]]
71
72 >> Currently I use `makeinfo --no-split` and render to stdout, so that I can
73 >> easily capture the output and stuff it into the appropriate ikiwiki data structure.
74 >> If we want to have multiple output files (which we'll eventually want to have,
75 >> to avoid having such large single-file outputs), we won't be able to
76 >> do this anymore.
77 >> (?) Then we'll need a way to find the main output file, which
78 >> will be the one to be copied into what ikiwiki expects to be the main output
79 >> of the rendered `.texi` file.
80 >> Perhaps (again) parse the `.texi` file for a `@setfilename` statement?
81 >> The other generated files will also have to
82 >> copied somewhere (preferably into a subdirectory named alike the main file
83 >> to avoid name space collisions; but need to take care of links between the files then)
84 >> and need to be registed within the ikiwiki system.
85 >> --[[tschwinge]]
86
87 There needs to be some logic to establish a mapping between the *N* input files
88 and the *M* output files.
89 (At least for web-editing via CGI this is needed: ikiwiki (currently) needs to be able
90 to deduce *one* input file from a given output file)
91 Easiest would be either to have *N = 1*
92 (plus perhaps some input files that are not meant to be editable, like `gpl.texi`)
93 or to have
94 *M = N* and have a (?) one-to-one mapping between *input file n* and *output file m*
95 (which is not possible in Texinfo's `makeinfo` at the moment).
96 --[[tschwinge]]
97
98
99 ## `makeinfo` Output
100
101 `makeinfo --html` is being used for rendering.  It creates stand-alone
102 HTML files, while ikiwiki only needs the files' `<body>`s.
103
104 (?) One possibility (which is what I'm doing at the moment) is to simply cut away
105 everythin until `<body>` is seen and after `</body>` has been seen.  --[[tschwinge]]
106
107
108 # Bugs
109
110 ## Non-functional Texinfo Commands
111
112 Those commands are know to not work currently:
113
114 * `@printindex`
115 * `@shortcontents`
116 * `@contents`
117
118 This is due to `makeinfo` not providing this functionality if rendering to stdout.