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.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.StringTokenizer;
import com.webcodepro.applecommander.storage.FileEntry;
import com.webcodepro.applecommander.storage.FileFilter;
import com.webcodepro.applecommander.ui.AppleCommander;
import com.webcodepro.applecommander.util.AppleUtil;
/**
* 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_HTML = 1;
private static final int RENDER_AS_RTF = 2;
private int rendering = RENDER_AS_HTML;
private int rendering = RENDER_AS_RTF;
/**
* 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]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]2>(.*)", "<blockquote>$1</blockquote>"); //$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]2>(.*)", "<p><bq1>$1</bq1>"); //$NON-NLS-1$ $NON-NLS-2$ Tab level 2
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("\\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
@ -158,7 +155,7 @@ public class GutenbergFileFilter implements FileFilter {
output.print("<i>"); //$NON-NLS-1$
break;
case RENDER_AS_RTF:
output.println("\\i "); //$NON-NLS-1$
output.print("\\i "); //$NON-NLS-1$
break;
default:
break;
@ -174,7 +171,7 @@ public class GutenbergFileFilter implements FileFilter {
output.print("</i>"); //$NON-NLS-1$
break;
case RENDER_AS_RTF:
output.println("\\i0 "); //$NON-NLS-1$
output.print("\\i0 "); //$NON-NLS-1$
break;
default:
break;
@ -189,7 +186,7 @@ public class GutenbergFileFilter implements FileFilter {
output.print("<p>"); //$NON-NLS-1$
break;
case RENDER_AS_RTF:
output.println("\\par "); //$NON-NLS-1$
output.print("\\par \\par \\li0 "); //$NON-NLS-1$
break;
default:
break;
@ -205,7 +202,7 @@ public class GutenbergFileFilter implements FileFilter {
output.print("<u>"); //$NON-NLS-1$
break;
case RENDER_AS_RTF:
output.println("\\ul "); //$NON-NLS-1$
output.print("\\ul "); //$NON-NLS-1$
break;
default:
break;
@ -221,7 +218,7 @@ public class GutenbergFileFilter implements FileFilter {
output.print("</u>"); //$NON-NLS-1$
break;
case RENDER_AS_RTF:
output.println("\\ulnone "); //$NON-NLS-1$
output.print("\\ulnone "); //$NON-NLS-1$
break;
default:
break;
@ -237,7 +234,7 @@ public class GutenbergFileFilter implements FileFilter {
output.print("<b>"); //$NON-NLS-1$
break;
case RENDER_AS_RTF:
output.println("\\b "); //$NON-NLS-1$
output.print("\\b "); //$NON-NLS-1$
break;
default:
break;
@ -253,7 +250,7 @@ public class GutenbergFileFilter implements FileFilter {
output.print("</b>"); //$NON-NLS-1$
break;
case RENDER_AS_RTF:
output.println("\\b0 "); //$NON-NLS-1$
output.print("\\b0 "); //$NON-NLS-1$
break;
default:
break;
@ -269,7 +266,7 @@ public class GutenbergFileFilter implements FileFilter {
output.print("<sup>"); //$NON-NLS-1$
break;
case RENDER_AS_RTF:
output.println("\\super "); //$NON-NLS-1$
output.print("\\super "); //$NON-NLS-1$
break;
default:
break;
@ -285,7 +282,7 @@ public class GutenbergFileFilter implements FileFilter {
output.print("</sup>"); //$NON-NLS-1$
break;
case RENDER_AS_RTF:
output.println("\\nosupersub"); //$NON-NLS-1$
output.print("\\nosupersub "); //$NON-NLS-1$
break;
default:
break;
@ -300,7 +297,7 @@ public class GutenbergFileFilter implements FileFilter {
output.print("<center>"); //$NON-NLS-1$
break;
case RENDER_AS_RTF:
output.println("\\pard\\qc "); //$NON-NLS-1$
output.print("\\pard\\qc "); //$NON-NLS-1$
break;
default:
break;
@ -317,7 +314,7 @@ public class GutenbergFileFilter implements FileFilter {
output.print("</center>"); //$NON-NLS-1$
break;
case RENDER_AS_RTF:
output.println("\\par \\pard "); //$NON-NLS-1$
output.print("\\par \\pard "); //$NON-NLS-1$
break;
default:
break;
@ -343,13 +340,13 @@ public class GutenbergFileFilter implements FileFilter {
break;
case RENDER_AS_RTF:
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$
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$
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$
output.print("\\pard\\s4\\b\\fs24 "); //$NON-NLS-1$
output.print("\\par\\par\\pard\\s4\\b\\fs24 "); //$NON-NLS-1$
break;
default:
output.println();
@ -380,15 +377,21 @@ public class GutenbergFileFilter implements FileFilter {
break;
}
}
else if (t.startsWith("blockquote")) // Indent $NON-NLS-1$
else if (t.startsWith("bq")) // Indent $NON-NLS-1$
{
switch (rendering)
{
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;
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;
default:
output.print(" "); //$NON-NLS-1$
@ -396,15 +399,18 @@ public class GutenbergFileFilter implements FileFilter {
}
ignoreBr = true;
}
else if (t.startsWith("/blockquote")) // Outdent $NON-NLS-1$
else if (t.startsWith("/bq")) // Outdent $NON-NLS-1$
{
switch (rendering)
{
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;
case RENDER_AS_RTF:
output.println(""); //$NON-NLS-1$
//output.println("\\par\\li0 "); //$NON-NLS-1$
break;
default:
break;
@ -436,15 +442,16 @@ public class GutenbergFileFilter implements FileFilter {
output.print("</u>"); //$NON-NLS-1$
if (inSuperscript)
output.print("</sup>"); //$NON-NLS-1$
break;
case RENDER_AS_RTF:
if (inItalics)
output.print("\\i0 "); //$NON-NLS-1$
if (inBold)
output.print("\\b0 "); //$NON-NLS-1$
if (inUnderline)
output.print("\\ulnone"); //$NON-NLS-1$
output.print("\\ulnone "); //$NON-NLS-1$
if (inSuperscript)
output.print("\\nosupersub"); //$NON-NLS-1$
output.print("\\nosupersub "); //$NON-NLS-1$
break;
default:
break;

View File

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

View File

@ -154,7 +154,7 @@ public class DiskExplorerTab {
private FileFilter fileFilter;
private GraphicsFileFilter graphicsFilter = new GraphicsFileFilter();
private AppleWorksWordProcessorFileFilter awpFilter = new AppleWorksWordProcessorFileFilter();
private GutenbergFileFilter wpFilter = new GutenbergFileFilter();
private GutenbergFileFilter gutenbergFilter = new GutenbergFileFilter();
private int currentFormat = FormattedDisk.FILE_DISPLAY_STANDARD;
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.setText(textBundle.get("ExportAsAppleWorksSpreadsheetFileMenuItem")); //$NON-NLS-1$
item.addSelectionListener(new SelectionAdapter() {
@ -614,62 +655,6 @@ public class DiskExplorerTab {
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.setText(textBundle.get("ExportAsGraphicsMenuItem")); //$NON-NLS-1$
item.setEnabled(GraphicsFileFilter.isCodecAvailable());
@ -2000,8 +1985,8 @@ public class DiskExplorerTab {
return awpFilter;
}
protected GutenbergFileFilter getWPFilter() {
return wpFilter;
protected GutenbergFileFilter getGutenbergFilter() {
return gutenbergFilter;
}
protected GraphicsFileFilter getGraphicsFilter() {