Quellcode-Bibliothek
© Kompilation durch diese Firma
[Weder Korrektheit noch Funktionsfähigkeit der Software werden zugesichert.]
Datei:
c1_LIRGenerator.cpp
Sprache: C
Untersuchungsergebnis.bsh Download desC {C[125] Abap[349] [0]}zum Wurzelverzeichnis wechseln /*
* Display_abbreviations.bsh - a BeanShell macro script for the
* jEdit text editor - displays all defined abbreviations
* Copyright (C) 2001 John Gellene
* email: [email protected]
* http://community.jedit.org
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* $Id: Display_Abbreviations.bsh 23920 2015-05-22 08:03:45Z ezust $
*
* requires JDK 1.2, jEdit3.0
*
* Notes on use:
*
* This macro will display a sorted list of all defined abbreviations
* in a dialog. A combo box lists all eidting modes for which abbreviations
* are currently defined, as well as the "global" abbreviation set.
*
* Pressing a letter key will cause the table to scroll to the first row
* with a label beginning with the letter (or the imeediately preceding row if
* no item begins with that letter). The table is read-only; the dialog is
* dismissed by clicking "OK" or pressing Esc or Enter.
*
* The macro has two global constants defined to permit customization of the
* script's behavior. STARTING_SET contains the name of the abbreviation set
* that will be first displayed. If the other variable, EXCLUDE_EMPTY_SETS,
* is set to true, the drop-down menu and the results of clicking the
* "Write All" button will only include abbreviations sets containing
* entries.
*
* The table being displayed at any time is not updated if changes are made to
* the abbreviation set in the "Global Options" dialog. If EXCLUDE_EMPTY_SETS
* is set to true, the drop-down list will not by updated. Clsoing the dialog
* and running the macro again will obtain current data.
*
*
* Checked for jEdit 4.0 API
*
*/
import javax.swing.table.*;
//Localization
final static String AbbreviationLabel = jEdit.getProperty("macro.rs.DisplayAbbreviations.Abbreviation.label", "Abbreviation");
final static String ExpansionLabel = jEdit.getProperty("macro.rs.DisplayAbbreviations.Expansion.label", "Expansion");
final static String AbbreviationSetLabel = jEdit.getProperty("macro.rs.DisplayAbbreviations.AbbreviationSet.label", "Abbreviation set:");
final static String CloseLabel = jEdit.getProperty("macro.rs.DisplayAbbreviations.Close.label", "Close");
final static String WriteSetLabel = jEdit.getProperty("macro.rs.DisplayAbbreviations.WriteSet.label", "Write set");
final static String WriteAllLabel = jEdit.getProperty("macro.rs.DisplayAbbreviations.WriteAll.label", "Write all");
final static String AbbreviationListLabel = jEdit.getProperty("macro.rs.DisplayAbbreviations.AbbreviationList.label", "Abbreviation list");
final static String CallingWTTNBLabel = jEdit.getProperty("macro.rs.DisplayAbbreviations.CallingWTTNB.label", "calling writeTableToNewBuffer for");
final static String SizeVectorLabel = jEdit.getProperty("macro.rs.DisplayAbbreviations.SizeVector.label", "size of vector =");
final static String jEditAbbreviationTableLabel = jEdit.getProperty("macro.rs.DisplayAbbreviations.jEditAbbreviationTable.label", "jEdit Abbreviation Table");
final static String AbbreviationExpansionLabel = jEdit.getProperty("macro.rs.DisplayAbbreviations.AbbreviationExpansion.label", "Abbreviation Expansion");
final static String NoAbbreviationsLabel = jEdit.getProperty("macro.rs.DisplayAbbreviations.NoAbbreviations.label", "<< No abbreviations >>");
/*
* getActiveSets()
* This returns an array with the names of the abbreviation sets
* (beginning with "global"). If EXCLUDE_EMPTY_SETS is set to true, only sets
* with abbreviations are included.
*/
Object[] getActiveSets()
{
Mode[] modes = jEdit.getModes();
Vector setVector = new Vector(modes.length + 1);
setVector.addElement("global");
for(int i = 0; i < modes.length; i++)
{
String name = modes[i].getName();
if(EXCLUDE_EMPTY_SETS)
{
Hashtable ht = Abbrevs.getModeAbbrevs().get(name);
if( ht == null || ht.isEmpty())
continue;
}
setVector.addElement(name);
}
Object[] sets = new Object[setVector.size()];
setVector.copyInto(sets);
return sets;
}
/*
* makeTableDataForMode()
* This extracts the abbreviations from the named set. If extraction is
* successful, the vector named by the first parameter will have its
* elements removed before the variable is set to the newly created vector.
*/
Vector makeTableDataForMode(Vector v, String name)
{
if(name.equals(currentSet))
return v;
Hashtable htable = null;
if(name.equals("global"))
{
htable = Abbrevs.getGlobalAbbrevs();
}
else
{
Hashtable modeAbbrevs = Abbrevs.getModeAbbrevs();
htable = modeAbbrevs.get(name);
}
if(htable != null)
{
Enumeration abbrevEnum = htable.keys();
Enumeration expandEnum = htable.elements();
Vector newData = new Vector(20, 5);
while(abbrevEnum.hasMoreElements())
{
Vector row = new Vector(2);
row.addElement(abbrevEnum.nextElement());
row.addElement(expandEnum.nextElement());
newData.addElement(row);
}
Collections.sort(newData,
new StandardUtilities.StringCompare(true));
currentSet = name;
if( v != null)
v.removeAllElements();
v = newData;
}
return v;
}
/*
* showAbbrevs()
* This is the macro's principal method.
*/
void showAbbrevs()
{
currentSet = null;
data = makeTableDataForMode(data, STARTING_SET);
if(data.size() == 0)
{
STARTING_SET = "global";
data = makeTableDataForMode(data, STARTING_SET);
}
Vector columnNames = new Vector(2);
columnNames.addElement(new String(AbbreviationLabel));
columnNames.addElement(new String(ExpansionLabel));
table = new JTable();
table.setRowHeight(GUIUtilities.defaultRowHeight());
table.setModel(new DefaultTableModel(data, columnNames));
table.setRowSelectionAllowed(true);
/* The next line prevents the table from being edited.
* The normal approach in Java would be to subclass the TableModel
* associated with the JTable and define TableModel.isCellEditable()
* to return false. However, BeanShell does not allow conventional
* class creation, and the desired behavior cannot be achieved using
* its scripted object feature.
*/
table.setDefaultEditor(Object.class, null);
if(table.getRowCount() != 0)
table.setRowSelectionInterval(0,0);
tablePane = new JScrollPane(table);
tablePane.setPreferredSize(new Dimension(450, 300));
combo = new JComboBox(abbrevSets);
Dimension dim = combo.getPreferredSize();
dim.width = Math.max(dim.width, 120);
combo.setPreferredSize(dim);
combo.setSelectedItem(STARTING_SET);
comboPanel = new JPanel(new FlowLayout());
comboPanel.add(new JLabel(AbbreviationSetLabel));
comboPanel.add(combo);
close = new JButton(CloseLabel);
write_set = new JButton(WriteSetLabel);
write_all = new JButton(WriteAllLabel);
buttonPanel = new JPanel(new FlowLayout());
buttonPanel.add(write_set);
buttonPanel.add(write_all);
buttonPanel.add(close);
close.addActionListener(this);
write_set.addActionListener(this);
write_all.addActionListener(this);
combo.addActionListener(this);
void actionPerformed(e)
{
Component source = e.getSource();
if(source == close)
dialog.hide();
else if(source == write_set)
writeTableToNewBuffer(super.data, (String)combo.getSelectedItem());
else if(source == write_all)
writeAllToNewBuffer();
else if(source == combo)
{
super.data = makeTableDataForMode(super.data, (String)combo.getSelectedItem());
if( data != null)
{
DefaultTableModel model = (DefaultTableModel)table.getModel();
model.setDataVector(super.data, columnNames);
}
}
}
// workaround required by Swing bug; scheduled to be fixed in JDK 1.4
combo.getComponent(0).addKeyListener(this);
table.addKeyListener(this);
write_set.addKeyListener(this);
write_all.addKeyListener(this);
close.addKeyListener(this);
void keyPressed(e)
{
if(combo.isPopupVisible()) return;
if(e.getKeyCode() == KeyEvent.VK_ESCAPE ||
e.getKeyCode() == KeyEvent.VK_ENTER)
{
dialog.hide();
}
else if(e.getSource() != combo)
{
char ch = e.getKeyChar();
if(Character.isLetter(ch))
{
e.consume();
row = findFirstItem(ch);
/* The next few lines set the last visible row
* of the table so that you can look ahead of
* the selected row.
*/
visibleRows =
table.getVisibleRect().height / table.getRowHeight();
oldRow = table.getSelectedRow();
table.setRowSelectionInterval(row,row);
if (visibleRows > 5 && row - oldRow > visibleRows - 3)
{
row = Math.min( super.data.size() - 1, row + 3);
}
table.scrollRectToVisible(table.getCellRect(row,0,true));
}
}
}
/*
* Having these members of KeyListener implemented as no-ops
* will speedup execution. Otherwise BeanShell throws an
* exception that jEdit handles internally.
* Under BeanShell 1.2, implementation of these methods is
* required.
*/
void keyReleased(e) {}
void keyTyped(e) {}
/*
* findFirstItem()
* A simple linear search for the table entry that begins with the
* given letter. It returns the first row with an entry beginning with
* the letter, or the immdediately preceding row if there is no match
* on the letter.
*
*/
int findFirstItem(char ch)
{
ch = Character.toUpperCase(ch);
int row = 0;
for(int i = 0; i < data.size(); ++i)
{
String name = ((Vector)data.elementAt(i)).elementAt(0);
char ch_test = Character.toUpperCase(name.charAt(0));
if( ch_test > ch) break;
else
{
row = i;
if( ch_test == ch) break;
}
}
return row;
}
title = AbbreviationListLabel;
dialog = new JDialog(view, title, false);
c = dialog.getContentPane();
c.add(tablePane, "Center");
c.add(comboPanel, "North");
c.add(buttonPanel, "South");
dialog.getRootPane().setDefaultButton(close);
dialog.pack();
dialog.setLocationRelativeTo(view);
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.show();
}
/*
* The next four methods deal with writing the abbreviation sets to a new
* text buffer.
*/
void writeTableToNewBuffer(Vector v, String setName)
{
Log.log(Log.DEBUG, BeanShell.class,
CallingWTTNBLabel + " " + setName);
writeHeader();
Log.log(Log.DEBUG, BeanShell.class, SizeVectorLabel + " "
+ String.valueOf(v.size()));
writeSet(v, setName);
}
// saved the currentSet and deleted it for makeTableDataForMode()-invocation
// because otherwise the currently in the Dialog displayed set has no abbrevs
// in the output written to the buffer.
void writeAllToNewBuffer()
{
writeHeader();
Vector vOut = new Vector();
savedCurrentSet = currentSet;
for( int i = 0; i < abbrevSets.length; ++i)
{
currentSet = null;
String setName = (String)abbrevSets[i];
vOut = makeTableDataForMode(vOut, setName);
writeSet(vOut, setName);
textArea.setSelectedText("\n\n");
}
currentSet = savedCurrentSet;
}
void writeHeader()
{
jEdit.newFile(view);
textArea.setSelectedText(jEditAbbreviationTableLabel + "\n\n");
}
/*
* This truncates the definition text at 17 characters and the expansion text
* at 58.
*/
void writeSet(Vector v, String setName)
{
textArea.setSelectedText(AbbreviationSetLabel + " " + setName + "\n");
textArea.setSelectedText(AbbreviationExpansionLabel + "\n\n");
if(v.size() == 0)
textArea.setSelectedText(NoAbbreviationsLabel + "\n");
else for( int i = 0; i < v.size(); ++i)
{
StringBuffer sb = new StringBuffer(85);
spaceString = " ";
char[] space = spaceString.toCharArray();
Vector row = (Vector)v.elementAt(i);
abbrevName = (String)row.elementAt(0);
if(abbrevName == null) continue;
if(abbrevName.length() > 17)
abbrevName = abbrevName.substring(0, 14) + "...";
sb.append(abbrevName);
sb.append(space, 0, 18 - (abbrevName.length()));
expansion = row.elementAt(1);
if(shortcut1 != null)
{
if(expansion.length() > 58)
expansion = expansion.substring(0, 55) + "...";
sb.append(expansion);
}
sb.append('\n');
textArea.setSelectedText(sb.toString());
}
}
/*
* main routine, including definition of global variables
*/
STARTING_SET = "global";
EXCLUDE_EMPTY_SETS = true;
abbrevSets = getActiveSets();
currentSet = null;
Vector data = new Vector(20, 5);
showAbbrevs();
/*
Macro index data (in DocBook format)
<listitem>
<para><filename>Display_Abbreviations.bsh</filename></para>
<abstract><para>
Displays the abbreviations registered for each of jEdit's
editing modes.
</para></abstract>
<para>
The macro provides a read-only view of the abbreviations
contained in the <quote>Abbreviations</quote> option pane. Pressing
a letter key will scroll the table to the first entry beginning with
that letter. A further option is provided to write a selected mode's
abbreviations or all abbreviations in a text buffer for printing as a
reference. Notes in the source code listing point out some display options
that are configured by modifying global variables.
</para>
</listitem>
*/
// end Display_Abbreviations.bsh
[ zur Elbe Produktseite wechseln0.113Quellennavigators
]
|
|