====== TODO ======
Also have a look at [[:zim:bugs|bugs]]

* BUG: ''==foo<return>^Z'' doesn't do what it should do
	* needs improved undo stack
* BUG: ~~http://google.nl~~ - link prevents srike-through format
	* needs nested tags

===== Wanted =====
* Somebody to build and maintain a Windows executable
* Non-programmer to improve the documentation

===== Questions =====
* How are selections supposed to behave ?
	* http://bugzilla.gnome.org/show_bug.cgi?id=333514
* How to improve hypertext navigation ?
	* previous/next in list buttons, both in namespace and in "linkspace"

===== Objectives =====
* WYSIWYG editing
	* toggle tags like bold/italic/...
	* more intelligent ^Z
* Hyper-Linking
	* internal linking like [[#linking|this]] ?
* Desktop integration
	* define a mimetype for repository config files
* More [[formats]]
	* native (pod, kwiki, ...)
	* export (docbook, oo.org, ..)
* Versioning
	* cvs/arch/svn/.. plugins
	* simple fallback ?

===== Tasks =====
* General
	* put cache file in ''~/.cache'' if read-only repository
 	* update links when renaming
 		* partial support implemented but hidden from user
		* make links relative if possible
		* use page->compare($link) or something
		* parse tree object ?
			* use one "link content ~ target" routine
		* add Tools->update links to do this explicitly after moving/merging/whatever
	* More intelligent resolving of links (upward search)
	* repository config in visible file (write every time)
		* "ignore list" for files to make co-exitence with CVS/Arch/.. easier
		* settings like autolink and camelcase per-repository
		* default config file to be copied on initialisation
	* use repository icons in "open repository" dialog
		* have a object for repository config - derive from DesktopEntry
		* have a "properties" dialog for setting repository name and icon
		* properties should also include "home" (which can be a format containing date/user/..)
	* Add a "text/x-zim-page-list" drag-n-drop target for drag-n-drop between the side pane and the text area. Each page in the list has the "repository?page" format for cross-repository drag-n-drop
	* Add a SourceView to allow tuning raw source
	* On move page, history should pass on undo stack to new name 
	* I would really like to change the order in link tags from [url|text] to [text|url] because this is easier to type
		* in order to make this change I need to distinguise versions in the repository config to avoid breaking backward compatibility
* Editing
	* make undo/redo remeber images and tags (ignore spell check tags)
	* Make text tags "moded"
	* Change ^E from "edit link" in "edit object properties"
		* when no link trigger image property dialog - also check one iter pos left/right for pixmap
	* trigger "parse_word" at , . ; " ' ) etc.
	* trigger "parse_word" on move cursor
	* "<hr>" elements
* interface improvements
	* Style difference for non-existing links
	* Make bullet lists indent properly so line wrapping looks better
	* Search dialog options
		* same page selection as in export all/pages
		* case sensitive (toggle), whole word (toggle) - same for find / replace
	* Drag-n'-drop move between namespaces in the index
		* ordered namespaces ?
			* Keybindings for next/previous in list ?
	* preferences dialog
		* toggle to choose for custom font - disable to get default back
		* split config file in "state" (.rw and .ro) and "preferences"
			* split ''%settings'' in ''%state'' and ''%config''
		* general config
			* tearoff menus
		* TreeView with tag styles
			* font (font button), fgcolor (colorbutton), bgcolor, underline (checkbox)
			* "styles" tab in the preferences dialog
			* scale headers with font size ?
	* Drag-n'-drop move between namespaces in the index
		* ordered namespaces ?
			* Keybindings for next/previous in list ?• Aditional formats (need sub-repositories to combine them)
	* pod - add perldoc plugin to documentation repository
	* xml - no transparent source format - parse '''<''' to ''&lt;''
	* dokuwiki
	* kwiki
* Code cleanup
	* Enforce in Z:R:Files how a valid page name looks, not in the GUI, not in Z:R
		* remove whitespace translation
			* treeview
			* pathbar
			* completion
		* forward "resolve_namespace" to child class
	* more action based api for gui objects
	* optimise file lookup routine
	* Rename Zim/Page/Text.pm to Zim/Data.pm (or something like that)
		* let Zim/Page.pm wrap Data.pm (in an overloadable way)
	* Get rid of most of the [[File::Spec]] calls (restrict to posix/win32)
		* idem for Cwd::cwd(), just set ENV{PWD} once at start to dir of repository
 	* use GUI::TreeView for lists in search dialog for consistent interface
		* add type attribute - 'list' or 'tree' (make this a toggle ?)
		* add column as object attribute
		* disconnect from zim signals at destroy
	* Fix proper support for commandline switches
	* remove dependency between script and config
	* Parsetree nodes for items in a list
	* create a component base class ZIm::GUI::Component
	* serialization for buffers in copy-paste / undo-redo stacks
	* Also use UIManager for the treeview context menu
	* Form manager spec [name, type, test]
		* labels in layout spec (xml)
	* define a Zim::Template module
		* use the template toolkit ?
		* list of backlinks in templates

====== Version 1.0 checklist ======
* Custom icons for calendar etc.
* Translations for other languages, use Locale::gettext
	* how do you package translations ?
* full Drag-n-Drop support
	* ~~external image to text => link/embed~~
	* ~~external file to text => link~~
	* index item to text => link
	* text to index item => cut and append text to page
* Menu items
	* new page (^N) (also add this in tree context menu)
		* like "jump to" +template selection ?
	* ~~save copy~~
	* properties (+ properties dialog ) ?
* Context menu items for index
	* "split" split page to namespace (each heading its own page)
	* "merge" include namespace content in a single page
	* "export" prompt export page/namespace
* Release Gtk2::Ex::* modules to CPAN
	* Tag styles configurable (style sheet)
* Documentation
	* code documentation
		* parse tree documentation
		* [[zim:development:class_diagram|class diagram]]
	* user documentation
		* general explanation about the concepts behind the program
		* manual page for various interface parts
* Test scripts
	*  for parser
		*  formats
		*  hypertextbuffer
	*  for filename lookup
		*  utf8 chars in filename
		*  caching
	* utf8 content

====== Version 2.0 ======
* Add a [[zim:devel:database|database]] with meta data, indexes, history etc.
	* SQLite fits the profile for default backend
	* Content stays in plain files !
		* "Mail header" format for meta fields in wiki page
	* Add table with meta data to page for GUI editing
* Complete plugin interface
	* Zim::GUI::Component to subclass
	* fields in script
		* AUTHOR
		* VERSION
		* NAME (default to file name)
		* SHORT DESCRIPTION
		* DESCRIPTION
		* DEPENDS (perl modules)

====== Random thoughts ======
* Gnome VFS support
	* use a plugin for this
* ''data:'' uris can contain inline image - maybe useful to support for documentation ??
* printing
	* gtk 2.10 printing support
		* most distros still at 2.8 (?)
	* pango layout with markup language
	* pagination ?
	* http://cvs.gnome.org/viewcvs/libegg/libegg/print-operation/printedit.c?rev=1.8&view=markup
		* one big pango layout
		* calc page breaks in terms of pango lines
		* render per-line on the cairo page
		* how to handle images ?
	* Using the same interface PDF export can also be done
* A plugin that adds a "publish" action to the menu
	* state "published" should be shown per page
	* specify html template and directory for publishing
	* remove links to unpublished pages ??
* A "backlinks index" macro that inlines a table (TreeView) in the page with backlinks sortable by name and modification date
* Detect when a page has changed while we are displaying it
* Export could warn about dead internal links (or remove them)
* Make folding lists, "in page" outlining
	* Combine this with the idea of index pages, all items automaticly link to pages below the outline page (but can be edited to link elsewhere)
* tools->word count
* make it possible to reorganise the toolbar
* Wiki code for sub-/super-script or inline latex formula ?
* Internal references (images, tables, footnotes, ...)
	* anonymous links ?
	* dynamic numbering
	* each referenced item should have a unique id
		* map id to table record
		* map id to new page
		* let formatter number these ids on export
	* footnotes could be displayed in seperate pane below normal text
		* or in seperate window
