root/10040_join_mm_with_mmx.patch
@
55:8b22aecab4d9
| Revision 55:8b22aecab4d9, 9.2 KB (checked in by Jiang Xin <worldhello.net AT gmail DOT com>, 3 years ago) |
|---|
-
MANIFEST.MF
diff -r e4a92f133383 MANIFEST.MF
a b 9 9 bindings.jar 10 10 SimplyHTML/gnu-regexp-1.1.4.jar 11 11 SimplyHTML/SimplyHTML.jar 12 saxon.jar 12 13 Created-By: Joerg Mueller 13 14 -
build.xml
diff -r e4a92f133383 build.xml
a b 47 47 <classpath path="${jibxlibs}"/> 48 48 </taskdef> 49 49 50 <property name="classpath" value="${jibxruntimelibs}:${jibxjar}:lib/commons-lang-2.0.jar:lib/forms-1.0.5.jar:lib/SimplyHTML/SimplyHTML.jar "/>50 <property name="classpath" value="${jibxruntimelibs}:${jibxjar}:lib/commons-lang-2.0.jar:lib/forms-1.0.5.jar:lib/SimplyHTML/SimplyHTML.jar:lib/saxon.jar"/> 51 51 52 52 <target name="xmlbind.checkStatusOfGeneration"> 53 53 <uptodate property="xmlbind.isUpToDate" … … 170 170 <include name="commons-lang-2.0.jar"/> 171 171 <include name="forms-1.0.5.jar"/> 172 172 <include name="bindings.jar"/> 173 <include name="saxon.jar"/> 173 174 <include name="jibx/jibx-run.jar"/> 174 175 <include name="jibx/xpp3.jar"/> 175 176 <include name="SimplyHTML/gnu-regexp-1.1.4.jar"/> … … 340 341 <include name="Resources*"/> 341 342 <include name="mindmap_menus.xml"/> 342 343 <include name="**/freemind_version_updater.xslt"/> 344 <include name="**/freemind_join_mm_mmx.xslt"/> 343 345 </fileset> 344 346 </jar> 345 347 </target> -
freemind.bat
diff -r e4a92f133383 freemind.bat
a b 1 1 @echo off 2 java -cp lib\freemind.jar;lib\commons-lang-2.0.jar;lib\forms-1.0.5.jar;lib\jibx\jibx-run.jar;lib\jibx\xpp3.jar;lib\bindings.jar freemind.main.FreeMindStarter2 java -cp lib\freemind.jar;lib\commons-lang-2.0.jar;lib\forms-1.0.5.jar;lib\jibx\jibx-run.jar;lib\jibx\xpp3.jar;lib\bindings.jar;lib\saxon.jar freemind.main.FreeMindStarter -
freemind.sh
diff -r e4a92f133383 freemind.sh
a b 199 199 ${freedir}/lib/bindings.jar:\ 200 200 ${freedir}/lib/commons-lang-2.0.jar:\ 201 201 ${freedir}/lib/forms-1.0.5.jar:\ 202 ${freedir}/lib/saxon.jar:\ 202 203 ${freedir}" 203 204 if [ "${JAVA_TYPE}" = "sun" ] 204 205 then -
freemind/main/Tools.java
diff -r e4a92f133383 freemind/main/Tools.java
a b 90 90 import freemind.modes.MindMapNode; 91 91 import freemind.view.mindmapview.NodeView; 92 92 93 //OSSXP.COM: classes for .mm and .mmx join. 94 import javax.xml.parsers.DocumentBuilder; 95 import javax.xml.parsers.DocumentBuilderFactory; 96 import javax.xml.transform.dom.DOMSource; 97 import org.w3c.dom.Document; 98 93 99 /** 94 100 * @author foltin 95 101 * … … 988 994 return new StringReader(writer.getBuffer().toString()); 989 995 } 990 996 else{ 991 return getActualReader(file); 997 // OSSXP.COM 998 return getActualReader(file, frame); 992 999 } 993 1000 } 994 /** Creates a default reader that just reads the given file. 995 * @throws FileNotFoundException 1001 /* 1002 * OSSXP.COM: hacked FreeMind saved two seperate files, .mm and .mmx file. 1003 * Join them in runtime using XSLT TransformerFactory. 1004 * TODO: Improvement needed. the joining stage may very slow, so disable it. 1005 996 1006 */ 997 public static Reader getActualReader(File file) throws FileNotFoundException { 1007 public static Reader getActualReader(File file, FreeMindMain frame) throws IOException { 1008 if (!Resources.getInstance().getBoolProperty("wh_save_extra_attrs_in_aux_file")) 1009 { 1010 return getActualReaderXml(file); 1011 } 1012 // load .mmx file... 1013 String ext = Tools.getExtension(file.getName()); 1014 String mmxFileName = ""; 1015 1016 // OSSXP.COM: can disable join .mm with .mmx here. 1017 // if(true) return getActualReaderXml(file); 1018 1019 if(!ext.equals("mm")) 1020 { 1021 mmxFileName = "." + file.getName()+".mmx"; 1022 } 1023 else 1024 { 1025 mmxFileName = "." + Tools.removeExtension(file.getName()) + ".mmx"; 1026 } 1027 File mmxfile = new File(file.getParent(), mmxFileName); 1028 1029 if (!mmxfile.exists()) 1030 { 1031 return getActualReaderXml(file); 1032 } 1033 1034 URL updaterUrl = null; 1035 InputStream inputStream = null; 1036 Source xsltSource = null; 1037 StringWriter buffwriter = null; 1038 Result result = null; 1039 TransformerFactory tf = null; 1040 Transformer transformer = null; 1041 String mmxFileFullName = mmxfile.toURI().toString(); 1042 try { 1043 // try to convert map with xslt: 1044 updaterUrl = frame.getResource( 1045 "freemind/modes/mindmapmode/freemind_join_mm_mmx.xslt"); 1046 if (updaterUrl == null) { 1047 throw new IllegalArgumentException( 1048 "freemind_join_mm_mmx.xslt not found."); 1049 } 1050 inputStream = updaterUrl.openStream(); 1051 xsltSource = new StreamSource(inputStream); 1052 // get output: 1053 buffwriter = new StringWriter(); 1054 result = new StreamResult(buffwriter); 1055 /* OSSXP.COM: create an instance of TransformerFactory. 1056 * the default xslt engine (com.sun.org.apache.xalan.internal.xsltc.trax...) 1057 * may not support 'key()' in freemind_join_mm_mmx.xslt. 1058 * Use saxon implement. */ 1059 System.setProperty("javax.xml.transform.TransformerFactory", 1060 "com.icl.saxon.TransformerFactoryImpl"); 1061 tf = TransformerFactory.newInstance(); 1062 transformer = tf.newTransformer(xsltSource); 1063 transformer.setParameter("mmx_file", mmxFileFullName); 1064 transformer.transform(new StreamSource(file), result); 1065 1066 } catch (Exception ex) { 1067 ex.printStackTrace(); 1068 // exception: we take the file itself: 1069 return getActualReaderXml(file); 1070 } finally { 1071 if (inputStream != null) { 1072 inputStream.close(); 1073 } 1074 if (buffwriter != null) { 1075 buffwriter.close(); 1076 } 1077 inputStream = null; 1078 xsltSource = null; 1079 updaterUrl = null; 1080 result = null; 1081 transformer = null; 1082 tf = null; 1083 } 1084 return new StringReader(buffwriter.getBuffer().toString()); 1085 } 1086 1087 /* 1088 * OSSXP.COM: In this hacked version, .mm file is a true XML file. 1089 * load XML file using DOM. 1090 */ 1091 private static Reader getActualReaderXml(File file) throws IOException { 1092 try 1093 { 1094 TransformerFactory tf = TransformerFactory.newInstance(); 1095 Transformer transformer = tf.newTransformer(); 1096 DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); 1097 DocumentBuilder domBuilder = domFactory.newDocumentBuilder(); 1098 1099 Document doc = domBuilder.parse(file); 1100 Source src = new DOMSource(doc); 1101 StringWriter buffwriter = new StringWriter(); 1102 StreamResult result = new StreamResult(buffwriter); 1103 transformer.transform(src, result); 1104 1105 return new StringReader(buffwriter.toString()); 1106 } 1107 catch(Exception exp) 1108 { 1109 exp.printStackTrace(); 1110 } 1111 998 1112 return new BufferedReader(new FileReader(file)); 999 1113 } 1000 1114 -
freemind/modes/mindmapmode/MindMapMapModel.java
diff -r e4a92f133383 freemind/modes/mindmapmode/MindMapMapModel.java
a b 438 438 } 439 439 if (mapStart.startsWith(EXPECTED_START_STRINGS[i])) { 440 440 // actual version: 441 reader = Tools.getActualReader(file );441 reader = Tools.getActualReader(file, getFrame()); 442 442 break; 443 443 } 444 444 } … … 452 452 OptionalDontShowMeAgainDialog.ONLY_OK_SELECTION_IS_STORED) 453 453 .show().getResult(); 454 454 if(showResult != JOptionPane.OK_OPTION) { 455 reader = Tools.getActualReader(file );455 reader = Tools.getActualReader(file, getFrame()); 456 456 } else { 457 457 reader = Tools.getUpdateReader(file, FREEMIND_VERSION_UPDATER_XSLT, getFrame()); 458 458 } -
(a) /dev/null vs. (b) b/freemind/modes/mindmapmode/freemind_join_mm_mmx.xslt
diff -r e4a92f133383 freemind/modes/mindmapmode/freemind_join_mm_mmx.xslt
a b 1 <xsl:stylesheet version="1.0" 2 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 3 <!-- Usage: 4 xsltproc -stringparam mmx_file mindmap.mmx <this_xslt> mindmap.mm 5 --> 6 <xsl:output method="xml" version="1.0" encoding="utf-8" 7 indent="no" /> 8 9 <xsl:param name="mmx_file" /> 10 <xsl:variable name="indexfile" select="document($mmx_file)" /> 11 12 <xsl:key name="node-by-id" match="node" use="@ID"/> 13 14 <xsl:template match="map"> 15 <map> 16 <xsl:copy-of select="@*" /> 17 <xsl:apply-templates /> 18 </map> 19 </xsl:template> 20 21 <xsl:template match="node"> 22 <xsl:variable name="id" select="@ID" /> 23 <xsl:copy> 24 <xsl:copy-of select="@*" /> 25 <xsl:for-each select="$indexfile"> 26 <xsl:copy-of select="key('node-by-id', $id)/@*" /> 27 </xsl:for-each> 28 <xsl:apply-templates /> 29 </xsl:copy> 30 </xsl:template> 31 32 <xsl:template match="*"> 33 <xsl:copy-of select="."/> 34 </xsl:template> 35 36 </xsl:stylesheet>
Note: See TracBrowser
for help on using the browser.
![(please configure the [header_logo] section in trac.ini)](/trac/freemind/chrome/common/trac_banner.png)