Development: Difference between revisions
Line 340: | Line 340: | ||
: There is already some work done on integration of the WYSIWYG HTML editor Kafenio into FreeMind. --[[User:Danielpolansky|Danielpolansky]] 10:51, 6 Mar 2005 (PST) | : There is already some work done on integration of the WYSIWYG HTML editor Kafenio into FreeMind. --[[User:Danielpolansky|Danielpolansky]] 10:51, 6 Mar 2005 (PST) | ||
=== Using HTML versus XHTML in rich text nodes === | |||
What follows is a preliminary analysis of the issues concerning HTML versus XHTML used for rich text in FreeMind. | |||
AFAIK there are two separate questions: (1) should we store (a) HTML or (b) XHTML in nodes, and (2) should we (a) store only one thing or (b) store plain text in one attribute, and store HTML/XHTML in another attribute where HTML is available, modelling on email systems. | |||
As for the first question, using HTML has the advantage of being straightforward: it is supported by JLabel, it is supported by Java HTML editing component, and it is the format now mostly used in web pages. An advantage of XHTML is that it is a flavor of XML and thus easily amenable to XSLT processing. | |||
As for the second question, as soon as we would store also plain text, it would be automatically available to all XSLT processing, which would make the first question less decisive. However, it would considerably increase the size of mind maps stored on the disk, by my estimation by factor 1.5 as soon as a lot of rich text would be used. | |||
Performing transformations of HTML to XHTML on the fly before performing preprocessing from FreeMind would not really save the day, as XHTML would still need to be stored in mind maps on the disk; if we would use HTML internally, we would have to convert XHTML to HTML upon loading a new map for all nodes, instead of doing that only upon nodes being shown for the purpose of JLabel. | |||
I estimate that the most straightforward way of solving the related problems is to find out how to convert HTML into plain text within XSLT script. I currently do not have a sufficient knowledge of XSLT to judge on that; it should be possible using several regular expression replacements, modelled on what we already have in FreeMind in Java. As soon as we would be able to do that, there might even be a regular expression way to covert boldface and italics to open document format of OpenOffice. Admittedly, instead of having one conversion routine from HTML to plain text in FreeMind, it would have to be replicated in every XSLT script dealing with FreeMind mind maps. | |||
If you find the other options more attractive, an important question is: is it really possible to process XHTML from within an XML attribute? Can someone demonstrate that? If yes, that would make XHTML rather attractive. But if not really, then using HTML would be as good as using XHTML. | |||
As side remark, I find a conversion of HTML to XHTML possible with reasonable effort. I think there are not many more subtleties apart from those already addressed: closed tags <td>, <tr> and the like, closed tags </br>, </hr>, <img/> and several others. We would be able to discoved all the subtleties by reading XHTML standard and by empirical testing. (For reference, [http://www.shredzone.net/articles/java/html2xhtml/ html2xhtml at shredzone.net], thans to Dimitri) | |||
I do not discuss the option of storing XHTML elements on par with FreeMind XML elements like <node>. That would require a considerable effort the benefit of which would be a better support for XSLT transformations only. | |||
--[[User:Danielpolansky|Danielpolansky]] 03:29, 29 Apr 2006 (PDT) | |||
=== Rendering of HTML nodes is slow === | === Rendering of HTML nodes is slow === |
Revision as of 10:29, 29 April 2006
, , <img/> and several others. We would be able to discoved all the subtleties by reading XHTML standard and by empirical testing. (For reference, html2xhtml at shredzone.net, thans to Dimitri)
I do not discuss the option of storing XHTML elements on par with FreeMind XML elements like <node>. That would require a considerable effort the benefit of which would be a better support for XSLT transformations only.
--Danielpolansky 03:29, 29 Apr 2006 (PDT)
Rendering of HTML nodes is slow
Rendering of quite long HTML nodes is slow. If you have a HTML page corresponding to ten paper pages, then the rendering of the node upon unfolding takes several seconds. The related code is in the method update
of the class NodeView
. What takes so long is the statement
setText(nodeText);
in the section
if (nodeText.startsWith("<html>")) { // Make it possible to use relative img references in HTML using tag <base>. if (nodeText.indexOf("<img")>=0 && nodeText.indexOf("<base ") < 0 ) { try { nodeText = "<html><base href=\""+ map.getModel().getURL()+"\">"+nodeText.substring(6); } catch (MalformedURLException e) {} } setText(nodeText);
This result does not give us much hope of improving the speed easily, as the command just tells Java's JLabel to render the page. A solution would be to find a different HTML rendering Java component. We can also wait until Sun's Java virtual machine improves the speed of JLabel's HTML rendering.
-- What about pre-loading nodes which are likely to be expanded, using threading? Keep some relatively small cache of nodes in proximity to the last expanded node, and swap in the expanded node when the unexpanded one is clicked. No?
To obtain focus for selected node in reliable manner
Requesting focus for NodeView using requestFocus() method is unreliable. A reliable way of doing that has been implemented in the method obtainFocusForSelected()
of Controller. A typical call in ControllerAdaper.java is
getController().obtainFocusForSelected();
Requesting focus using
newSelected.requestFocus();
where newSelected
is a NodeView is unreliable, though most often works.
To set the class load path in manifest.mf in jar
In the source folder tree of FreeMind, there's a file MANIFEST.MF. This file tells what should happen with the freemind.jar when java tries to run the jar archive. The file may look like
Manifest-Version: 1.0 Main-Class: freemind.main.FreeMind Class-Path: silk.jar nanoxml.jar ekit.jar kafenio.jar kafenio-config.jar kafenio-icons.jar gnu-regexp-1.1.4.jar Created-By: Joerg Mueller
A tricky thing about the file is that the length of the lines can be at most 72 characters. That creates difficulties when specifying Class-Path. In the exaple above, the first line of Class-Path is set in such a way that it has 70 chacters. That has been achieved by putting spaces before the actual list of classes. In the freemind.jar, the file can be found in the folder META-INF. Here you can check if the manifest has been created correctly.
More development pages
Documentation efforts
Short patches
See short patches.
The development of FreeMind is coordinated using FreeMind's project page at SourceForge, and also using this wiki. At wiki, we have requests for enhancements page; there is also requests for enhancements (RFEs) page at SourceForge (not preferred). You can browse CVS repository. We also use SourceForge for bugs, and open discussion forum. We do not use the documentation part there as we use this wiki instead. Getting started as a developer or testerTo get the latest beta version of FreeMindHere. Observe, that these versions are not official releases and may admit serious errors. Please, use them only if you urgently need a feature included in such a version or to give us feedback to our development which is highly appreciated. To compile FreeMind on your ownIf you are a developer, just download the sources, unpack them,
find the folder with the file build.xml, and execute the command
To set up a FreeMind project under EclipseYou download FreeMind to ~/src/freemind say. Then, you have to compile FreeMind on command line using "ant dist". After that you open a new project with working directory ~/src you should find the following settings:
Then finish the project settings and there should be no errors in the project. You can run FreeMind starting the class
Further development wiki pagesFurther reading (still under construction):
To use concurrent version repository (CVS) with EclipseCheck out the guide by Bob Alexander. When working with CVS, remember that it is difficult to change directory and file names under CVS. Moreover, it not easy to remove files completely. Therefore, pay attention when checking files in. To become a developerNew developer starts by sending his contributions as patches. Later on, he may get access to CVS repository. The process is approximately as follows.
Development resources
To get latest CVS branchMissing. The latest integration branch is fm_060405_integration. The last release has tag FM-0-8-0. How the FreeMind development is organizedInitially every active developer works on its own branch. Our intermediate results are published as our "Alpha-Versions". We use forum Open Discussion and section Experimental_versions on this wiki page to communitate them. Only after this partial developments are finished, they can me merged together. The resulting version is expected to work with all maps created by all versions, which are merged into it, but we can not assure it in any particular case. The merged versions are published as Release Candidates and are released. The only alternative to this development schema would be not to publish the intermediate versions, and I think the current method is probably a better one. Experimental versionsCurrently, there are the following experimental versions available. They are not meant for productive use; use at your own risk! FreeMind with Node Attributes and Map FiltersAttaching of named attributes to every node, filtering of the displayed map content based on node text, node icons and node attributes FreeMind with WYSIWYG rich text node editorFreeMind Browser Applet for FreeMind 0.8Conceptual remarksModular model - view designThe architecture of FreeMind makes it possible that FreeMind becomes general tool for editing tree-structured data, that is mind maps, XML/HTML documents, folder trees etc. in future. All these kinds of data would be presented to the user as a mind map. Model-View-Controller design makes it possible for you only to write so called model of the data structure, without caring for the visual representation. Currently, mind map mode and file mode are implemented. Original vision of Joerg MuellerJoerg Muller is the original author of FreeMind, developing it up to the version 0.4.0. Here follows what he's got to say on his original vision:
One may think of extending FreeMind to work with networks as opposed to trees only, an example of this being Topic Maps (ISO). Daniel Polansky: Joerg's vision of FreeMind becoming Emacs for tree data is intriguing, but rather far fetched at the time. You would need to provide scripting facility and at least many basic operations, like upcase, downcase, replace and many others. It is even not evident that this goal valuable compared to other goals - there many quite obvious and still missing features. Why not use OPML for storage instead of FreeMind's native XML formatThe current version of OPML is not suited for our purposes. It should be easy to create conversion XSLT between FreeMind and OPML. First, if we decided to use OPML, we would have to wait until the owner of OPML changes his standard to fit our needs. Thus, we would be dependent, not being able to act dynamically. Second, already the current version of OPML is insufficient. It does not contain most of what FreeMind already uses: colors, fonts, folded tag, edges and icons. It is not a superset of FreeMind's XML format, even not in a vague sense. Even if I renamed the elements names properly, OPML would still be a subset and not superset of FreeMind's XML. As a result, we have no benefit from using OPML right now. Summary: 1) we would run into dependence, and 2) OPML is insufficient, loosely speaking it is a subset. Why may FreeMind be more relevant than some other open source applicationsThere are many efforts to create new text editors, text processor and the like. While this activity is not without value, it does not fill that big value gap as mind mapping application. Take, for instance, text editors like JEdit. There are already well estabilished text editors like Emacs or Vim, and there are many others. It's not that these editors would be perfect, far from that, but they're still pretty useful and with some training users can become very efficient with them. With text processors, the thing is that most users in companies have already Microsoft Office for free. What does that mean? That means that the individual users do not have to pay for the MS Office, and they cannot effectively decide to use other Office platform either because of the value of easy sharing. Furthermore, there are competing free Office platforms like KOffice, OpenOffice or AbiWord. In mind mapping, the situation is quite different. You do not get commercial alternative granted in companies, unlike office applications. The point here is that most of MS Windows users, the mainstream, do not have a mind mapping application yet. For them, starting to use FreeMind is not a switch from Microsoft product to alternative product. It is a switch from scattered documents in incomparable and hard-to-overview formats to one document with unprecedented order and transparency - FreeMind's mind map. Therefore, I am expecting a growth of interest of free developers in developing and using this application. Furthermore, even though Java is quite slow and memory hungry, it solves the neverending quarrel between religious die-hard fans of different computing platforms, which I have first experienced with Atari 800 XL versus Commodore 64 battle, later IBM compatible versus Commodore Amiga battle, and nowadays Windows versus Linux battles. MiscTo create a new releaseTo succesfully complete a new release, do the following
Notice that the news cannot be monitored unlike forum, and forum has no RSS feed unlike news. To create proper copyright noticeA source file may be viewed as a sum b + d1 + d2 + ... dk, where b is the basis and di are deltas (or patches). Each of these have their own copyright holder and the year of copyright. If there is only one autor and one year, then the copyright notice is simple. If there is only one autor and more years, then the copyright notice may look like
which is to be understood as
If there are more authors, then the copyright notice consists of more lines, like
Not all changes are eligible for copyright. If a change is small, then it does not make sense to add a line to the copyright notice for it. Copyright notice is not required for copyright to hold. It makes claiming your right at court easier. The correctness of these instructions is not granted. They are subject to improvement as we see fit. --Danielpolansky 11:29, 3 Jun 2005 (PDT) All on keyboard mappingsCurrently, each function has at most one key assigned. But, it should be the other way around; the keys should have functions assigned, rather than functions key. For instance, it would be valuable to have both insert and tab assigned to new node function. (Actually on MS Windows it is right now not possible at all to bind anything to tab.) To translate FreeMind into your languageLook for a translation into your language present in the development branch. If such a translation isn't present, take the latest revision of Resources_en.properties. Translate the labels in the text at the right side from = to your language. You can directly create and edit any java property file in any language using propedit.
Another interesting tool to manage language property files is popeye. Popeye can deal with several language property files at the same time so you can contrast the original property file data with their translations. Also, the program can highlight all properties that do not have a translation set in one of the selected languages. Alternatively you can save your property file in UTF-8 encoding; this is possible e.g. using Microsoft Notepad. After that convert the file into \uXXXX Unicode escape notation, using native2ascii tool included with the Java SDK. Example of use (Resources_cs.properties.txt is before conversion): cd C:\j2sdk1.4.2\bin> native2ascii.exe -encoding UTF8 Resources_cs.properties.utf8.txt Resources_cs.properties Ideally, your file's name will be Resources_xx.properties, where xx is the code of the language (e.g. en, de, dk etc.). Send your translation as a patch afterwards. To convert \uXXXX Unicode encoded file back to UTF-8, use a command similar to the following. cd C:\j2sdk1.4.2\bin> native2ascii.exe -reverse -encoding UTF8 Resources_cs.properties Resources_cs.properties.utf8.txt Currently, we have the following languages translated.
To activate a new translation, follow the following steps:
To translate the wiki pages itselfSee [1] for a description of how to do that. We don't have such a page yet, so, please, be careful. FreeMind's xml data format (.mm)FreeMind stores his data in own XML flavor. Up to FreeMind 0.6.5, the xml format has been unchanged. The list of elements and their attributes as of FreeMind 0.7.1 follows.
The actual W3C schema can be found under [[2]]. Libraries and tools used in FreeMindImplementationMenu Label Checklist
To implement embedded imagesTo implement embedded images, one would store binary data in a node, like <node TYPE="image" BINARY="x4543edvc...45ert"/> Upon opening the node for viewing, temporary file would be created and HTML viewer would point to that file. Upon editing, external image editor would be opened to edit the temporary file, like Gimp. Improved HTML editingFreeMind's long node may contain HTML. However, it needs to be edited in its source text form. We can improve upon that by
Using HTML versus XHTML in rich text nodesWhat follows is a preliminary analysis of the issues concerning HTML versus XHTML used for rich text in FreeMind. AFAIK there are two separate questions: (1) should we store (a) HTML or (b) XHTML in nodes, and (2) should we (a) store only one thing or (b) store plain text in one attribute, and store HTML/XHTML in another attribute where HTML is available, modelling on email systems. As for the first question, using HTML has the advantage of being straightforward: it is supported by JLabel, it is supported by Java HTML editing component, and it is the format now mostly used in web pages. An advantage of XHTML is that it is a flavor of XML and thus easily amenable to XSLT processing. As for the second question, as soon as we would store also plain text, it would be automatically available to all XSLT processing, which would make the first question less decisive. However, it would considerably increase the size of mind maps stored on the disk, by my estimation by factor 1.5 as soon as a lot of rich text would be used. Performing transformations of HTML to XHTML on the fly before performing preprocessing from FreeMind would not really save the day, as XHTML would still need to be stored in mind maps on the disk; if we would use HTML internally, we would have to convert XHTML to HTML upon loading a new map for all nodes, instead of doing that only upon nodes being shown for the purpose of JLabel. I estimate that the most straightforward way of solving the related problems is to find out how to convert HTML into plain text within XSLT script. I currently do not have a sufficient knowledge of XSLT to judge on that; it should be possible using several regular expression replacements, modelled on what we already have in FreeMind in Java. As soon as we would be able to do that, there might even be a regular expression way to covert boldface and italics to open document format of OpenOffice. Admittedly, instead of having one conversion routine from HTML to plain text in FreeMind, it would have to be replicated in every XSLT script dealing with FreeMind mind maps. If you find the other options more attractive, an important question is: is it really possible to process XHTML from within an XML attribute? Can someone demonstrate that? If yes, that would make XHTML rather attractive. But if not really, then using HTML would be as good as using XHTML. As side remark, I find a conversion of HTML to XHTML possible with reasonable effort. I think there are not many more subtleties apart from those already addressed: closed tags | , | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||