This is an automated email from the git hooks/post-receive script. fnatter-guest pushed a commit to branch master in repository simplyhtml.
commit 3ccfb2a5d0ffb893953b615a58a06c9113daf340 Author: Felix Natter <[email protected]> Date: Sun Jul 31 18:27:48 2016 +0200 Imported Upstream version 0.16.18 --- build.gradle | 2 +- src/com/lightdev/app/shtm/DynamicResource.java | 2 + src/com/lightdev/app/shtm/FrmMain.java | 2 +- src/com/lightdev/app/shtm/SHTMLAction.java | 7 - src/com/lightdev/app/shtm/SHTMLDocument.java | 21 +- .../lightdev/app/shtm/SHTMLEditorKitActions.java | 579 ++++++++------------- src/com/lightdev/app/shtm/SHTMLEditorPane.java | 17 +- src/com/lightdev/app/shtm/SHTMLPanelImpl.java | 29 +- .../app/shtm/resources/SimplyHTML.properties | 9 + .../shtm/resources/SimplyHTML_common.properties | 33 +- .../app/shtm/resources/SimplyHTML_de.properties | 8 + 11 files changed, 334 insertions(+), 375 deletions(-) diff --git a/build.gradle b/build.gradle index b1dbc8d..4f6d945 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ apply plugin: 'eclipse' apply plugin: 'maven-publish' group 'com.lightdev.app.shtm.simplyhtml' -version = '0.16.17' +version = '0.16.18' targetCompatibility='1.7' sourceCompatibility='1.7' diff --git a/src/com/lightdev/app/shtm/DynamicResource.java b/src/com/lightdev/app/shtm/DynamicResource.java index e5de65b..c968222 100644 --- a/src/com/lightdev/app/shtm/DynamicResource.java +++ b/src/com/lightdev/app/shtm/DynamicResource.java @@ -103,6 +103,8 @@ class DynamicResource { public static final String labelSuffix = "Label"; /** name constant for action commands in the resource file */ private static final String actionSuffix = "Action"; + /** name constant for accelerators in the resource file */ + public static final String acceleratorSuffix = "Accelerator"; /** name constant for indicating image resources in the resource file */ public static final String imageSuffix = "Image"; /** name constant for tool tip strings in the resource file */ diff --git a/src/com/lightdev/app/shtm/FrmMain.java b/src/com/lightdev/app/shtm/FrmMain.java index 350acc3..04031c2 100644 --- a/src/com/lightdev/app/shtm/FrmMain.java +++ b/src/com/lightdev/app/shtm/FrmMain.java @@ -51,7 +51,7 @@ import javax.swing.JFrame; */ class FrmMain extends JFrame { public static final String APP_NAME = "SimplyHTML"; - public static final String VERSION = "0.16.17"; + public static final String VERSION = "0.16.18"; /** static reference to this instance of class FrmMain */ private SHTMLPanelImpl mainPane; diff --git a/src/com/lightdev/app/shtm/SHTMLAction.java b/src/com/lightdev/app/shtm/SHTMLAction.java index ec925f1..344e884 100644 --- a/src/com/lightdev/app/shtm/SHTMLAction.java +++ b/src/com/lightdev/app/shtm/SHTMLAction.java @@ -40,11 +40,4 @@ import javax.swing.Action; public interface SHTMLAction extends Action { /** update the action's state */ public void update(); - - /** - * this method should be called from the constructor - * of each SHTMLAction and can be used to get - * action properties from a resource file - */ - public void getProperties(); } diff --git a/src/com/lightdev/app/shtm/SHTMLDocument.java b/src/com/lightdev/app/shtm/SHTMLDocument.java index 23b1074..4b85cef 100644 --- a/src/com/lightdev/app/shtm/SHTMLDocument.java +++ b/src/com/lightdev/app/shtm/SHTMLDocument.java @@ -439,6 +439,7 @@ public class SHTMLDocument extends HTMLDocument { boolean emptyDocument; private boolean paragraphInserted; private boolean inBody; + private int inPreLevel = 0; private boolean paragraphCreated; private boolean isParagraphTag; @@ -470,6 +471,13 @@ public class SHTMLDocument extends HTMLDocument { else if (inBody) { isParagraphTag = isParagraphTag(tag); if (isParagraphTag) { + if(HTML.Tag.PRE.equals(tag)) { + inPreLevel++; + if(inPreLevel > 1) + return; + } + else if(inPreLevel >= 1) + return; if (paragraphCreated && !paragraphInserted) { insertParagraphEndTag(pos); } @@ -559,8 +567,8 @@ public class SHTMLDocument extends HTMLDocument { * Handles end tag. If a SPAN tag is directed to this method, end its action, * otherwise, let HTMLDocument.HTMLReader do the work */ - public void handleEndTag(final HTML.Tag t, final int pos) { - if (t == HTML.Tag.BODY) { + public void handleEndTag(final HTML.Tag tag, final int pos) { + if (tag == HTML.Tag.BODY) { if (paragraphCreated) { insertParagraphEndTag(pos); } @@ -575,13 +583,16 @@ public class SHTMLDocument extends HTMLDocument { super.handleText(" ".toCharArray(), pos); super.handleEndTag(HTML.Tag.P, pos); } - super.handleEndTag(t, pos); + super.handleEndTag(tag, pos); } - else if (t == HTML.Tag.SPAN && !keepSpanTag) { + else if (tag == HTML.Tag.SPAN && !keepSpanTag) { handleEndSpan(); } else { - super.handleEndTag(t, pos); + if(HTML.Tag.PRE.equals(tag) && inPreLevel > 0) + inPreLevel--; + if(inPreLevel == 0 || ! isParagraphTag(tag)) + super.handleEndTag(tag, pos); } } diff --git a/src/com/lightdev/app/shtm/SHTMLEditorKitActions.java b/src/com/lightdev/app/shtm/SHTMLEditorKitActions.java index 9a1b9c8..d5ad2be 100644 --- a/src/com/lightdev/app/shtm/SHTMLEditorKitActions.java +++ b/src/com/lightdev/app/shtm/SHTMLEditorKitActions.java @@ -34,6 +34,8 @@ import java.io.File; import java.lang.reflect.Method; import java.net.MalformedURLException; import java.net.URL; +import java.util.Arrays; +import java.util.List; import java.util.TimerTask; import java.util.prefs.Preferences; @@ -55,7 +57,9 @@ import javax.swing.text.Element; import javax.swing.text.JTextComponent; import javax.swing.text.SimpleAttributeSet; import javax.swing.text.StyleConstants; +import javax.swing.text.StyledDocument; import javax.swing.text.StyledEditorKit; +import javax.swing.text.StyledEditorKit.StyledTextAction; import javax.swing.text.html.CSS; import javax.swing.text.html.HTML; import javax.swing.undo.CannotRedoException; @@ -106,16 +110,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - setEnabled(false); - return; - } - if (panel.getSHTMLEditorPane() != null) { - setEnabled(true); - } - else { - setEnabled(false); - } + setEnabled(panel.isWYSIWYGEditorActive()); } public void getProperties() { @@ -143,17 +138,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - setEnabled(false); - return; - } - final SHTMLEditorPane editor = panel.getSHTMLEditorPane(); - if (editor != null && editor.getCurrentTableCell() != null) { - setEnabled(true); - } - else { - setEnabled(false); - } + setEnabled(panel.isWYSIWYGEditorActive() && panel.getSHTMLEditorPane().getCurrentTableCell() != null); } public void getProperties() { @@ -206,16 +191,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - setEnabled(false); - return; - } - if (panel.getSHTMLEditorPane() != null) { - setEnabled(true); - } - else { - setEnabled(false); - } + setEnabled(panel.isWYSIWYGEditorActive()); } public void getProperties() { @@ -243,16 +219,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - setEnabled(false); - return; - } - if ((panel.getSHTMLEditorPane() != null) && (panel.getSHTMLEditorPane().getCurrentTableCell() != null)) { - setEnabled(true); - } - else { - setEnabled(false); - } + setEnabled(panel.isWYSIWYGEditorActive() && panel.getSHTMLEditorPane().getCurrentTableCell() != null); } public void getProperties() { @@ -276,7 +243,6 @@ class SHTMLEditorKitActions { this.panel = panel; putValue(Action.NAME, SHTMLPanelImpl.fontBoldAction); putValue(SHTMLPanelImpl.ACTION_SELECTED_KEY, SHTMLPanelImpl.ACTION_UNSELECTED); - putValue(AbstractAction.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_B, KeyEvent.CTRL_MASK)); SHTMLPanelImpl.getActionProperties(this, SHTMLPanelImpl.fontBoldAction); } @@ -316,11 +282,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - setEnabled(false); - return; - } - setEnabled(panel.getSHTMLEditorPane() != null); + this.setEnabled(panel.isWYSIWYGEditorActive()); } /** @@ -491,11 +453,7 @@ class SHTMLEditorKitActions { /** update the action's state */ public void update() { - if (panel.isHtmlEditorActive()) { - setEnabled(false); - return; - } - setEnabled(panel.getSHTMLEditorPane() != null); + this.setEnabled(panel.isWYSIWYGEditorActive()); } /** get image, etc. from resource */ @@ -524,16 +482,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - setEnabled(false); - return; - } - if ((panel.getSHTMLEditorPane() != null) && (panel.getSHTMLEditorPane().getCurrentTableCell() != null)) { - setEnabled(true); - } - else { - setEnabled(false); - } + setEnabled(panel.isWYSIWYGEditorActive() && panel.getSHTMLEditorPane().getCurrentTableCell() != null); } public void getProperties() { @@ -609,16 +558,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - setEnabled(false); - return; - } - if ((panel.getSHTMLEditorPane() != null) && (panel.getSHTMLEditorPane().getCurrentTableCell() != null)) { - setEnabled(true); - } - else { - setEnabled(false); - } + setEnabled(panel.isWYSIWYGEditorActive() && panel.getSHTMLEditorPane().getCurrentTableCell() != null); } public void getProperties() { @@ -652,16 +592,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - setEnabled(false); - return; - } - if (panel.getSHTMLEditorPane() != null) { - setEnabled(true); - } - else { - setEnabled(false); - } + setEnabled(panel.isWYSIWYGEditorActive()); } public void getProperties() { @@ -701,16 +632,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - this.setEnabled(false); - return; - } - if (panel.getSHTMLEditorPane() != null) { - this.setEnabled(true); - } - else { - this.setEnabled(false); - } + this.setEnabled(panel.isWYSIWYGEditorActive()); } public void getProperties() { @@ -734,7 +656,6 @@ class SHTMLEditorKitActions { this.panel = panel; putValue(Action.NAME, SHTMLPanelImpl.fontUnderlineAction); putValue(SHTMLPanelImpl.ACTION_SELECTED_KEY, SHTMLPanelImpl.ACTION_UNSELECTED); - putValue(AbstractAction.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_U, KeyEvent.CTRL_MASK)); SHTMLPanelImpl.getActionProperties(this, SHTMLPanelImpl.fontUnderlineAction); } @@ -772,16 +693,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - this.setEnabled(false); - return; - } - if (panel.getSHTMLEditorPane() != null) { - this.setEnabled(true); - } - else { - this.setEnabled(false); - } + setEnabled(panel.isWYSIWYGEditorActive()); } /** @@ -834,34 +746,43 @@ class SHTMLEditorKitActions { } } - static class FontColorAction extends AbstractAction implements SHTMLAction { - /** - * - */ - private final SHTMLPanelImpl panel; - private ColorPanel hiddenColorPanel; + abstract static class FontColorAction extends AbstractAction implements SHTMLAction { + protected static ColorPanel hiddenColorPanel = new ColorPanel("Select Color", Color.BLACK, CSS.Attribute.COLOR); + protected final SHTMLPanelImpl panel; - public FontColorAction(final SHTMLPanelImpl panel) { - super(); - this.panel = panel; - putValue(Action.NAME, SHTMLPanelImpl.fontColorAction); - putValue(SHTMLPanelImpl.ACTION_SELECTED_KEY, SHTMLPanelImpl.ACTION_UNSELECTED); - getProperties(); - hiddenColorPanel = null; - } + public FontColorAction(SHTMLPanelImpl panel) { + super(); + this.panel = panel; + } - public void actionPerformed(final ActionEvent e) { + public void actionPerformed(final ActionEvent e) { final SHTMLEditorPane editorPane = panel.getSHTMLEditorPane(); - if (editorPane != null) { - if (hiddenColorPanel == null) { - hiddenColorPanel = new ColorPanel("Select Color", Color.BLACK, CSS.Attribute.COLOR); - } - hiddenColorPanel.setValue(panel.getMaxAttributes(editorPane, null)); - hiddenColorPanel.actionPerformed(null); // show the color chooser - editorPane.applyAttributes(hiddenColorPanel.getValue(), false); // apply the color setting to the editor + if (panel.isWYSIWYGEditorActive()) { + final AttributeSet color = getColor(); + editorPane.applyAttributes(color, false); // apply the color setting to the editor + panel.updateActions(); } - panel.updateActions(); } + + abstract protected AttributeSet getColor(); + + } + + static class FontColorByDialogAction extends FontColorAction implements SHTMLAction { + + public FontColorByDialogAction(final SHTMLPanelImpl panel) { + super(panel); + putValue(Action.NAME, SHTMLPanelImpl.fontColorAction); + getProperties(); + } + + protected AttributeSet getColor() { + final SHTMLEditorPane editorPane = panel.getSHTMLEditorPane(); + hiddenColorPanel.setValue(panel.getMaxAttributes(editorPane, null)); + hiddenColorPanel.actionPerformed(null); // show the color chooser + final AttributeSet color = hiddenColorPanel.getValue(); + return color; + } public void getProperties() { SHTMLPanelImpl.getActionProperties(this, SHTMLPanelImpl.fontColorAction); @@ -871,6 +792,57 @@ class SHTMLEditorKitActions { } } + static class SelectedFontColorAction extends FontColorAction implements SHTMLAction { + + public SelectedFontColorAction(final SHTMLPanelImpl panel) { + super(panel); + putValue(Action.NAME, SHTMLPanelImpl.selectedFontColorAction); + getProperties(); + } + + protected AttributeSet getColor() { + final Color color = hiddenColorPanel.getColor(); + final SimpleAttributeSet set = new SimpleAttributeSet(); + final String colorRGB = "#" + Integer.toHexString(color.getRGB()).substring(2); + Util.styleSheet().addCSSAttribute(set, CSS.Attribute.COLOR, colorRGB); + set.addAttribute(HTML.Attribute.COLOR, colorRGB); + return set; + } + + public void getProperties() { + SHTMLPanelImpl.getActionProperties(this, SHTMLPanelImpl.selectedFontColorAction); + } + + public void update() { + } + } + + static class FixedFontColorAction extends FontColorAction implements SHTMLAction { + + private Color color; + + public FixedFontColorAction(final SHTMLPanelImpl panel, String name, Color color) { + super(panel); + putValue(Action.NAME, name); + getProperties(); + this.color = color; + } + + protected AttributeSet getColor() { + final SimpleAttributeSet set = new SimpleAttributeSet(); + final String colorRGB = "#" + Integer.toHexString(color.getRGB()).substring(2); + Util.styleSheet().addCSSAttribute(set, CSS.Attribute.COLOR, colorRGB); + set.addAttribute(HTML.Attribute.COLOR, colorRGB); + return set; + } + + public void getProperties() { + SHTMLPanelImpl.getActionProperties(this, (String) getValue(Action.NAME)); + } + + public void update() { + } + } /** * action to edit anchors inside a document */ @@ -897,16 +869,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - this.setEnabled(false); - return; - } - if (panel.getSHTMLEditorPane() != null) { - this.setEnabled(true); - } - else { - this.setEnabled(false); - } + this.setEnabled(panel.isWYSIWYGEditorActive()); } public void getProperties() { @@ -1032,7 +995,6 @@ class SHTMLEditorKitActions { this.panel = panel; setEnabled(false); getProperties(); - putValue(AbstractAction.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_Z, KeyEvent.CTRL_MASK)); } public void actionPerformed(final ActionEvent e) { @@ -1049,12 +1011,8 @@ class SHTMLEditorKitActions { panel.updateActions(); } - public void update() { - if (panel.isHtmlEditorActive()) { - this.setEnabled(false); - return; - } - setEnabled(panel.getUndo().canUndo()); + public void update() { this.setEnabled(panel.isWYSIWYGEditorActive()); + setEnabled(panel.isWYSIWYGEditorActive() && panel.getUndo().canUndo()); } public void getProperties() { @@ -1089,16 +1047,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - this.setEnabled(false); - return; - } - if (panel.getSHTMLEditorPane() != null) { - this.setEnabled(true); - } - else { - this.setEnabled(false); - } + setEnabled(panel.isWYSIWYGEditorActive()); } public void getProperties() { @@ -1106,6 +1055,38 @@ class SHTMLEditorKitActions { } } + static public class RemoveStyleAttributeAction extends AbstractAction implements SHTMLAction { + final private Object[] attributes; + + private final SHTMLPanelImpl panel; + + public RemoveStyleAttributeAction(final SHTMLPanelImpl panel, String name, Object... attributes) { + super(name); + this.panel = panel; + this.attributes = attributes; + SHTMLPanelImpl.getActionProperties(this, name); + } + + public void actionPerformed(ActionEvent e) { + if(!panel.isWYSIWYGEditorActive()){ + return; + } + final JEditorPane editor = panel.getSHTMLEditorPane(); + final int selectionStart = editor.getSelectionStart(); + final int selectionEnd = editor.getSelectionEnd(); + if(selectionStart == selectionEnd){ + return; + } + for(Object attribute : attributes) + SHTMLEditorKit.removeCharacterAttributes((StyledDocument) editor.getDocument(), attribute, selectionStart, selectionEnd - selectionStart); + } + + public void update() { + this.setEnabled(panel.isWYSIWYGEditorActive()); + } + } + + static class ClearFormatAction extends AbstractAction implements SHTMLAction { /** * @@ -1116,8 +1097,6 @@ class SHTMLEditorKitActions { super(); this.panel = panel; putValue(Action.NAME, SHTMLPanelImpl.clearFormatAction); - putValue(SHTMLPanelImpl.ACTION_SELECTED_KEY, SHTMLPanelImpl.ACTION_UNSELECTED); - putValue(AbstractAction.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_B, KeyEvent.CTRL_MASK)); SHTMLPanelImpl.getActionProperties(this, SHTMLPanelImpl.clearFormatAction); } @@ -1146,12 +1125,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - this.setEnabled(false); - return; - } - final SHTMLEditorPane editor = panel.getSHTMLEditorPane(); - this.setEnabled(editor != null); + this.setEnabled(panel.isWYSIWYGEditorActive()); } } @@ -1167,7 +1141,6 @@ class SHTMLEditorKitActions { public MultipleDocFindReplaceAction(final SHTMLPanelMultipleDocImpl panel) { super(SHTMLPanelMultipleDocImpl.findReplaceAction); this.panel = panel; - putValue(AbstractAction.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_F, KeyEvent.CTRL_MASK)); getProperties(); } @@ -1253,7 +1226,6 @@ class SHTMLEditorKitActions { public SingleDocFindReplaceAction(final SHTMLPanelImpl panel) { super(SHTMLPanelImpl.findReplaceAction); this.panel = panel; - putValue(AbstractAction.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_F, KeyEvent.CTRL_MASK)); getProperties(); } @@ -1327,16 +1299,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - this.setEnabled(false); - return; - } - if (panel.getSHTMLEditorPane() != null) { - this.setEnabled(true); - } - else { - this.setEnabled(false); - } + setEnabled(panel.isWYSIWYGEditorActive()); } public void getProperties() { @@ -1368,11 +1331,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - this.setEnabled(false); - return; - } - setEnabled(panel.getSHTMLEditorPane() != null); + setEnabled(panel.isWYSIWYGEditorActive()); } public void getProperties() { @@ -1404,16 +1363,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - this.setEnabled(false); - return; - } - if (panel.getSHTMLEditorPane() != null) { - this.setEnabled(true); - } - else { - this.setEnabled(false); - } + setEnabled(panel.isWYSIWYGEditorActive()); } public void getProperties() { @@ -1421,6 +1371,73 @@ class SHTMLEditorKitActions { } } + /** + * change a font size setting + */ + static class ChangeFontSizeAction extends AbstractAction implements SHTMLAction { + enum Change{INCREASE(1), DECREASE(-1); + final int changeAmount; + + private Change(int changeAmount) { + this.changeAmount = changeAmount; + } + }; + /** + * + */ + private final SHTMLPanelImpl panel; + private Change change; + + ChangeFontSizeAction(final SHTMLPanelImpl panel, String name, Change change ) { + super(name); + this.panel = panel; + this.change = change; + SHTMLPanelImpl.getActionProperties(this, name); + + } + + public void actionPerformed(final ActionEvent ae) { + final SHTMLEditorPane editorPane = panel.getSHTMLEditorPane(); + final AttributeSet a = panel.getMaxAttributes(editorPane, null); + final int size = Util.styleSheet().getFont(a).getSize(); + int index = 0; + for (String availableSizeAsString : SHTMLPanelImpl.FONT_SIZES){ + final Integer availableSizeAsNumber = Integer.valueOf(availableSizeAsString); + if(size < availableSizeAsNumber) { + setSize(change == Change.INCREASE ? index + 1 : index); + return; + } + else if(size == availableSizeAsNumber) { + setSize(index + change.changeAmount); + return; + } + else { + index++; + if(index == SHTMLPanelImpl.FONT_SIZES.length && change == Change.DECREASE) { + setSize(index - 1); + return; + } + } + } + } + + private void setSize(int index) { + if(index >= 0 && index < SHTMLPanelImpl.FONT_SIZES.length) { + final SimpleAttributeSet set = new SimpleAttributeSet(); + final String relativeSize = Integer.toString(index + 1); + set.addAttribute(HTML.Attribute.SIZE, relativeSize); + Util.styleSheet().addCSSAttributeFromHTML(set, CSS.Attribute.FONT_SIZE, relativeSize /*+ "pt"*/); + panel.getSHTMLEditorPane().applyAttributes(set, false); + panel.updateActions(); + } + } + + public void update() { + this.setEnabled(panel.isWYSIWYGEditorActive()); + } + + } + static class FormatImageAction extends AbstractAction implements SHTMLAction { /** * @@ -1531,16 +1548,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - this.setEnabled(false); - return; - } - if (panel.getSHTMLEditorPane() != null) { - this.setEnabled(true); - } - else { - this.setEnabled(false); - } + setEnabled(panel.isWYSIWYGEditorActive()); } public void getProperties() { @@ -1580,16 +1588,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - this.setEnabled(false); - return; - } - if (panel.getSHTMLEditorPane() != null) { - this.setEnabled(true); - } - else { - this.setEnabled(false); - } + setEnabled(panel.isWYSIWYGEditorActive()); } public void getProperties() { @@ -1641,16 +1640,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - this.setEnabled(false); - return; - } - if ((panel.getSHTMLEditorPane() != null) && (panel.getSHTMLEditorPane().getCurrentTableCell() != null)) { - this.setEnabled(true); - } - else { - this.setEnabled(false); - } + setEnabled(panel.isWYSIWYGEditorActive() && panel.getSHTMLEditorPane().getCurrentTableCell() != null); } public void getProperties() { @@ -1777,16 +1767,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - this.setEnabled(false); - return; - } - if (panel.getSHTMLEditorPane() != null) { - this.setEnabled(true); - } - else { - this.setEnabled(false); - } + setEnabled(panel.isWYSIWYGEditorActive()); } public void getProperties() { @@ -1814,16 +1795,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - setEnabled(false); - return; - } - if ((panel.getSHTMLEditorPane() != null) && (panel.getSHTMLEditorPane().getCurrentTableCell() != null)) { - setEnabled(true); - } - else { - setEnabled(false); - } + setEnabled(panel.isWYSIWYGEditorActive() && panel.getSHTMLEditorPane().getCurrentTableCell() != null); } public void getProperties() { @@ -1853,16 +1825,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - setEnabled(false); - return; - } - if ((panel.getSHTMLEditorPane() != null) && (panel.getSHTMLEditorPane().getCurrentTableCell() != null)) { - setEnabled(true); - } - else { - setEnabled(false); - } + setEnabled(panel.isWYSIWYGEditorActive() && panel.getSHTMLEditorPane().getCurrentTableCell() != null); } public void getProperties() { @@ -1890,16 +1853,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - setEnabled(false); - return; - } - if ((panel.getSHTMLEditorPane() != null) && (panel.getSHTMLEditorPane().getCurrentTableCell() != null)) { - setEnabled(true); - } - else { - setEnabled(false); - } + setEnabled(panel.isWYSIWYGEditorActive() && panel.getSHTMLEditorPane().getCurrentTableCell() != null); } public void getProperties() { @@ -1927,16 +1881,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - setEnabled(false); - return; - } - if ((panel.getSHTMLEditorPane() != null) && (panel.getSHTMLEditorPane().getCurrentTableCell() != null)) { - setEnabled(true); - } - else { - setEnabled(false); - } + setEnabled(panel.isWYSIWYGEditorActive() && panel.getSHTMLEditorPane().getCurrentTableCell() != null); } public void getProperties() { @@ -1964,16 +1909,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - setEnabled(false); - return; - } - if ((panel.getSHTMLEditorPane() != null) && (panel.getSHTMLEditorPane().getCurrentTableCell() != null)) { - setEnabled(true); - } - else { - setEnabled(false); - } + setEnabled(panel.isWYSIWYGEditorActive() && panel.getSHTMLEditorPane().getCurrentTableCell() != null); } public void getProperties() { @@ -2001,16 +1937,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - setEnabled(false); - return; - } - if ((panel.getSHTMLEditorPane() != null) && (panel.getSHTMLEditorPane().getCurrentTableCell() != null)) { - setEnabled(true); - } - else { - setEnabled(false); - } + setEnabled(panel.isWYSIWYGEditorActive() && panel.getSHTMLEditorPane().getCurrentTableCell() != null); } public void getProperties() { @@ -2038,16 +1965,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - setEnabled(false); - return; - } - if ((panel.getSHTMLEditorPane() != null) && (panel.getSHTMLEditorPane().getCurrentTableCell() != null)) { - setEnabled(true); - } - else { - setEnabled(false); - } + setEnabled(panel.isWYSIWYGEditorActive() && panel.getSHTMLEditorPane().getCurrentTableCell() != null); } public void getProperties() { @@ -2067,7 +1985,6 @@ class SHTMLEditorKitActions { this.panel = panel; putValue(Action.NAME, SHTMLPanelImpl.fontItalicAction); putValue(SHTMLPanelImpl.ACTION_SELECTED_KEY, SHTMLPanelImpl.ACTION_UNSELECTED); - putValue(AbstractAction.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_I, KeyEvent.CTRL_MASK)); SHTMLPanelImpl.getActionProperties(this, SHTMLPanelImpl.fontItalicAction); } @@ -2102,16 +2019,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - this.setEnabled(false); - return; - } - if (panel.getSHTMLEditorPane() != null) { - this.setEnabled(true); - } - else { - this.setEnabled(false); - } + setEnabled(panel.isWYSIWYGEditorActive()); } /** @@ -2176,7 +2084,6 @@ class SHTMLEditorKitActions { super(SHTMLPanelImpl.nextTableCellAction); this.panel = panel; getProperties(); - putValue(AbstractAction.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0)); } public void actionPerformed(final ActionEvent ae) { @@ -2188,16 +2095,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - this.setEnabled(false); - return; - } - if ((panel.getSHTMLEditorPane() != null) && (panel.getSHTMLEditorPane().getCurrentTableCell() != null)) { - this.setEnabled(true); - } - else { - this.setEnabled(false); - } + setEnabled(panel.isWYSIWYGEditorActive() && panel.getSHTMLEditorPane().getCurrentTableCell() != null); } public void getProperties() { @@ -2218,7 +2116,6 @@ class SHTMLEditorKitActions { super(SHTMLPanelImpl.prevTableCellAction); this.panel = panel; getProperties(); - putValue(AbstractAction.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_TAB, KeyEvent.SHIFT_MASK)); } public void actionPerformed(final ActionEvent ae) { @@ -2230,16 +2127,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - this.setEnabled(false); - return; - } - if ((panel.getSHTMLEditorPane() != null) && (panel.getSHTMLEditorPane().getCurrentTableCell() != null)) { - this.setEnabled(true); - } - else { - this.setEnabled(false); - } + setEnabled(panel.isWYSIWYGEditorActive() && panel.getSHTMLEditorPane().getCurrentTableCell() != null); } public void getProperties() { @@ -2311,7 +2199,6 @@ class SHTMLEditorKitActions { this.panel = panel; setEnabled(false); getProperties(); - putValue(AbstractAction.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_Y, KeyEvent.CTRL_MASK)); } public void actionPerformed(final ActionEvent e) { @@ -2329,11 +2216,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - this.setEnabled(false); - return; - } - setEnabled(panel.getUndo().canRedo()); + setEnabled(panel.isWYSIWYGEditorActive() && panel.getUndo().canRedo()); } public void getProperties() { @@ -2353,7 +2236,6 @@ class SHTMLEditorKitActions { this.panel = panel; putValue(Action.NAME, SHTMLPanelImpl.copyAction); getProperties(); - putValue(AbstractAction.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_C, KeyEvent.CTRL_MASK)); } public void actionPerformed(final ActionEvent e) { @@ -2387,7 +2269,6 @@ class SHTMLEditorKitActions { this.panel = panel; putValue(Action.NAME, SHTMLPanelImpl.cutAction); getProperties(); - putValue(AbstractAction.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_X, KeyEvent.CTRL_MASK)); } public void actionPerformed(final ActionEvent e) { @@ -2421,7 +2302,6 @@ class SHTMLEditorKitActions { this.panel = panel; putValue(Action.NAME, SHTMLPanelImpl.pasteAction); getProperties(); - putValue(AbstractAction.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_V, KeyEvent.CTRL_MASK)); } public void actionPerformed(final ActionEvent e) { @@ -2457,10 +2337,7 @@ class SHTMLEditorKitActions { public SHTMLEditPasteOtherAction(final SHTMLPanelImpl panel) { super(); this.panel = panel; - updateActionName(PasteMode.getValueFromPrefs().invert()); - putValue(AbstractAction.ACCELERATOR_KEY, - KeyStroke.getKeyStroke(KeyEvent.VK_V, KeyEvent.CTRL_MASK | InputEvent.SHIFT_DOWN_MASK)); } public void updateActionName(final PasteMode pm) @@ -2554,7 +2431,6 @@ class SHTMLEditorKitActions { this.panel = panel; putValue(Action.NAME, SHTMLPanelImpl.selectAllAction); getProperties(); - putValue(AbstractAction.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.CTRL_MASK)); } public void actionPerformed(final ActionEvent ae) { @@ -2816,7 +2692,6 @@ class SHTMLEditorKitActions { super(SHTMLPanelImpl.exitAction); this.panel = panel; getProperties(); - putValue(AbstractAction.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_Q, KeyEvent.CTRL_MASK)); } public void actionPerformed(final ActionEvent ae) { @@ -2853,7 +2728,6 @@ class SHTMLEditorKitActions { super(SHTMLPanelMultipleDocImpl.newAction); this.panel = panel; getProperties(); - putValue(AbstractAction.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_N, KeyEvent.CTRL_MASK)); } /** create a new empty document and show it */ @@ -2885,7 +2759,6 @@ class SHTMLEditorKitActions { super(SHTMLPanelMultipleDocImpl.openAction); this.panel = panel; getProperties(); - putValue(AbstractAction.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_O, KeyEvent.CTRL_MASK)); } public void actionPerformed(final ActionEvent ae) { @@ -3012,7 +2885,6 @@ class SHTMLEditorKitActions { super(SHTMLPanelMultipleDocImpl.saveAction); this.panel = panel; getProperties(); - putValue(AbstractAction.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_S, KeyEvent.CTRL_MASK)); } public void actionPerformed(final ActionEvent ae) { @@ -3319,16 +3191,7 @@ class SHTMLEditorKitActions { } public void update() { - if (panel.isHtmlEditorActive()) { - this.setEnabled(false); - return; - } - if (panel.getSHTMLEditorPane() != null && !panel.getSHTMLDocument().hasStyleRef()) { - this.setEnabled(true); - } - else { - this.setEnabled(false); - } + setEnabled(panel.isWYSIWYGEditorActive() && !panel.getSHTMLDocument().hasStyleRef()); } public void getProperties() { diff --git a/src/com/lightdev/app/shtm/SHTMLEditorPane.java b/src/com/lightdev/app/shtm/SHTMLEditorPane.java index 3000e0d..c2175c5 100644 --- a/src/com/lightdev/app/shtm/SHTMLEditorPane.java +++ b/src/com/lightdev/app/shtm/SHTMLEditorPane.java @@ -61,6 +61,8 @@ import javax.swing.JPopupMenu; import javax.swing.KeyStroke; import javax.swing.TransferHandler; import javax.swing.event.CaretEvent; +import javax.swing.plaf.ComponentUI; +import javax.swing.plaf.TextUI; import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.Caret; @@ -106,6 +108,7 @@ import javax.swing.text.html.HTMLDocument; */ public class SHTMLEditorPane extends JEditorPane implements DropTargetListener, DragSourceListener, DragGestureListener { + private static final String DO_NOTHING = "do nothing"; private static final String TAB = "\t"; private static final String TAB_REPLACEMENT = " "; @@ -212,7 +215,19 @@ public class SHTMLEditorPane extends JEditorPane implements DropTargetListener, initDnd(); } - public PasteMode getPasteMode() { + + + @Override + public void setUI(TextUI newUI) { + super.setUI(newUI); + getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke('\u0004'), DO_NOTHING); + getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke("control T"), DO_NOTHING); + getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke("control H"), DO_NOTHING); + } + + + + public PasteMode getPasteMode() { if (forceConstantPasteMode) { return pasteMode; diff --git a/src/com/lightdev/app/shtm/SHTMLPanelImpl.java b/src/com/lightdev/app/shtm/SHTMLPanelImpl.java index b55f0b6..2b099b7 100644 --- a/src/com/lightdev/app/shtm/SHTMLPanelImpl.java +++ b/src/com/lightdev/app/shtm/SHTMLPanelImpl.java @@ -34,6 +34,7 @@ import java.util.*; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeEvent; +import com.lightdev.app.shtm.SHTMLEditorKitActions.ChangeFontSizeAction.Change; import com.lightdev.app.shtm.SHTMLEditorKitActions.SetStyleAction; import com.lightdev.app.shtm.SHTMLEditorKitActions.SetTagAction; import java.util.prefs.*; @@ -161,11 +162,19 @@ public class SHTMLPanelImpl extends SHTMLPanel implements CaretListener { public static final String fontAction = "font"; public static final String fontFamilyAction = "fontFamily"; public static final String fontSizeAction = "fontSize"; + public static final String increaseFontSizeAction = "increaseFontSize"; + public static final String decreaseFontSizeAction = "decreaseFontSize"; public static final String fontBoldAction = "fontBold"; public static final String fontStrikethroughAction = "fontStrikethrough"; public static final String fontItalicAction = "fontItalic"; public static final String fontUnderlineAction = "fontUnderline"; public static final String fontColorAction = "fontColor"; + public static final String removeFontColorAction = "removeFontColor"; + public static final String selectedFontColorAction = "selectedFontColor"; + public static final String redFontColorAction = "redFontColor"; + public static final String blueFontColorAction = "blueFontColor"; + public static final String blackFontColorAction = "blackFontColor"; + public static final String greenFontColorAction = "greenFontColor"; public static final String helpTopicsAction = "helpTopics"; public static final String aboutAction = "about"; public static final String gcAction = "gc"; @@ -697,6 +706,9 @@ public class SHTMLPanelImpl extends SHTMLPanel implements CaretListener { addAction(fontAction, new SHTMLEditorKitActions.FontAction(this)); addAction(fontFamilyAction, new SHTMLEditorKitActions.FontFamilyAction(this)); addAction(fontSizeAction, new SHTMLEditorKitActions.FontSizeAction(this)); + addAction(increaseFontSizeAction, new SHTMLEditorKitActions.ChangeFontSizeAction(this, increaseFontSizeAction, Change.INCREASE)); + addAction(decreaseFontSizeAction, new SHTMLEditorKitActions.ChangeFontSizeAction(this, decreaseFontSizeAction, Change.DECREASE)); + addAction(insertTableAction, new SHTMLEditorKitActions.InsertTableAction(this)); addAction(insertTableRowAction, new SHTMLEditorKitActions.InsertTableRowAction(this, null, insertTableRowAction)); @@ -716,7 +728,14 @@ public class SHTMLPanelImpl extends SHTMLPanel implements CaretListener { addAction(fontBoldAction, new SHTMLEditorKitActions.BoldAction(this)); addAction(fontItalicAction, new SHTMLEditorKitActions.ItalicAction(this)); addAction(fontUnderlineAction, new SHTMLEditorKitActions.UnderlineAction(this)); - addAction(fontColorAction, new SHTMLEditorKitActions.FontColorAction(this)); + addAction(fontColorAction, new SHTMLEditorKitActions.FontColorByDialogAction(this)); + addAction(selectedFontColorAction, new SHTMLEditorKitActions.SelectedFontColorAction(this)); + addAction(redFontColorAction, new SHTMLEditorKitActions.FixedFontColorAction(this, redFontColorAction, Color.RED)); + addAction(greenFontColorAction, new SHTMLEditorKitActions.FixedFontColorAction(this, greenFontColorAction, new Color(0, 0x80, 0))); + addAction(blueFontColorAction, new SHTMLEditorKitActions.FixedFontColorAction(this, blueFontColorAction, new Color(0, 0, 0xc0))); + addAction(blackFontColorAction, new SHTMLEditorKitActions.FixedFontColorAction(this, blackFontColorAction, new Color(0, 0, 0))); + addAction(removeFontColorAction, new SHTMLEditorKitActions.RemoveStyleAttributeAction(this, removeFontColorAction, HTML.Attribute.COLOR, CSS.Attribute.COLOR)); + addAction(fontStrikethroughAction, new SHTMLEditorKitActions.ApplyCSSAttributeAction(this, fontStrikethroughAction, CSS.Attribute.TEXT_DECORATION, "line-through", false)); addAction(paraAlignLeftAction, new SHTMLEditorKitActions.ApplyCSSAttributeAction(this, @@ -1056,6 +1075,10 @@ public class SHTMLPanelImpl extends SHTMLPanel implements CaretListener { } } + public boolean isWYSIWYGEditorActive() { + return getDocumentPane() != null && editorPane != null && getDocumentPane().getSelectedTab() == DocumentPane.VIEW_TAB_LAYOUT; + } + public boolean isHtmlEditorActive() { return getDocumentPane() != null && getDocumentPane().getSelectedTab() == DocumentPane.VIEW_TAB_HTML; } @@ -1083,6 +1106,10 @@ public class SHTMLPanelImpl extends SHTMLPanel implements CaretListener { action.putValue(Action.SHORT_DESCRIPTION, toolTip); } + final String accelerator = Util.getResourceString(textResources, cmd + DynamicResource.acceleratorSuffix); + if (accelerator != null) { + action.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(accelerator)); + } } /* ---------- undo/redo implementation ----------------------- */ diff --git a/src/com/lightdev/app/shtm/resources/SimplyHTML.properties b/src/com/lightdev/app/shtm/resources/SimplyHTML.properties index dd693ae..7c3427a 100644 --- a/src/com/lightdev/app/shtm/resources/SimplyHTML.properties +++ b/src/com/lightdev/app/shtm/resources/SimplyHTML.properties @@ -107,6 +107,13 @@ fontUnderlineLabel=Underline fontUnderlineImage=resources/uline.gif fontUnderlineSelectedImage=resources/uline_on.gif fontColorTip=Font Color +fontColorLabel=Font Color +selectedFontColorLabel=Selected Font Color +redFontColorLabel=Red +greenFontColorLabel=Green +blueFontColorLabel=Blue +blackFontColorLabel=Black +removeFontColorLabel=Remove Color fontUnderlineTip=switch underline on/off fontStrikethroughLabel=Strikethrough formatTableLabel=Table... @@ -133,6 +140,8 @@ editLinkLabel=Link... editLinkTip=Change link settings... editAnchorsLabel=Anchors... editAnchorsTip=Set and change anchor links... +increaseFontSizeLabel=Bigger +decreaseFontSizeLabel=Smaller # table menu definition diff --git a/src/com/lightdev/app/shtm/resources/SimplyHTML_common.properties b/src/com/lightdev/app/shtm/resources/SimplyHTML_common.properties index 1326268..2735fcd 100644 --- a/src/com/lightdev/app/shtm/resources/SimplyHTML_common.properties +++ b/src/com/lightdev/app/shtm/resources/SimplyHTML_common.properties @@ -96,7 +96,7 @@ insertTableImage=resources/table.gif insertImageImage=resources/image.gif # format menu definition -format=font - formatPara paraAlignLeft paraAlignCenter paraAlignRight - editNamedStyle - formatTable - formatList toggleBullets toggleNumbers - formatImage - editLink editAnchors +format=font - formatPara paraAlignLeft paraAlignCenter paraAlignRight fontBold fontItalic - increaseFontSize decreaseFontSize - fontColor selectedFontColor redFontColor greenFontColor blueFontColor blackFontColor removeFontColor - editNamedStyle - formatTable - formatList toggleBullets toggleNumbers - formatImage - editLink editAnchors - clearFormat # format menu items fontImage=resources/font.gif @@ -117,6 +117,37 @@ paraAlignRightImage=resources/algnRt.gif paraAlignRightSelectedIcon=resources/algnRt_on.gif editLinkImage=resources/link.gif +# menu accelerators +selectAllAccelerator=control A +fontBoldAccelerator=control B +copyAccelerator=control C +increaseFontSizeAccelerator=control shift E +removeFontColorAccelerator=control D +decreaseFontSizeAccelerator=control E +findReplaceAccelerator=control F +greenFontColorAccelerator=control G +editLinkAccelerator=control H +fontItalicAccelerator=control I +blackFontColorAccelerator=control K +blueFontColorAccelerator=control L +newAccelerator=control N +openAccelerator=control O +exitAccelerator=control Q +redFontColorAccelerator=control R +saveAccelerator=control S +clearFormatAccelerator=control T +pasteAccelerator=control V +pasteOtherAccelerator=control shift V +fontUnderlineAccelerator=control U +fontColorAccelerator=control W +selectedFontColorAccelerator=control shift W +lastFontColorAccelerator=control W +nextTableCellAccelerator=TAB +prevTableCellAccelerator=shift TAB +cutAccelerator=control X +redoAccelerator=control Y +undoAccelerator=control Z + # table menu definition table=nextTableCell prevTableCell - appendTableRow appendTableCol - insertTableRow insertTableCol - deleteTableRow deleteTableCol - toggleTableHeaderCell - moveTableRowUp moveTableRowDown moveTableColumnLeft moveTableColumnRight diff --git a/src/com/lightdev/app/shtm/resources/SimplyHTML_de.properties b/src/com/lightdev/app/shtm/resources/SimplyHTML_de.properties index e1c5f10..d5d3702 100644 --- a/src/com/lightdev/app/shtm/resources/SimplyHTML_de.properties +++ b/src/com/lightdev/app/shtm/resources/SimplyHTML_de.properties @@ -106,6 +106,11 @@ fontUnderlineLabel=Unterstreichung fontUnderlineImage=resources/uline.gif fontUnderlineTip=unterstreichen an- und ausschalten fontColorTip=Textfarbe +fontColorLabel=Textfarbe +selectedFontColorLabel=Selektierte Textfarbe +redFontColorLabel=Rot +greenFontColorLabel=Gr�n +blueFontColorLabel=Blau formatTableLabel=Tabelle... formatTableTip=Tabelle formatieren... toggleBulletsLabel=Aufz\u00e4hlung ein/aus @@ -128,6 +133,9 @@ editLinkLabel=Verkn\u00fcpfung... editLinkTip=Verkn\u00fcpfung bearbeiten... editAnchorsLabel=Anker... editAnchorsTip=Anker setzen und \u00e4ndern... +increaseFontSizeLabel=Gr��er +decreaseFontSizeLabel=Kleiner + # table menu definition -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/simplyhtml.git _______________________________________________ pkg-java-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

