Better RTF production, better integration into context menu

This commit is contained in:
2008-12-27 03:40:53 +00:00
parent 2eb1437326
commit cfd8c21c26
3 changed files with 83 additions and 91 deletions

View File

@ -21,14 +21,11 @@ package com.webcodepro.applecommander.storage.filters;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import com.webcodepro.applecommander.storage.FileEntry; import com.webcodepro.applecommander.storage.FileEntry;
import com.webcodepro.applecommander.storage.FileFilter; import com.webcodepro.applecommander.storage.FileFilter;
import com.webcodepro.applecommander.ui.AppleCommander; import com.webcodepro.applecommander.ui.AppleCommander;
import com.webcodepro.applecommander.util.AppleUtil;
/** /**
* Extract the contents of an ancient word processor file (might be Word * Extract the contents of an ancient word processor file (might be Word
@ -52,7 +49,7 @@ public class GutenbergFileFilter implements FileFilter {
private static final int RENDER_AS_TEXT = 0; private static final int RENDER_AS_TEXT = 0;
private static final int RENDER_AS_HTML = 1; private static final int RENDER_AS_HTML = 1;
private static final int RENDER_AS_RTF = 2; private static final int RENDER_AS_RTF = 2;
private int rendering = RENDER_AS_HTML; private int rendering = RENDER_AS_RTF;
/** /**
* Constructor for GutenbergFileFilter. * Constructor for GutenbergFileFilter.
*/ */
@ -108,8 +105,8 @@ public class GutenbergFileFilter implements FileFilter {
cooked=cooked.replaceAll("<[n|N]2>(.*)", "<h2>$1</h2>"); //$NON-NLS-1$ $NON-NLS-2$ Another kind of heading? Give it boundaries cooked=cooked.replaceAll("<[n|N]2>(.*)", "<h2>$1</h2>"); //$NON-NLS-1$ $NON-NLS-2$ Another kind of heading? Give it boundaries
cooked=cooked.replaceAll("<[n|N]3>(.*)", "<h3>$1</h3>"); //$NON-NLS-1$ $NON-NLS-2$ Another kind of heading? Give it boundaries cooked=cooked.replaceAll("<[n|N]3>(.*)", "<h3>$1</h3>"); //$NON-NLS-1$ $NON-NLS-2$ Another kind of heading? Give it boundaries
cooked=cooked.replaceAll("<[t|T]1>", "<p>"); //$NON-NLS-1$ $NON-NLS-2$ Tab level 1 cooked=cooked.replaceAll("<[t|T]1>", "<p>"); //$NON-NLS-1$ $NON-NLS-2$ Tab level 1
cooked=cooked.replaceAll("<[t|T]2>(.*)", "<blockquote>$1</blockquote>"); //$NON-NLS-1$ $NON-NLS-2$ Tab level 2 cooked=cooked.replaceAll("<[t|T]2>(.*)", "<p><bq1>$1</bq1>"); //$NON-NLS-1$ $NON-NLS-2$ Tab level 2
cooked=cooked.replaceAll("<[t|T]3>(.*)", "<blockquote><blockquote>$1</blockquote></blockquote>"); //$NON-NLS-1$ $NON-NLS-2$ Tab level 3 cooked=cooked.replaceAll("<[t|T]3>(.*)", "<p><bq2>$1</bq2>"); //$NON-NLS-1$ $NON-NLS-2$ Tab level 3
cooked=cooked.replaceAll("\\x0f", "</i>"); //$NON-NLS-1$ $NON-NLS-2$ Italics off cooked=cooked.replaceAll("\\x0f", "</i>"); //$NON-NLS-1$ $NON-NLS-2$ Italics off
cooked=cooked.replaceAll("\\x01(.*)", " <i>$1</i>"); //$NON-NLS-1$ $NON-NLS-2$ Italics on cooked=cooked.replaceAll("\\x01(.*)", " <i>$1</i>"); //$NON-NLS-1$ $NON-NLS-2$ Italics on
cooked=cooked.replaceAll("\\x02(.*)", " <i>$1</i>"); //$NON-NLS-1$ $NON-NLS-2$ Italics on cooked=cooked.replaceAll("\\x02(.*)", " <i>$1</i>"); //$NON-NLS-1$ $NON-NLS-2$ Italics on
@ -158,7 +155,7 @@ public class GutenbergFileFilter implements FileFilter {
output.print("<i>"); //$NON-NLS-1$ output.print("<i>"); //$NON-NLS-1$
break; break;
case RENDER_AS_RTF: case RENDER_AS_RTF:
output.println("\\i "); //$NON-NLS-1$ output.print("\\i "); //$NON-NLS-1$
break; break;
default: default:
break; break;
@ -174,7 +171,7 @@ public class GutenbergFileFilter implements FileFilter {
output.print("</i>"); //$NON-NLS-1$ output.print("</i>"); //$NON-NLS-1$
break; break;
case RENDER_AS_RTF: case RENDER_AS_RTF:
output.println("\\i0 "); //$NON-NLS-1$ output.print("\\i0 "); //$NON-NLS-1$
break; break;
default: default:
break; break;
@ -189,7 +186,7 @@ public class GutenbergFileFilter implements FileFilter {
output.print("<p>"); //$NON-NLS-1$ output.print("<p>"); //$NON-NLS-1$
break; break;
case RENDER_AS_RTF: case RENDER_AS_RTF:
output.println("\\par "); //$NON-NLS-1$ output.print("\\par \\par \\li0 "); //$NON-NLS-1$
break; break;
default: default:
break; break;
@ -205,7 +202,7 @@ public class GutenbergFileFilter implements FileFilter {
output.print("<u>"); //$NON-NLS-1$ output.print("<u>"); //$NON-NLS-1$
break; break;
case RENDER_AS_RTF: case RENDER_AS_RTF:
output.println("\\ul "); //$NON-NLS-1$ output.print("\\ul "); //$NON-NLS-1$
break; break;
default: default:
break; break;
@ -221,7 +218,7 @@ public class GutenbergFileFilter implements FileFilter {
output.print("</u>"); //$NON-NLS-1$ output.print("</u>"); //$NON-NLS-1$
break; break;
case RENDER_AS_RTF: case RENDER_AS_RTF:
output.println("\\ulnone "); //$NON-NLS-1$ output.print("\\ulnone "); //$NON-NLS-1$
break; break;
default: default:
break; break;
@ -237,7 +234,7 @@ public class GutenbergFileFilter implements FileFilter {
output.print("<b>"); //$NON-NLS-1$ output.print("<b>"); //$NON-NLS-1$
break; break;
case RENDER_AS_RTF: case RENDER_AS_RTF:
output.println("\\b "); //$NON-NLS-1$ output.print("\\b "); //$NON-NLS-1$
break; break;
default: default:
break; break;
@ -253,7 +250,7 @@ public class GutenbergFileFilter implements FileFilter {
output.print("</b>"); //$NON-NLS-1$ output.print("</b>"); //$NON-NLS-1$
break; break;
case RENDER_AS_RTF: case RENDER_AS_RTF:
output.println("\\b0 "); //$NON-NLS-1$ output.print("\\b0 "); //$NON-NLS-1$
break; break;
default: default:
break; break;
@ -269,7 +266,7 @@ public class GutenbergFileFilter implements FileFilter {
output.print("<sup>"); //$NON-NLS-1$ output.print("<sup>"); //$NON-NLS-1$
break; break;
case RENDER_AS_RTF: case RENDER_AS_RTF:
output.println("\\super "); //$NON-NLS-1$ output.print("\\super "); //$NON-NLS-1$
break; break;
default: default:
break; break;
@ -285,7 +282,7 @@ public class GutenbergFileFilter implements FileFilter {
output.print("</sup>"); //$NON-NLS-1$ output.print("</sup>"); //$NON-NLS-1$
break; break;
case RENDER_AS_RTF: case RENDER_AS_RTF:
output.println("\\nosupersub"); //$NON-NLS-1$ output.print("\\nosupersub "); //$NON-NLS-1$
break; break;
default: default:
break; break;
@ -300,7 +297,7 @@ public class GutenbergFileFilter implements FileFilter {
output.print("<center>"); //$NON-NLS-1$ output.print("<center>"); //$NON-NLS-1$
break; break;
case RENDER_AS_RTF: case RENDER_AS_RTF:
output.println("\\pard\\qc "); //$NON-NLS-1$ output.print("\\pard\\qc "); //$NON-NLS-1$
break; break;
default: default:
break; break;
@ -317,7 +314,7 @@ public class GutenbergFileFilter implements FileFilter {
output.print("</center>"); //$NON-NLS-1$ output.print("</center>"); //$NON-NLS-1$
break; break;
case RENDER_AS_RTF: case RENDER_AS_RTF:
output.println("\\par \\pard "); //$NON-NLS-1$ output.print("\\par \\pard "); //$NON-NLS-1$
break; break;
default: default:
break; break;
@ -343,13 +340,13 @@ public class GutenbergFileFilter implements FileFilter {
break; break;
case RENDER_AS_RTF: case RENDER_AS_RTF:
if (t.equalsIgnoreCase("h1")) //$NON-NLS-1$ if (t.equalsIgnoreCase("h1")) //$NON-NLS-1$
output.print("\\pard\\s1\\b\\fs48 "); //$NON-NLS-1$ output.print("\\par\\par\\pard\\s1\\b\\fs48 "); //$NON-NLS-1$
else if (t.equalsIgnoreCase("h2")) //$NON-NLS-1$ else if (t.equalsIgnoreCase("h2")) //$NON-NLS-1$
output.print("\\pard\\s2\\b\\fs36 "); //$NON-NLS-1$ output.print("\\par\\par\\pard\\s2\\b\\fs36 "); //$NON-NLS-1$
else if (t.equalsIgnoreCase("h3")) //$NON-NLS-1$ else if (t.equalsIgnoreCase("h3")) //$NON-NLS-1$
output.print("\\pard\\s3\\b\\fs27 "); //$NON-NLS-1$ output.print("\\par\\par\\pard\\s3\\b\\fs27 "); //$NON-NLS-1$
else if (t.equalsIgnoreCase("h4")) //$NON-NLS-1$ else if (t.equalsIgnoreCase("h4")) //$NON-NLS-1$
output.print("\\pard\\s4\\b\\fs24 "); //$NON-NLS-1$ output.print("\\par\\par\\pard\\s4\\b\\fs24 "); //$NON-NLS-1$
break; break;
default: default:
output.println(); output.println();
@ -380,15 +377,21 @@ public class GutenbergFileFilter implements FileFilter {
break; break;
} }
} }
else if (t.startsWith("blockquote")) // Indent $NON-NLS-1$ else if (t.startsWith("bq")) // Indent $NON-NLS-1$
{ {
switch (rendering) switch (rendering)
{ {
case RENDER_AS_HTML: case RENDER_AS_HTML:
output.print("<blockquote>"); //$NON-NLS-1$ if (t.equals("bq1")) //$NON-NLS-1$
output.print("<blockquote>"); //$NON-NLS-1$
else if (t.equals("bq2")) //$NON-NLS-1$
output.print("<blockquote><blockquote>"); //$NON-NLS-1$
break; break;
case RENDER_AS_RTF: case RENDER_AS_RTF:
output.println(""); //$NON-NLS-1$ if (t.equals("bq1")) //$NON-NLS-1$
output.print("\\pard\\li720 "); //$NON-NLS-1$
else if (t.equals("bq2")) //$NON-NLS-1$
output.print("\\pard\\li1440 "); //$NON-NLS-1$
break; break;
default: default:
output.print(" "); //$NON-NLS-1$ output.print(" "); //$NON-NLS-1$
@ -396,15 +399,18 @@ public class GutenbergFileFilter implements FileFilter {
} }
ignoreBr = true; ignoreBr = true;
} }
else if (t.startsWith("/blockquote")) // Outdent $NON-NLS-1$ else if (t.startsWith("/bq")) // Outdent $NON-NLS-1$
{ {
switch (rendering) switch (rendering)
{ {
case RENDER_AS_HTML: case RENDER_AS_HTML:
output.print("</blockquote>"); //$NON-NLS-1$ if (t.equals("/bq1")) //$NON-NLS-1$
output.print("</blockquote>"); //$NON-NLS-1$
else if (t.equals("/bq2")) //$NON-NLS-1$
output.print("</blockquote></blockquote>"); //$NON-NLS-1$
break; break;
case RENDER_AS_RTF: case RENDER_AS_RTF:
output.println(""); //$NON-NLS-1$ //output.println("\\par\\li0 "); //$NON-NLS-1$
break; break;
default: default:
break; break;
@ -436,15 +442,16 @@ public class GutenbergFileFilter implements FileFilter {
output.print("</u>"); //$NON-NLS-1$ output.print("</u>"); //$NON-NLS-1$
if (inSuperscript) if (inSuperscript)
output.print("</sup>"); //$NON-NLS-1$ output.print("</sup>"); //$NON-NLS-1$
break;
case RENDER_AS_RTF: case RENDER_AS_RTF:
if (inItalics) if (inItalics)
output.print("\\i0 "); //$NON-NLS-1$ output.print("\\i0 "); //$NON-NLS-1$
if (inBold) if (inBold)
output.print("\\b0 "); //$NON-NLS-1$ output.print("\\b0 "); //$NON-NLS-1$
if (inUnderline) if (inUnderline)
output.print("\\ulnone"); //$NON-NLS-1$ output.print("\\ulnone "); //$NON-NLS-1$
if (inSuperscript) if (inSuperscript)
output.print("\\nosupersub"); //$NON-NLS-1$ output.print("\\nosupersub "); //$NON-NLS-1$
break; break;
default: default:
break; break;

View File

@ -34,10 +34,10 @@ import com.webcodepro.applecommander.util.AppleUtil;
import com.webcodepro.applecommander.util.TextBundle; import com.webcodepro.applecommander.util.TextBundle;
/** /**
* Represents a DOS file entry on disk. * Represents a Gutenberg word processing file entry on disk.
* <p> * <p>
* Date created: Oct 4, 2002 5:15:25 PM * Date created: Dec 17, 2008 04:29:23 PM
* @author Rob Greene * @author David Schmidt
*/ */
public class GutenbergFileEntry implements FileEntry { public class GutenbergFileEntry implements FileEntry {
private TextBundle textBundle = StorageBundle.getInstance(); private TextBundle textBundle = StorageBundle.getInstance();

View File

@ -154,7 +154,7 @@ public class DiskExplorerTab {
private FileFilter fileFilter; private FileFilter fileFilter;
private GraphicsFileFilter graphicsFilter = new GraphicsFileFilter(); private GraphicsFileFilter graphicsFilter = new GraphicsFileFilter();
private AppleWorksWordProcessorFileFilter awpFilter = new AppleWorksWordProcessorFileFilter(); private AppleWorksWordProcessorFileFilter awpFilter = new AppleWorksWordProcessorFileFilter();
private GutenbergFileFilter wpFilter = new GutenbergFileFilter(); private GutenbergFileFilter gutenbergFilter = new GutenbergFileFilter();
private int currentFormat = FormattedDisk.FILE_DISPLAY_STANDARD; private int currentFormat = FormattedDisk.FILE_DISPLAY_STANDARD;
private boolean formatChanged; private boolean formatChanged;
@ -536,6 +536,47 @@ public class DiskExplorerTab {
} }
}); });
item = new MenuItem(menu, SWT.CASCADE);
item.setText(textBundle.get("GutenbergRenderingMenuItem")); //$NON-NLS-1$
Menu subMenu2 = new Menu(shell, SWT.DROP_DOWN);
item.setMenu(subMenu2);
item = new MenuItem(subMenu2, SWT.NONE);
item.setText(textBundle.get("WordProcessorRenderAsTextMenuItem")); //$NON-NLS-1$
item.addSelectionListener(new SelectionAdapter() {
/**
* Set the appropriate rendering style.
*/
public void widgetSelected(SelectionEvent event) {
getGutenbergFilter().selectTextRendering();
setFileFilter(getGutenbergFilter());
exportFile(null);
}
});
item = new MenuItem(subMenu2, SWT.NONE);
item.setText(textBundle.get("WordProcessorRenderAsHtmlMenuItem")); //$NON-NLS-1$
item.addSelectionListener(new SelectionAdapter() {
/**
* Set the appropriate rendering style.
*/
public void widgetSelected(SelectionEvent event) {
getGutenbergFilter().selectHtmlRendering();
setFileFilter(getGutenbergFilter());
exportFile(null);
}
});
item = new MenuItem(subMenu2, SWT.NONE);
item.setText(textBundle.get("WordProcessorRenderAsRtfMenuItem")); //$NON-NLS-1$
item.addSelectionListener(new SelectionAdapter() {
/**
* Set the appropriate rendering style.
*/
public void widgetSelected(SelectionEvent event) {
getGutenbergFilter().selectRtfRendering();
setFileFilter(getGutenbergFilter());
exportFile(null);
}
});
item = new MenuItem(menu, SWT.NONE); item = new MenuItem(menu, SWT.NONE);
item.setText(textBundle.get("ExportAsAppleWorksSpreadsheetFileMenuItem")); //$NON-NLS-1$ item.setText(textBundle.get("ExportAsAppleWorksSpreadsheetFileMenuItem")); //$NON-NLS-1$
item.addSelectionListener(new SelectionAdapter() { item.addSelectionListener(new SelectionAdapter() {
@ -614,62 +655,6 @@ public class DiskExplorerTab {
item = new MenuItem(menu, SWT.SEPARATOR); item = new MenuItem(menu, SWT.SEPARATOR);
item = new MenuItem(menu, SWT.CASCADE);
item.setText(textBundle.get("GutenbergRenderingMenuItem")); //$NON-NLS-1$
Menu subMenu2 = new Menu(shell, SWT.DROP_DOWN);
item.setMenu(subMenu2);
subMenu.addMenuListener(new MenuAdapter() {
/**
* Toggle all sub-menu MenuItems to the proper state to reflect
* the current file extension chosen.
*/
public void menuShown(MenuEvent event) {
Menu theMenu = (Menu) event.getSource();
MenuItem[] subItems = theMenu.getItems();
subItems[0].setSelection(getWPFilter().isTextRendering());
subItems[1].setSelection(getWPFilter().isHtmlRendering());
subItems[2].setSelection(getWPFilter().isRtfRendering());
}
});
item = new MenuItem(subMenu2, SWT.RADIO);
item.setText(textBundle.get("WordProcessorRenderAsTextMenuItem")); //$NON-NLS-1$
item.addSelectionListener(new SelectionAdapter() {
/**
* Set the appropriate rendering style.
*/
public void widgetSelected(SelectionEvent event) {
getWPFilter().selectTextRendering();
setFileFilter(getWPFilter());
exportFile(null);
}
});
item = new MenuItem(subMenu2, SWT.RADIO);
item.setText(textBundle.get("WordProcessorRenderAsHtmlMenuItem")); //$NON-NLS-1$
item.addSelectionListener(new SelectionAdapter() {
/**
* Set the appropriate rendering style.
*/
public void widgetSelected(SelectionEvent event) {
getWPFilter().selectHtmlRendering();
setFileFilter(getWPFilter());
exportFile(null);
}
});
item = new MenuItem(subMenu2, SWT.RADIO);
item.setText(textBundle.get("WordProcessorRenderAsRtfMenuItem")); //$NON-NLS-1$
item.addSelectionListener(new SelectionAdapter() {
/**
* Set the appropriate rendering style.
*/
public void widgetSelected(SelectionEvent event) {
getWPFilter().selectRtfRendering();
setFileFilter(getWPFilter());
exportFile(null);
}
});
item = new MenuItem(menu, SWT.SEPARATOR);
item = new MenuItem(menu, SWT.NONE); item = new MenuItem(menu, SWT.NONE);
item.setText(textBundle.get("ExportAsGraphicsMenuItem")); //$NON-NLS-1$ item.setText(textBundle.get("ExportAsGraphicsMenuItem")); //$NON-NLS-1$
item.setEnabled(GraphicsFileFilter.isCodecAvailable()); item.setEnabled(GraphicsFileFilter.isCodecAvailable());
@ -2000,8 +1985,8 @@ public class DiskExplorerTab {
return awpFilter; return awpFilter;
} }
protected GutenbergFileFilter getWPFilter() { protected GutenbergFileFilter getGutenbergFilter() {
return wpFilter; return gutenbergFilter;
} }
protected GraphicsFileFilter getGraphicsFilter() { protected GraphicsFileFilter getGraphicsFilter() {