aboutsummaryrefslogtreecommitdiff
path: root/doc/todo/firm_up_plugin_interface.mdwn
blob: e23f2f3d6ea6dafc44ca636a29ffa7f59987de05 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
The plugin interface is currently that they can register hooks, and can
call any other ikiwiki internal function they desire, generally through
Ikiwiki::function calls. Also, some Ikiwiki::config etc variables can be
used.

This is a very weak interface, and should be firmed up to something more
like a proper perl library. I've been waiting to get some idea of what bits
of ikiwiki are most useful to plugins before doing it; there are plenty of
plugins to know that now.

IkiWiki will now  export some function calls and variables when loaded.

Functions used by many plugins, which I'm sure should be exported:

* hook
* debug
* error
* template
* htmlpage
* add_depends
* pagespec_match
* bestlink
* htmllink
* readfile
* writefile
* pagetype
* srcfile
* pagename
* displaytime

Functions used by only some plugins, undecided:

* lockwiki, unlockwiki (aggregate)
	Too internal to ever be exported.
* loadindex (aggregate)
	Too internal to ever be exported.
* titlepage (aggregate)
	Not until more than one thing uses it.
* basename (polygen, inline, search, polygen)
* dirname (linkmap, inline)
	For basename and dirname, they could just use standard perl library
	stuff. Howevever, ikiwiki's versions are slightly different and I'd
	need to check if the standard versions work for the uses made in
	these plugins. Inclined not to export.
* abs2rel (linkmap, inline)
	This *is* the library version, just optimised to work around a bug.
	Don't export this.
* possibly_foolish_untaint (aggregate, polygen)
	Probably better to implement yourself.
* htmlize
* linkify
* preprocess
* filter
	Used by several, but problimatic since plugins typically define
	functions with these names..

Variables used by plugins:

* %IkiWiki::config (various values; probably not worth locking down any
  more, export it)
* %IkiWiki::links (many, seems clearcut to export)
* %IkiWiki::renderedfiles (orphans, inline, search)
* %IkiWiki::pagesources (pagecount, sidebar, template, inline)
* %IkiWiki::pagecase (aggregate.. will not export yet)
* %IkiWIki::backlinks (pagestats.. will not export yet)

I don't want this interface to be too firm; it's ok for a plugin like
`ddate` to redefine an internal function like IkiWiki::displaytime if it
wants to.. But plugins that still access stuff through IkiWiki:: should be
aware that that stuff can change at any time and break them. Possibly without
perl's type checking catching the breakage, in some cases. Plugins that
only use exported symbols should not break by future ikiwiki changes.