From: <mf...@us...> - 2012-01-14 19:01:17
|
Revision: 20801 http://jedit.svn.sourceforge.net/jedit/?rev=20801&view=rev Author: mf3 Date: 2012-01-14 19:01:10 +0000 (Sat, 14 Jan 2012) Log Message: ----------- Charmap: No insertion of characters which cannot be encoded. Documentation update Modified Paths: -------------- plugins/CharacterMap/trunk/CharacterMap.html plugins/CharacterMap/trunk/CharacterMap.props plugins/CharacterMap/trunk/charactermap/CharacterMap.java plugins/CharacterMap/trunk/charactermap/CharacterMapOptionPane.java plugins/CharacterMap/trunk/todo.txt Modified: plugins/CharacterMap/trunk/CharacterMap.html =================================================================== --- plugins/CharacterMap/trunk/CharacterMap.html 2012-01-14 18:47:25 UTC (rev 20800) +++ plugins/CharacterMap/trunk/CharacterMap.html 2012-01-14 19:01:10 UTC (rev 20801) @@ -18,32 +18,37 @@ <h2> Description </h2> -In a dockable window all characters in a specified encoding are shown, which -can be selected using the combo box at the top of the window. -<P>For non-unicode encodings the table contains 256 characters that -represent the entire character set. -For Unicode, (UTF8, UTF16, UTF32) the table displays the selected unicode block. +<p>In a dockable window a character table is shown. Clicking on a character with +Button 1 on the mouse (typically the left button) will cause the character to be +inserted at the cursor position in the current buffer. +Moving the cursor over the characters in the table updates the status line at +the bottom of the window and (if enabled) displays the character at the top-right +of the window. Pressing and holding button 3 on the mouse (typically the right button) +will display an enlarged version of the character overlayed at the current +pointer position.</p> +<p>For non-unicode encodings the table contains 256 characters, that +represent (mostly) the entire character set. +For Unicode (UTF-8, UTF-16, UTF-32) the table displays the selected unicode block, +shown in the blocks combo box. By default, only the "basic multilingual plane" is shown, i.e. -the first 65536 unicode characters.</P> -<P>By default, the current buffer encoding is used. -To specify a custom encoding, type the name directly into the encoding combo -box text field. Any custom encodings entered are stored in the combo box list -to ease later selection.</P> -<P>Moving the cursor over the characters in the table updates the status line at -the bottom of the window and (if enabled) displays the character at the top-right of the window.</P> -<P>Clicking on a character with Button 1 on the mouse (typically the left button) -will cause the character to be inserted at the cursor position in the current -buffer.</P> -<P>Pressing and holding button 3 on the mouse (typically the right button) -will display an enlarged version of the character overlayed at the current -pointer position.</P> -<P>The characters in the table are rendered in the font style and size selected +the first 65536 unicode characters. In the options (see below) you can activate +all Unicode planes.</p> +<p>The encoding of the table is shown in the encoding combo box (if enabled). +You can change it with the dropdown list or directly type it into the text field. +The encoding of the current buffer / file is shown in the jEdit status line. +Opening or changing a buffer resets the table to the encoding of the buffer.</p> +<p> Character Map will refuse to insert characters from different encodings into +a non-unicode buffer. If you still want to insert the character, you must change +the encoding in the buffer options. +Be careful: Some applications may require a specific encoding. Also, if you +change to another non-Unicode encoding, some other characters of the buffer may +not be present in the new encoding.</p> +<p>The characters in the table are rendered in the font style and size selected for the text area. The anti-alias and fractional font metrics options are -honoured.</P> -<P>If automatic font substitution is enabled, preferred fonts are also honoured. -You can e.g. try the fonts Code2000-2002 (currently available at -code2000.sourceforge.net). Activate them in "jEdit - Global Options - -Text Area - Automatic Font Substitution".</P> +honoured. If automatic font substitution is enabled, preferred fonts are also +honoured. You can e.g. try the fonts Code2000-2002 (currently available at +code2000.sourceforge.net). Install and activate them in "jEdit - Global +Options - Text Area - Automatic Font Substitution". </p> <h2> Options </h2> @@ -115,7 +120,10 @@ Auto-reload after option change. Font substitution. Table size (unicode) fixed. Code cleaning. <h3>Version 1.3.1 (2012)</h3> - Higher Unicode planes. Better option panel layout. Code cleaning. + All Unicode planes. Change encoding / font with jEdit settings. + No insertion of characters which cannot be encoded. + Option panel layout. + Code cleaning, better conformity to plugin standard and Java 7. </body> </html> Modified: plugins/CharacterMap/trunk/CharacterMap.props =================================================================== --- plugins/CharacterMap/trunk/CharacterMap.props 2012-01-14 18:47:25 UTC (rev 20800) +++ plugins/CharacterMap/trunk/CharacterMap.props 2012-01-14 19:01:10 UTC (rev 20801) @@ -7,7 +7,7 @@ plugin.charactermap.CharacterMapPlugin.docs=CharacterMap.html plugin.charactermap.CharacterMapPlugin.description=Show ASCII and extended characters and insert them into the buffer. plugin.charactermap.CharacterMapPlugin.longdescription=description.html -plugin.charactermap.CharacterMapPlugin.depend.0=jedit 04.04.99.01 +plugin.charactermap.CharacterMapPlugin.depend.0=jedit 04.04.99.02 plugin.charactermap.CharacterMapPlugin.depend.1=jdk 1.6 # Menu item: Start main window @@ -23,14 +23,12 @@ character-map.encoding.label=Encoding: character-map.blocks.label=Blocks: character-map.char.label=Char: -character-map.encoding-security.label=Confirm -character-map.encoding-security-question=Do you want to change \ - your current file encoding? -character-map.bad-encoding=Unknown encoding +character-map.no-insert-message.label=Message - # Main window default settings character-map.dock-position=right +character-map.no-insert-message-1=Insert Characters from this table only into\nbuffer encoding " +character-map.no-insert-message-2=" or Unicode (UTF-xx). # Option window plugin.charactermap.CharacterMapPlugin.option-pane=character-map @@ -43,11 +41,11 @@ # Option labels options.character-map.separator-general.label=General -options.character-map.status.label=Show status line -options.character-map.encoding.label=Show encoding combo-box +options.character-map.encoding.label=Show encoding combo box options.character-map.blocks.label=Show Unicode blocks -options.character-map.higherplanes.label=Include higher Unicode planes (Chars > 0xFFFF) +options.character-map.higher-planes.label=Include higher Unicode planes (Chars > 0xFFFF) options.character-map.anti-alias.label=Always use anti-aliasing +options.character-map.status.label=Show status line options.character-map.separator-table.label=Table options.character-map.columns.label=Table columns (floating) options.character-map.columns-dock-lr.label=Table columns (docked l/r) @@ -60,11 +58,11 @@ options.character-map.super-size.label=Right-click character size (points)\u0020\u0020 # Option default settings -options.character-map.status=true options.character-map.encoding=true options.character-map.blocks=true -options.character-map.higherplanes=false +options.character-map.higher-planes=false options.character-map.anti-alias=false +options.character-map.status=true options.character-map.columns=16 options.character-map.columns-dock-lr=8 options.character-map.columns-dock-tb=32 Modified: plugins/CharacterMap/trunk/charactermap/CharacterMap.java =================================================================== --- plugins/CharacterMap/trunk/charactermap/CharacterMap.java 2012-01-14 18:47:25 UTC (rev 20800) +++ plugins/CharacterMap/trunk/charactermap/CharacterMap.java 2012-01-14 19:01:10 UTC (rev 20801) @@ -4,7 +4,7 @@ * * Copyright (C) 2000, 2001, 2002 Slava Pestov * Copyright (C) 2003 Mark Wickens - * Copyright (C) 2011 Max Funk + * Copyright (C) 2011, 2012 Max Funk * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -45,7 +45,9 @@ import org.gjt.sp.jedit.gui.DockableWindowManager; import org.gjt.sp.jedit.*; import org.gjt.sp.jedit.msg.BufferUpdate; +import org.gjt.sp.jedit.msg.EditPaneUpdate; import org.gjt.sp.jedit.msg.PropertiesChanged; +//import org.gjt.sp.util.Log; //}}} /** @@ -201,7 +203,7 @@ c.gridwidth = 1; gridbag.setConstraints(caption,c); - showHigherPlanes = jEdit.getBooleanProperty(OPTION_PREFIX + "higherplanes"); + showHigherPlanes = jEdit.getBooleanProperty(OPTION_PREFIX + "higher-planes"); Iterator<Block> blocks_iterator; blocks = new DefaultComboBoxModel(); @@ -259,7 +261,7 @@ add(BorderLayout.NORTH, northPanel); encoding = (String) encodingCombo.getSelectedItem(); - blocksCombo.setEnabled(isEncodingUnicode()); + blocksCombo.setEnabled(isUnicode(encoding)); // Center: Character Table @@ -344,7 +346,7 @@ // buf.append(" Char: ").append(ch); - if (!isEncodingUnicode()) + if (!isUnicode(encoding)) { buf.append(toDecString(n,3," Dec: ")); buf.append(toHexString(n,2,true," Hex: 0x")); @@ -482,7 +484,7 @@ } } } - if (isEncodingUnicode()) + if (isUnicode(encoding)) { if (isDockedLeftRight()) buf.append("\n"); String name = @@ -680,16 +682,16 @@ || position.equalsIgnoreCase(DockableWindowManager.BOTTOM); } - private boolean isEncodingUnicode() + private boolean isUnicode(String enc) { - return encoding.toUpperCase().startsWith("UNICODE") - || encoding.toUpperCase().startsWith("UTF") - || encoding.toUpperCase().startsWith("X-UTF"); + return enc.toUpperCase().startsWith("UNICODE") + || enc.toUpperCase().startsWith("UTF") + || enc.toUpperCase().startsWith("X-UTF"); } private int getBlockSize() { - if (isEncodingUnicode()) + if (isUnicode(encoding)) { Block block = (Block)blocksCombo.getSelectedItem(); return block.length(); @@ -702,7 +704,7 @@ private int getBlockOffset() { - if (isEncodingUnicode()) + if (isUnicode(encoding)) { Block block = (Block)blocksCombo.getSelectedItem(); return block.getFirstPoint(); @@ -743,7 +745,7 @@ } if (encodingChanged) { - blocksCombo.setEnabled(isEncodingUnicode()); + blocksCombo.setEnabled(isUnicode(encoding)); tableModel.fireTableDataChanged(); table.repaint(); } @@ -751,17 +753,12 @@ /** * Set the encoding of the current jEdit Buffer to the input value. - * If the value does not exist in the encodings list, it is stored - * for later reference in this session. - * If the encoding really changed, the charmap table is redrawn. * @param enc New encoding. * @see org.gjt.sp.jedit.Buffer */ private void changeEncodingBuffer(String enc) { - if (!view.getBuffer().getStringProperty(JEditBuffer.ENCODING).equals(enc) - && isYesDialog(jEdit.getProperty(NAME_PREFIX + "encoding-security.label"), - jEdit.getProperty(NAME_PREFIX + "encoding-security-question"))) + if (!view.getBuffer().getStringProperty(JEditBuffer.ENCODING).equals(enc)) { view.getBuffer().setStringProperty(JEditBuffer.ENCODING, encoding); view.getBuffer().setDirty(true); @@ -769,38 +766,16 @@ } } - /** - * Dialog to confirm a security question with "No", "Yes". - * Returns, whether the answer is "Yes". - * @param title Title of the dialog window - * @param question The question to be answered. - * @return whether the answer is yes - */ - private boolean isYesDialog(String title, String question) - { - JOptionPane pane = new JOptionPane(question); - pane.setMessageType(JOptionPane.WARNING_MESSAGE); - Object[] options = new String[] { "Yes", "No" }; - pane.setOptions(options); - JDialog dialog = pane.createDialog(new JFrame(), title); - dialog.setModal(true); - dialog.setVisible(true); - Object obj = pane.getValue(); - boolean isYes; - if (options[0].equals(obj)) isYes = true; - else isYes = false; - return isYes; - } - - /** * Implementation of EBComponent. * - Changes charmap encoding, if buffer encoding has changed in jEdit. * - Changes table row height, if text area font size has changed in jEdit. */ public void handleMessage(EBMessage message) { - if (message instanceof BufferUpdate) + if ((message instanceof BufferUpdate) + || ((message instanceof EditPaneUpdate) + && ((EditPaneUpdate) message).getWhat().equals(EditPaneUpdate.BUFFER_CHANGED))) { changeEncodingCharMap(view.getBuffer().getStringProperty(JEditBuffer.ENCODING)); } @@ -829,6 +804,20 @@ super.removeNotify(); EditBus.removeFromBus(this); } + +private void setCharInBuffer(String ch) +{ + String bufferEncoding = view.getBuffer().getStringProperty(JEditBuffer.ENCODING); + if (bufferEncoding.equals(encoding) || isUnicode(bufferEncoding)) + view.getTextArea().setSelectedText(ch); + else + JOptionPane.showMessageDialog(view, + jEdit.getProperty(NAME_PREFIX + "no-insert-message-1") + + encoding + + jEdit.getProperty(NAME_PREFIX + "no-insert-message-2"), + jEdit.getProperty(NAME_PREFIX + "no-insert-message.label"), + JOptionPane.WARNING_MESSAGE); +} //}}} @@ -869,15 +858,16 @@ * @param row Row of table containing required character * @param col Column of table containing required character * @return String containing character representation of - * glyph stored within glyph table at given row + * glyph stored within glyph table at given row */ public Object getValueAt(int row, int col) { int cell = row * tableColumns + col; - if (isEncodingUnicode()) + if (isUnicode(encoding)) { int offset = getBlockOffset(); + //Not compatible with higher Unicode planes: //return String.valueOf((char) (offset + cell)); return new String(Character.toChars(offset+cell)); } @@ -924,7 +914,6 @@ if (evt.getSource() == encodingCombo) { changeEncodingCharMap((String) encodingCombo.getSelectedItem()); - changeEncodingBuffer((String) encodingCombo.getSelectedItem()); } } } @@ -1023,7 +1012,7 @@ } else { String ch = getChar(row, column); - view.getTextArea().setSelectedText(ch); + setCharInBuffer(ch); } } } @@ -1259,22 +1248,15 @@ // Position of popup should be relative to owner component // over the character in the table Point ownerLoc = owner.getLocationOnScreen(); - //Log.log(Log.MESSAGE, this, "ownerLoc.x = " + ownerLoc.x + ", ownerLoc.y = " + ownerLoc.y); int displayX = ownerLoc.x + x; int displayY = ownerLoc.y + y; - //Log.log(Log.MESSAGE, this, "before displayX = " + displayX + ", displayY = " + displayY); - int popupWidth = contents.getWidth(); int popupHeight = contents.getHeight(); - //Log.log(Log.MESSAGE, this, "popupWidth = " + popupWidth + ", popupHeight = " + popupHeight); - displayX -= (popupWidth / 2); //displayY += (popupHeight / 2); - //Log.log(Log.MESSAGE, this, "after displayX = " + displayX + ", displayY = " + displayY); - if (offsetSuper) { int rowHeight = table.getRowHeight(); int columnWidth = getColumnWidth(column); @@ -1284,7 +1266,6 @@ GraphicsConfiguration gf = CharacterMap.this.getGraphicsConfiguration(); Rectangle bounds = gf.getBounds(); int screenWidth = bounds.x + bounds.width; - //Log.log(Log.MESSAGE, this, "bounds = " + bounds + ", displayX + popupWidth = " + (displayX + popupWidth)); if (displayX + popupWidth > screenWidth) { displayX = screenWidth - popupWidth; } Modified: plugins/CharacterMap/trunk/charactermap/CharacterMapOptionPane.java =================================================================== --- plugins/CharacterMap/trunk/charactermap/CharacterMapOptionPane.java 2012-01-14 18:47:25 UTC (rev 20800) +++ plugins/CharacterMap/trunk/charactermap/CharacterMapOptionPane.java 2012-01-14 19:01:10 UTC (rev 20801) @@ -52,22 +52,22 @@ /** Shortcut to CharacterMapPlugin.OPTION_PREFIX */ private final String OPTION_PREFIX = CharacterMapPlugin.OPTION_PREFIX; - /** Checkbox controlling display of status line */ - private JCheckBox status; /** Checkbox controlling display of encoding combo box */ private JCheckBox encoding; /** Checkbox controlling display of unicode blocks slider */ private JCheckBox blocks; /** Checkbox to enable higher Unicode planes (Characters above 0xFFFF) */ - private JCheckBox higherplanes; + private JCheckBox higherPlanes; /** Checkbox controlling anti-aliasing */ - private JCheckBox antialias; + private JCheckBox antiAlias; + /** Checkbox controlling display of status line */ + private JCheckBox status; /** Spinner controlling number of columns displayed in floating table */ private JSpinner columnsSpinner; /** Spinner controlling number of columns displayed in left/right docked table */ private JSpinner columnsSpinnerDockLR; - /** Spinner controlling number of columns displayed in top/bottom docked table */ + /** Spinner controlling number of columns displayed in top/bottom docked table */ private JSpinner columnsSpinnerDockTB; /** Label for spinner options (floating) */ private JLabel columnsSpinnerLabel; @@ -119,16 +119,16 @@ public void _init() { //Initialise general option components - status = new JCheckBox(jEdit.getProperty(OPTION_PREFIX + "status.label"), - jEdit.getBooleanProperty(OPTION_PREFIX + "status")); encoding = new JCheckBox(jEdit.getProperty(OPTION_PREFIX + "encoding.label"), jEdit.getBooleanProperty(OPTION_PREFIX + "encoding")); blocks = new JCheckBox(jEdit.getProperty(OPTION_PREFIX + "blocks.label"), jEdit.getBooleanProperty(OPTION_PREFIX + "blocks")); - higherplanes = new JCheckBox(jEdit.getProperty(OPTION_PREFIX + "higherplanes.label"), - jEdit.getBooleanProperty(OPTION_PREFIX + "higherplanes")); - antialias = new JCheckBox(jEdit.getProperty(OPTION_PREFIX + "anti-alias.label"), + higherPlanes = new JCheckBox(jEdit.getProperty(OPTION_PREFIX + "higher-planes.label"), + jEdit.getBooleanProperty(OPTION_PREFIX + "higher-planes")); + antiAlias = new JCheckBox(jEdit.getProperty(OPTION_PREFIX + "anti-alias.label"), jEdit.getBooleanProperty(OPTION_PREFIX + "anti-alias")); + status = new JCheckBox(jEdit.getProperty(OPTION_PREFIX + "status.label"), + jEdit.getBooleanProperty(OPTION_PREFIX + "status")); //Initialise table option components spinnerValues = new ArrayList<Integer>(); @@ -209,55 +209,40 @@ //Display all components addSeparator(OPTION_PREFIX + "separator-general.label"); - - addComponent(status); - addComponent(encoding); - addComponent(blocks); + addComponent(higherPlanes); + addComponent(antiAlias); + addComponent(status); - addComponent(higherplanes); - - addComponent(antialias); - - addSeparator(OPTION_PREFIX + "separator-table.label"); - addComponent(columnsSpinnerLabel, columnsSpinner); - addComponent(columnsSpinnerDockLRLabel, columnsSpinnerDockLR); - addComponent(columnsSpinnerDockTBLabel, columnsSpinnerDockTB); - addSeparator(OPTION_PREFIX + "separator-chars.label"); - addComponent(showLarge); - addComponent(largeSizeLabel, largeSize); - addComponent(showSuper); - addComponent(superOffset); - addComponent(superSizeLabel, superSize); } //}}} //{{{ _save() method /** - * Store the options selected on the pane back to the + * Store the options selected on the pane back to the * jedit properties. */ @Override public void _save() { // Save options - jEdit.setBooleanProperty(OPTION_PREFIX + "status", status.isSelected()); jEdit.setBooleanProperty(OPTION_PREFIX + "encoding", encoding.isSelected()); jEdit.setBooleanProperty(OPTION_PREFIX + "blocks", blocks.isSelected()); - jEdit.setBooleanProperty(OPTION_PREFIX + "higherplanes", higherplanes.isSelected()); - jEdit.setBooleanProperty(OPTION_PREFIX + "anti-alias", antialias.isSelected()); + jEdit.setBooleanProperty(OPTION_PREFIX + "higher-planes", higherPlanes.isSelected()); + jEdit.setBooleanProperty(OPTION_PREFIX + "anti-alias", antiAlias.isSelected()); + jEdit.setBooleanProperty(OPTION_PREFIX + "status", status.isSelected()); int column = ((Integer) columnsSpinner.getValue()).intValue(); jEdit.setIntegerProperty(OPTION_PREFIX + "columns", column); @@ -288,7 +273,7 @@ //{{{ Auxiliary function /** - * Determine the value of the given text field and store in the + * Determine the value of the given text field and store in the * named jedit property. If the valued does not parse as an integer, * use the specified default instead. * @param property The name of the jedit property to receive the value Modified: plugins/CharacterMap/trunk/todo.txt =================================================================== --- plugins/CharacterMap/trunk/todo.txt 2012-01-14 18:47:25 UTC (rev 20800) +++ plugins/CharacterMap/trunk/todo.txt 2012-01-14 19:01:10 UTC (rev 20801) @@ -1,12 +1,11 @@ Known Issues: -- Correct blocks for east asian multi-byte encodings GBxxx, SJIS, BIG5 Suggested Features: -- Remember last block setting for charactermap restart - Search Characters by Name - Search Blocks or Block groups, e.g. Latin, other European, Symbols... (cf. http://en.wikipedia.org/wiki/File:Roadmap_to_Unicode_BMP.svg) - Character radical lookup search for CJK characters - Character names in status info for CJK characters +- Blocks for east asian multi-byte encodings GBxxx, SJIS, BIG5 - Character info (from edict, cedict?) for CJK characters This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |