note discount's definition list capabilities
[ikiwiki] / doc / todo / internal_definition_list_support.mdwn
1 While ikiwiki can support definition lists (`dl/dt/dd`) through [[multimarkdown|plugins/mdwn]], it doesn't actually /do/ anything with those valuable definitions. It would be interesting for third party plugins to have access to this stuff as a proper data structure. This is what allows MoinMoin to have plugins that collect that data across multiple pages and tabulate it, for example.
2
3 What I am proposing here is that the [[variables exported to plugins|plugins/write/#index6h2]] be extended to include a `%dictionnaries` hash. For a markup like this:
4
5 [[!format txt """
6 Apple
7 : Apple is a fruit
8 : It's also a computer company
9 Orange
10 : Orange is a fruit
11 """]]
12
13 would result in a data structure like this:
14
15 [[!format txt """
16 %dicts = {
17   'Apple' => [ "Apple is a fruit", "It's also a computer company" ],
18   'Orange' => [ "Orange is a fruit" ],
19 }
20 """]]
21
22 Now, I know I can write myself a `format()` parser that would do this on all pages in my own plugin, but then it would need to be adapted to all markups, while markup formatters should be the ones implementing this directly, if possible.
23
24 My first use case for this would be to extend the [[plugins/contrib/osm]] plugin to tap into those lists, so that I could have this data in the page, visible to the user:
25
26 [[!format txt """
27 Longitude
28 : -45.30
29 Latitude
30 : 73.67
31 """]]
32
33 and then reuse that data in the plugin.
34
35 Then for us running the humongous [[koumbit wiki|https://wiki.koumbit.net/]], it is a necessary step to be able to migrate away from MoinMoin to Ikiwiki as we have a lot of pages that tabulate information like this. For example, see our [[ServerList|https://wiki.koumbit.net/ServerList]] ([[source|https://wiki.koumbit.net/ServerList?action=raw]]), being generated from pages like [[this one|https://wiki.koumbit.net/metis.koumbit.net]].
36
37 If there are no objections to that concept, I may try to start coding patches. Otherwise this is really just a [[wishlist]].
38
39 > Have you looked at the [[plugins/contrib/field]] plugin? This gives you the infrastructure, and all you need is to write a plugin that parses the definition list format.  Then you could use [[plugins/contrib/getfield]], [[plugins/contrib/ftemplate]] and/or [[plugins/contrib/report]] to do what you like with the data.
40 > --[[KathrynAndersen]]
41
42 > ----
43
44 > with the recent inclusion of discount to the [[plugins/mdwn]] module, definition lists can be used by default (instead of, as with multimarkdown, after an option is enabled), and look like this:
45 >
46 >     =Apple=
47 >         Apple is a fruit.
48 >         Apple is also a company.
49 >     =Orange=
50 >         Orange is a fruit.
51 >
52 > (indented with four spaces). this makes definition lists a bit more attractive for definition harvesting. personally, i'd prefer a solution that works from the markup instead of plugins, as it integrates more naturally in the flow of designing a document, even though a plugin for explicitly stating invisible facts certainly has its purpose too. (think [[!wikipedia RDFa]] here ;-) ) --[[chrysn]]